要求:利用所学的生成素数的算法,生成两个尽可能的素数,进一步实现RSA的加密算法。
a)简介
RSA公钥算法由 MIT 的Rivest, Shamir和Adleman在I978年提出来的。是被最广泛接受并实现的通用公钥密码算法,已成为公钥密码的国际标准。该算法的数学基础是初等数论中的欧拉定理,其安全性基于大整数因子分解的困难性。
b)算法流程
1)密钥的生成
1. 选择两个大素数 p和q,(p≠q,需要保密)
2. 计算n=p×q, j(n)=(p-1)×(q-1)
3. 选择整数 e 使 (j(n),e) =1, 1<e< j(n)
4. 计算d,使d=e-1 mod j(n),
得到:公钥为{e, n}; 私钥为{d}
2)加密(用e,n): 明文M<n, 密文C=M^e (mod n).
3)解密(用d,n): 密文C, 明文M =C^d (mod n)
c)算法实现
扩展欧几里得:
图4.1 扩展欧几里得
求模逆:
图4.2 求模逆
快速幂: