RSA公私钥结构

2019-04-13 16:19发布

RSA公私钥结构语法: RSAPublicKey::=SEQUENCE{ modulusINTEGER,--模值n
publicExponentINTEGER--公开指数e}

RSA私钥结构语法
RSAPrivateKey::=SEQUENCE{
versionVersion,--version是INTEGER类型的0
modulus INTEGER,--模值n
public ExponentINTEGER,--公开指数e
privateExponent INTEGER,--d
prime1 INTEGER,--p
prime2 INTEGER,--q
exponent1 INTEGER,--dmod(p-1)
exponent2 INTEGER,--dmod(q-1)
coefficient INTEGER--(inverseofq)modp}
在组织公私钥DER编码时需要注意: 1)上述TLV结构中: V值长度<0x80,L表示数据的长度; V值长度>=0x80的时候,L为0x8X,X表示的L长度要占用的字节数,X个字节用来表示V的长度。 2)RSA公钥N的第一个字节如果大于0x80,则需要在公钥值前面补00,这是因为modulus 为一个大整数,最高位为符号位,其为1时,就是负数,所以要在最高位填充0x00以保证不为负。所以公钥TLV应该是:02 81 81 00 [128字节个公钥值]。 3)RSA私钥的N,d,p,q,Dp,Dq,Mp也需要考虑(2)中的第一个字节如果大于0x80的情况。