PKCS#1v21RSA密码学规范Word文档下载推荐.docx
- 文档编号:22566942
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:41
- 大小:34.67KB
PKCS#1v21RSA密码学规范Word文档下载推荐.docx
《PKCS#1v21RSA密码学规范Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PKCS#1v21RSA密码学规范Word文档下载推荐.docx(41页珍藏版)》请在冰豆网上搜索。
emBits一个编码消息EM的比特长度
emLen一个编码消息EM的字节长度
GCD两个正整数的最大公约数
Hash哈希函数
hLen哈希函数Hash输出的字节长度
kRSA模数n的字节长度
KRSA私钥
L可选的RSAES-OAEP标签,一个字节串
LCM一系列正整数的最小公倍数
m消息标识,一个0到n-1的整数
M消息,一个字节串
maskMGF的输出,一个字节串
mgfSeedmask生成的种子,一个字节串
mLen消息M的字节长度
nRSA模数,n=r1*r2*....ru,u>
=2
(n,e)RSA公钥
p,qRSA模数n的第一分解因子
qinvCRT西数,一个小于p的正整数,满足q.qinv≡1(modp)
riRSA模数的主因子,包含r1=p,r2=q,如果有的话也包含额外的因子。
s签名标志,一个0到n-1整数
S签名,一个字节串
sLenEMSA-PSS的字节长度
tiri的CRT系数的附加质数,一个小于ri的正整数,满足r1*ri*....*ri-1*ti≡1(modri),i=3,.....u
uRSA模数的主因子个数,u大于等于2
x一个正整数
Xx的字节串
xLenX的字节串长度
0x一个字节或者一个字节串的十六进制标识;
"
0x48"
意味着十六进制的值48;
(0x)48090e"
意味着由3个连续的十六进制值48,09,03组成的字节串
λ(n)r1-1,r2-1,ru-1的最小公倍数
⊕两个字节串异或
[.]上限函数,一个大于等于实数x的最小整数
||连接符
≡全等符号;
a≡b(modn)意思是n可以被整数a-b整除
注释。
CRT可以使用回调或者非回调的方式提供,本文参照了加纳算法使用的回调算法。
参见3.2章的注释1.
3密钥类型
这个文档的算法和单元提供了两种密钥类型:
RSA公钥和RSA私钥。
RSA公钥和RSA私钥合在一起称为RSA密钥对。
这个规范支持号称“多质数”的可以有两个以上质数因子的RSA模数。
多模数的RSA的好处是使用CRT(中国余数算法)的时候是解密和签名运算具有更低的计算代价。
在单处理器平台就可以获得很好的表现,并且在多处理器平台上面会有很大的提升,因为可以并行的调用模幂运算。
关于多个质数对RSA算法安全的影响的讨论,参见注释[49]
3.1RSA公钥
基于这个文档的目标,一个RSA公钥由两个组件组成:
nRSA模数,一个正整数
eRSA公共指数,一个正整数
在一个有效的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)。
按惯例,前两个质数r1和r2也可以被分别的定义为p和q。
在不同实现之间交换的公钥建议语法参见附录A.1.1;
实现内部的表现可以是不同的。
3.2RSA私钥
基于这个文档的目标,一个RSA私钥可以有如下两种标识方式:
1.第一种标识方式由(n,d)对组成,其中组件意义如下:
dRSA私有指数,一个正整数
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模数和对应的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的前两个质数因子(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(modp)。
如果u>
2,描述还需要包含一个或者多个的三元组(ri,di,ti),i=3,...,u.ri因子是RSA模数n的附加质数因子,每个CRT指数di(i=3,...,u)
di≡1(mod(ri–1)).
每个CRT系数ti(i=3,...,u)是一个小于ri的正整数Ri·
ti≡1(modri),其中Ri=r1·
r2·
…·
ri–1
在不同实现之间交换的私钥建议语法参见附录A.1.2;
注释:
1.此处CRT系数的定义遵从和使用了第五章描述的加纳算法。
然而为了和PKCS#1v.20以及以前版本的描述兼容,p和q的规则相对于其它的质数是颠倒的。
因此
CRT系数qInv被定义为q模p的倒数,而不是R1模r2或者说是p模q的倒数。
2.QuisquaterandCouvreur算法符合了中国余数算法带给RSA操作的好处。
4.数据转化单元
这个文档定义了两个数据转化单元
I2OSP
整数到字节串单元
OS2IP字节串到整数单元
基于本文的目标,考虑到ASN.1的语法,一个字节串是一个有序的八比特字节组成的。
顺序从左到右,从到整数的转化考虑,在接着的转化单元中,第一个字节为最高有效字节。
4.1I2OSP(整数到字节串单元)
I2OSP转化一个非负整数为一个指定长度的字节串。
I2OSP(x,xLen)
输入:
x
待转化的非负整数
xLen预订的结果字节串的长度
输出:
X
对应的长度为xLen的字节串
错误:
整数太大了
步骤:
1.如果x>
=256^xLen,输出错误信息“整数太大”并结束
2.将整数x写为基于256的唯一的xLen长度数字表示:
x=x(xLen-1)256^(xLen-1)+x(xLen-2)256^(xLen-2)+...+x0,其中0=<
xi<
=256(注意如果x小于256^(xLen-1),将会有一个或者多个的引导数为零)。
3.设字节Xi为X(xLen-i)的值。
i从1到xLen,输出字节串:
X=X1X2...X(xLen)
4.2OS2IP(字节串到整数单元)
OS2IP转化一个字节串到一个非负整数。
OS2IP(X)
待转化的字节串
对应的正整数
1.使得X的字节X1X2...X(xLen)从左到右,并使得整数值作为x(xLen-i)1<
=i<
=xLen。
2.使得x=x(xLen-1)256^(xLen-1)+x(xLen-2)256^(xLen-2)+...+x0
3.输出x。
5.算法单元
算法单元是在具体加密算法使用的基础数学操作。
它被假定为通过硬件或者软件模块实现,而不提供算法安全无关的逻辑。
本文中定义了四种类型的单元,成对的方式组织为:
加密和解密;
签名和验签。
单元的规范假定输入条件满足特定规定,并且RSA的公钥和私钥是有效的。
5.1加密和解密单元
一个加密单元在公钥的控制下从输入消息产生一个密文,并且解密单元在对应私钥的控制下将密文恢复为明文。
在本文中定义的:
RSAEP/RSADP中使用了一对加密和解密单元。
RSAEP和RSADP使用了不同密钥输入下的相同的数学操作。
此处定义的单元和IEEE规范中的IFEP-RSA/IFDP-RSA是相同的,并且兼容PKCS#1v1.5
单元中用到的主要数学操作是模幂。
5.1.1RSAEP
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=m^emodn
3.输出c
5.1.2RSADP
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=c^dmodn
b.如果K使用第二种方式(p,q,dP,dQ,qInv)和(ri,di,ti),流程如下:
1.使得m1=c^dPmodp,m2=c^dQmodq
2.如果u>
2,使得mi=c^dimodri,i=3,...,u
3.使得h=(m1-m2)*qInvmodp
4.使得m=m2+q*h
5.如果u>
2,使得R=r1并且从i=3到u开始做
1.使得R=R*ri-1
2.使得h=(mi-m)*timodri
3.使得m=m+R*h
3.输出m
2.a步骤可以重写为一个单循环,由p和q的顺序反转。
参见PKCS#1V2.0,所以前两个质数p和q和其它扩展指数是区别对待的。
5.2签名和验签操作
签名单元提供了在私钥控制下从消息产生一个签名的过程,一个验签单元在对应的公钥的控制下,将消息从对应的签名中产生出来。
本文定义的一对签名和验签操作为:
RSASP1/RSAVP1.
本单元和IEEE1363-2000中的IFSP-RSA1/IFSP-RSA1相同并且兼容PKCS#1v1.5
RSASP1和RSAVP1除了名字和参数和RSADP和RSAEP不一致外,单元中用到的主要数学操作和加密解密一样为模幂;
他们是由不同的目标区分的。
5.2.1RSASP1
RSASP1(K,m)
输入输出流程等同于RSADP
5.2.2RSAVP1
RSAVP1((n,e),s)
输入输出流程等同于RSAEP
6方案综述
方案联合了算法单元和其它的技术来实现特定的安全目标。
本文规定了两种类型的设计:
加密方案和带填充的签名方案。
本文中的设计定义仅包含操作方案中的RSA公钥或私钥的处理数据的步骤,不包含获得和验证密钥的过程。
然而除了算法方案外,应用的典型操作还应该包含为RSA算法过程选择公私钥的密钥管理过程。
这部分附加的操作和细节不在本文范围内。
因为是作为一个数学单元,算法操作假设输入的特定条件是满足的,特别是RSA的公钥和私钥的有效性。
因此,一个实现在密钥无效的情况下的操作是未定义的。
这种未定义属性的处理由应用决定。
解决密钥验证的可能手段,包含应用明确的密钥验证;
公共密钥基础框架的密钥验证;
以及追究产生无效密钥的操作的分配责任。
一个总体上比较好的加密的做法是在一个过程中使用一个给定的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中找到弱点来把加密的消息恢复出来。
另外一个例子,假设一个RSA密钥对同时被RSASSA-PSS和RSASSA-PKCS1-v1_5使用。
然后RSASSA-PSS的安全验证将不再是足够的,因为验证不考虑被第二个过程产生签名的可能性。
基于类似的考虑,同一组密钥在此处定义的过程和其它地方定义的过程共享的时候,也有同样的问题。
7加密方案
基于本文的目的,一个加密过程由一个加密操作和一个解密操作,加密操作使用接受到的公钥从一个消息产生一个密文,解密操作使用给定的RSA私钥将密文恢复为明文。
加密过程可以在多种应用中使用,一个典型的应用是建立协议,消息包含着密钥数据秘密的从一方发给另外一方。
具体的实例,PKCS#7使用这样的协议从发送者提交内容-加密密钥到接收者;
次数定义的加密过程将会符合那个场景下的密钥-加密算法。
本文定义了两个加密过程:
RSAES-OAEP和RSAES-PKCS1-v1_5。
RSAES-OAEP建议在新的应用中使用;
RSAES-PKCS1-v1_5的包含仅仅是为了和现有的应用兼容,在新应用中不建议使用。
此处定义的加密过程遵从类似IEEEStd1363-2000的通用模型,包含在加密算法内的加密和解密单元。
加密操作提供对消息提供编码操作其产生一个整数形式的编码消息。
加密单元操作消息编码产生密文。
相对于此,解密操作将密文恢复为转化为字节串的编码消息。
消息解码操作将编码的消息恢复为原始消息并且校验解密的正确性。
为了避免实现在解码操作中的方式错误带来的实现弱点,RSAES-OAEP和RSAES-PKCS1-v1_5的解码操作嵌入在各自的规范里,而不是定义在其它规范中。
两个加密过程都和PKCS#1v2.0对应的过程兼容。
7.1RSAES-OAEP
RSAES-OAEP包含了RSAEP和RSADP单元(第5.11和5.12章)以及EME-OAEP编码方法(7.1.1step1.b和7.1.2step3)。
EME-OAEP基于Bellare和Rogaway的最佳非对称加密方案。
它和IEEEStd1363-2000中的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通过选择哈希函数和掩码生成函数来参数化。
对于一个给定的RSA密钥,这个选择是固定的。
建议的哈希和掩码生成函数见附录B。
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没有提供,默认的值是空串
C加密输出,长度为k的字节串
“消息太长”;
“标签太长”
假设:
RSA公钥(n,e)是有效的。
操作:
1.长度检查
a.如果L的长度超过了哈希函数的输入限制(SHA-1是2^61-1字节),输出"
标签太长“并中止。
b.如果mLen>
k-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||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为一个整数m(参见4.2章)
m=OS2IP(EM).
b.使用RSA公钥(n,e)和消息m产生一个加密结果整数c。
c=RSAEP((n,e),m).
c.转化加密结果c为长度为k的加密数据C。
C=I2OSP(c,k)
d.输出密文C
7.1.2解密操作
RSAES-OAEP-DECRYPT(K,C,L)
输入的RSA私钥(k代表RSA模数n的字节数)
C待解密的密文,长度为k的字节串,k>
=2hLen+2
L可选的关联到验证的消息的标签,L没提供的话,使用默认值空串。
M
消息,一个长度为mLen的字节串,并且mLen<
“解密错误”
a.如果L的长度大于哈希函数的输入限制,输出“解密错误”并停止。
b.如果密文C的长度不是k个字节,输出“解密错误”并停止。
c.如果k<
2hLen+2,输出“解密错误”并停止。
2.RSA解密
a.转化密文C为整数形式c(参见第4.2章)
c=OS2IP(C)
b.使用RSADP解密单元使用私钥K将密文c产生整数消息m:
m=RSADP(K,c)
如果RSADP输出“解密数据越界”(c>
=n),输出"
解密错误“并停止。
c.转化消息m为k字节长度的字节串EM
EM=I2OSP(m,k)
3.EME-OAEP解码
a.如果标签L没有提供,使得L作为空串。
使得lHash=Hash(L),一个长度为hLen的字节串。
b.将编码消息EM切分为一个字节Y,一个长度为hLen的字节串maskedSeed,和一个长度为k-hLen-1的字节串maskedDB
EM=Y||maskedSeed||maskedDB
c.使得seedMask=MGF(maskedDB,hLen)
d.使得seed=maskedSeed⊕seedMask
e.使得dbMask=MGF(seed,k-h-1)
f.使得DB=maskedDB⊕dbMask
g.将DB分成长度为lHash的字节串,一个由0组成的填充串,和消息M
DB=lHash'
||PS||0x01||M
如果没有值为0x01的数据将PS和M分隔开,如果lHash不等于lHash'
,或者如果Y非零,输出“解密错误“并停止。
4.输出消息M。
7.2RSAES-PKCS1-v1_5
RSAES-PKCS1-v1_5包含RSAEP和RSAEP单元和EME-PKCS1-v1_5编码方法.它算术上等于PKCS#1v1.5的加密算法。
RSAES-PKCS1-v11+5可以操作长度最大为k-11字节(k是RSA模数n的字节长度)。
但应小心在长数据加密过程中基于Coppersmith,Franklin,Patarin,和Reiter的小指数RSA攻击。
作为一般规则,此方案用于加密普通的消息,而不建议用于加密随机生成的密钥。
它有一定概率成功的在不知道对应的明文的前提下产生有效的RSAES-PKCS-v1_5的密文。
这个能力可能被密文选择性攻击利用。
因此如果采用RSAES-PKCS1_v1_5,应采取一些容易实施的对策阻扰攻击。
典型的例子是在数据中加入附加结构,在解密的消息中严格检查PKCS#1v1.5的一致性(和其它冗余)。
并巩固在基于PKCS#1v1.5的客户-服务协议中的错误消息。
这些都可以是不涉及改动PKCS#1v1.5基础协议的有效的对策。
这个问题的进一步讨论请参照[7]。
最近展现出来的SSL/TLS的握手协议,就是使用RSAES-PKCS1-v1_5和若干对策解决RSA问题的一个变种。
7.2.1加密操作
RSAES-PKCS1-V1_5-ENCRYPT((n,e),M)
输入的RSA公钥(k代表RSA模数n的字节长度)
=k-11
C
密文,长度为k的字节串
“消息太长”
1.长度检查:
如果mLen>
k-11,输出“消息太长”并停止。
2.EME-PKCS1-v1_5编码:
a.生成长度为k-mLen-3的字节串PS包含随机生成的非零的伪随机数。
PS的长度最小为8个字节。
b.级联PS,消息M和其它的填充组成长度为k的消息EM
EM=0x00||0x02||PS||0x00||M
a.转化消息EM为整数消息m(参照4.2章)
m=OS2IP(EM)
b.使用RSAEP加密单元使用RSA公钥(n,e)和消息m生成整数密文c。
c.转化整数c为长度为k的密文字节串。
4.输出密文C。
7.2.2解密操作
RSAES-PKCS1-V1_5-DECRYPT(K,C)
输入的私钥
C待解密的密文,一个长度为k的字节串,k是RSA模数n的字节长度。
消息,一个长度最多为k-11的字节串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PKCS v21RSA 密码学 规范