RSA公钥密码算法
安全性:RSA的安全性建立在“大数分解和素性检测”这一已知的著名数论难题的基础上,即:将两个大素数相乘在计算上很容易实现,但将该乘积分解为两个大素数因子的计算量是相当巨大的。
- 生成公钥:
选择两个互异的大素数p、q |
---|
计算n=p*q |
φ(n)=(p-1)*(q-1) φ(n)>1 |
欧拉函数φ(n):表示小于等于n的正整数中与n互质的数的数目。特别地,因为1和和任何数的公因数都只有1,所以,1和任何数都互质。
选择一个正数e(1<e<φ(n)) |
---|
(e,φ(n)) = 1即 e和φ(n)互质 |
Kp = (n,e) 公钥 |
2.生成私钥 求出正数d
e*d = 1 mod φ(n) | |
---|---|
Ks = (d,p,q) 私钥 |
mod运算:即求余数运算,求一个整数x除以另一个整数y的余数,与商无关。
3.加密(明文M)
C = EKp(M)= M^e mod n
4.解密(密文C)
M = DKs (C)= C^d mod n
为避免选取容易分解的整数n,应注意:
①p和q长度不能相差太多
②p-1和q-1都应该包含大的素因子
③p-1和q-1的最大公因子要尽可能小
且为了保证RSA的安全,n的长度为1024~2048bit是比较合理的。