Rsa

為什麼在 ASN.1 DER 編碼中使用 RSA 公鑰 BITWRAP?

  • September 3, 2020

在嘗試創建 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 ……)

引用自:https://crypto.stackexchange.com/questions/83716