USTC计算数论课程学习记录

计算数论学习记录,如有错误,欢迎评论区指正。

1 大整数因子分解算法

  1. 寻找 x 2 ≡ y 2   ( m o d   p ) x^2\equiv y^2\ (mod\ p) x2y2 (mod p)来分解N。
    1. 连分数、二次筛法通过寻找 x i 2 ≡ t i ( m o d    p ) x_{i}^{2}\equiv t_i (mod\;p) xi2ti(modp),使用组合多个同余式将右边凑成一个平方元
    2. 数域筛法直接通过寻找平方元计算
      ∏ ( a , b ) ∈ S ( a + b θ ) = r 2 \prod_{(a,b)\in S}(a+b\theta)=r^2 (a,b)S(a+bθ)=r2, ∏ c + b m = x 2 \prod{c+bm}=x^2 c+bm=x2,由同态 ϕ : Z [ θ ] − > Z n \phi: Z[\theta]->Z_n ϕ:Z[θ]>Zn得到 ϕ ( r ) 2 ≡ x 2 ( m o d   m ) {\phi(r)}^2\equiv x^2 (mod\ m) ϕ(r)2x2(mod m),a和b都是y光滑的。
  2. 通过计算分解n
    1. Pollard p-1
    2. Pollard-ρ
    3. p+1算法
    4. 椭圆曲线分解法

1.1 连分数因子分解

使用 n \sqrt{n} n 的简单连分数展开寻找或组合得到同余式: x 2 ≡ y 2   ( m o d   p ) x^2\equiv y^2\ (mod\ p) x2y2 (mod p)

n为待分解整数,算法步骤

  1. 计算 n \sqrt{n} n 的简单连分数展开,同时计算:

    P 0 = a 0 ,   P 1 = a 0 a 1 + 1 ,   P k = a k P k − 1 + P k − 2 P_0 = a_0,\ P_1 = a_0a_1+1,\ P_k = a_k P_{k-1}+P_{k-2} P0=a0, P1=a0a1+1, Pk=akPk1+Pk2

    Q 0 = 1 ,   Q 1 = a 1 ,   Q k = a k Q k − 1 + Q k − 2 Q_0 = 1,\ Q_1 = a_1,\ Q_k = a_k Q_{k-1}+Q_{k-2} Q0=1, Q1=a1, Qk=akQk1+Qk2

    W k = P k 2 − N Q k 2 W_k = P_k^2 - NQ_k^2 Wk=Pk2NQk2

  2. 寻找所需同余式

    1. 寻找 P k 2 ≡ W k   ( m o d   n ) P_k^2 \equiv W_k \ (mod\ n) Pk2Wk (mod n),使得 W k W_k Wk为平方数
    2. 寻找多个 P k i 2 ≡ W x i   ( m o d   n ) P_{ki}^2\equiv W_{xi} \ (mod \ n) Pki2Wxi (mod n),然后使用素因子分解,组合需要的同余式得到 ( P k 1 P k 2 . . . ) 2 ≡ ( ( − 1 ) e 0 p 1 e 2 . . . p m e m ) 2   ( m o d   n ) (P_{k1}P_{k2}...)^2\equiv((-1)^{e0}p_1^{e2}...p_m^{em})^2 \ (mod\ n) (Pk1Pk2...)2((1)e0p1e2...pmem)2 (mod n)

1.2 二次筛法

利用 W k = ( k + [ n ] ) 2 W_k = (k+[\sqrt{n}])^2 Wk=(k+[n ])2寻找平方同余式

  1. 简单版
    计算 k = − 5 , − 4 , − 3 , − 2 , − 1 , 0 , 1 , 2 , 3... k=-5,-4,-3,-2,-1,0,1,2,3... k=5,4,3,2,1,0,1,2,3... W k W_k Wk的值,选择分解基并从 W k W_k Wk寻找可以凑成平方项的值,得到 ∏ ( [ n ] + n i ) 2 ≡ W k 1 ⋅ W k 2 ⋅ W k 3 . . . \prod{([\sqrt{n}] + n_i)}^2\equiv W_{k1}\cdot W_{k2}\cdot W_{k3}... ([n ]+ni)2Wk1Wk2Wk3... ,后者是个平方元。k在0附近选择,范围可大可小。

  2. 复杂版

    1. 计算 W k W_k Wk,选择小于P且满足 ( n p ) = 1 (\frac{n}{p})=1 (pn)=1的素数作为分解基,取小于A的数作为k计算 W k W_k Wk
    2. 从得到的 W k W_k Wk中,选出对分解基光滑的元素,即该元素的素因子都在分解基中。
      1. 每个元素不断除以分解基中的元素,若最后得到1,则选出。
    3. 从选出的元素中凑平方元。
    4. 得到 ∏ ( [ n ] + n i ) 2 ≡ W k i 1 ⋅ W k i 2 ⋅ W k i 3 . . . \prod{([\sqrt{n}] + n_i)}^2\equiv W_{ki_1}\cdot W_{ki_2}\cdot W_{ki_3}... ([n ]+ni)2Wki1Wki2Wki3...

1.3 数域筛法

同样,想法设法构造 x 2 ≡ y 2   ( m o d   n ) x^2\equiv y^2 \ (mod \ n) x2y2 (mod n)

思路:

  1. 选择一个整数 θ ∉ Q \theta \notin Q θ/Q,由其产生代数数域 K = Q ( θ ) K=Q(\theta) K=Q(θ) θ \theta θ的极小多项式为 f ( x ) f(x) f(x)

  2. 寻找整数m使得 f ( m ) = k n f(m)=kn f(m)=kn,则可以定义同态环,K得阶 Z [ θ ] → Z n Z[\theta]\rightarrow Z_n Z[θ]Zn: ϕ ( ∑ i = 0 n − 1 a i θ i = ∑ i = 0 n − 1 a i m i   ( m o d   n ) \phi(\sum_{i=0}^{n-1}a_i\theta^i=\sum_{i=0}^{n-1}a_im_i \ (mod \ n) ϕ(i=0n1aiθi=i=0n1aimi (mod n)

  3. 寻找集合S, S ⊂ { ( a , b ) ∈ Z × Z ∣ g c d ( a , b ) = 1 } S\subset \{(a, b) \in Z\times Z | gcd(a, b) =1 \} S{(a,b)Z×Zgcd(a,b)=1},S满足

    ∏ ( a , b ) ∈ S ( a + b m ) = x 2 \prod_{(a,b)\in S}(a+bm)=x^2 (a,b)S(a+bm)=x2
    ∏ ( a , b ) ∈ S ( a + b θ ) = α 2 \prod_{(a,b)\in S}(a+b\theta)=\alpha^2 (a,b)S(a+bθ)=α2

    α 2 ≡ x 2 \alpha^2\equiv x^2 α2x2

如何构造 f ( x ) f(x) f(x)?取 m = [ n 1 d ] m=[n^{\frac{1}{d}}] m=[nd1],将n写成m进制, n = C d m d + . . . + C 1 m + C 0 n = C_dm^d+...+C_1m+C_0 n=Cdmd+...+C1m+C0
f ( x ) = C d x d + . . . + C 1 x + C 0 f(x)=C_dx^d+...+C_1x+C_0 f(x)=Cdxd+...+C1x+C0
f ( x ) f(x) f(x)可约, f ( x ) = g ( x ) h ( x ) f(x)=g(x)h(x) f(x)=g(x)h(x),则 h = g ( m ) h ( m ) h=g(m)h(m) h=g(m)h(m),即得到n得非平凡因子。

1.4 Pollard ρ

f ( x ) = x 2 + 1 ,   x 0 = 2 ,   x k = f ( x k − 1 ) f(x)=x^2 + 1, \ x_0=2,\ x_k = f(x_{k-1}) f(x)=x2+1, x0=2, xk=f(xk1)

计算 gcd ⁡ ( x 2 k − x k , N ) ,   k = 1 , 2 , 3... \gcd(x_{2k} - x_k, N), \ k=1,2,3... gcd(x2kxk,N), k=1,2,3...

变种:使用其他 f ( x ) f(x) f(x),计算 gcd ⁡ ( x g ( t ) − x t , N ) \gcd(x_{g(t)}-x_t, N) gcd(xg(t)xt,N)而不是 x 2 k − x k x_{2k}-x_k x2kxk

1.5 Pollard p-1

计算 gcd ⁡ ( 2 ( k ! ) − 1 , N ) \gcd(2^{(k!)}-1, N) gcd(2(k!)1,N),k为自然数。可以选择前k个素数替换k的阶乘。

1.6 P+1算法

选择大于2得整数A构造Lucas序列
V 0 = 2 ,   V 1 = A ,   V k = A V k − 1 − V k − 2 V_0=2,\ V_1=A,\ V_k=AV_{k-1}-V_{k-2} V0=2, V1=A, Vk=AVk1Vk2
计算多个 gcd ⁡ ( V M − 2 , N ) \gcd(V_M - 2, N) gcd(VM2,N)的值,其中M为连续阶乘1!, 2!, 3!, 4!,若结果不为1和N,则找到一个因子。
V k ! ( A ) = V k (   V ( k − 1 ) ! ( A )   ) V_{k!}(A) = V_k(\ V_{(k-1)!}(A)\ ) Vk!(A)=Vk( V(k1)!(A) )

例如,A=9,则

V 1 ( 9 ) = V 1 ! ( 9 ) = 9 V_{1}(9) = V_{1!}(9) = 9 V1(9)=V1!(9)=9
V 2 ( 9 ) = V 2 ! ( 9 ) = 79 V_{2}(9) = V_{2!}(9) = 79 V2(9)=V2!(9)=79
V 3 ( 79 ) = V 3 ! ( 9 ) = 41886 V_{3}(79) = V_{3!}(9) = 41886 V3(79)=V3!(9)=41886
V 4 ( 41886 ) = V 4 ! ( 9 ) = 79378 V_{4}(41886) = V_{4!}(9) = 79378 V4(41886)=V4!(9)=79378
V 5 ( 79378 ) = V 5 ! ( 9 ) = 1934 V_{5}(79378) = V_{5!}(9) = 1934 V5(79378)=V5!(9)=1934
V 6 ( 1934 ) = V 6 ! ( 9 ) = 10582 V_{6}(1934) = V_{6!}(9) = 10582 V6(1934)=V6!(9)=10582
V 7 ( 10582 ) = V 7 ! ( 9 ) = 84241 V_{7}(10582) = V_{7!}(9) = 84241 V7(10582)=V7!(9)=84241
V 8 ( 84241 ) = V 8 ! ( 9 ) = 93973 V_{8}(84241) = V_{8!}(9) = 93973 V8(84241)=V8!(9)=93973
V 9 ( 93973 ) = V 9 ! ( 9 ) = 91645 V_{9}(93973) = V_{9!}(9) = 91645 V9(93973)=V9!(9)=91645

1.7 椭圆曲线法

选择椭圆曲线, y 2 = x 3 + a x 2 + b y^2=x^3+ax^2+b y2=x3+ax2+b,选择曲线上的点 P ( x , y ) P(x, y) P(x,y),选择阶乘或几个素因子的最小公倍数作为 K = l c m ( 2 , 3 , 5 , 7... ) K=lcm(2,3,5,7...) K=lcm(2,3,5,7...),计算 K P KP KP,当计算过程中λ无解的时候,计算分母 m 2 m_2 m2与N的公因子 gcd ⁡ ( m 2 , N ) \gcd(m_2, N) gcd(m2,N) 即得到一个非平凡因子。

K P KP KP的计算主要依赖椭圆曲线上的加法操作:

P 1 = ( x 1 , y 1 ) , P 2 = ( x 2 , y 2 ) P_1=(x_1,y_1), P_2=(x_2, y_2) P1=(x1,y1),P2=(x2,y2) P 1 + P 2 = P 3 P_1+P_2=P_3 P1+P2=P3

x 3 = λ 2 − x 1 − x 2   ( m o d   n ) x_3=\lambda^2 - x1 - x2 \ (mod\ n) x3=λ2x1x2 (mod n)
y 3 = λ ( x 1 − x 3 ) − y 1   ( m o d   n ) y_3=\lambda(x_1-x_3)-y_1 \ (mod\ n) y3=λ(x1x3)y1 (mod n)

P 1 = P 2 P_1=P_2 P1=P2,则 λ = 3 x 1 2 + a 2 y 1   ( m o d   n ) \lambda=\frac{3x_1^2+a}{2y_1} \ (mod\ n) λ=2y13x12+a (mod n)
P 1 ≠ P 2 P_1\ne P_2 P1=P2,则 λ = y 1 − y 2 x 1 − x 2   ( m o d   n ) \lambda=\frac{y_1-y_2}{x_1-x_2} \ (mod\ n) λ=x1x2y1y2 (mod n)

分数取模转换为一次同余式利用欧几里得算法求解: x = b a   m o d   n ⇒ b ≡ a x   m o d   n x=\frac{b}{a} \ mod\ n \Rightarrow b \equiv ax \ mod \ n x=ab mod nbax mod n

  1. gcd ⁡ ( b , n ) ∤ a \gcd(b, n) \nmid a gcd(b,n)a,无解
  2. 否则利用欧几里得从后往前即可得到,如下
    9x=5 (mod 25) =>  9x + 25 * (-k) = 5
    欧几里得不断取余数gcd(25, 9):
    25 = 9 * 2 + 7
    9 = 7 + 2
    7 = 2 * 3 + 1
    2 = 2 * 1
    从而
    1 = 7 - 2 * 3 = (25 - 9 * 2) - (9 - 7) * 3
      = 25 - 9 * 2 - (9 - (25 - 9 * 2)) * 3
      = 25 - 9 * 2 - (9 * 3 - 25) * 3
      = 25 * 4 - 9 * 11
    从而得到
    25 * 4 + 9 * (-11) = 1
    两边同乘以5有
    25 * 20 + 9 * (-55) = 5
    故 x = (-55) mod 25
    x = 20
    验证得 9*20 = 180 = 25 * 7 + 5 = 5 mod 25
    

2 离散对数

计算 x = log ⁡ a y ⇒ y = a x   ( m o d   n ) x=\log_ay \Rightarrow y=a^x\ (mod\ n) x=logayy=ax (mod n)

2.1 小步大步法

x = [ n ] x=[\sqrt{n}] x=[n ]

小步

S = { ( y , 0 ) , ( y a , 1 ) , ( y a 2 , 2 ) . . . ( y a s − 1 , s − 1 )   m o d   n } S=\{ (y, 0), (ya, 1), (ya^2, 2) ... (ya^{s-1}, s-1)\ mod\ n \} S={(y,0),(ya,1),(ya2,2)...(yas1,s1) mod n}

大步

T = { ( a s , 1 ) , ( a 2 s , 2 ) , ( a 3 s , 3 ) , . . . , ( a s 2 , s )   m o d   n } T=\{ (a^s, 1), (a^{2s}, 2), (a^{3s}, 3), ..., (a^{s^2}, s) \ mod\ n \} T={(as,1),(a2s,2),(a3s,3),...,(as2,s) mod n}

之后按照第一项排序,寻找 y a r = a t s ya^r = a^{ts} yar=ats,然后计算 x = t s − r x=ts-r x=tsr即得到结果。

2.2 Silver-Hellman-Pholig

计算 x ≡ log ⁡ a b   m o d   q x\equiv \log_{a}b \ mod \ q xlogab mod q

  1. 首先得到q-1素因子分解, q − 1 ≡ ∏ i = 1 k p i α i q-1\equiv \prod_{i=1}^{k}p_i^{\alpha_i} q1i=1kpiαi

  2. 针对每个素因子的幂 p i α i p_i^{\alpha_i} piαi,简写为 p α p^\alpha pα,将x分解为p进制形式,如下:

    通过将x分解为p进制的形式计算同余式: x   m o d   p α = x 0 + x 1 p + x 2 p 2 + . . . + x α − 1 p α − 1 x\ mod\ p^\alpha = x_0 + x_1 p+x_2 p^2+...+x_{\alpha-1}p^{\alpha-1} x mod pα=x0+x1p+x2p2+...+xα1pα1

    1. 预处理得到 r p , j = a j ⋅ q − 1 p   m o d   q ,   0 ≤ j < p r_{p, j}=a^{j\cdot\frac{q-1}{p}} \ mod \ q, \ 0\le j \lt p rp,j=ajpq1 mod q, 0j<p
    2. 计算 x i x_i xi
      1. b 1 = b b_1=b b1=b, 寻找满足 b 1 q − 1 p ≡ r p , j   ( m o d   q ) b_1^{\frac{q-1}{p}}\equiv r_{p,j} \ (mod \ q) b1pq1rp,j (mod q) 的j, x 0 = j x_0=j x0=j
      2. b 2 = b ∗ a − x 0 b_2=b*a^{-x0} b2=bax0,寻找满足 b 2 ( q − 1 ) / ( p 2 ) ≡ r p , j   ( m o d   q ) b_2^{(q-1)/(p^2)}\equiv r_{p, j} \ (mod \ q) b2(q1)/(p2)rp,j (mod q) 的j, x 1 = j x_1=j x1=j
      3. b 3 = b ∗ a − x 0 − x 1 p b_3=b*a^{-x_0-x_1p} b3=bax0x1p,寻找满足 b 3 ( q − 1 ) / ( p 3 ) ≡ r p , j   ( m o d   q ) b_3^{(q-1)/(p^3)}\equiv r_{p, j}\ (mod \ q) b3(q1)/(p3)rp,j (mod q) 的j, x 1 = j x_1=j x1=j
      4. …直到 x α − 1 x_{\alpha-1} xα1
    3. 得到同余式 x   m o d   p α = x 0 + x 1 p + x 2 p 2 + . . . + x α − 1 p α − 1 x\ mod\ p^\alpha = x_0 + x_1 p+x_2 p^2+...+x_{\alpha-1}p^{\alpha-1} x mod pα=x0+x1p+x2p2+...+xα1pα1
  3. 通过中国剩余定理,将每一个 p i α i p_i^{\alpha_i} piαi对应的同余式组合,即可得到x

3 模p开平方

求解 x 2 ≡ a   ( m o d   p ) x^2\equiv a \ (mod \ p) x2a (mod p),步骤

  1. 选取β使其为p得二次非剩余,即 ( β p ) = − 1 (\frac{\beta}{p})=-1 (pβ)=1
  2. 分解p-1, p − 1 = 2 s t p-1=2^st p1=2st,t为奇数
  3. 令e=0
  4. for i=1 to s-1
    1. ( a β − e ) 2 s − ( i + 1 ) t ≠ 1 (a\beta^{-e})^{2^{s-(i+1)}t}\ne1 (aβe)2s(i+1)t=1,则 e = e + 2 i e=e+2^i e=e+2i
  5. h = a β − e , b = β e 2 h t + 1 2 h=a\beta^{-e}, b=\beta^{\frac{e}{2}}h^{\frac{t+1}{2}} h=aβe,b=β2eh2t+1
  6. b即为解

另一种方法
计算 x 2 ≡ a   ( m o d   p ) x^2\equiv a \ (mod \ p) x2a (mod p)

  1. 计算 p − 1 = 2 s ∗ m p-1=2^s*m p1=2sm,m为奇数
  2. 选择模p非二次剩余z
  3. 初始化 c = z m , u = a m , v = a m + 1 2 c=z^m, u=a^m, v=a^{\frac{m+1}{2}} c=zm,u=am,v=a2m+1
  4. for i from s-1 to 1
      if u 2 i − 1 ≡ − 1   ( m o d   p ) u^{2^{i-1}}\equiv -1 \ (mod \ p) u2i11 (mod p)
        u = u c 2 u=uc^2 u=uc2
        v = v c v=vc v=vc
    c = c 2 c=c^2 c=c2
  5. 循环结束后v即为解

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
内容简介: 本书论述了算法数论的基本内容,其中包括:连分数、代数数域、椭圆曲线、素性检验、大整数因子分解算法、椭圆曲线上的离散对数、超椭圆曲线。本书的特点是内容涉及面广,在有限的篇幅内,包含了必要的预备知识和数学证明,尽可能形成一个完整的体系。并且本书的部分内容曾多次在中国科学院研究生院信息安全国家重点实验室和广州大学作为硕士研究生教材使用。本书可作为信息安全、数论等专业的研究生教材及相关专业的研究人员、高等学校的教师和高年级学生的参考。 目录: 序 前言 第一章 整数的因子分解 1.1 唯一分解定理 1.2 辗转相除法(欧氏除法) 1.3 Mersenne素数和Fermat素数 1.4 整系数多项式 1.5 环Z和Z[ω] 习题一 第二章 同余式 2.1 孙子定理 2.2 剩余类环 2.3 Euler函数ρ(m) 2.4 同余方程 2.5 原根 2.6 缩系的构造 习题二 第三章 二次剩余 3.1 定义及Euler判别条件 3.2 Legendre符号 3.3 Jacobi符号 习题三 第四章 特征 4.1 剩余系的表示 4.2 特征 4.3 原特征 4.4 特征和 4.5 Gauss和 习题四 第五章 连分数 5.1 简单连分数 5.2 用连分数表实数 5.3 最佳渐近分数 5.4 Legendre判别条件 习题五 第六章 代数数域 6.1 代数整数 6.2 Dedekind整环 6.3 阶的一些性质 第七章 椭圆曲线 7.1 椭圆曲线的群结构 7.2 除子类群 7.3 同种映射 7.4 Tate模和Weil对 7.5 有限域上的椭圆曲线 习题七 第八章 在密码学中的一些应用 8.1 RSA公钥密码 8.2 Uiffie-Hellman体制 8.3 ElGamal算法 8.4 基于背包问题的公钥密码 8.5 秘密共享 第九章 素性检验 9.1 Fermat小定理及伪素数 9.2 强伪素数及Miller-Rabin检验 9.3 利用n-1的因子分解的素性检验 9.4 利用n+1的因子分解的素性检验 9.5 分圆环素性检验 9.6 基于椭圆曲线的素性检验 第十章 大整数因子分解算法 10.1 连分数因子分解算法 10.2 二次筛法 10.3 Pollard的P-1因子分解算法 10.4 椭圆曲线因子分解算法 10.5 数域筛法 习题十 第十一章 椭圆曲线上的离散对数 11.1 椭圆曲线公钥密码 11.2 小步-大步法 11.3 家袋鼠和野袋鼠 11.4 MOV约化 11.5 FR约化 11.6 SSSA约化 11.7 有限域上离散对数的计算 第十二章 超椭圆曲线 12.1 超椭圆曲线的Jacobian 12.2 虚二次代数函数域 12.3 基于超椭圆曲线的公钥密码 附录 一些常用算法 A.1 不可约多项式的判别 A.2 有限域中平方根的求解 A.3 有限域上的分解 A.4 Hensel引理 A.5 格 A.6 Z[x]中多项式的分解 参考文献 免责申明:此书是我在网络上获取的,希望对大家有用。资源版权归作者及其公司所有,如果你喜欢,请购买正版。~~~
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值