基本理论:基本概念:
给定一个正整数p,任意一个整数n,一定存在等式 n = kp + r ;
其中k、r是整数,且 0 ≤ r < p,称呼k为n除以p的商,r为n除以p的余数。
对于正整数p和整数a,b,定义如下运算:
取模运算:a % p(或a mod p),表示a除以p的余数。
模p加法:(a + b) % p ,其结果是a+b算术和除以p的余数,也就是说,(a+b) = kp +r,则(a + b) % p = r。
模p减法:(a-b) % p ,其结果是a-b算术差除以p的余数。
模p乘法:(a * b) % p,其结果是 a * b算术乘法除以p的余数。
说明:
同余式:正整数a,b对p取模,它们的余数相同,记做 a ≡ b % p或者a ≡ b (mod p)。
基本性质:(1)若p|(a-b),则a≡b (% p)。例如 11 ≡ 4 (% 7), 18 ≡ 4(% 7)
(2)(a % p)=(b % p)意味a≡b (% p)
(3)对称性:a≡b (% p)等价于b≡a (% p)
(4)传递性:若a≡b (% p)且b≡c (% p) ,则a≡c (% p)
运算规则模运算与基本四则运算有些相似,但是除法例外。其规则如下:
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
(a^b) % p = ((a % p)^b) % p (4)
结合率: ((a+b) % p + c) % p = (a + (b+c) % p) % p (5)
((a*b) % p * c)% p = (a * (b*c) % p) % p (6)
交换率: (a + b) % p = (b+a) % p (7)
(a * b) % p = (b * a) % p (8)
分配率: ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9)
重要定理若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(10)
若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(11)
若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),(a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p); (12)
若a≡b (% p),则对于任意的c,都有ac≡ bc (%p); (13)
RSA算法及证明
1. RSA定理证明:定理:设p,q是不同的素数,n=pq记φ(n)=(p-1)(q-1),如果e,d是与φ(n)互素的两个正整数(e,d<φ(n)),并满足ed≡1(mod φ(n)),则对于每个整数x,都有xed≡x(mod n)。
分析:为了证明xed≡x(mod n),只要证明φ(n)是xed-x的因数即可。又因为n=pq,而p,q都是素数,故只要证明p和q都是xed-x的因数即可,即
xed≡x(mod p) (1)
xed≡x(mod q) (2)
证明:证明式1,若p是x的因数则式1必然成立
若p不是x的因数,则由ed≡1(mod φ(n))得ed-1=k(p-1)(q-1),k为任意整数。则xed=xk(p-1)(q-1)+1 = x*(xp-1)k(q-1)
根据费马小定理因为x与p互素所以xp-1≡1(mod p)
所以xed≡x*(1)k(q-1) ≡x(mod p)
同理可证xed≡x(mod q)
2.RSA定理与RSA加密算法:RSA加密算法为:
(1) 取两个大素数p,q (保密);
(2) 计算 n=p*q(公开),φ(n)=(p-1)*(q-1) (保密);
(3) 随机选取整数e,满足 gcd(e, φ(n))=1 (e与φ(n)互素)(公开);
(4) 计算 d 满足 d*e≡1 (mod φ(n)) (保密); (d为e的逆元,可通过扩展的欧几里得算法进行求解)
(5) {e,n}为公钥,{d,n}为私钥,也可以用{e,d}表示密钥对
(6) 加密时c = xe mod n ;解密时 x = cd mod n
(7) 签名时c = xd mod n ;解密时 x = ce mod n
问题:为什么xed≡x(mod n) 就能保证(6)和(7)正确?
分析:解xed≡x(mod n)同余式方程,该方程可能有n个解,这n个解都在模n的同一个剩余类中,小于n的解只有一个,由于明文小于n,则该解即是明文x。而xed mod n得到的就是小于n的那个解。
另外,注意密文c并不等于xe而是c≡xe(mod n)。这里有上一段中我们知道要想求出明文x,解同余式方程xed≡x(mod n)可得,这时只要等式左边的数与X同余就能得到正确的明文。由于c≡xe(mod n),所以可得cd≡xed(mod n),所以cd≡xe(mod n)。
从另一个角度解释为什么RSA加密和解密过程是互逆的:将问题改为证明:A^e mod n = B^(e*d)mod n-----------1
即B^(e*d)mod n = B
其中A为密文,B为明文。 证明:因为ed+1=(p-1)(q-1)所以B^(e*d)=B^(k(p-1)(q-1)+1),
当B与n互素时,根据欧拉定理有:
B^(k(p-1)(q-1)+1) mod n
= B*B^ k(p-1)(q-1) mod n
= (B mod n )*((B^(p-1)(q-1))^k mod n)
= (B mod n ) * (((B^(p-1)(q-1)) mod n) ^ k ) mod n)
= B * (1^k mod n)
=B
当B与n不互素时,由于n=p*q,B必然能被p或者q整除,假设B=k*p,则B与q互素。再运用费马定理有:
B^(q-1) = 1 mod q,
则(B^(q-1))^(p-1)K = 1^(p-1)K mod q = 1 mod q,
即B^k(p-1)(q-1) mod q =1。
两边同时乘以B,得到
B^(k(p-1)(q-1)+1) mod q = B
也就是B^(e*d)mod n = B