收藏 分享(赏)

PKCS#1v2.1RSA密码学规范.doc

上传人:精品资料 文档编号:9608664 上传时间:2019-08-18 格式:DOC 页数:41 大小:51.19KB
下载 相关 举报
PKCS#1v2.1RSA密码学规范.doc_第1页
第1页 / 共41页
PKCS#1v2.1RSA密码学规范.doc_第2页
第2页 / 共41页
PKCS#1v2.1RSA密码学规范.doc_第3页
第3页 / 共41页
PKCS#1v2.1RSA密码学规范.doc_第4页
第4页 / 共41页
PKCS#1v2.1RSA密码学规范.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、PKCS#1 v2.1: RSA 密码学规范RSA 实验室2002 年 6 月 14 日-翻译:CaesarZou ()1.介绍这个文档提供了基于 RSA 算法的公钥密码学的建议实现,包含如下的方面: 密码学单元 加密方案 带填充的签名方案 以 ASN.1 语法展现的密钥和方案参考建议基于计算机的通用需求和通讯系统,并且引入了合适数量的灵活性。建议基于这个规范的应用标准可以包含额外的限制。参考建议尝试与IEEE-1353-2000 和当前 ANSI X9F1 开发的讨论版本规范以及 IEEE P136327工作组兼容。这个文档取代 PKCS#1 版本 2.0。 但是包含兼容的技术。这个文档的组

2、织结构如下: 第一章是一个介绍。 第二章定义了这个文档中使用的一些符号。 第三章定义了 RSA 公钥和四要类型。 第四章和第五章定义了一些单元或者数学操作的基本单位。 第六章第七章和第八章解决了这个文档中加密和签名的方案。第六章给出了一个综述,沿着 PKCS$1 v1.5 定义的方法,第七章定义了 OAEP 基础的加密算法,第八章定义了 PSS 基础的填充签名算法。 第九章定义了第八章定义的签名算法的编码方法。附录 A 定义了第三章定义的密钥以及第七章第八章定义的算法的 ASN.1 语法标识。附录 B 定义了这个文档中使用的哈希函数和掩码生成算法。包含算法的ASN.1 语法标识。附录 C 给出

3、了一个 ASN.1 模块附录 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,udP p 的 CRT 指数,一个正整数满足 e*dP1(mod(p-1)dQ q 的 CRT 指数,一个正整数满足 e*dQ1(mod(q-1)e RSA 公有指数EM 编码消息,一个字节串emBits 一个编码消息 EM 的比特

4、长度emLen 一个编码消息 EM 的字节长度GCD 两个正整数的最大公约数Hash 哈希函数hLen 哈希函数 Hash 输出的字节长度k RSA 模数 n 的字节长度K RSA 私钥L 可选的 RSAES-OAEP 标签,一个字节串LCM 一系列正整数的最小公倍数m 消息标识,一个 0 到 n-1 的整数M 消息,一个字节串mask MGF 的输出,一个字节串mgfSeed mask 生成的种子,一个字节串mLen 消息 M 的字节长度n RSA 模数,n=r1*r2*ru, u=2(n,e) RSA 公钥p,q RSA 模数 n 的第一分解因子qinv CRT 西数,一个小于 p 的正整

5、数,满足 q.qinv1(mod p)ri RSA 模数的主因子,包含 r1=p, r2=q,如果有的话也包含额外的因子。s 签名标志,一个 0 到 n-1 整数S 签名,一个字节串sLen EMSA-PSS 的字节长度ti ri 的 CRT 系数的附加质数,一个小于 ri 的正整数,满足r1*ri*ri-1*ti 1(mod ri), i=3,.uu RSA 模数的主因子个数,u 大于等于 2x 一个正整数X x 的字节串xLen X 的字节串长度0x 一个字节或者一个字节串的十六进制标识;“0x48“意味着十六进制的值 48;“(0x)48 09 0e“意味着由 3 个连续的十六进制值 4

6、8,09,03 组成的字节串 (n) r1-1,r2-1,ru-1 的最小公倍数 两个字节串异或. 上限函数,一个大于等于实数 x 的最小整数| 连接符 全等符号;ab(mod n) 意思是 n 可以被整数 a-b 整除注释。CRT 可以使用回调或者非回调的方式提供,本文参照了加纳算法使用的回调算法。参见 3.2 章的注释 1.3 密钥类型这个文档的算法和单元提供了两种密钥类型:RSA 公钥和 RSA 私钥。RSA公钥和 RSA 私钥合在一起称为 RSA 密钥对。这个规范支持号称“多质数”的可以有两个以上质数因子的 RSA 模数。多模数的 RSA 的好处是使用 CRT(中国余数算法)的时候是解

7、密和签名运算具有更低的计算代价。在单处理器平台就可以获得很好的表现,并且在多处理器平台上面会有很大的提升,因为可以并行的调用模幂运算。关于多个质数对 RSA 算法安全的影响的讨论,参见注释493.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, (n) = 1其中 (n) = LCM (r1 1, , ru 1)。按惯例,前两个质

8、数 r1 和 r2 也可以被分别的定义为 p 和 q。在不同实现之间交换的公钥建议语法参见附录 A.1.1;实现内部的表现可以是不同的。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 指数,一个正

9、整数dQ 第二因子的 CRT 指数,一个正整数qInv 第一 CRT 系数,一个正整数ri 第 i 因子,一个正整数di 第 i 因子的 CRT 指数,一个正整数ti 第 i 因子的 CRT 系数,一个正整数在一个第一种方式描述的有效的 RSA 私钥内,RSA 模数和对应的 RSA 公钥中的模数一致,由 u 个独立的质数 ri,i=1,2,u(u=2)的乘积,RSA 私有指数d 是一个小于 n 的正整数满足 e d 1 (mod (n) ,其中 e 是公钥指数, (n)参照第 3.1 章的定义。在一个第二种方式描述的有效的 RSA 私钥内,因子 p 和 q 是 RSA 模数 n的前两个质数因子

10、(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)。如果 u2,描述还需要包含一个或者多个的三元组(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 的正整数 Riti 1 (mod ri) , 其中 Ri = r1 r

11、2 ri 1在不同实现之间交换的私钥建议语法参见附录 A.1.2;实现内部的表现可以是不同的。注释:1.此处 CRT 系数的定义遵从和使用了第五章描述的加纳算法。然而为了和PKCS#1 v.20 以及以前版本的描述兼容,p 和 q 的规则相对于其它的质数是颠倒的。因此CRT 系数 qInv 被定义为 q 模 p 的倒数,而不是 R1 模 r2 或者说是 p 模 q 的倒数。2.Quisquater and Couvreur 算法符合了中国余数算法带给 RSA 操作的好处。4.数据转化单元这个文档定义了两个数据转化单元 I2OSP整数到字节串单元 OS2IP 字节串到整数单元基于本文的目标,考虑

12、到 ASN.1 的语法,一个字节串是一个有序的八比特字节组成的。顺序从左到右,从到整数的转化考虑,在接着的转化单元中,第一个字节为最高有效字节。4.1 I2OSP(整数到字节串单元)I2OSP 转化一个非负整数为一个指定长度的字节串。I2OSP(x,xLen)输入: x待转化的非负整数xLen 预订的结果字节串的长度输出: X对应的长度为 xLen 的字节串错误: 整数太大了步骤:1.如果 x = 256xLen, 输出错误信息 “整数太大” 并结束2.将整数 x 写为基于 256 的唯一的 xLen 长度数字表示:x = x(xLen-1)256(xLen-1) + x(xLen-2)256

13、(xLen-2)+.+x0, 其中0=2,使得 mi=cdi mod ri, i=3,.,u3. 使得 h=(m1-m2)*qInv mod p4. 使得 m=m2 + q*h5. 如果 u2,使得 R=r1 并且从 i=3 到 u 开始做1.使得 R=R*ri-12.使得 h=(mi-m)*ti mod ri3.使得 m=m + R*h3.输出 m注释:2.a 步骤可以重写为一个单循环,由 p 和 q 的顺序反转。参见PKCS#1 V2.0,所以前两个质数 p 和 q 和其它扩展指数是区别对待的。5.2 签名和验签操作签名单元提供了在私钥控制下从消息产生一个签名的过程,一个验签单元在对应的公

14、钥的控制下,将消息从对应的签名中产生出来。本文定义的一对签名和验签操作为:RSASP1/RSAVP1.本单元和 IEEE1363-2000 中的 IFSP-RSA1/IFSP-RSA1 相同并且兼容PKCS#1 v1.5RSASP1 和 RSAVP1 除了名字和参数和 RSADP 和 RSAEP 不一致外,单元中用到的主要数学操作和加密解密一样为模幂;他们是由不同的目标区分的。5.2.1 RSASP1 RSASP1(K,m)输入输出流程等同于 RSADP5.2.2 RSAVP1RSAVP1(n,e),s)输入输出流程等同于 RSAEP6 方案综述方案联合了算法单元和其它的技术来实现特定的安全目

15、标。本文规定了两种类型的设计:加密方案和带填充的签名方案。本文中的设计定义仅包含操作方案中的 RSA 公钥或私钥的处理数据的步骤,不包含获得和验证密钥的过程。然而除了算法方案外,应用的典型操作还应该包含为 RSA 算法过程选择公私钥的密钥管理过程。这部分附加的操作和细节不在本文范围内。因为是作为一个数学单元,算法操作假设输入的特定条件是满足的,特别是 RSA 的公钥和私钥的有效性。因此,一个实现在密钥无效的情况下的操作是未定义的。这种未定义属性的处理由应用决定。解决密钥验证的可能手段,包含应用明确的密钥验证;公共密钥基础框架的密钥验证;以及追究产生无效密钥的操作的分配责任。一个总体上比较好的加

16、密的做法是在一个过程中使用一个给定的 RSA 密钥对。这就避免了一个设计的漏洞影响到其它部分安全的风险,对保证安全至关重要。虽然 RSAES-PKCS1-v1_5(7.2 章)和 RSASSA-PKCS1-v1_5(8.2 章)传统上被遗弃使用并且没有任何已知的坏的作用,但在新的应用中,这种类型的组合是不推荐的。举例来说明在多个过程中使用一个 RSA 密钥对的风险,假设一个 RSA 密钥对在 RSAES-OAEP(7.1)和 RSAES-PKCS1-v1_5 同时使用。尽管 RSAES-OAEP 是抗攻击的,但攻击者可以在 RSAES-PKCS1-v1_5 中找到弱点来把加密的消息恢复出来。另

17、外一个例子,假设一个 RSA 密钥对同时被 RSASSA-PSS 和 RSASSA-PKCS1-v1_5 使用。然后 RSASSA-PSS 的安全验证将不再是足够的,因为验证不考虑被第二个过程产生签名的可能性。基于类似的考虑,同一组密钥在此处定义的过程和其它地方定义的过程共享的时候,也有同样的问题。7 加密方案基于本文的目的,一个加密过程由一个加密操作和一个解密操作,加密操作使用接受到的公钥从一个消息产生一个密文,解密操作使用给定的 RSA 私钥将密文恢复为明文。加密过程可以在多种应用中使用,一个典型的应用是建立协议,消息包含着密钥数据秘密的从一方发给另外一方。具体的实例,PKCS#7 使用这

18、样的协议从发送者提交内容-加密密钥到接收者;次数定义的加密过程将会符合那个场景下的密钥-加密算法。本文定义了两个加密过程:RSAES-OAEP 和 RSAES-PKCS1-v1_5。RSAES-OAEP 建议在新的应用中使用;RSAES-PKCS1-v1_5 的包含仅仅是为了和现有的应用兼容,在新应用中不建议使用。此处定义的加密过程遵从类似 IEEE Std 1363-2000 的通用模型,包含在加密算法内的加密和解密单元。加密操作提供对消息提供编码操作其产生一个整数形式的编码消息。加密单元操作消息编码产生密文。相对于此,解密操作将密文恢复为转化为字节串的编码消息。消息解码操作将编码的消息恢复

19、为原始消息并且校验解密的正确性。为了避免实现在解码操作中的方式错误带来的实现弱点,RSAES-OAEP 和RSAES-PKCS1-v1_5 的解码操作嵌入在各自的规范里,而不是定义在其它规范中。两个加密过程都和 PKCS#1 v2.0 对应的过程兼容。7.1 RSAES-OAEPRSAES-OAEP 包含了 RSAEP 和 RSADP 单元(第 5.11 和 5.12 章)以及EME-OAEP 编码方法(7.1.1 step 1.b 和 7.1.2 step 3) 。EME-OAEP 基于 Bellare和 Rogaway 的最佳非对称加密方案。它和 IEEE Std 1363-2000 中的

20、 IFES 对应的加密和解密单元是 IFEP-RSA 和 IFDP-RSA,消息编码算法是 EME-OAEP 方案兼容。RSAES-OAEP 可以操作长度最大为 k-2hLen-2 个字节,hLen 是潜在的哈希输出的长度,k 是 RSA 模数的容器字节数。假设计算 e 的 th 次方模 n 是不可行的,并且 RSAES-OAEP 的掩码生成函数也有相应的属性,RSA 理论上对抵抗指定密文攻击是安全的。这个保证是可证实的,攻破 RSA-OAEP 的难度直接依赖于反推 RSA 函数的难度,提供的掩码函数可以被看作黑盒子或者随机数,见21有进一步的讨论。RSAES-OAEP 的加密和解密操作都使用

21、一个标签 L 的值作为输入。在这个PKCS#1 的版本中, L 是一个空串;其它标签的使用不在本文范围内。参照附录 A.2.1 相对的 ASN.1 语法。RSAES-OAEP 通过选择哈希函数和掩码生成函数来参数化。对于一个给定的 RSA 密钥,这个选择是固定的。建议的哈希和掩码生成函数见附录 B。7.1.1 加密操作RSAES-OAEP-ENCRYPT ( n, e), M, L )可选: Hash哈希函数(hLen 代表哈希函数的输出字节数 )MGF 掩码生成函数输入:(n,e) 输入的 RSA 公钥(k 代表 RSA 模数 n 的字节长度)M 待加密的数据, 一个长度为 mLen 的字节

22、串,并且 mLenk-2hLen-2,输出“消息太长”并中止。2.EME-OAEP 编码a.如果标签 L 没有提供,使得 L 为空串。使得 lHash=Hash(L),一个长度为hLen 的字节串。b.生成一个字节串 PS,由 k-mLen-2hLen-2 个字节零组成,PS 的长度有可能是 0。c.连接 lHash,PS,一个单字节值为 0x01 和消息 M,形成一个长度为 k-hLen-1 的字节串: DB = lHash | PS | 0x01 | Md.生成一个长度为 hLen 的随机字节串种子 seed。e.使得 dbMask = MGF(seed, k-hLen-1)f.使得 ma

23、skedDB = DB dbMask.g.使得 seedMask = MGF(maskedDB, hLen)h.使得 maskedSeed = seed seedMaski.级联值为 0x00 的单字节,maskedSeed,和 maskedDB 形成长度为 k 的消息 EM: EM = 0x00 | maskedSeed | maskedDB3.RSA 加密:a.转化消息 EM 为一个整数 m(参见 4.2 章) m = OS2IP(EM).b.使用 RSA 公钥(n,e)和消息 m 产生一个加密结果整数 c。 c = RSAEP(n,e),m).c.转化加密结果 c 为长度为 k 的加密数

24、据 C。C = I2OSP(c,k)d.输出密文 C7.1.2 解密操作RSAES-OAEP-DECRYPT (K , C, L )可选: Hash哈希函数(hLen 代表哈希函数的输出字节数 )MGF 掩码生成函数输入: K输入的 RSA 私钥(k 代表 RSA 模数 n 的字节数)C 待解密的密文,长度为 k 的字节串,k=2hLen+2L 可选的关联到验证的消息的标签,L 没提供的话,使用默认值空串。输出: M消息,一个长度为 mLen 的字节串,并且 mLen =n),输出“解密错误“并停止。c.转化消息 m 为 k 字节长度的字节串 EMEM = I2OSP(m,k)3.EME-OA

25、EP 解码a.如果标签 L 没有提供,使得 L 作为空串。使得 lHash = Hash(L), 一个长度为 hLen 的字节串。b.将编码消息 EM 切分为一个字节 Y,一个长度为 hLen 的字节串maskedSeed,和一个长度为 k-hLen-1 的字节串 maskedDBEM = Y | maskedSeed | maskedDBc.使得 seedMask = MGF(maskedDB, hLen)d.使得 seed = maskedSeed seedMaske.使得 dbMask = MGF(seed, k-h-1)f.使得 DB = maskedDB dbMaskg.将 DB 分

26、成长度为 lHash 的字节串,一个由 0 组成的填充串,和消息 MDB = lHash | PS | 0x01 | M如果没有值为 0x01 的数据将 PS 和 M 分隔开,如果 lHash 不等于 lHash,或者如果 Y 非零,输出“解密错误“并停止。4.输出消息 M。7.2 RSAES-PKCS1-v1_5RSAES-PKCS1-v1_5 包含 RSAEP 和 RSAEP 单元和 EME-PKCS1-v1_5 编码方法.它算术上等于 PKCS#1 v1.5 的加密算法。RSAES-PKCS1-v11+5 可以操作长度最大为 k-11 字节(k 是 RSA 模数 n 的字节长度) 。但应

27、小心在长数据加密过程中基于 Coppersmith, Franklin, Patarin, 和 Reiter的小指数 RSA 攻击。作为一般规则,此方案用于加密普通的消息,而不建议用于加密随机生成的密钥。它有一定概率成功的在不知道对应的明文的前提下产生有效的 RSAES-PKCS-v1_5 的密文。这个能力可能被密文选择性攻击利用。因此如果采用RSAES-PKCS1_v1_5,应采取一些容易实施的对策阻扰攻击。典型的例子是在数据中加入附加结构,在解密的消息中严格检查 PKCS#1 v1.5 的一致性(和其它冗余) 。并巩固在基于 PKCS#1 v1.5 的客户-服务协议中的错误消息。这些都可以

28、是不涉及改动 PKCS#1 v1.5 基础协议的有效的对策。这个问题的进一步讨论请参照7。最近展现出来的 SSL/TLS 的握手协议,就是使用 RSAES-PKCS1-v1_5 和若干对策解决 RSA 问题的一个变种。7.2.1 加密操作RSAES-PKCS1- V1_5-ENCRYPT (n, e), M)输入: (n,e)输入的 RSA 公钥(k 代表 RSA 模数 n 的字节长度)M 待加密的数据, 一个长度为 mLen 的字节串,并且 mLen k-11,输出“消息太长”并停止。2.EME-PKCS1-v1_5 编码:a.生成长度为 k-mLen-3 的字节串 PS 包含随机生成的非零

29、的伪随机数。PS的长度最小为 8 个字节。b.级联 PS,消息 M 和其它的填充组成长度为 k 的消息 EMEM = 0x00 | 0x02 | PS | 0x00 | M3.RSA 加密:a.转化消息 EM 为整数消息 m(参照 4.2 章)m = OS2IP(EM)b.使用 RSAEP 加密单元使用 RSA 公钥(n,e) 和消息 m 生成整数密文 c。c.转化整数 c 为长度为 k 的密文字节串。C = I2OSP(c,k)4.输出密文 C。7.2.2 解密操作RSAES-PKCS1- V1_5-D ECRYPT (K , C )输入: K输入的私钥C 待解密的密文,一个长度为 k 的字

30、节串,k 是 RSA 模数 n 的字节长度。输出: M消息,一个长度最多为 k-11 的字节串错误: “解密错误 “步骤:1.长度检查:如果 C 的长度不是 k 个字节, (或者 k=3.# exponent 是 di = d mod(ri-1)# coefficient 是 CRT 系数 ti = (r1*r2*.ri-1) mod ri注意:保护 RSA 私钥不被曝露和修改是非常重要的。这种保护的技术不在本文档的范围内。存储和派发私钥或其它密码数据的方法在 PKCS#12 和PKCS#15 中讨论。A.2 方案标识这章定义了加密和签名的对象标识。方案兼容于 PKCS#1 v1.5,和 PKCS#1 v1.5 有相同的定义。此处定义的应用在 X.509 证书和 PKCS#7 中包含。此处是 PKCS#1 OIDs 的类型标识PKCS1Algorithms ALGORITHM-IDENTIFIER :=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报