• OKPay钱包(中国)

    文章横幅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,则验证成功,否则验证失败。

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