3. Key Types (密钥类型)
本文档定义的原语和方案中使用两种密钥类型: RSA公钥和RSA私钥. RSA公钥和RSA私钥一起构成RSA密钥对 (RSA Key Pair).
本规范支持所谓的"多素数" (Multi-prime) RSA,其中模数可以有两个以上的素因子. 多素数RSA的优势在于,如果使用中国剩余定理 (CRT),可以降低解密和签名原语的计算成本. 在单处理器平台上可以实现更好的性能,但在多处理器平台上可以达到更大程度的提升,因为涉及的模幂运算可以并行完成.
有关多素数如何影响RSA密码系统安全性的讨论,读者可参阅 [SILVERMAN].
3.1. RSA Public Key (RSA公钥)
对于本文档的目的,RSA公钥由两个组件组成:
n RSA模数 (RSA Modulus),一个正整数
e RSA公钥指数 (RSA Public Exponent),一个正整数
在有效的RSA公钥中,RSA模数n是u个不同奇素数r_i (i = 1, 2, ..., u,其中u >= 2)的乘积,RSA公钥指数e是介于3和n - 1之间的整数,满足 GCD(e, λ(n)) = 1,其中 λ(n) = LCM(r_1 - 1, ..., r_u - 1). 按照惯例,前两个素数r_1和r_2也可以分别表示为p和q.
附录A.1.1给出了在实现之间交换RSA公钥的推荐语法;实现的内部表示可能不同.
3.2. RSA Private Key (RSA私钥)
对于本文档的目的,RSA私钥可以有两种表示形式之一.
表示形式1
第一种表示形式由对 (n, d) 组成,其中组件具有以下含义:
n RSA模数 (RSA Modulus),一个正整数
d RSA私钥指数 (RSA Private Exponent),一个正整数
表示形式2
第二种表示形式由五元组 (p, q, dP, dQ, qInv) 和一个(可能为空的)三元组序列 (r_i, d_i, t_i) (i = 3, ..., u,对于五元组中未包含的每个素数各一个)组成,其中组件具有以下含义:
p 第一个因子,一个正整数
q 第二个因子,一个正整数
dP 第一个因子的CRT指数,一个正整数
dQ 第二个因子的CRT指数,一个正整数
qInv (第一个)CRT系数,一个正整数
r_i 第i个因子,一个正整数
d_i 第i个因子的CRT指数,一个正整数
t_i 第i个因子的CRT系数,一个正整数
有效性约束
在具有第一种表示形式的有效RSA私钥中,RSA模数n与相应RSA公钥中的相同,并且是u个不同奇素数r_i (i = 1, 2, ..., u,其中u >= 2)的乘积. RSA私钥指数d是小于n的正整数,满足:
e * d == 1 (mod λ(n))
其中e是相应的RSA公钥指数,λ(n)的定义如第3.1节所述.
在具有第二种表示形式的有效RSA私钥中,两个因子p和q是RSA模数n的前两个素因子(即r_1和r_2);CRT指数dP和dQ分别是小于p和q的正整数,满足:
e * dP == 1 (mod (p-1))
e * dQ == 1 (mod (q-1))
CRT系数qInv是小于p的正整数,满足:
q * qInv == 1 (mod p)
如果u > 2,该表示将包含一个或多个三元组 (r_i, d_i, t_i) (i = 3, ..., u). 因子r_i是RSA模数n的额外素因子. 每个CRT指数d_i (i = 3, ..., u)满足:
e * d_i == 1 (mod (r_i - 1))
每个CRT系数t_i (i = 3, ..., u)是小于r_i的正整数,满足:
R_i * t_i == 1 (mod r_i)
其中 R_i = r_1 * r_2 * ... * r_(i-1).
附录A.1.2给出了在实现之间交换RSA私钥的推荐语法,其中包含两种表示形式的组件;实现的内部表示可能不同.
注释
注释1: 这里CRT系数的定义以及第5节中原语使用它们的公式通常遵循Garner算法 [GARNER] (另请参见 [HANDBOOK] 中的算法14.71). 但是,为了与PKCS #1 v2.0及之前版本中RSA私钥表示的兼容性,与其余素数相比,p和q的角色是相反的. 因此,第一个CRT系数qInv定义为q mod p的逆,而不是R_1 mod r_2(即p mod q)的逆.
注释2: Quisquater和Couvreur [FASTDEC] 观察到将CRT应用于RSA操作的好处.