作业要求如下图
RSA
先复习一下RSA密钥生成的过程:首选取两个互质数p和q,然后通过他俩相乘,p * q 得到 N,N=p*q
,这时我们需要计算出φ(N),φ(N)是小于或等于N的正整数中与N互质的数的数目。
我们通过φ(N)=(p-1)×(q-1)
可以快速计算出φ(N)。
然后,我们选择一个数e,满足以下两个条件,第一, 1<e<φ(N)
,第二,且e与φ(n) 互质。
接着,我们通过以下公式计算e的逆元d。
e*d ≡ 1 (mod φ(n))
这个公式简单来说就是e*d除以φ(N)得到的余数为1。
然后就计算完成,得到了私钥和公钥。
公布公钥KU={e,N}
保存私钥KR={d,N}
- 为什么q和p的选择是要安全素数?
答:首先,RSA的安全性依赖于大数的因子分解,而且涉及到一个乘法逆的问题。两个大质数的情况下乘法逆会有很多。而且为了安全,我们通常要求p和q应是大素数且他们的位数不要相差太远;gcd(p-1,q-1)应该要较小; p-1 和 q-1都应该要有一个比较大的素数因子,那么这个就是m和n。( 也就是满足p=2m+1可以提高他的安全性) - 公钥e的选择有什么要求?
如上所述,原则上e需要满足以下两个条件,第一,1<e<φ(N)
,第二,且e与φ(n) 互质。然后平时做题可以感觉到,一般选取的e都是从小向大选取的,也就是e一般都比较小。 - 私钥d的选择有什么要求?
私钥d是由e和φ(N)计算得来的。即选择的d必须与上述e一起,满足e*d ≡ 1 (mod φ(n))。 - 加密、签名对密钥有何不同的保护要求?
(1)加密密钥
加密密钥对由加密公钥和解密私钥组成。其中,解密私钥应该进行备份和存档,以便能在任何时候解密历史密文数据,而加密公钥则无需备份和存档,加密公钥丢失时,只需重新生成密钥对即可。
(2)签名密钥
签名私钥是发送方身份的证明。
用做数字签名的这一对密钥一般可以有较长的生命期。
签名密钥由签名私钥和验证公钥组成,其中,签名私钥绝对不允许做备份和存档,丢失后只需重新生成新的密钥对。而验证公钥需要存档,用于验证旧的数字签名。