资源描述
组织: PKI论坛 ()
PKCS/PKIX中文翻译筹划
论坛E-mail:
译者: Cece
版权:本中文翻译文档版权归PKI论坛注册顾客所共有。可以用于非商业用途自由转载,但必要保存本
文档翻译及版权信息。如用于商业目,所得利润需用于PKI论坛发展。
更改记录
日期
修改章节
类型
修改描述
修改人
/01/15
C
创立文档
Cece
* 修改类型分为 C-CREATE A - ADDED M - MODIFIED D - DELETED
PKCS #1 v2.1 RSA 算法原则
RSA实验室
6月14日
目录
目录 2
1 简介 4
2 符号 5
3 密钥类型 7
3.1 RSA 公钥 7
3.2 RSA 私钥 7
4 数据转换原语 9
4.1 I2OSP 9
4.2 OS2IP 9
5 密码原语 10
5.1 加密和解密原语 10
5.1.1 RSAEP 10
5.1.2 RSADP 11
5.2 签名和验证原语 12
5.2.1 RSASP1 12
5.2.1 RSAVP1 13
6 方案概述 13
7 加密方案 14
7.1 RSAES-OAEP 15
7.1.1 加密运算 17
7.1.2 解密运算 20
7.2 RSAES-PKCS1-v1_5 21
7.2.1 加密运算 22
7.2.2 解密运算 23
8 带附属签名方案 24
8.1 RSASSA-PSS 25
8.1.1 签名生成运算 26
8.1.2 签名验证运算 27
8.2 RSASSA-PKCS1-v1_5 28
8.2.1 签名生成运算 29
8.2.2 签名验证运算 29
9 带附属签名编码办法 31
9.1 EMSA-PSS 31
9.1.1 编码运算 33
9.1.2 验证操作 34
9.2 EMSA-PKCS1-v1_5 35
A ASN.1 语法 37
A.1 RSA 密钥表达 37
A.1.1 RSA公钥语法 37
A.1.2 RSA私钥语法 37
A.2 方案标记 39
A.2.1 RSAES-OAEP 39
A.2.2 RSAES-PKCS1-v1_5 42
A.2.3 RSASSA-PSS 42
A.2.4 RSASSA-PKCS1-v1_5 43
B 支撑技术 44
B.1 散列函数 45
B.2 掩模生成函数 46
B.2.1 MGF1 46
C ASN.1 模块 47
D 知识产权因素 55
E 修订历史 56
F 参照文档 56
1 简介
这篇文档是简介基于RSA算法[42]公钥密码系统实现办法,它涉及如下几种方面:
l 密码原语
l 加密方案
l 带附属签名方案
l 密钥和方案ASN.1描述
本文档是为计算机和通信系统普通应用以及具备一定灵活性系统中普通应用所编写。但愿基于这些规范应用原则可以合用于其他规范。本篇文档拟定要与IEEE-1363- Error! Reference source not found.原则以及ANSI X9F1 Error! Reference source not found. 和IEEE P1363 Error! Reference source not found.工作组当前正在开发草拟原则兼容。
本文档是PKCS #1 V2.0[44]后续版本,但是包括了兼容技术。
下面所列为本篇文档组织构造:
l 第一某些是简介。
l 第二某些是对文档中使用到符号定义。
l 第三某些详细阐明了RSA公钥和私钥类型。
l 第四某些和第五某些详细阐明了几种原语,或者说是基本数学操作。第四某些详细阐明了数据转换原语,第五某些详细阐明了密码系统原语(加密——解密、签名——验证)。
l 本文档中第六、七和八某些涉及加密和签名方案。第六某些是概述。连同在PKCS #1 V1.5中简介办法一起,第七某些定义了基于OAEP[3]加密方案和第八某些定义了基于PSS[4][5]带附属签名方案。.
l 第九某些详细阐明了在第八某些中定义签名方案编码办法。
l 附录A详细阐明了关于在第三某些中定义密钥以及第七、八章中方案ASN.1描述。
l 附录B详细阐明了本文档用到散列函数和掩模生成函数,涉及这些技术ASN.1描述。
l 附录C给出一种ASN.1模块。
l 附录D、E、F和G涉及知识产权问题,概述了PKCS #1修订历史,列出了其他参照出版物和原则,提供了关于公钥密码系统原则普通信息。
2 符号
c 密文代表,是一种界于0~n-1之间整数。
C 密文,是一种八位组串
d RSA 私有幂
di 其他因子ri CRT幂,是一种满足下式正整数:
e · di º 1 (mod (ri – 1)),i = 3,…,u
dP pCRT幂,是一种满足下式正整数
e · dP º 1 (mod (p – 1))
dQ qCRT幂,是一种满足下式正整数
e · dQ º 1 (mod (q – 1))
e RSA公开幂
EM 编码后消息,是一种八位组串
emBits (盼望) 编码消息EM 以比特为计量单位长度
emLen (盼望)编码消息EM 以八位组为计量单位长度
GCD (. ,.) 两个非负整数最大公约数
Hash 哈希函数
hLen 散列函数Hash输出以八位组为计量单位长度
k RSA合数模 n以八位组为计量单位长度
K RSA 私钥
L 可选RSAES-OAEP 标签,是一种八位组串
LCM (. ,… ,.) 一系列非负整数最小公倍数
m 消息代表,是一种界于0到n – 1整数
M 消息,是一种八位组串
mask MGF输出,是一种字节串
maskLen (盼望)掩模以八位组为计量单位长度
MGF 掩模生成函数
mgfSeed 生成掩模种子因数(seed),是一种八位组串
mLen 消息M 以八位组为计量单位长度
n RSA合数模, n = r1 · r2 × … · ru ,u ³ 2
(n,e) RSA公钥
p,q RSA合数模 n前两个素数因子
qInv CRT系数,是个满足下式且不大于p正整数
q · qInv º 1 (mod p)
ri RSA合数模 n素数因子, 涉及r1 = p,r2 = q,以及任何此外因子
s 签名代表,是一种位于 0到 n – 1之间整数
S 签名,是一种八位组串
sLen EMSA-PSS 盐(salt)以八位组为计量单位长度
ti 其他素数因数ri CRT系数, 是一种比ri 小正整数,满足下式
r1 · r2 · … · ri–1 · ti º 1 (mod ri) ,i = 3,…,u
u RSA合数模素数因子个数,u ³ 2
x 一种非负整数
X 与x 相应一种八位组串
xLen (指定)八位组串X 长度
0x 一种八位组或八位组串十六进制表达法标志;“0x48” 表达十六进制值为48字节;
“(0x)48 09 0e” 表达三个持续字节,它们十六进制值分别为48,09,和0e
l(n) LCM (r1 – 1,r2 – 1,… ,ru – 1)
Å 两个八位组串位异或操作
é . ù 取整函数;éxù 是一种不不大于或等于实数x 最小整数。
|| 或操作
º 同余符号;a º b (mod n) 表达能用整数n整除整数a – b
注释:CRT既可以用于递归方式,也可以用于非递归方式。在本篇文档中使用了在Garner算法Error! Reference source not found.之后一种递归方式。请参看Error! Reference source not found.节中注释1。
3 密钥类型
在本篇文档定义原语和方案中,使用了两种密钥类型:RSA公钥和RSA私钥。RSA公钥和RSA私钥一起构成一种RSA密钥对。
本篇规范支持所谓“多素数”RSA,这种RSA合数模也许由两个以上素数因子构成。多素数RSA长处在于,当使用CRT(中华人民共和国余数定理),它就能减少解密和签名原语计算开销。这在单解决器平台上能获得更好性能,但是在多解决器平台上不一定,在多解决器平台上可以并行解决合数模幂运算。
至于多素数如何影响RSA密码系统安全性,请读者参照[49]。
3.1 RSA 公钥
为了这篇文档起见,一种RSA公钥由两某些构成:
n RSA合数模,是一种正整数
e RSA公开幂,是一种正整数
在一种有效RSA公钥中,RSA合数模n是由u 个不同奇素数ri生成,i = 1,2,…,u,其中u ³ 2,而RSA公开幂e是一种位于3~n – 1之间整数,满足GCD (e,l(n)) = 1,其中l(n) = LCM (r1 – 1,…,ru – 1)。按照惯例,通惯用p 和q分别合数模前两个素数因子r1 和r2。
在设备之间互换RSA公钥一种推荐描述在附录Error! Reference source not found.中给出;设备中内部表达也许不同。
3.2 RSA 私钥
为了本篇文档起见,一种RSA私钥可以采用两种表达法中任何一种。
1. 第一种表达法由一对整数(n,d)构成,各某些意义如下:
n RSA合数模,是一种正整数
d RSA私有幂,是一种正整数
2. 第二种表达法由一种五元组(p,q,dP,dQ,qInv)和一系列(也许为空)三元组 (ri,di,ti) i = 3,…,u构成,三元组每个素数不出当前五元组中,各某些意义如下:
p 第一种因子,是一种正整数
q 第二个因子,是一种正整数
dP 第一种因子CRT幂,是一种正整数
dQ 第二个因子CRT幂,是一种正整数
qInv (第一种)CRT系数,是一种正整数
ri 第i个因子,,是一种正整数
di 第i个因子 CRT幂,是一种正整数
ti 第i个因子 CRT系数,是一种正整数
当采用第一种表达法表达时,有效RSA私钥RSA合数模 n与相应RSA公钥RSA合数模n同样,是由u个不同奇素数ri 产生,i = 1,2,…,u,其中u ³ 2。RSA私有幂 d是一种不大于n正整数,满足
e · d º 1 (mod l(n)) ,
其中e是相应RSA公开幂,l(n)和第3.1中定义同样。
当用第二种表达法表达时,RSA私钥两个因素p 和q是RSA合数模 n前两个素数(也就是 r1 和 r2),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,表达法中将涉及一种或各种三元组 (ri,di,ti),i = 3,…,u。因子ri是RSA合数模 n一种其他素数因子。每一种CRT幂 di (i = 3,…,u),满足
e · di º 1 (mod (ri – 1)) 。
每个CRT系数ti (i = 3,…,u)是一种不大于ri正整数,满足
Ri · ti º 1 (mod ri) ,
其中Ri = r1 · r2 · … · ri–1。
在设备之间互换RSA私钥推荐描述(涉及两种表达法构成某些)在附录Error! Reference source not found.中给出;设备内部表达也许不同。
注释:
1. 这里CRT系数定义以及第5某些原语中使用到程式遵循Garner算法Error! Reference source not found.(也可参见Error! Reference source not found.算法14.71)。然而,为了与PKCS #1 v2.0及之前版本中RSA私钥表达法兼容,p 和q 角色被保存了,这与其他素数不同样。因而,第一种CRT系数qInv被定义成是q mod p倒数(inverse),而不是r1 mod r2倒数(也就是p mod q倒数)。
2. Quisquater 和Couvreur Error! Reference source not found. 注意到在RSA运算中使用中华人民共和国剩余定理长处。
4 数据转换原语
本篇文档所定义模式中使用了两个数据转换原语:
l I2OSP – 整数到字节串转换原语
l OS2IP – 字节串到整数转换原语
为了本篇文档起见,也为了与ASN.1语法一致,一种八位组串是指一种有顺序八位组(八位比特构成一种字节)序列。整个序列从第一位(普通是最左边一位)到最后一位(最右边一位)编入索引。为了转换为整数以及转换整数,在接下来转换原语中第一种八位组被以为是最重要。
4.1 I2OSP
I2OSP把一种非负整数转换为一种长度指定字节串。
I2OSP (x,xLen)
输入: x 待转换非负整数
xLen 转换后八位组串盼望长度
输出: X 相应长度为xLen 八位组串
错误信息: “整数太大”
环节:
1. 如果 x ³ 256xLen,输出“整数太大”然后终结。
2. 用以256为基数xLen位数表达整数x :
x = xxLen–1 256xLen–1 + xxLen–2 256xLen–2 + … + x1 256 + x0 ,
其中 0 £ xi < 256 (注意如果x不大于256xLen–1,一种或各种高位将为零)。
3. 使字节 Xi 整数值为xxLen–I , 1 £ I £ xLen。输出八位组串
X = X1 X2 … XxLen。
4.2 OS2IP
OS2IP 将一种八位组串转换成一种非负整数。
OS2IP (X)
输入: X 待转换八位组串
输出: x 相应非负整数
环节:
1. 使 X1 X2 … XxLen 分别为X 第一种至最后一种八位组,使 xxLen–i 值为八位组Xi 整数值,1 £ i £ xLen。
2. 让 x = xxLen–1 256xLen–1 + xxLen–2 256xLen–2 + … + x1 256 + x0。
3. 输出x。
5 密码原语
密码原语是基本数学运算,在此基本上形成密码方案。人们打算以硬件或软件模块形式实现它们,并且不打算提供撇开方案安全。
在本篇文档中定义了四类原语,以配对方式组织:加密和解密;签名和验证。
原语规范假定输入满足一定条件,特别地假设RSA公钥和私钥有效。
5.1 加密和解密原语
加密原语在公钥控制下从消息代表产生出密文代表,解密原语在相应私钥控制下从密文代表中恢复消息代表。
在本篇文档定义加密方案中使用了一对加密和解密原语,被描述为:RSAEP/RSADP 。RSAEP和RSAEP涉及相似数学运算,只是输入密钥不同。
这里定义原语和在IEEE Std 1363- Error! Reference source not found.中定义IFEP-RSA/IFDP-RSA同样(除了增长了对多原语RSA支持之外),并且与PKCS #1 v1.5兼容。
在每个原语中重要数学运算是幂运算。
5.1.1 RSAEP
RSAEP ((n,e),m)
输入: (n,e) RSA 公钥
m 消息代表, 是一种位于0~ n – 1之间整数
输出: c 密文代表, 是一种位于0~ n – 1之间整数
错误提示: “消息代表超过范畴”
假设: RSA 公钥(n,e)有效
环节:
1. 如果消息代表m 不在0 ~n – 1之间, 输出“消息代表超过范畴”并终结。
2. 让c = me mod n。
3. 输出c。
5.1.2 RSADP
RSADP (K,c)
输入: K RSA私钥,其中K采用如下形式中一种:
¾ 一对(n,d)
¾ 一种五元组 (p,q,dP,dQ,qInv)和 一系列也许为空三元组 (ri,di,ti), i = 3,…,u
c 密文代表,是一种位于0 ~n – 1之间整数
输出: m 消息代表,是一种位于0 ~n – 1之间整数
出错提示: “密文代表超过范畴”
假设: RSA 私钥K 有效
环节:
1. 如果密文代表c 不在0 ~n – 1范畴之内, 则输出“密文代表超过范畴”然后终结。
2. 消息代表m 按照如下环节计算。
a. 如果K采用第一种形式(n,d),使m = cd mod n。
b. 如果K采用第二种形式(p,q,dP,dQ,qInv)和 (ri,di,ti),则按照如下环节进行:
i. 使m1 = cdP mod p ,m2 = cdQ mod q。
ii. 如果u > 2, 使 mi = cdi mod ri,i = 3,…,u。
iii. 使h = (m1 – m2) · qInv mod p。
iv. 使 m = m2 + q · h。
v. 如果u > 2,使R = r1 , 令i = 3 然后循环做如下各环节,直至i= u
1. 使R = R · ri–1
2. 使h = (mi – m) · ti (mod ri)
3. 使m = m + R · h
4. 使i=i+1
3. 输出m。
注释:如果保存了p和q定义,环节2.a可以写成单个循环。然而,为了与PKCS #1 v2.0兼容,前两个素数p和q与其他素数分开解决。
5.2 签名和验证原语
签名原语在私钥控制下从消息代表产生一种签名代表,而验证原语是在相应公钥控制下从签名代表恢复出消息代表。本篇文档定义签名方案中使用了一对签名和验证原语,被描述为: RSASP1/RSAVP1。
这里定义原语与IEEE 1363- Error! Reference source not found.中定义IFSP-RSA1/IFVP-RSA1是同样(所不同是这里原语增长了对多原语RSA支持),并且与PKCS #1 v1.5兼容。
在每个原语中重要数学操作是幂操作,这一点和Error! Reference source not found.某些中加密和解密原语同样。RSASP1和RSAVP1与RSADP和RSAEP除了输入和输出参数名称不同样之外,其他各方面都同样;它们区别在于它们是为不同目而编写。
5.2.1 RSASP1
RSASP1 (K,m)
输入: K RSA私钥,这里K具备如下形式之一:
¾ 一对(n,d)
¾ 一种五元组(p,q,dP,dQ,qInv)和一系列也许为空三元组(ri,di,ti), i = 3,…,u
m 消息代表,是一种位于0~ n – 1之间整数
输出: s 签名代表,是一种位于0~ n – 1之间整数
出错提示: “消息代表超过范畴”
假设: RSA 私钥K有效
环节:
1. 如果消息代表m 不在0 ~n – 1之间,输出“消息代表超过范畴” 然后终结运算。
2. 签名代表s由如下环节计算得出。
a. 如果K采用第一种形式(n,d), 使s = md mod n。
b. 如果K采用第二种形式(p,q,dP,dQ,qInv)和 (ri,di,ti),则按照如下环节进行:
i. 使s1 = mdP mod p ,s2 = mdQ mod q。
ii. 如果u > 2,让si = mdi mod ri,i = 3,…,u。
iii. 让h = (s1 – s2) · qInv mod p.
iv. 让s = s2 + q · h.
v. 如果u > 2,让R = r1 ,i = 3 ,然后循环进行如下各环节直至i = u
1. 让R = R · ri–1.
2. 让h = (si – s) · ti (mod ri).
3. 让s = s + R · h
4. 让i = i+1
3. 输出s。
注释:如果保存了p和q定义,环节2.a还可以写成单个循环。然而,为了与PKCS #1 v2.0兼容,前两个素数p和q与其他素数分开解决。
5.2.1 RSAVP1
RSAVP1 ((n,e),s)
输入: (n,e) RSA 公钥
s 签名代表, 是一种位于0~ n – 1之间整数
输出: m 消息代表, 是一种位于0~ n – 1之间整数
出错提示: “签名代表超过范畴”
假设: RSA 公钥(n,e) 有效
环节:
1. 如果签名代表s 不在范畴0 ~n – 1之间,,输出“签名代表超过范畴”然后终结运算。
2. 让m = se mod n。
3. 输出m。
6 方案概述
方案结合了密码原语和其他技术以获得特定安全目的。在本篇文档种定义了两类方案:加密方案和带附属签名方案。
本篇文档种定义方案合用于有限范畴,它们操作只是由几种使用RSA公钥或私钥解决数据环节构成,不涉及获得密钥或者证明密钥环节。因而,一种典型应用除了涉及方案中操作之外,还应涉及密钥管理操作(通过该操作双方可觉得一次方案操作选取RSA公钥和私钥)。这些详细额外操作以及其他细节超过了本篇文档讨论范畴。
依照密码原语(见第Error! Reference source not found.某些),方案操作规范假定输入满足一定条件,特别是满足RSA公钥和私钥均有效。因而,如果密钥无效,则不规定设备行为。这种不规定行为影响依赖于实际应用。声明密钥有效涉及通过申请明确密钥有效;在公钥基本架构内密钥有效性;使密钥生成方承担使用有效密钥进行操作责任。
一种大体上好密码实现是将一对给定RSA密钥对只用于一种方案。这样就避免使一种方案漏洞连累其他方案安全性,这一点对维持可证明安全性也许是至关重要。尽管RSAES-PKCS1-v1_5 (见0某些)和RSASSA-PKCS1-v1_5 (见Error! Reference source not found.某些)一贯被结合在一起使用,且互相之间没有任何已知不好影响(事实上,这就是PKCS #1 v1.5简介方案),在新应用中不推崇这种结合使用一种RSA密钥对做法。
为了阐明在各种方案中使用一种RSA密钥对风险,咱们假定RSAES-OAEP (见 Error! Reference source not found.某些) 和RSAES-PKCS1-v1_5中使用同一种RSA密钥对。尽管RSAES-OAEP自身具备抗袭击性,但对手可以运用RSAES-PKCS1-v1_5实现中一种漏洞恢复出用两个方案中任何一种方案加密消息。再举此外一种例子,假设RSASSA-PSS (见 Error! Reference source not found.某些)和 RSASSA-PKCS1-v1_5中使用同一种RSA密钥对。如果对RSASSA-PSS安全结实性没有考虑到签名可以由另一种方案生成也许性,那么这种结实性将不再充分。如果一种RSA密钥对被用于这里定义方案中任何一种,并且也被用于其他地方定义方案,那么也许需要作出同样考虑。
7 加密方案
就本篇文档而言,一种加密方案由一种加密操作和一种解密操作构成,其中加密操作使用接受方RSA公钥把消息转化成密文,而解密操作使用接受方相应RSA私钥将密文恢复成消息。
一种加密方案能用于各种应用中。一种典型应用是密钥建立合同,在该合同消息中包括将被秘密地从一方递送到另一方密钥。举例来说,PKCS #7 Error! Reference source not found.使用这种合同将一种内容加密密钥从发送方递送到接受方;这里定义加密方案将会是适合于上述状况密钥加密算法。
在本篇文档中定义了两个加密方案:RSAES-OAEP 和RSAES-PKCS1-v1_5。 RSAES-OAEP是新应用推荐原则;加入RSAES-PKCS1-v1_5只是为了与已存在应用兼容,并且不建议用于新应用。
这里给出加密方案遵循普通模型,这个模型类似于在IEEE Std 1363- Error! Reference source not found.中使用到模型,就是将加密和解密原语与针对加密编码办法结合起来。这种加密运算对消息进行消息编码运算,以产生一种编码消息,然后将编码后消息转换成一种整数消息代表。一种加密原语作用于这个消息代表从而产生密文。反之,解密运算将解密原语作用于密文,从而恢复出消息代表,然后将这个消息代表转换成一种以八位组串为形式编码消息。一种消息解码操作作用于这个编码消息,从而恢复出消息并验证解密运算对的性。
为了避免与这种方式有关实现漏洞,在解码运算中会解决错误(参见Error! Reference source not found.和[36]),RSAES-OAEP 和RSAES-PKCS1-v1_5编码和解码运算嵌入在各自加密方案规范中,而不是定义在单独规范中。两个加密方案均与PKCS #1 v2.0中相应方案兼容。
7.1 RSAES-OAEP
RSAES-OAEP将RSAEP 和RSADP原语(参见Error! Reference source not found.和Error! Reference source not found.某些)与EME-OAEP编码办法结合起来(参见0中环节1.b和Error! Reference source not found.中环节3)。EME-OAEP基于Bellare 和Rogaway最佳非对称加密schemeError! Reference source not found.。(OAEP代表“最佳非对称加密填充”)。它与在IEEE Std 1363- [26]中定义IFES方案兼容,在IFES中加密和解密原语是IFEP-RSA和IFDP-RSA,消息编码办法是EME-OAEP。RSAES-OAEP可以操作长度超过k – 2hLen – 2字节消息,这里hLen是基本散列函数输出长度,而k是接受方RSA合数模以八位组为计量单位长度。
假设计算eth roots modulo n是不可行,且RSAES-OAEP中掩模生成函数具备固有属性;那么RSAES-OAEP语义上能抵抗适合选取密文袭击。如果掩模生成函数被看作是一种黑盒子或者是一种随机启示程序,那么在攻破RSAES-OAEP难度能直接与使RSA函数反向难度有关意义上,这个保证是可证明;进一步讨论参见Error! Reference source not found.和下面注释。
RSAES-OAEP加密和解密运算都将标签L作为输入。在PKCS #1这个版本中,L是一种空串,这个标签其他使用超过了本篇文档范畴。有关ASN.1语法描述参见附录A.2.1。
通过散列函数和掩模生成函数选取以拟定RSAES-OAEP参数。这一选取过程对给定RSA密钥是固定不变。在附录B中给出了建议散列函数和掩模生成函数。
注释:近来成果对澄清OAEP编码方式Error! Reference source not found.安全性Error! Reference source not found.有协助(0某些中环节1.b对这个过程作了粗略描述)。其背景如下所述。1994年,Bellare 和 RogawayError! Reference source not found.引入了一种安全概念,她们表述为明文意识(PA94)。她们证明如果一种公钥加密原语(例如RSAEP)没有私钥就难以倒转,那么相应基于OAEP加密方案就是有明文意识(in the random oracle model),大体意思是对手在没有真正懂得基本明文状况下是不能产生出合法密文。一种加密方案明文意识与反密文选取袭击方案限制有密切联系。在这种袭击中,对手有机会发送询问给一种模仿解密原语启示程序。使用这些询问成果,对手尝试解密一种密文。
然而,存在两类密文选取袭击,而PA94只包括了针对其中一种袭击安全性。不同之处在于对手在获得challenge密文之后,可以做些什么事情。在对手获得challenge密文后,indifferent袭击方案(CCA1所示)不容许向解密启示程序提出任何询问,而adaptive方案(CCA2中有表达)容许(除理解密启示程序在其被发布之后回绝解密challenge密文状况)。1998年Bellare 和Rogaway与Desai 和PointchevalError! Reference source not found.一道提出了一种新更健壮明文意识观念(PA98),它提出了针对CCA2安全性。
总说来,存在两个错误观念潜在来源:PA94和 PA98是相似概念;或者CCA1 和CCA2 是相似概念。任何一种假设都会得出一种结论,那就是Bellare-Rogaway论文提出针对CCA2OAEP安全性,而事实上它并没有提出针对CCA2OAEP安全性。1 OAEP从未被证明对CCA2来说是安全;事实上,Victor ShoupError! Reference source not found.已经证明这种验证并不存在于普通状况中。简朴地说,Shoup指出CCA2方案中对手懂得如何使加密原语某些反向,但不懂得如何使它完全反向,这个对手也能攻破这个方案。举例来说,一种人可以想象如果袭击者懂得如何恢复用RSAEP加密一种随机整数所有子节而不是前20个字节,那么她就可以攻破RSAES-OAEP。这样袭击者不需要将RSAEP完全反向,由于在她袭击过程中不需要使用前20个八位组。
同样地,RSAES-OAEP对于CCA2来说是安全,就在Shoup宣布她成果之后不久,这一点就被Fujisaki、Okamoto、Pointcheval和 Stern Error! Reference source not found.证明了。如果能懂得pre-image足够大一某些,使用聪颖网点缩小技术(clever lattice reduction techniques),她们能设法阐明如何使RSAEP完全反向。这个观测结合了一种验证,那就是如果基本加密原语难以被某些反向,那么OAEP对CCA2来说是安全;这个观测弥补了Bellare和Rogaway所证明关于RSAES-OAEP事实和某人以为她们证明事实之间缺口。咱们就这样被RSAEP公开弱点挽救了(也就是说,所有反向可以从某些反向中演绎出来),这有些自相矛盾。
然而不幸是,减少安全对于详细参数并不有效。尽管这个验证成功地将RSAES-OAEPCCA2安全性对手A与反向RSA算法I关联起来,I成功概率仅近似于e2 / 218,其中e是A成功概率。此外,I运营时间大概是t2,其中t是对手操作时间。成果是咱们不能排除袭击RSAES-OAEP比用品体参数反向RSA容易得多也许性。安全验证存在依然提供了某些保证,那就是RSAES-OAEP构造比ad hoc构造(诸如RSAES-PKCS1-v1_5)合理。
Hybrid加密方案基于RSA-KEM密钥封装范例,并提供严密安全性验证,能直接应用于详细参数;详情见[30]。PKCS #1后续版本可以定义基于这个范例方案。
PKCS #1 v2.0引用了Error! Reference source not found.并且声称“在没有明确明文意识或选取密文袭击类型状况下,选取密文袭击对于有明文意识加密方案,像RSAES-OAEP,来说是无效”。
2 在 Error! Reference source not found.中,反向成功概率是e2 / 4。其他因子1 / 216 取决于编码消息EM开头八个固定零比特,这在Error! Reference source not found.中考虑OAEP变化中没有浮现。(我必要两次应用A来反向RSA,且每个应用程序与因子1 / 28相应)
7.1.1 加密运算
RSAES-OAEP-Encrypt ((n,e),M,L)
可选项: Hash 哈希函数(hLen 表达散列函数输出以八位组为计量单位长度)
MGF 掩模生成函数
输入: (n,e) 接受方RSA 公钥(k 表达RSA合数模 n 以八位组为计量单位长度)
M 待加密消息,是一种长度为mLen 八位组串,其中 mLen £ k – 2hLen – 2
L 消息可选附加标签;如果没有提供L,那么L 默认值是空串
输出: C 密文,一种长度为k 八位组串
出错提示: “消息太长”;“标签太长”
假设: RSA公钥(n,e) 是有效
环节:
1. 长度检查:
a. 如果L 长度超过哈希函数输入限制 (SHA-1限制是261 – 1 个八位组), 输出“标签太长”然后终结运算。
b. 如果mLen > k – 2hLen – 2,输出“消息太长”然后终结运算。
2. EME-OAEP 编码(见 Error! Reference source not found.):
a. 如果没有提供标签L, 则让L为空串。 让 lHash = Hash (L), 这是一种长度为hLen 八位组串(见下面注释)。
b. 生成一种由k – mLen – 2hLen – 2个零值八元组构成串PS。 PS长度也许是零。
c. 连接lHash,PS,十六进制值为0x01八元组和消息M ,形成一种长度为k – hLen – 1个八位组数据块DB :
DB = lHash || PS || 0x01 || M 。
d. 生成一种长度为hLen 随机八位组串seed 。
e. 使dbMask = MGF (seed,k – hLen – 1)
f. 使maskedDB = DB Å dbMask.
g. 使 seedMask = MGF (maskedDB,hLen).
h. 使maskedSeed = seed Å seedMask.
i. 连接一种十六进制值为0x00八位组, maskedSeed和 maskedDB ,形成一种长度为k 个八位组编码消息EM
EM = 0x00 || maskedSeed || maskedDB。
3. RSA加密:
a. 将编码消息EM转换成一种整数消息代表(见4.2某些):
m = OS2IP (EM) 。
b. 将RSA公钥(n,e) 和消息代表m代入RSAEP加密原语(5.1.1某些),产生一种整数密文代表c :
c = RSAEP ((n,e),m) 。
c. 将密文代表c转换为一种长度为k个八元组密文C (见4.1某些):
C = I2OSP (c,k) 。
4. 输出密文 C。
图1:EME-OAEP 编码运算。lHash是可选标签L散列。解码运算按照相反环节进行,从而恢复出M并且验证lHash和PS。
注释:如果L是空串,相应散列值lHash具备下列十六进制值代表哈希函数不同选取。
SHA-1: (0x)da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709
SHA-256: (0x)e3b0c442 98fc1c14 9afbf4c8 996fb92
展开阅读全文