在EC SubjectPublicKeyInfo结构中,我无法计算额外的0x00字节。
> openssl asn1parse -i -in ecpub.pem -dump
0:d=0 hl=2 l= 89 cons: SEQUENCE
2:d=1 hl=2 l= 19 cons: SEQUENCE
4:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey
13:d=2 hl=2 l= 8 prim: OBJECT :prime256v1
23:d=1 hl=2 l= 66 prim: BIT STRING
0000 - 00 04 d0 ee 64 61 7b 90-48 a2 a9 5f b5 a3 da 67 ....da{.H.._...g
0010 - 53 56 91 e0 cf 5b b8 85-3e 05 0c b9 e6 95 c3 8d SV...[..>.......
0020 - 26 ab d7 ee 47 94 38 61-1e cd 07 e6 90 0b 3d 4a &...G.8a......=J
0030 - 6a df c5 d5 9f f3 11 91-53 00 ff 0e 91 93 49 44 j.......S.....ID
0040 - 4c 58 LX在表示八位格式的公钥的位字符串中,在0x04字节之前的0x00字节是什么(我原以为它是第一个字节)?没有神秘的0x00字节,公钥将达到65个字节,整个结构与SEC1规范一致。
发布于 2018-10-19 23:33:58
位字符串值以一个字节开始,该字节指示未使用的位数。位字符串可以是任意大小的,因此它们可能不是8的倍数。因此,它们从应该跳过的位数开始。在您的示例中,它告诉用户,最后一个字节58 (以位表示的01011000)的所有位都是值的一部分。
大多数情况下,位字符串对字节数组进行编码,因此通常将其设置为00,而不是其他7种可能性中的一种。
第一位是最左边的,最后一位是最右边的。但只有当比特的顺序是重要的时候,这才是重要的。在这种情况下,位字符串包含未压缩的EC点W,所以它并不重要。
您可以在外行指南ASN.1由伯顿S.卡里斯基小。第5.4节“位字符串”中找到这一点,当然还有标准文档ITU-TX.680和X.690 (都是payware,所以我不会链接)。
https://crypto.stackexchange.com/questions/63266
复制相似问题