ポラード・ロー離散対数アルゴリズム

提供: testwiki
ナビゲーションに移動 検索に移動

ポラード・ロー離散対数アルゴリズム (ポラード・ローりさんたいすうアルゴリズム、テンプレート:Lang-en)はテンプレート:日本語版にない記事リンクが1978年に導入した離散対数問題のアルゴリズムであり、ポラード・ロー素因数分解法と似た構造を持つ。

このアルゴリズムの目的は、テンプレート:Mvarが生成する巡回群テンプレート:Mvarとその元テンプレート:Mvarに対し、αγ=βとなるテンプレート:Mvarを求めることにある。そのためにまず、このアルゴリズムは αaβb=αAβB となるテンプレート:Mvar, テンプレート:Mvar, テンプレート:Mvar, テンプレート:Mvarを求める。巡回群の位数テンプレート:Mvarが既知の場合、テンプレート:Mvarは方程式(B−b)γ=(a−A)(modn)の解として求まる。

テンプレート:Mvar, テンプレート:Mvar, テンプレート:Mvar, テンプレート:Mvarを求めるにはフロイドの循環検出法を用いて、数列xi=αaiβbiのサイクルを検出する。この数列は、関数f:xi↦xi+1を用いて計算できるように選ぶ。テンプレート:Mvarが十分にランダムなら、この数列は平均πn2ステップでループに入る。このような関数は、例えば以下のようにすれば定義できる:まず、テンプレート:Mvarを大きさがほぼ等しい3つの集合S0, S1, S2の非交和に分割する。xi∈S1のときはテンプレート:Mvarとテンプレート:Mvarをそれぞれ2倍する。xi∈S2のときはテンプレート:Mvarをインクリメントする。xi∈S0のときはテンプレート:Mvarをインクリメントする。

アルゴリズム

テンプレート:Mvarを位数テンプレート:Mvarの巡回群、α,β∈Gでテンプレート:Mvarはテンプレート:Mvarの生成元とし、G=S0∪S1∪S2をテンプレート:Mvarの分割とする。写像f:G→Gを以下のように定める: テンプレート:Indent また、g:G×ℤ→ℤとh:G×ℤ→ℤを テンプレート:Indent と定める。

 入力 a: Gの生成元, b: Gの元
 出力 ax = bを満たす整数xを返すか、失敗する

 Initialise a0 ← 0, b0 ← 0, x0 ← 1 ∈ G, 

 i ← 1
 loop
     xi ← f(xi-1), 
     ai ← g(xi-1, ai-1), 
     bi ← h(xi-1, bi-1)

     x2i ← f(f(x2i-2)), 
     a2i ← g(f(x2i-2), g(x2i-2, a2i-2)), 
     b2i ← h(f(x2i-2), h(x2i-2, b2i-2))

     if xi = x2i then
         r ← bi - b2i
         if r = 0 return failure
         x ← r−1(a2i - ai) mod p
         return x
     else # xi ≠ x2i
         i ← i+1, 
         break loop
     end if
  end loop

計算量

実行時間はおよそ𝒪(n)である。テンプレート:日本語版にない記事リンクと組み合わせた場合の実行時間は、テンプレート:Mvarをテンプレート:Mvarの最大の素因数としたとき𝒪(p)である。

参考文献