RSA算法

RSA算法

参考源自阮一峰的网络日志

互质
两个整数互质可以分为两种情况:
1. 两个数均为质数
2. 其中一个为质数
3. p为大于1的整数,与p-1互质
4. p为大于1的奇数,与p-2互质

欧拉函数

ϕ(n):0nn

函数性质:
1. ϕ(1)=1
2. nϕ(n)=n1
3. 当n为质数的某次方时, n=pk,ϕ(n)=pkpk1 ,这是因为只有当一个数不包含p因子时,才可能与n互质,而包含质数p的因子一共有 pk1,1p,2p,3p,...,pk1p , 把它们去除,剩下的就是与n互质的数, 也可以写为 ϕ(n)=pk(11p)
4. 如果n可以分解成两个互质的整数之积, n=p1p2,ϕ=ϕ(p1p2)=ϕ(p1)ϕ(p2)=(p1)(q1) 证明
5. 对于任意一个大于1的正整数,都可以写成一些列质数之积 n=pk11pk22pk33...pkrr ,根据第4条结论知
ϕ(n)=ϕ(pk11)ϕ(pk22)ϕ(pk33)...ϕ(pkrr)=pk11pk22pk33...pkrr(11p)(11p1)(11p2)(11p3)...(11pr)

Euler’s theorem:

如果a与n互质, 且已知n的Euler函数 ϕ(n) ,则,

aϕ(n)1 (mod n)

Fermat’s little theorem:

假设a与质数p互质,由结论2知 ϕ(p)=p1 ,则由Euler定理知

aϕ(p)=ap11 (mod n)

Modular multiplicative inverse(模反元素):

ab1 (mod n)

即 如果两个正整数a与n互质,则一定可以找到整数b,使得(ab - 1)能够被n整除。或者说(ab-1)除以n的余数为1,此时b称为a的模反元素。
模反元素必定存在,因为
aϕ(n)=aaϕ(n1)1 mod n

aϕ(n1)a 的模反元素

RSA密码算法

对于一个数据块,记为M,加密之后的文本块记为C,公钥为(e,n),私钥为(d,n)则
加密过程:

C=Me mod n

解密过程:
M=Cd mod n

RSA算法设计步骤
- step1 随机选择两个不相等的质数p,q,计算 n=pq
- step2 计算n的欧拉函数 ϕ(n)=(p1)(q1)
- step3 随机选择一个整数e,条件是 1<e<ϕ(n),eϕ(n)
- step4 计算e对于 ϕ(n)d

ed1 (mod ϕ(n))

ed1=kϕ(n)

这个方程可以用 扩展欧几里得算法求解

你可能感兴趣的:(Linux,C)