RSA正确性所需要的数论知识
-
欧拉函数
φ(n)表示:小于n的正整数中与n互质的数的数目。(互质表示公因数为1)
若 p 是素数,则 φ§ = p - 1
所以如果n能写作两个不同质数 p 与 q 的乘积,n=pq可以推出
φ(n)=φ(pq)=φ§φ(q)=(p-1)(q-1) -
欧拉公式
如果a和n互素,即gcd(a,n)=1,则a^φ(n) ≡ 1 mod n -
同余式
两个数A,B除以C余数相同,我们可以写成
23 ≡ 65(mod 7)
23 ≡ 2(mod 7)
65 ≡ 2(mod 7)
准确说:如果a=b+km的话,a ≡ b(mod m)
同余式的性质:
1)若a ≡ b(mod m)、c ≡ d(mod m),则a+c ≡ b+d(mod m)
2)若a ≡ b(mod m)、c ≡ d(mod m),则ac ≡ bd(mod m)
- 乘法逆元
如果ab ≡ 1(mod m),则称a和b为关于m互为乘法逆元。
已知a求b的方法:
因为ab ≡ 1(mod m),所以不妨设ab+mk=1,其中a和m为已知数。
可以利用扩展欧几里得算法,可以在多项式时间内,计算出来一个乘法逆元b。
(事实上,b的解不唯一,这里只是求出了一个b。)
参数设置
1)p和q大素数,n=pq φ(n)=(p-1)(q-1)
选取e,1<e<φ(n),gcd(e,φ(n))=1
de ≡ 1(mod φ(n))
2)由于e和φ(n)互素,所以根据欧拉公式,一定存在乘法逆元(如a^(φ(n)-1))
公钥:{e,n}
私钥:{d,n}
RSA加密解密过程
将明文比特串分组,使得每个分组对应的十进制数 小于n ,即分组长度小于 log2n 。
加密: c ≡ me mod n
解密:m ≡ cd mod n
RSA正确性证明
m ≡ cd mod n = (me)d mod n
≡ med mod n ≡ mkφ(n)+1 mod n
(e*d ≡1 mod φ(n) ed = kφ(n)+1 )
所以只需要证明 m ≡ mkφ(n)+1 mod n
1)如果m和n互素,且知m<n,m mod n = m
根据欧拉公式
mφ(n) ≡ 1 mod n
根据同余式的性质,
mkφ(n) ≡ 1 mod n
m mod n = m
mkφ(n)+1 ≡ m mod n
2)如果m和n不互素,因为m<n,且n只有两个因子,p和q,所以m=ap或bq
不妨设m=ap,gcd(m,q)=1
即mφ(q) ≡ 1 mod q
mkφ(q) ≡ 1k mod q
(mkφ(q) )φ§ ≡ 1φ§ mod q
此处看不清的是欧拉(p),不知道为什么csdn会把他变成φ§
mkφ(n) ≡ 1 mod q
即mkφ(n) = sq +1
两边同×m
mkφ(n)+1 =sq * ap+m
=san+m
mkφ(n)+1 mod n ≡ m (mod n)
所以无论m和n互素不互素,都可以得到mkφ(n)+1 mod n ≡ m (mod n)
即得证。