PKCS#1種介紹了哈希算法的OID等的ASN.1結構,因為使用ASN.1的解碼工具(比如:ASN1View)時,會自動顯示出各OID的含義,所以這里就不說明了。下面就只簡單摘抄一下RSA公私鑰的ASN.1的結構。
ASN.1的編碼回頭會專門介紹,為了便於理解:SEQUENCE,暫時就理解為C語言里面的結構體就好;INTEGER,理解為正數類型就好。
RSA公鑰:
RSAPublicKey :: = SEQUENCE{
modulus INTEGER, ------ n(模長,正整數)
publicExponent INTEGER ------ e (指數,3~n-1范圍內的正整數)
}
RSA公鑰的ASN.1結構,可以表述為:名為RSAPublicKey的這個結構呢,就可以用來表述一個RSA公鑰了。它有兩個INTEGER型變量:modulus和publicExponent。
RSA私鑰:
RSAPrivateKey :: = SEQUENCE{
version Version,
modulus INTEGER, ------ n
publicExponent INTEGER, ------ e
privateExponent INTEGER, ------ d
prime1 INTEGER, ------ p
prime2 INTEGER, ------ q
exponent1 INTEGER, ------ d mod (p -1)
exponent2 INTEGER, ------ d mod (q -1)
coefficient INTEGER, ------- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos ------ OPTIONAL(當version為0時,不存在;當 version為1時,必須有)
}
Version :: = INTEGER{ two-prime(0), multi(1)}
版本號的ASN.1結構可以表述為:名為Version的結構體,用於描述版本信息。它類似於枚舉類型,其變量類型為INTEGER,取值為0或1。
OtherPrimeInfos :: = SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
OtherPrimeInfos 是由 OtherPrimeInfo組成的數組
OtherPrimeInfo :: = SEQUENCE {
prime INTEGER, --- ri
exponent INTEGER, --- di
coefficient INTEGER --- ti
}
推薦一篇專門介紹ASN.1編碼的文章:《ASN.1/BER/DER 編碼子集入門指南》