RSA算法
参考源自阮一峰的网络日志
互质
两个整数互质可以分为两种情况:
1. 两个数均为质数
2. 其中一个为质数
3. p为大于1的整数,与p-1互质
4. p为大于1的奇数,与p-2互质
欧拉函数
函数性质:
1.
ϕ(1)=1
2.
当n为质数时,ϕ(n)=n−1
3. 当n为质数的某次方时,
即n=pk,则ϕ(n)=pk−pk−1
,这是因为只有当一个数不包含p因子时,才可能与n互质,而包含质数p的因子一共有
pk−1个,即1∗p,2∗p,3∗p,...,pk−1∗p
, 把它们去除,剩下的就是与n互质的数, 也可以写为
ϕ(n)=pk(1−1p)
4. 如果n可以分解成两个互质的整数之积,
n=p1∗p2,则ϕ=ϕ(p1∗p2)=ϕ(p1)ϕ(p2)=(p−1)(q−1)
证明
5. 对于任意一个大于1的正整数,都可以写成一些列质数之积
n=pk11∗pk22∗pk33∗...∗pkrr
,根据第4条结论知
ϕ(n)=ϕ(pk11)ϕ(pk22)ϕ(pk33)...ϕ(pkrr)=pk11pk22pk33...pkrr(1−1p)(1−1p1)(1−1p2)(1−1p3)...(1−1pr)
Euler’s theorem:
如果a与n互质, 且已知n的Euler函数 ϕ(n) ,则,
aϕ(n)≡1 (mod n)
Fermat’s little theorem:
假设a与质数p互质,由结论2知 ϕ(p)=p−1 ,则由Euler定理知
aϕ(p)=ap−1≡1 (mod n)
Modular multiplicative inverse(模反元素):
ab≡1 (mod n)
即 如果两个正整数a与n互质,则一定可以找到整数b,使得(ab - 1)能够被n整除。或者说(ab-1)除以n的余数为1,此时b称为a的模反元素。
模反元素必定存在,因为
aϕ(n)=a∗aϕ(n−1)≡1 mod n
即 aϕ(n−1)为a 的模反元素
RSA密码算法
对于一个数据块,记为M,加密之后的文本块记为C,公钥为(e,n),私钥为(d,n)则
加密过程:
C=Me mod n
解密过程:
M=Cd mod n
RSA算法设计步骤
- step1 随机选择两个不相等的质数p,q,计算
n=p∗q
- step2 计算n的欧拉函数
ϕ(n)=(p−1)(q−1)
- step3 随机选择一个整数e,条件是
1<e<ϕ(n),且e与ϕ(n)互质
- step4 计算e对于
ϕ(n)的模反元素d
ed≡1 (mod ϕ(n))
ed−1=kϕ(n)
这个方程可以用 扩展欧几里得算法求解