描述
Cipolla算法用于求解一般形式的模平方根,如 m 2 ≡ c ( m o d p ) m^2\equiv c\ (mod\ p) m2≡c (mod p)已知 c c c反解 m m m的过程。
定理引入
该算法需要一定的数论基础,比如费马小定理、域相关知识。在证明过程中用到了下面的定理,在此只做引入不做证明。
定理1:
由欧拉判别法知:对于
x
2
≡
a
(
m
o
d
p
)
x^2\equiv a\ (mod\ p)
x2≡a (mod p),模
p
p
p的二次剩余与二次非剩余均有
p
−
1
2
\frac{p-1}{2}
2p−1个。
若
a
a
a为平方剩余,则:
a
p
−
1
2
≡
1
(
m
o
d
p
)
a^{\frac{p-1}{2}}\equiv 1\ (mod\ p)
a2p−1≡1 (mod p) 若
a
a
a为平方非剩余,则:
a
p
−
1
2
≡
−
1
(
m
o
d
p
)
a^{\frac{p-1}{2}}\equiv -1\ (mod\ p)
a2p−1≡−1 (mod p)
a
a
a显然不为
p
p
p的倍数。该定理说明,由随机数得到一个二次非剩余的概率很大。
定理2:
( a + b ) p ≡ a p + b p ( m o d p ) (a+b)^p\equiv a^p+b^p\ (mod\ p) (a+b)p≡ap+bp (mod p)
定理3:
w p ≡ − w ( m o d p ) w^p\equiv -w\ (mod\ p) wp≡−w (mod p)
定理4:
费马小定理的推论,其中
a
a
a为任意数:
a
p
≡
a
(
m
o
d
p
)
a^p\equiv a\ (mod\ p)
ap≡a (mod p)
求解过程
- 随机产生一个数 a a a,若 a 2 − c a^2-c a2−c为模p的平方非剩余,即 ( a 2 − c ) p − 1 2 ≡ − 1 ( m o d p ) (a^2-c)^{\frac{p-1}{2}}\equiv -1\ (mod\ p) (a2−c)2p−1≡−1 (mod p)。由定理1知,该过程很快便可以实现。
- 建立一个新的域,设该域中的单位为 w = a 2 − c w=\sqrt {a^2-c} w=a2−c;这类似于复数域中的单位 i i i。因此该新域中的所有数都可以表示为 a + b w a+bw a+bw的形式。
- 得出已知
c
c
c反解
m
m
m的结果为:
m ≡ ( a + w ) p + 1 2 ( m o d p ) m\equiv (a+w)^{\frac{p+1}{2}}\ (mod\ p) m≡(a+w)2p+1 (mod p)
下证结果成立:
m
≡
(
a
+
w
)
p
+
1
2
≡
(
(
a
+
w
)
p
+
1
)
1
2
≡
(
(
a
+
w
)
p
(
a
+
w
)
)
1
2
≡
(
(
a
p
+
w
p
)
(
a
+
w
)
)
1
2
−
−
−
定
理
2
≡
(
(
a
−
w
)
(
a
+
w
)
)
1
2
−
−
−
定
理
3
、
4
≡
(
a
2
−
w
2
)
1
2
≡
c
1
2
≡
c
(
m
o
d
p
)
\begin{aligned} m\equiv &\ (a+w)^{\frac{p+1}{2}}\\ \equiv &\ ((a+w)^{p+1})^{\frac{1}{2}}\\ \equiv &\ ((a+w)^p(a+w))^{\frac{1}{2}}\\ \equiv &\ ((a^p+w^p)(a+w))^{\frac{1}{2}}---定理2\\ \equiv &\ ((a-w)(a+w))^{\frac{1}{2}}---定理3、4\\ \equiv &\ (a^2-w^2)^{\frac{1}{2}}\\ \equiv &\ c^{\frac{1}{2}}\\ \equiv &\ \sqrt c\ (mod\ p) \end{aligned}
m≡≡≡≡≡≡≡≡ (a+w)2p+1 ((a+w)p+1)21 ((a+w)p(a+w))21 ((ap+wp)(a+w))21−−−定理2 ((a−w)(a+w))21−−−定理3、4 (a2−w2)21 c21 c (mod p)故得证。
参考资料
[1]. Cipolla算法学习小记