Rsa
為什麼在 ASN.1 DER 編碼中使用 RSA 公鑰 BITWRAP?
在嘗試創建 RSA 公鑰並使用自製 ASN.1 解碼器對其進行解碼時,我遇到了公鑰是 BITWRAP 的事實。BITWRAP 似乎是一個 OpenSSL 修飾符,我想知道為什麼需要它,理由是什麼?
本頁描述了BITWRAP 是什麼,但沒有說明為什麼需要它。
為什麼不能 $ n $ 和 $ e $ 以正常的非 BITWRAP-ed ASN.1 序列編碼?
下面的範例顯示了 ASN1 定義中的 BITWRAP 修飾符(從OpenSSL docs複製):
asn1=SEQUENCE:pubkeyinfo # BITWRAP here [pubkeyinfo] algorithm=SEQUENCE:rsa_alg pubkey=BITWRAP,SEQUENCE:rsapubkey [rsa_alg] algorithm=OID:rsaEncryption parameter=NULL [rsapubkey] n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\ D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9 e=INTEGER:0x010001
這是X.509 標准定義的主題公鑰資訊結構:
SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING }
它是 BITWRAP 的原因是包裝的公鑰的結構取決於
algorithm
. 它可以是您描述的 RSA 公鑰,但也可以是橢圓曲線或 DSA 公鑰。如果沒有包裝,ASN.1 解析器需要知道algorithm
它剛剛解析的 ,才能知道如何解析subjectPublicKey
,這很麻煩。使用包裝,它只是解析整個結構,subjectPublicKey
以後可以解釋。(對我來說最大的問題是為什麼它使用 BIT STRING 而不是 OCTET STRING ……)