公钥加密,密钥是一对,一个公开一个保密,用其中一个加密,用另一个解密。
RSA是一种公钥加密方法。过程如下:
(1)选择质数p,q,n=p*q,p和q是private,n是public;
(2)选择e,e与f(n)=(p-1)*(q-1)互质,且1<e<f(n),e是public的,f(n)是private;
(3)求解e^-1 = d mod f(n),d是private的。e是d是一对密钥。e公开d保密;
(4)加密m,其中m<n。c=m^e % n;
(5)解密c,m = c^d % n。
证明正确性:
e和d关系: e*d = k*f(n) + 1.
且x = c^d = m^(ed) = m^(k*f(n)+1) = m^(k(p-1)*(q-1) + 1),
只要证明c^d = m mod n即可,即(m^e%n)^d % n= x % n = m。
(1)如果m同时与n互质,m与p和q也互质,
使用m与p互质,得到m^(p-1) = 1 mod p,那么,(m^(p-1))^(q-1) % p = (m^(p-1) % p)^(q-1) % p = 1 % p = 1,所以x = m mod p。
同理根据m与q互质,得到x = m mod q。所以(x-m) | pq,即x = m mod pq
(2)如果m与n不互质,则m必为p或者q之一的倍数,假设m | p。
那么m此时与q互质,否则m同时为p和q的倍数,则m大于n,与RSA要求违背。所以m与q互质,根据(1)可得,x = m mod q。
根据m | p,得到x | p,因为x是由m经过幂运算得到的。所以x = 0 mod p,(x - m) | p,所以(x - m) | pq。即x = m mod pq。
m被q整除相似,得证。
注:使用了取余的乘法运算,m^x % p = (m % p)^x % p
一个例子: