版本更新情况简要说明:
公钥
(n, e)
私钥
(n, d)
或者(p, q, dP, dQ, qInv),
注解:
dP, dQ,的出现是为了用CRT求 Cd mod n
因为dP=d mod p-1,dQ=d mod q-1,→ CdP=Cd mod p,CdQ=Cd mod q
所以计算Cd mod n改为计算同余式组 x=CdP mod p,x=CdQ mod q,计算出的x即为Cd mod n
I2OSP 整数→字符串 (Integer → Octet-String),字符串采用大端表示
OS2IP 字符串→整数 (Octet-String → Integer),字符串采用大端表示
c = me mod n.
m = cd mod n.
m1 = cdP mod p.
m2 = cdQ mod q.
h = qInv * (m1 – m2) mod p.
m = m2 + h q.
(其中q*qInv = 1 (mod p))
s = md mod n.
s1 = mdP mod p.
s2 = mdQ mod q.
h = qInv * (s1–s2 ) mod p.
s = s2 + h q.
m = se mod n
表1加密/签名/编码方案
两种加密方案 |
编码方案 |
加解密 |
备注 |
RSAES-OAEP |
EME-OAEP |
RSAEP/RSADP |
推荐使用 |
RSAESPKCS1-v1_5 |
EME-PKCS-v1_5 |
RSAEP/RSADP |
兼容老版本用 |
两种签名方案 |
编码方案 |
加解密 |
备注 |
RSASSA-PSS |
EMSA-PSS |
RSASP1/RSAVP1 |
推荐使用 |
RSASSA-PKCS1-v1_5 |
EMSAPKCS1-v1_5 |
RSASP1/RSAVP1 |
兼容老版本用 |
EME-OAEP-encode(§7.1.1, 见图1)
输入:M 消息;L可选的标签
输出:EM 编码后的消息
EME-OAEP-decode(§7.1.2,见图1)
输入:EM 编码后的消息;L可选的标签
输出:M 消息
图1 EME-OAEP编解码方案
EME-PKCS-v1_5-encode(§7.2.1, 见图2)
输入:M 消息
输出:EM 编码后的消息
EME-PKCS-v1_5-decode(§7.2.2, 见图2)
输入:EM 编码后的消息
输出:M 消息
图2 EME-PKCS-v1_5编解码方案
EMSA-PSS-ENCODE:(§9.1.1,见图3)
输入: M 消息;
emBits 整数OS2IP (EM) 的最大比特长度,>= 8hLen + 8sLen + 9
(sLen为salt的字节长度)
输出: EM 编码后的消息,字节长度为
EMSA-PSS-VERIFY:(§9.1.2,见图3)
输入: M 消息;
EM 编码后的消息,字节长度为;
emBits 整数OS2IP (EM) 的最大比特长度,>= 8hLen + 8sLen + 9
(sLen为salt的字节长度)
输出:“一致”或者“不一致”
图3 EMSA-PSS编解码方案
EMSA-PKCS1-V1_5-ENCODE:(§9.2,见图4)
输入: M 消息;
emLen 期望的编码消息EM的字节长度
输出: EM 编码后的消息,字节长度为emLen
注:EMSA-PKCS1-V1_5只有EMSA-PKCS1-V1_5-ENCODE 没有DECODE。
图4 EMSA-PKCS1-V1_5编解码方案
采用EME-OAEP编码方案 + RSAEP/RSADP加解密
此方案中存在可选的标签L
RSAES-OAEP-ENCRYPT ((n, e), M, L)(§7.1.1,见图5)
输入
输出
RSAES-OAEP-DECRYPT (K, C, L) (§7.1.2,见图5)
输入
输出
图5 加解密方案的流程
RSAES-OAEP采用EME-OAEP的encode/decode
RSAESPKCS1-v1_5采用EME-PKCS-v1_5的encode/decode
采用EME-PKCS-v1_5编码方案 + RSAEP/RSADP加解密
此方案中没有可选的标签L
RSAES-PKCS1-V1_5-ENCRYPT ((n, e), M) (见图5)
整体流程同RSAES-OAEP-ENCRYPT ((n, e), M, L),仅有的差别在于:
RSAES-PKCS1-V1_5-DECRYPT (K, C) (见图5)
整体流程同RSAES-OAEP-DECRYPT (K, C, L),仅有的差别在于:
采用EMSA-PSS编码方案 + RSASP/RSAVP签名验签
整个签名/验签流程与加解密流程非常相似。
RSASSA-PSS-SIGN (K, M) (§8.1.1,见图6)
输入
输出
RSASSA-PSS-VERIFY ((n, e), M, S) (§8.1.2,见图6)
输入
输出
图6 签名验签的流程
采用EMSA-PKCS1-V1_5编码方案 + RSASP/RSAVP签名验签
整个签名/验签流程与加解密流程非常相似。
RSASSA-PKCS1-V1_5-SIGN (K, M) (§8.2.1,见图6)
整体流程同RSASSA-PSS-SIGN (K, M),仅有的差别在于:
RSASSA-PKCS1-V1_5-VERIFY ((n, e), M, S) (§8.2.1,见图6)
整体流程同RSASSA- PSS-VERIFY (K, M),仅有的差别在于:
For the nine hash functions mentioned in Appendix B.1, the DER encoding T of the DigestInfo value is equal to the following:
MD2: (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 02 05 00 04 10 || H.
MD5: (0x)30 20 30 0c 06 08 2a 86 48 86 f7 0d 02 05 05 00 04 10 || H.
SHA-1: (0x)30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 || H.
SHA-224: (0x)30 2d 30 0d 06 09 60 86 48 01 65 03 04 02 04 05 00 04 1c || H.
SHA-256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H.
SHA-384: (0x)30 41 30 0d 06 09 60 86 48 01 65 03 04 02 02 05 00 04 30 || H.
SHA-512: (0x)30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 00 04 40 || H.
SHA-512/224: (0x)30 2d 30 0d 06 09 60 86 48 01 65 03 04 02 05 05 00 04 1c || H.
SHA-512/256: (0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 06 05 00 04 20 || H.
Mask generation functions MGF1,参见B.2
图7 MGF流程图