RSA加密
算法:
- 选择两个素数p,q
- 计算n=p×q
- 计算λ(n) = lcm(λ(p),λ(q)) = lcm(p-1,q-1)
- 选择e满足:1<e<λ(n) 且 gcd(e, λ(n)) = 1,即e和λ(n)互质
- 计算d满足:d×e≡1(mod λ(n))
公钥:n 和 e
私钥:d
加密:
Alice想要向Bob发送信息M
- 获取Bob的公钥n和e
- 将信息M分割转化为若干整数
- 对每一个整数m,计算密文c满足:c≡ (mod n)
- 将密文发送给Bob
解密:
- 用自己的私钥d对每一段密文c计算明文m满足:m≡ (mod n)
- 拼接明文获取信息
示例:
计算密钥公钥:
- 取p=61,q=53
- n=61×53=3233
- λ(3233)=lcm(λ(61),λ(53))=lcm(60,52)=780
- 取e=17
- 计算d=413
- 密钥d:413,公钥(n,e)=(3233,17)
加密:
- 明文取m=65
- 计算c满足:c≡ (mod n) 得c=2790
解密:
- 有密文c=2790
- 计算m满足:m≡ (mod n) m=65
原理:
证明基于费马小定理:对任意的整数a和不能整除a的素数p有, ≡ 1 (mod p)
解密时:m≡≡ (mod n)
只需证明:
只需证明:和同时成立
对于所有的整数m,由于p和q是不同的素数,e和d是满足ed ≡ 1 (mod λ(pq))的正整数,λ(pq) = lcm(p − 1, q − 1)可以被p-1和q-1整除,有
其中h和k是非负整数
利用费马小定理将 (mod p) = 1.
同理
得证
破解:
破解者将有公钥(n,e)和密文c
因为d×e≡1 (mod n)将得到多个d,而不确定到底是哪一个
目前最有效的方式是对整数n进行分解,分解为两个素因子p和q,再进行标准的流程进行解密
目前没有找到在常规计算机上多项式时间的分解算法,但是也没有证明这样的算法是不存在的