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

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

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

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

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

アルゴリズム

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

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

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

 i ← 1
 loop
     xif(xi-1), 
     aig(xi-1, ai-1), 
     bih(xi-1, bi-1)

     x2if(f(x2i-2)), 
     a2ig(f(x2i-2), g(x2i-2, a2i-2)), 
     b2ih(f(x2i-2), h(x2i-2, b2i-2))

     if xi = x2i then
         rbi - b2i
         if r = 0 return failure
         xr−1(a2i - ai) mod p
         return x
     else # xix2i
         ii+1, 
         break loop
     end if
  end loop

計算量

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

参考文献