文章横幅PC版
文章横幅iPad版
文章横幅手机版

RSA加密与签名过程

TIME:2019-03-15 09:43  click: 224 次 来源: 未知

1.RSA加密格式

RSA公钥与私钥都能加、解密。

假设用公钥pk(RSAPublicKey类型)或私钥vk(RSAPrivatekey类型)加密计算明文数据D(字符串类型)。具体计算步骤如下:

①构造加密块(encryption block):EB=00‖BT‖PS‖00‖D。EB长度为k。

其中,BT为块类型,OCTET STRING类型,长度=1,值可以为00、01或02。私钥加/解密时,BT=00或01,公钥加/解密时,BT=02。

PS为填充字符串,为OCTET STRING类型,长度=k-3-‖D‖。当BT=00时,PS值全为00。当BT=01时,PS值全为FF。当BT=02时,PS值不能为0,随机产生。

②格式转换:把OCTET STRING类型EB转换成Integer类型x。

③RSA加密:用RSA公钥或私钥加密Integer类型x后获得Integer类型密文y。

④格式转换:把Integer类型密文y转换成OCTET STRING类型密文ED,长度为k。

假设用公钥pk(RSAPublicKey类型)或私钥vk(RSAPrivateKey类型)解密计算密文数据ED(OCTET STRING类型)。具体计算步骤如下:

①将OCTET STRING类型ED转换成Integer类型密文y。

②RSA解密:用RSA公钥或私钥解密Integer类型密文y后获得Integer类型明文x。

③格式转换:把Integer类型明文x转换成OCTET STRING类型明文EB,长度为k。

④加密块分拆(encryption block):把明文EB分拆成BT、PS和D,即可获得明文数据D。

2.RSA签名格式

RSA签名时摘要格式用ASN.1描述时,DigestAlgorithm为摘要算法,Digest为摘要值。

假设用私钥vk(RSAPrivateKey类型)签名计算待签名数据M(字符串类型)。具体计算步骤如下:

①计算摘要值:MD=HASH(M)。

②数据编码:把摘要算法ID和摘要值MD按DigestInfo类型编码,获得摘要数据D。

③RSA加密:用私钥vk加密摘要数据D后获得密文ED(OCTET STRING类型),其中BT=0x01。

④格式转换:把密文ED转换成比特字符串S(BIT STRING类型),其中S采用MSB(most significant bit)方式。S即为签名结果。

假设用公钥pk(RSAPublickey类型)签名验证待签名数据M(字符串类型)和待签名结果S(BIT STRING类型)。具体计算步骤如下:

①格式转换:将签名结果S(BIT STRING类型)转换成密文ED(OCTET STRING类型)。

②RSA解密:用公钥pk对密文ED进行解密获得摘要数据D(OCTET STRING类型)。

③数据解码:摘要数据D是DigestInfo类型,解码后获得摘要值MD和摘要算法ID。

④计算摘要并比较:根据摘要算法ID,计算M的摘要值MD'=HASH(M)。如果MD'等于MD,则验证成功,否则验证失败。

上一篇:密码模块的安全级别 下一篇:数字证书存储方式