Rabin加密
Rabin加密是RSA加密的衍生,是一种基于模平方和模平方根的非对称加密算法。
加密过程
Rabin加密的公私钥生成和RSA一样,只是e = 2
。
生成两个大素数,p,q,N = p*q
c = m 2 m o d N c = m^2~mod~N c=m2 mod N
解密过程
由于Rabin加密使用的e=2,导致e和 ϕ ( N ) \phi(N) ϕ(N)不互素数。无法求得私钥d,使得 e d ≡ 1 m o d N ed ≡ 1~mod~N ed≡1 mod N。而且由于不互素,解密得到的明文不止一个。
- 解密先得到mp和mq。
m p = c ( p + 1 ) / 4 m o d p m_p = c^{(p+1)/4}~mod~p mp=c(p+1)/4 mod p
m q = c ( q + 1 ) / 4 m o d q m_q = c^{(q+1)/4}~mod~q mq=c(q+1)/4 mod q
-
求得yp和yq,满足如下条件(yp是p对于模q的模反,yq是q对于模p的模反)
y p ∗ p + y q ∗ q = 1 y_p*p + y_q*q = 1 yp∗p+yq∗q=1 -
求得四个明文解
m 1 = ( y p ∗ p ∗ m q + y q ∗ q ∗ m p ) m o d N m_1 = (y_p*p*m_q + y_q*q*m_p )~mod~N m1=(yp∗p∗mq+yq∗q∗mp) mod Nm 2 = N − m 1 m_2 = N - m_1 m2=N−m1
m 3 = ( y p ∗ p ∗ m q − y q ∗ q ∗ m p ) m o d N m_3 = (y_p*p*m_q - y_q*q*m_p )~mod~N m3=(yp∗p∗mq−yq∗q∗mp) mod N
m 4 = N − m 3 m_4 = N - m_3 m4=N−m3
Rabin解密推导
二次剩余定理
如果存在一个整数x,使得 x 2 ≡ n m o d p x^2 ≡ n~mod~p x2≡n mod p,那么则称n是模p的二次剩余。
有一种很巧妙的办法,可以得出一个数是否是模p的二次剩余。这个办法是勒让德符号 ( n p ) (\frac{n}{p}) (pn)。
( n p ) = { 1 , n 是 模 p 的 二 次 剩 余 − 1 ,