互质的一些特征:
1. 任意两个质数构成互质关系,比如13和61。
2. 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10。
3. 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。
4. 1和任意一个自然数是都是互质关系,比如1和99。
5. p是大于1的整数,则p和p-1构成互质关系,比如57和56。
6. p是大于1的奇数,则p和p-2构成互质关系,比如17和15。
欧拉函数:
欧拉函数是少于或等于n的数中与n互质的数的数目。例如φ(8)=4,因为1,3,5,7均和8互质。
同余的概念:
如果存在一个正整数m与两个整数a,b,如果a-b能够被m整除,那么a和b模m同余。记为:a≡b(mod m)
模指数运算:
先做指数运算,取其结果再做模运算。例如,python中 pow(3,3,11)的结果是5
欧拉定理,暂不证明:
如果a,n互质,则pow(a, φ(n))≡1(mod n)
或者说,a的φ(n)次方减去1,可以被n整除。
模反元素:
如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除。
ab≡1(mod n)。
因为:
pow(a, φ(n))≡1(mod n)
a*pow(a, φ(n)-1)≡1(mod n)
所以b=pow(a, φ(n)-1)
暂不证明的内容:
如果n可以分解成两个互质的整数之积,n=p*q,则φ(n)=φ(p*q)=φ(p)*φ(q)
1. 选择两个大质数 p, q。
2. 计算 n = p*q
2. 计算 φ(n) = (p-1)(q-1)。因为p,q互质,所以φ(n)=φ(p*q)=φ(p)*φ(q),又因为p和q都是质数,所以φ(p)*φ(q)=(p-1)*(q-1)。
4. 找出一个与φ(n)互质的数e,且 1<e<φ(n)。(实际应用中,e常常选择65537)。
5. 计算d,使得d*e≡1(mod φ(n))。(可以利用扩展欧几里得算法)。
公钥:{e, n} 私钥:{d, n}
加密操作:
c≡pow(m, e, n)
解密操作:
m=pow(c, d, n)
其他:
有无可能在已知n和e的情况下,推导出d?
(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有将n因数分解,才能算出p和q。
对于比较小的n进行因数分解是比较容易的,比如3233=61*53,但是对大整数进行因数分解是比较困难的,目前只有暴力破解方法。
在线质分解因数: http://www.factordb.com
质因数分解工具:yafu
生成私钥:
openssl genrsa -out private.pem 1024
根据私钥生成公钥:
openssl rsa -in private.pem -pubout -out public.pem
查看私钥:
openssl rsa -in private.pem -text
查看公钥:
openssl rsa -in public.pem -pubin -text