模平方根算法求 x2≡a(modp) 的解,是二次剩余理论的算法化:先用欧拉准则判可解,再用 Tonelli–Shanks 算法求根。它是有限域算术与椭圆曲线密码(点压缩恢复坐标)中的常用原语。
可解性判断
对奇素数 p、p∤a,a 是二次剩余当且仅当 a(p−1)/2≡1(modp)(欧拉准则)。
简单情形
p≡3(mod4)(即 p−1 中 2 的幂次 s=1)时:x≡a(p+1)/4(modp)。
Tonelli–Shanks 算法
写 p−1=q⋅2s(q 为奇数)。取一个非二次剩余 z,令 c=zq,x=a(q+1)/2,t=aq,m=s。循环:
- 若 t≡1,结束,x 即平方根
- 否则找最小 i(1≤i<m)使 t2i≡1,令 b=c2m−i−1
- 更新 x←xb,t←tb2,c←b2,m←i,回到第 1 步
示例
求 x2≡2(mod17):p−1=16=1⋅24,q=1,s=4。3 是非二次剩余(38≡−1),故 c=3,x=2,t=2,m=4。
- t=2=1:t2=4,t4≡−1,t8≡1 → i=3;b=320=3,x≡6,t=2⋅32≡1,m=3
- t≡1,结束:x=6,且 62=36≡2(mod17) ✓
应用
在有限域 Fp 上开方是椭圆曲线密码(如由横坐标恢复纵坐标)与若干后量子方案的子程序;p≡3(mod4) 的特例在密码实现中大量使用。