• 検索結果がありません。

数体ふるい法による素因数分解について

N/A
N/A
Protected

Academic year: 2021

シェア "数体ふるい法による素因数分解について"

Copied!
28
0
0

読み込み中.... (全文を見る)

全文

(1)

数体ふるい法による素因数分解について

小島 聡史

平成2231

(2)

目 次

1 はじめに 2

2 概要 5

3 アルゴリズム 8

4 素イデアルの生成元の求め方 11

5 ふるいの実行 14

6 単数部分の分解 17

7 UFDではない場合 19

8 Z[α]が整数環ではない場合 23

9 具体例 24

(3)

1

はじめに

本修士論文は数体ふるい法のアルゴリズムについてのLenstraLenstraの論文[5]

の解説である. これは非常に大きい自然数を素因数分解するアルゴリズムであり, ンピューターで主に使用されているRSA暗号の強度は大きい自然数の素因数分解の 困難さに依存している.よって,高速な素因数分解の実現はRSA暗号が解読されてし まうことを意味するため, このアルゴリズムの研究は実用的に重要な意味を持つ. 体ふるい法は現在知られているアルゴリズムの中では最も高速なものであるが, RSA 暗号を解読できるほどではない. 数体ふるい法の計算量は分解したい数をnとすると, およそ

exp((64/9)1/3(logn)1/3(loglogn)2/3)

程度であり, これはn = 10150とするとおよそ1019程度の数となり, またn= 10300 するとおよそ6.5×1025程度の数となる.

最初に注意しておくが, 数体ふるい法は必ず成功するとは限らない. つまりアルゴ リズムを実行しても自明な約数しか得られない場合がある. それでもたいていの場合 に成功することが期待できるアルゴリズムである.

RSA暗号について簡単に述べておく. まず適当な自然数eと大きい2つの素数p, q を選び,n =pqを求める.次にde1 (mod (p1)(q1))を満たすdを計算する. して平文mを暗号化するときに用いる暗号化鍵(e, n)を公開し, 暗号文cを復号化す るときに用いる復号化鍵dを秘密に保管する. 暗号化と復号化は,

{

暗号化· · ·cme (mod n), 復号化· · ·mcd (mod n)

という計算により実行される. 暗号化はenが公開されているので誰でも簡単にで きるが,復号化に必要なdpqを知らないと計算が困難であり, pqを知るため にはnを素因数分解する必要がある. この素因数分解の困難さがRSA暗号の安全性 の根拠である. ただし, nの素因数pq10進で数桁しか違わないような近いもの である場合はFermat法と呼ばれる方法を用いることでnが高速に因数分解されてし まうので, 暗号に用いる素数の選び方には注意が必要である. Fermat法はn2つの 平方数の差として表され, これら2つの平方数の一方が非常に小さいという事実を用 いる方法である.

はじめに本論文で用いる代数的整数論の定義や定理をいくつか述べておく.

定義 1.1 (ノルム). 代数体Kの元αに対してその共役元をα1, α2, · · · , αdとする.

このときαのノルムN(α)とトレースT(α) N(α) =α1α2· · ·αd,

T(α) =α1 +α2+· · ·+αd

と定義する.

(4)

αの最小多項式をf(x) = cdxd+cd1xd1+· · ·+c1x+c0とするとN(α) = (1)d(c0/cd) である.また, a+(a, bQ, b 6= 0)ならば,

N(a+bα) = (1)df(a/b)

cd/bd = (b)df(a/b) cd であるから,

cdN(a+bα) =cdad+cd1ad1(b) +· · ·+c1a(b)d1c0(b)d となる.

定義 1.2 (多項式の判別式). 既約多項式f(x)の根をα1, α2, · · · , αdとする. このと fの判別式Df

Df =( ∏

1i<jd

iαj) )2

と定義する.

定義 1.3 (体の判別式). d次の既約多項式f(x)の根をαとし, 代数体K =Q(α)の整 数基底をω1, ω2, · · · , ωdとする. このとき体Kの判別式DK

DK =( det(

ω(j)j ))2

と定義する.

これらの判別式に対して次の定理が成り立つ.

定理 1.4. OKを体Kの整数環とし, Kの代数的整数αd次の最小多項式をf(x) する. このとき

Df/DK = (OK :Z[α])2 が成り立つ.

この定理よりDf が平方因子を持たなければ, (OK :Z[α]) = 1すなわちOK =Z[α]

であり, 1, ω, · · · , ωd−1Kの整数基底となる.

整数環のイデアルについては一般に次の定理が成り立つ.

定理 1.5. 整数環のイデアルは必ず有限個の素イデアルの積に分解され, その分解の 仕方は一意的である.

数体ふるい法では素数の素イデアル分解に関する次の定理が重要である.

(5)

定理 1.6. 代数的整数αの最小多項式をf(x)とし, K =Q(α)の整数環をOKとす る. さらに, 素数pを指数(OK :Z[α])を割らないものとする. このときf(x)modp

f(x)q1(x)e1q2(x)e2· · ·ql(x)el (mod p)

と既約分解されるならば, Pi = (p, qi(α))とおくとPiは素イデアルであり, 単項イデ アル(p)は,

(P) =P1e1P2e2· · ·Plel と素イデアル分解される.

謝辞

セミナーや論文作成にあたり親切に指導してくださった雪江先生に深く感謝致します.

また, セミナーで共に学び,数多くのアドバイスをいただいた五十嵐健太君, 佐々木万 喜夫君,田中修平君, 山田洋輔君にも感謝致します.

(6)

2

概要

数体ふるい法による因数分解では次の事実を利用する.

(2.1) x2 y2 (mod n)かつx6≡ ±y (mod n) = 1<gcd(x±y, n)< n この仮定を満たすx, y を構成するアルゴリズムが数体ふるい法である.また, x2 y2 (mod n)であるx, yに対して高々50%の確率でx≡ ±y (mod n)となってしまい, nの非自明な約数がみつからないことがあるので, 数体ふるい法は確率的アルゴリズ ムである.

数体ふるい法は名前の通り, 代数体を用いた因数分解法である. ここでは基になる アイデアを述べることにし, 具体的な内容は次節以降に述べる.

まずは代数体を構成する. 整数係数多項式f(x)1つ固定し, その根をα Cとし, mZ/nZnを法とするfの根とする.

このα を用いて代数体をK = Q(α)と定義する. さらにK の整数環OK を考える のだが, ここでは簡単のためにZ[α] = OKであることと, Z[α]UFDであることを 仮定する. これらを仮定しない場合については後に述べる.

そして次の環準同型を考える.

ϕ:Z[α]−→Z/nZ 7−→m) 次が数体ふるい法の重要なアイデアである.

gcd(a, b) = 1を満たすa, bZに対して次の図式を考える.

a+ −−−→ Z[α]の素元の積

ϕ

y yϕ a+bm −−−→ Z/nZの元の積

ここで,a+bmnより小さい数を考えるので, “a+bm −→ Z/nZの元の積”は,Z での素因数分解と同様である. この図式により得られる2つの分解の違いを利用する 事で得られる, nを法とした合同式を複数個集め, それらをかけ合わせることで(2.1) で書いたx2 y2 (mod n)という形の合同式を構成するのである.

2.2. n= 2117, m= 46, f(x) = x2+ 1, α=

1のとき 1 + 5

1 −−−→ (1 +

1)(3 + 2

1)

ϕ

y yϕ

1 + 5×46 = 231 −−−→ 3·7·1147·95 (mod 2117)

(7)

前の図式においてa0+a1α+a2α2+· · · というZ[α]の任意の元ではなく, a+ いう形の元を用いた理由は,a+Z[α]での分解の様子を分かりやすくするための 補題2.3が成り立つからである.

Z[α]の素イデアルP のノルムは通常

N(P) := #(Z[α]/P) =pf (p:素数, f Z)

という素数のべきで表されるが, a+を含む素イデアルの場合は次の補題が成り 立つ.

補題 2.3. a, bZ, gcd(a, b) = 1 とする. このときa+bαを含むZ[α]の素イデアルの ノルムは素数である.

証明. P a+を含む素イデアルとし, 有限体F に対して環準同型ψ ψ :Z[α]−→F, Kerψ =P

と定義する. すなわち, Z[α]/P = F が成り立つようなF を考える. F の標数をp (素 数)とするとFpF の部分体である.a+P なので,ψ(a+bα) = 0である.よって

ψ(a) =ψ(b)ψ(α)

が成り立つ. a, b Zよりψ(a), ψ(b) Fpであることに注意しておく. もしψ(b) = 0 ならばψ(a) = 0であるから, a, bが共にpで割り切れることになり, gcd(a, b) = 1 矛盾する. よって,ψ(b) = 0であり, ψ(α) = ψ(a)ψ(b)1 Fpとなる.

したがってF =Fpとなり,

Z[α]/P =Fp

が成り立つので, ノルムの定義よりN(P) =pが成り立つ.

実際にa+Z[α]の素元の積に分解するのは手間がかかるが, 補題2.3により a+の分解のおおまかな様子をN(a+bα)の素因数分解を用いて知ることができる.

2.4. a+= 1 + 7

1に対して { N(1 + 7

1) = 50 = 2×52, 1 + 7

1 =

1(1 +

1)(1 + 2

1)2. ここで, N(1 +

1) = 2, N(1 + 2

1) = 5.

この例では1 + 7

1のノルムが21回割れ, 52回割れることに対応して, 1 + 7

1がノルム2の元1 +

11回割れ, ノルム5の元1 + 2

12回割れ

(8)

ることが分かる.よって,a+を素元分解する場合にその素因数が分かったなら, ルムの計算によって素因数のべき指数を知ることができる.

a+bm, N(a+bα)の分解を考える際, これら自身は大きくてもかまわないが, その 素因数は小さいほうが扱いやすい. そこで, 次の定義を与える.

定義 2.5. Bを正の定数とする. このとき, k ZB-smoothであるということをk の全ての素因数がB以下であることと定義する. またγ OKB-smoothであると いうことをN(γ)の全ての素因数がB以下であることと定義する.

(9)

3

アルゴリズム

各段階での詳しい説明は次節以降にすることにして, この節ではアルゴリズムの大 まかな流れを述べる.

Step 1. f(x)を構成する.

前節で述べたような多項式を構成するのであるが, その係数がなるべく小さくなる ようにとりたい.ここでは base m methodと呼ばれる方法を用いる.このアルゴリズ ムの目標はf(m) =nを満たす多項式を構成することである.

まずn >2d2を満たすdZ>11つ選び,m = [n1/d]とおく. 次にn (3.1) n =cdmd+cd1md1+· · ·+c0 (ci Z)

m進展開し,

f(x) =cdxd+cd1xd1+· · ·+c0 とする.このff(m) = nを満たす.

この方法を用いる利点はf(x)がモニックになることである.

命題 3.2. (3.1)において, cd= 1cd1 dが成り立つ.

証明. 1i d1であるiに対して2d = (1 + 1)d =d1 i=1

(d

i

)+ 2であるから, i に対して(d

i

) 2d2< n1/d2m1が成り立つ. さらに,

(3.3) (m+ 1)d=md+ (d

1 )

md1+ (d

2 )

md2+· · ·+ ( d

d1 )

m+ 1

であるから,これは(m+ 1)dm進展開を与えている. よって(3.1)(3.3)の係数を 比較して, cd 6= 1とするとmd n < (m+ 1)dに矛盾する. したがってcd = 1であ る. また, cd1 > dとするとやはりmd n <(m+ 1)dに矛盾するのでcd1 dであ る.

dn200桁以上ならd= 6, 100桁以上ならd= 5, 80桁程以上ならd = 4, 60 以下ならd= 3ととればいい.

fが可約であれば, 次の操作を行う.まず,

f(x) = g(x)h(x) (g, hZ[x])

と分解する. fがモニックなので, ghもモニックにとれる. 次にmを代入して, n=f(m) =g(m)h(m)

(10)

とする.g(m)6= 1, nならばnの非自明な因数が見つかったことになるので, アルゴリ ズムは終了する. g(m) = nであれば, この条件を満たす既約多項式を求めることが base m methodの目標だったので, fgで置き換えればいい.

整数係数多項式を既約多項式の積に分解するアルゴリズムについては[6]Section 3を参照のこと.

Step 2. 素因数の候補を求める.

B108程度の定数とし, 集合

(3.4)

F ={p: prime |pB},

G={πP :Z[α]の素元 | |NP)| ≤B}, U ={Z[α]×の生成元}

を求める.

今, Z[α]UFDだと仮定しているので, πP Z[α]の素イデアルの生成元である.

また,P = (πP)であるとき,N(P) =|NP)|であることを注意しておく.

Step 3. B-smoothな数を求める.

a+bma+が条件

gcd(a, b) = 1 a+bm=

pF

pep a+=

γGU

γeγ

を満たすような整数の組(a, b)#(F GU)個より多くみつける. 2番目の条件は a+bmB-smoothであるという意味で, 3番目の条件はa+B-smoothである という意味である.

このような(a, b)を見つけるためにはa, bをある範囲で動かしてa+bm, a+

B-smoothかどうかを確かめるという方法をとるが, 動かす範囲はそれぞれ

107 a107, 1b 107 程度であればいいとされている.

a+ϕでうつして,

a+bm=

pF

pep, ϕ(a+bα) =

γGU

ϕ(γ)eγ

(11)

という2つのZ/nZの元の積の形を得る.これらはZで等しいとは限らないが, Z/nZ では等しいので,

(3.5)

pF

pep

γGU

ϕ(γ)eγ (mod n)

という合同式が得られる.

Step 4. x2 y2 (mod n)という形の合同式を求める.

(3.5)の合同式と, その指数部分を2を法として考えて得られるベクトル

((ep mod 2),((eγ mod 2))pF,γGU

を対応させる. このようなベクトルは#(F GU)個より多くあるので線型従属で ある. そこで, 行列の掃き出しを用いて,和が2を法としてゼロベクトルになるベクト ルの組を見つける. この組のベクトルに対応する合同式を掛け合わせると

pF

p2wp

γGU

ϕ(γ)2wγ (mod n) という形の条件が得られるので,

x=

pF

pwp, y =

γGU

ϕ(γ)wγ

とおくと,x2 y2(modn)を満たすx, yが得られる.このx, yに対してx6≡ ±y(modn) であればnの約数がみつかり, アルゴリズムは終了する.x≡ ±y (mod n)となってし まった場合はStep 4.でベクトルの組を選びなおす.

(12)

4

素イデアルの生成元の求め方

この節では主に(3.4)Gの元, 即ちZ[α]の素イデアルの生成元の求め方について 述べる.Uの元はGの元を求める過程で同時に求めることになる.なお, この節で述べ るアルゴリズムはGの元を全て求めるものではなく,数体ふるいを実行するために十 分な数の元を求めるものである.

素数pに対して

f(x)(xc)g(x) (mod p) (cZpに依存する定数) であるとき, P = (p, αc)とおくと

Z[α]/(p, αc) = Z[x]/(f(x), p, αc)

= Fp[x]/(xc)

= Fp

が成り立つので, P Z[α]の素イデアルとなる. このとき, γ Z[α]P の生成元で あるためには|N(γ)|=pかつγ P であればいいので,

(4.1) γ =

d1

i=0

siαi Z[α]P の生成元⇐⇒ |N(γ)|=p かつ

d1

i=0

sici 0 (mod p) が成り立つ.

4.2. (4.1)において2つめの条件がないと, γP = (p, αc)の生成元なのか P0 = (p, αc0)の生成元なのかが分からない. 即ちこれはγP の生成元であるこ とを保証するための条件である. どのイデアルの生成元なのかをはっきりさせておく ことは, 次節でa+の素元分解を求める際に非常に役に立つ.

次に素元を効率的に求める際に有効な2つの定数L, Mについて述べる.

記号の準備からはじめる.Kの整数環OKの判別式∆ =Df/[OK :Z[α]]2で定 義する.また,ωdRdの単位球の体積ωd=πd/2/Γ(1 +12)とし, vd= (4/d)(d/2)d おく.このとき定数L, M

L= (vd·

·B)2/d, M = [vd·

∆]

と定義する. ここでBB-smoothB, すなわち素因数の大きさの上限である.

(13)

γ =d1

i=0 siαi OKで, d1

i=0 |siN(α)i/d|2 Lを満たすものを考える. このような γに対して,

|N(γ)| = |

d1

i=0

sdiN(α)i| ≤

d1

i=0

|sdiN(α)i|

d1

i=0

|s2iN(α)2i/d|d/2 (

d1

i=0

|s2iN(α)2i/d|)d/2 Ld/2 M ·B

が成り立つ.これはどういうことかというと,素元を効率よく求めるためには|N)|= pを満たすγだけではなく, |N(γ)| = kp (k Z)のようにノルムが素数の整数倍と なっているものも利用する必要があるが, 上で述べたようなγを考えた場合にはk あまり大きくない数Mで抑えられるということである.

上の議論よりG, Uの元を求めるアルゴリズムは次のようになる.

1. P = (p, αc)という形のZ[α]の素イデアルを全て求める. つまり, f(x)1 因子を全て求める.

2.

d1

i=0

|siN(α)i/d|2 Lを満たす γ =γ(α) =

d1

i=0

siαi に対してN(γ)を求める.

3. |N(γ)|= 1であるγU の元とする.

4.ある(p, αc)に対して,|N(γ)|=p かつγ(c)0 (modp)を満たすγGの元 とする. また, γがどのイデアルの生成元かという情報も記録しておく.

これだけでは十分な数が集まらない可能性があるのでさらに次を実行する.

5. |N(γ)/N0)|= 1となるγ, γ0がある場合,γ/γ0 Z[α]ならばγ/γ0Uの元と する.

6. |N(γ)|=kpかつ |N0)|=k (kZ)であるγ, γ0がある場合,

γ(c)/γ0(c) 0 (modp)を満たす(p, αc)があり, かつγ/γ0 Z[α]ならばγ/γ0 Gの元とする.

次に, f(x)pを法とした一次因子の求め方について述べる. 基本になるのは次の 式である.

xpx=

p1

i=0

(xi) (mod p) これより

f1(x) = gcd(f(x), xpx)

f(x)の全ての1次因子の積となる.このf (x)1次因子に分解したい.

(14)

pが小さければ k= 0,1,· · · , p1に対してf1(k)0 (modp)かどうかを確かめれ ばよい.

pが大きいときは次の式を用いたほうが高速に実行できる.

xpx= (x+a)((x+a)(p1)/2+ 1)((x+a)(p1)/21) (a= 0,1,· · · , p1) これより, まずa= 0に対して

g1(x) = gcd(f1(x), (x+a)(p1)/2+ 1)

を計算する. 1degg1 <degf1 であればh1(x) = f1(x)/g1(x)とおくと f1(x) = g1(x)h1(x)

と分解される. そうでなければa = 1に対してg1(x)を求め, 同様の処理をする. さら g1(x), h1(x)を同様に分解することでf1(x)を完全に分解する.

(15)

5

ふるいの実行

a+bm, a+が共にB-smoothであるような整数の組(a, b)を見つけたい.具体的 には,a, bを動かしてa+bmB-smoothになる(a, b)を求める. そしてこの(a, b) 対してa+B-smoothかどうかを調べる, という方法をとる.

a+bmの分解は容易であるが, a+を実際にZ[α]の素元で割るのは手間がかか る. この手間を避けるためにa+の素イデアル分解とN(a+bα)の素因数分解を対 応させる. これについては2節で簡単な例をあげてある.

まず,素イデアルP) =P = (p, αc)に対して

πP | a+ ⇐⇒ P = (p, αc) | (a+bα)

⇐⇒ a+bc0 (mod p)

が成り立つ. これにより, πP a+を割るかどうかをたしかめることはπP と対応 する組(p, c)a+bc0 (mod p)を満たすかどうかを調べることに帰着できる.

また,2.4で触れたとおり

pk | N(a+bα) ⇐⇒ πPk | a+

であるから, a+の分解の指数部分はN(a+bα)の素因数分解の指数部分に帰着さ れる.

5.1. a+は同じ素数pを用いた2つの素イデアル(p, αc)(p, αc0)で同 時に割れることはない.

以上の議論より, 目的の組(a, b)を求めるアルゴリズムは次のようになる.

・まずa+bmB-smoothになる(a, b)を求める

1.b = 1, p = 2として、p|a+bmとなるaを探す.これはa = 0,±1,±2,· · · と順番 に試していけばいい.そのようなaが見つかったら, (a+ip) + (b+jp)mpで割 れることを記録しておく.

2. ppのべきで置き換えて1を実行する.

3. pBに対して1,2を実行する.

4. bb+ 1で置き換えてはじめからくり返す.

これはつまり, b1つ固定してaを動かし, a+bmF の元で割れるかどうかを 調べ, 全てのaについて調べたらb1つ動かして同様の処理をする,ということであ る. これにより

a+bm=

pep×r

参照

関連したドキュメント

非政治的領域で大いに活躍の場を見つける,など,回帰係数を弱める要因

一般法理学の分野ほどイングランドの学問的貢献がわずか

この点について結果︵法益︶標準説は一致した見解を示している︒

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計

 学年進行による差異については「全てに出席」および「出席重視派」は数ポイント以内の変動で