描述
Rabin加密算法和RSA加密算法形式类似,但解密过程有所不同。Rabin加密算法的解密过程会得到4个不同的明文,具体明文是哪一个还需要通过验证码进行验证。
加密
由于Rabin加密算法是RSA加密算法的衍生类,因此有:令
N
=
p
q
N=pq
N=pq,其中
p
、
q
p、q
p、q均为较大的奇素数;对于任意明文
m
m
m,有对应的密文
c
c
c,加密过程如下:
c
≡
m
2
(
m
o
d
N
)
c\equiv m^2\ (mod\ N)
c≡m2 (mod N)
解密
情况1: p ≡ q ≡ 3 ( m o d 4 ) p\equiv q\equiv 3\ (mod\ 4) p≡q≡3 (mod 4)
- 由于
m
2
≡
c
(
m
o
d
p
)
m^2\equiv c\ (mod\ p)
m2≡c (mod p),因此根据模平方剩余和欧拉判别法有:
c p − 1 2 ≡ 1 ( m o d p ) c^{\frac{p-1}{2}}\equiv 1\ (mod\ p) c2p−1≡1 (mod p)又因为: c ≡ m 2 ( m o d N ) c\equiv m^2\ (mod\ N) c≡m2 (mod N)因此有: m p 2 ≡ c ≡ c ∗ 1 ≡ c ∗ c p − 1 2 ≡ c p + 1 2 ≡ ( c p + 1 4 ) 2 ( m o d p ) m q 2 ≡ c ≡ c ∗ 1 ≡ c ∗ c q − 1 2 ≡ c q + 1 2 ≡ ( c q + 1 4 ) 2 ( m o d q ) m_p^2\equiv c\equiv c*1\equiv c*c^{\frac{p-1}{2}}\equiv c^{\frac{p+1}{2}}\equiv (c^{\frac{p+1}{4}})^2\ (mod\ p)\\ m_q^2\equiv c\equiv c*1\equiv c*c^{\frac{q-1}{2}}\equiv c^{\frac{q+1}{2}}\equiv (c^{\frac{q+1}{4}})^2\ (mod\ q) mp2≡c≡c∗1≡c∗c2p−1≡c2p+1≡(c4p+1)2 (mod p)mq2≡c≡c∗1≡c∗c2q−1≡c2q+1≡(c4q+1)2 (mod q)即:
m p ≡ c p + 1 4 ( m o d p ) m q ≡ c q + 1 4 ( m o d q ) m_p\equiv c^{\frac{p+1}{4}}\ (mod\ p)\\ m_q\equiv c^{\frac{q+1}{4}}\ (mod\ q) mp≡c4p+1 (mod p)mq≡c4q+1 (mod q) - 再由扩展欧几里得方法计算出
y
p
y_p
yp和
y
q
y_q
yq:
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 2 ≡ N − m 1 m 3 ≡ y p ∗ p ∗ m q − y q ∗ q ∗ m p ( m o d N ) m 4 ≡ N − m 3 m_1\equiv y_p*p*m_q+y_q*q*m_p\ (mod\ N)\\ m_2\equiv N-m_1\\ m_3\equiv y_p*p*m_q-y_q*q*m_p\ (mod\ N)\\ m_4\equiv N-m_3 m1≡yp∗p∗mq+yq∗q∗mp (mod N)m2≡N−m1m3≡yp∗p∗mq−yq∗q∗mp (mod N)m4≡N−m3
下证明文的正确性:
m
1
2
≡
(
y
p
∗
p
∗
m
q
+
y
q
∗
q
∗
m
)
2
≡
(
y
p
∗
p
∗
m
q
)
2
+
(
y
q
∗
q
∗
m
)
2
(
m
o
d
N
)
∵
m
p
2
≡
k
p
∗
p
+
c
,
m
q
2
≡
k
q
∗
q
+
c
∴
m
1
2
≡
y
p
2
∗
p
2
∗
(
k
p
∗
p
+
c
)
+
y
q
2
∗
q
2
∗
(
k
q
∗
q
+
c
)
≡
c
(
y
p
2
∗
p
2
+
y
q
2
∗
q
2
)
(
m
o
d
N
)
又
∵
y
p
∗
p
+
y
q
∗
q
=
1
∴
m
1
2
≡
c
(
(
y
p
∗
p
+
y
q
∗
q
)
2
−
2
∗
y
p
∗
p
∗
y
q
∗
q
)
≡
c
(
m
o
d
N
)
m_1^2\equiv (y_p*p*m_q+y_q*q*m)^2\equiv (y_p*p*m_q)^2+(y_q*q*m)^2\ (mod\ N)\\ ∵m_p^2\equiv k_p*p+c,\ m_q^2\equiv k_q*q+c\\ ∴m_1^2\equiv y_p^2*p^2*(k_p*p+c)+y_q^2*q^2*(k_q*q+c)\equiv c(y_p^2*p^2+y_q^2*q^2)\ (mod\ N)\\ 又∵y_p*p+y_q*q=1\\ ∴m_1^2\equiv c((y_p*p+y_q*q)^2-2*y_p*p*y_q*q)\equiv c\ (mod\ N)
m12≡(yp∗p∗mq+yq∗q∗m)2≡(yp∗p∗mq)2+(yq∗q∗m)2 (mod N)∵mp2≡kp∗p+c, mq2≡kq∗q+c∴m12≡yp2∗p2∗(kp∗p+c)+yq2∗q2∗(kq∗q+c)≡c(yp2∗p2+yq2∗q2) (mod N)又∵yp∗p+yq∗q=1∴m12≡c((yp∗p+yq∗q)2−2∗yp∗p∗yq∗q)≡c (mod N)其他明文的证明方式同理。
情况2: p 、 q p、q p、q非特殊值
- ∵ m 2 ≡ c ( m o d N ) ∴ m p ≡ c ( m o d p ) 且 m q ≡ c ( m o d q ) ∵m^2\equiv c\ (mod\ N)\\ ∴m_p\equiv \sqrt c\ (mod\ p)且m_q\equiv \sqrt c\ (mod\ q) ∵m2≡c (mod N)∴mp≡c (mod p)且mq≡c (mod q)此为求解模平方根过程Cipolla算法。
- 其余值计算方式与情况1一致,只需替换掉 m p 、 m q m_p、m_q mp、mq的计算过程即可。
参考资料
[1]. Rabin加密算法和n次同余方程
[2]. RSA 衍生算法——Rabin 算法
[3]. Rabin加密算法