PKCS#1:RSA加密 版本1.5( 三 )

<2^(8k) 。模数长度
k必须是至少12个字节,使之适应此文档中的块格式(见第8章) 。
注重:
(1) 公开模数在非凡应用程序中可以是标准化的 。在X.509的附录C中提到使用3
或65537可以有一些实际的好处 。
(2) 为了使模数n的因数分解更困难,可以考虑一些额外的选择素数的条件 。这些
保障安全的条件超出了此文档的论述范围 。长度k的下限是为了适应块格式,
并不是为了保障安全 。
7、密钥语法
此章节给出了RSA公钥和私钥的语法
7.1公钥语法
一个RSA公钥需要有ASN.1的RSAPublicKey类型:
RSAPublicKey::=SEQUENCE{
modulusINTEGER,--n
publicEXPonentINTEGER--e}
(这个类型被定义于X.509中,保留在此处是为了兼容性 。)
RSAPublicKey类型的字段有下列含义:
modulus是模数n;
publicExponent是公开指数e 。
7.2私钥语法
一个RSA私钥有一个ASN.1的RSAPrivateKey类型:
RSAPrivateKey::=SEQUENCE{
versionVersion,
modulusINTEGER,--n
publicExponentINTEGER,--e
privateExponentINTEGER,--d
prime1INTEGER,--p
prime2INTEGER,--q
exponent1INTEGER,--dmod(p-1)
exponent2INTEGER,--dmod(q-1)
coefficientINTEGER--(inverseofq)modp}
Version::=INTEGER
RSAPrivateKey类型的字段有下列含义:
? version是一个为兼容将来此文档的修改的版本号 。为了适应此文档的版本它
应该是0;
? modulus是模数n;
? publicExponent是公开指数e;
? privateExponent是私人指数d;
? prime1是组成模数n的一个素数p;
? prime2是组成模数n的一个素数q;
? exponent1是dmod(p-1);
? exponent2是dmod(q-1);
? coefficient是中国剩余理论中的系数q-1modp 。
注重:
(1) 一个RSA私钥逻辑上仅包含模数n和私人指数d 。p,q,dmod(p-1),d
mod(p-1)和q-1modp的出现是为了提高效率,正如Quisquater和Couvreur
显示在[QC82]中 。假如公钥知道的话,按照Miller[Mil76]的结果,一个不
包含其他值的私人密钥语法是很轻易转化成此处定义的语法 。
(2) 公开指数e的出现是为了可以轻易的从私钥中得到公钥 。
8、加密过程
此章节描述了RSA的加密过程 。
加密过程包括4个步骤:加密块格式化,8位字符串到整数的转化,RSA计算,整数
到8位字符串的转化 。加密过程的输入为数据8位字符串,模数n,指数c 。对于公钥操作
来说,整数c是实体的公开指数e;对于私钥操作来说,整数c是实体的私人指数d 。加密
过程的输出为被加密的数据,一个8位字符串ED 。
数据D的长度不应该长于k-11个8位字节,其必为正数,因为模数的长度k是至少
12个8位字节 。这种限制保证了填充串PS的长度至少为8个8位字节,这是一项安全措施 。
注重:
(1) 在此文档的对于加密内容加密密钥和消息散列的典型应用中,D<=30 。这样
RSA模数的长度至少需要328位(41个8位字节),这是合理的,并且和安全
建议是一致的 。
(2) 假如被加密的数据在传输中被破坏,加密过程并不提供一个帮助错误侦察的外
在的完整性检查 。然而,加密块的结构保证了破坏没被检查出的可能性小于
2-16,这是一个随机加密块看起来像类型2的可能性的上限 。
(3) 定义在此的对于除了包含一个消息散列的8位字节串的数据的私钥操作的应用
并不被推荐,需要更多的研究 。
(4) 此文档可以被扩展,来控制长度长于k-11个8位字节串
8.1加密块格式化
加密块是一个8位字节串EB,由块标记BT,填充块PS和数据D组成 。

推荐阅读