初等整数論と暗号...2 第1 章 暗号の基礎知識 1.2 暗号の用途 1.2.1...

Post on 06-Nov-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

初等整数論と暗号

志村 真帆呂

プリント置場http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

1

第1章 暗号の基礎知識

2011.9.29, 線形代数 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

1.1 暗号の種類1.1.1 共通鍵暗号

• シーザー暗号

• スキュタレー暗号

• DES

• MISTY

• AES

1.1.2 公開鍵暗号

• RSA公開鍵暗号

• ElGamal暗号

• 楕円曲線暗号

• 超楕円曲線暗号

2 第 1章 暗号の基礎知識

1.2 暗号の用途1.2.1 古典的な用途

• 軍事文書

• 外交文書

• 秘密日記

1.2.2 現代の暗号

• インターネット上の通信

• 個人認証

• 電子投票

1.3 Mathematicaの使い方Mathematicaは,非常に高機能な数式処理ソフトです.Windowsの場合は,「スタート>すべてのプログラム>アプリケーション」

など (マシンによって異なる場合もある)からMathematicaを選択して起動する.

1.3.1 Mathematicaの基本操作

• 「file>open(あるいは new)」を選択し,ファイルを開く.

• コマンドを入力する (大文字と小文字は区別されるので気をつけること)

• 「Shiftキー」を押しながら「Enterキー」を押すことでコマンドが実行される.

例 1次の式を計算してみます.

(1). 2 + 3

(2). 36

(3).32

1.3. Mathematicaの使い方 3

(4). sinπ

4

実行結果は以下のようになります.”In”は入力,”Out”は出力,”[ ]”は通し番号です.

In[1]:= 2+3

Out[1]= 5

In[2]:= 3^6

Out[2]= 729

In[3]:= 3/2

3Out[3]= -

2

In[4]:= Sin[Pi/4]

1Out[4]= -------

Sqrt[2]

例 2 Mathematicaの整数論に関する関数 (の一部)を挙げておきます.

(1). 30番目の素数

(2). 27を 11で割った余り (これを 27 (mod 11)で表します)

(3). 1319 (mod 23)

(4). 23x (mod 7) = 1の解 (23x ≡ 1 (mod 7)の解と表すことが多い)

(5). 5040の素因数分解

(6). 45 と互いに素な数 (つまり,最大公約数が 1となる数)で 45以下の自然数の個数

In[5]:= Prime[30]

4 第 1章 暗号の基礎知識

Out[5]= 113

In[6]:= Mod[27,11]

Out[6]= 5

In[7]:= PowerMod[13,19,23]

Out[7]= 2

In[8]:= PowerMod[23,-1,7]

Out[8]= 4

In[9]:= FactorInteger[5040]

Out[9]= {{2, 4}, {3, 2}, {5, 1}, {7, 1}}

In[10]:= EulerPhi[45]

Out[10]= 24

(注意) PowerMod[13,19,23]も Mod[13^19,7l]も答えは等しくなりますが,PowerMod[13,19,23]の方が計算速度は非常に速くなります.PowerMod[23,-1,7]は 23の逆数を求めていると思えばよい.素因数分解の出力は,5040 = 24325171 の素因数と指数を表示している.EulerPhi[45]は,オイラー関数と呼ばれ,φ(45)で表す.

問題 1 (1). 200番目の素数を求めてください.

(2). 13902を 458で割った余りはいくつですか.

(3). 3493234567 (mod 631)を求めてください.

(4). 163x ≡ 1 (mod 17)の解を求めてください.

(5). φ(40320)を計算してください.

1.4 文字を数字に変換する (コード化)

表の読み方

• 下に書いてある文字に,上の数字を対応させる.

1.5. ブロック暗号 5

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 150 1 2 3 4 5 6 7 8 9 空白 あ い う え お16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31か き く け こ さ し す せ そ た ち つ て と な32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47に ぬ ね の は ひ ふ へ ほ ま み む め も や ゐ48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63ゆ ゑ よ ら り る れ ろ わ を ん が ぎ ぐ げ ご64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79ざ じ ず ぜ ぞ だ ぢ づ で ど ば び ぶ べ ぼ ぱ80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95ぴ ぷ ぺ ぽ ぁ ぃ ぅ ぇ ぉ っ ゃ ゅ ょ . , +96 97 98 99- × = %

• (例)「69」には「だ」を対応させる.

• 逆に,上の数字には下の文字を対応させる.

• (例)「い」には「12」を対応させる.

• 「とうかい」には「30131612」を対応させる.

1.5 ブロック暗号ブロック暗号は,いくつかの文字列をまとめて一つのブロックとし,それを暗号化するものです.ちなみに,シーザー暗号は長さ 1の文字列に対するブロック暗号になっています.

例 3 次のブロック暗号は,非常に弱いので現実的には利用価値はありません.ですが,説明のために用意しました.

(1). ブロックの長さ 4

(2). 共通鍵 25662197

(3). 平文 「はたらきざかり」

(4). コード化 36265117, 64165210

(a) ブロックの長さの 4 文字ずつ区切る.「はたらき」と「ざかり」(b) 4で割り切れないときは「空白」で埋める.「ざかり [空白一文字]」

6 第 1章 暗号の基礎知識

(c) コード化には配布した表を用いる.「は」は「36」に対応.

(5). 暗号化 コード化した 36265117と共通鍵 25662197 を各桁同士足す.ただし,繰り上りは無視する.3 + 2 = 5, 6 + 5 = 1, 2 + 6 = 8, 6 + 6 = 2, 5 + 2 = 7, 1 + 1 = 2,1 + 9 = 0, 7 + 7 = 4よって,51827204 が暗号文となる.同様に,64165210 は 89727307が暗号文.

(6). 暗号文 (51827204, 89727307)ができた.

1.5.1 転置式暗号

文字列をある規則に従って並べ換えて作る暗号.

例 4 (スキュタレー暗号) 古代のスパルタで用いられていた暗号.決まった長さの棒に紙を巻きつけ,そこに平文を書く.紙をほどくと,そのまま読んでも順序がバラバラになって意味をなさない.平文が「かずとはなにかまたなんであるべきか」で 4文字で一周する棒だと,

かずとはなにか.またなんであるべきか.

となって,暗号文は「かになべずかんきと.でかはまあ.なたる」となります.

問題 2 次のスキュタレー暗号を解読してください.

ちどにさのにがされよはたおるはたつさ.すら.せとみけじばかにばょなくくかうがこい

7

第2章 インターネットと暗号

2011.10.5, 担当:志村真帆呂http://www.ss.u-tokai.ac.jp/∼mahoro/2010Autumn/crypto/

2.1 インターネットと暗号インターネットでは,どのコンピュータを経由して通信が行われるかが決まっていないので,常に通信内容が第三者に漏れたり書き換えらえられたりする危険性があります.そのため,秘密にしたい情報の通信には暗号を用います.しかしながら,インターネットの特性を考えると古典的な暗号である共通鍵暗号だけではうまくいかず,どうしても公開鍵暗号が必要になってきます.今回は,その共通鍵暗号と公開鍵暗号の利点と欠点を,簡単な例を見ながら理解しましょう.

2.2 共通鍵暗号典型的な共通鍵暗号の一つに,シーザー暗号 (教科書 86ページ参照)があります.シーザー暗号は,アルファベットを何文字か (たとえば 3文字)ずらして暗号化します.暗号化とは,暗号文を作る操作です.例を挙げると,Aを 1文字ずらすと B, 2文字ずらすと C,25文字ずらすと Z といった具合になります.暗号文を復号化 (元の文に戻すこと)するには,逆向きに同じだけ文字をずらします.復号化とは,秘密の鍵を用いて暗号文から元の文を復元する操作です.たとえば,2文字ずらして C になった文字を復号化すると,Cから 2文字戻った A になるといった具合です.シーザー暗号では,暗号化と復号化で同じ鍵が使われています.もし,鍵が 6 だったら,前に 6文字ずらして暗号化,逆に 6文字ずらして復号化です.このように暗号化と復号化で同じ鍵 (共通鍵といいます)を使う暗号を共通鍵暗号といいます.

8 第 2章 インターネットと暗号

2.2.1 安全な共通鍵暗号は実現できる

シーザー暗号は共通鍵の候補が 26通りしかないので,すぐに解読されてしまい,暗号としてはほとんど役に立ちません.そこで少し工夫をして,一文字ごとにずらす数を変えてやることにすると

絶対に解読できない暗号になります.たとえば,「19, 1, 4, 12, 14」という共通鍵を使って「ANGOU」を暗号化すると,「A」の 19文字ずらしは「T」,同様に「N」は「O」,「G」は「K」,「O」は「A」,「U」は「I」となり,暗号文「TOKAI」が得られます.ここで大事なのは,「TOKAI」だけでは元の文「ANGOU」は絶対にわから

ないという事実です.なぜなら,どんな 5文字の単語も共通鍵を上手に選べば「TOKAI」という暗号文になるからです.たとえば,元の文が「BOSEI」暗号文が「TOKAI」となる共通鍵として「18, 0, 18, 22, 0」が見つかります.こうして絶対に安全な暗号が作れました.このようなでたらめな数字の列を乱数表といいます.

2.2.2 鍵の配送問題

絶対に安全な暗号があるならそれを使えばよい,と思った人も多いでしょう.残念ながら,一文字に一つの共通鍵を用いる暗号にはいくつかの問題があります.一つ目は,元の文の文字数と同じだけの鍵を用意しないといけないことです.つまり,百万字を送るためには,百万個の数をあらかじめ渡しておかないといけません.これは大変に手間がかかります.面倒だからといって乱数表を何度も使い回すと絶対に安全ではなくなり,解読される危険が大きくなってしまいます.実際,第二次世界大戦で日本軍が用いた暗号はとても優秀なものでしたが,補給が途絶えて乱数表を使い回さざるを得なくなり解読されてしまったそうです.二つ目の問題は,通信する相手が増えるたびに新しい共通鍵を用意しない

といけないことです.同じ共通鍵を使っているグループの中では,暗号化しても秘密は保てないからです.たった 20人でも,一人一人の情報を守るには190個もの共通鍵が必要になってしまい,鍵の管理が大変です.三つ目の問題は特に深刻です.それは,共通鍵をどうやって相手に渡すか

という問題です.インターネットで通信をする場合,あらかじめお互いが直接会って共通鍵を渡せない場合がほとんどです.たとえば,イタリアのネットショッピングサイトを日本から利用したとします.クレジットカードの番号を安全に渡すには暗号化をしないといけませんが,共通鍵をインターネットを通じて安全に送る方法がありません.なぜなら,次のような状況になってしまうからです.

(1). 共通鍵暗号を利用するには,お互いが同じ共通鍵を持っていないといけない.

(2). 最初に送る共通鍵は暗号化する方法がないので,そのまま送るしかない.

(3). インターネットでは,暗号化されていない情報はコピーされてしまう.

2.2. 共通鍵暗号 9

(4). 最初に送った共通鍵をコピーされると,それを用いた暗号文は全て解読されてしまう.

これを鍵の配送問題といいます.

2.2.3 数当てゲーム

鍵の配送問題を解決する方法として考案された公開鍵暗号の仕組みを具体的に理解するために,次のような数当てゲームを考えます.

数当てゲームのルール

(1). 4桁の数を一つ選ぶ.

(2). その数に 29を掛ける.

(3). 掛けた数の下 4桁を相手に伝える.

(4). 伝えられた 4桁の数から,元の数を当てる.

たとえば,次のようになります.

(1). 4桁の数として,4971を選んだとします.

(2). 4971 × 29 = 144159.

(3). 144159の下 4桁 4159を相手に伝える.

(4). 伝えられた 4159から,元の数 4971 を当てる.

全ての 4桁の数に 29を掛けていけば,下 4桁 4159 になるものが見つかり元の数を当てることはできます.でも,この方法はとても時間がかかります.では,このゲームを素早くクリアする方法はあるのでしょうか.

29 × 2069 = 60001.

実は,この式が鍵になります.

10 第 2章 インターネットと暗号

2.2.4 数の当て方

数の当て方

• 29を掛けた数の下 4桁に,2069を掛けます.

• その答えの下 4桁が,相手の考えた元の数になります.

例 5

(1). 4桁の数字 4971に 29を掛けて,4971 × 29 = 144159.

(2). 144159の下 4桁 4159に 2069を掛けると,144159×2069 = 298264971.

(3). 4971の下 4桁 は 4971,これは最初に考えた数です.

4971 × 29 × 2069 = 4971 × 60001 = 298264971.

4971だけでなく,60001にどんな 4桁の数を掛けても,必ずその答えの下4桁が元の数になるのは筆算をしてみるとすぐにわかります.

4 9 7 1× 2 9

4 4 7 3 99 9 4 2

1 4 4 1 5 9

1 4 4 1 5 9× 2 0 6 9

1 2 9 7 4 3 18 6 4 9 5 4

2 8 8 3 1 82 9 8 2 6 4 9 7 1

144159全部でなくても,下 4桁の 4159だけで 144159×2069 = 298264971の下 4桁 4971はわかる.

2.3. 公開鍵暗号 11

2011.10.12, 初等整数論と暗号 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

2.3 公開鍵暗号暗号化するための鍵を公開し,それを用いて暗号通信を行います.共通鍵暗号とは異なりお互いに鍵を共有する必要がないため,通信経路さえあればどんな相手とも安全な通信が行えます.ポイントは,暗号化するための鍵と,復号化するための鍵が異なる点です.

2.3.1 公開鍵暗号の原理

公開鍵暗号による通信手順

(1). 受信者は公開鍵を公開する,

(2). 送信者に公開鍵を用いて暗号文を作成して送る.

(3). 受信者は秘密鍵を用いて暗号文を復号化する.

解説 受信者は,ある情報から公開鍵と秘密鍵を簡単に作ることができます.もしある情報を知らないと,公開鍵から秘密鍵を作るのにとても時間がかかるとすると,公開鍵と暗号文がわかっても復号化をするのは事実上不可能になります.たとえ話で説明すると,ある方程式を解くのは非常に難しいけれど,答えがわかっていれば検算するのは簡単といった状況に似ています.このような関数を一方向関数といいます.

2.4 数の合同余りだけが必要なとき,余りが同じ数を同じものだと思って計算すると便利なことがあります.

定義 1 (合同) 自然数m,整数a, bに対し,整数 q1, q2と自然数0 ≤ r1, r2 < mがあって{

a = mq1 + r1,

b = mq2 + r2.

と表せる.このとき,r1 = r2 が成り立つことを

a ≡ b (mod m).

12 第 2章 インターネットと暗号

と書くことにします.このことを a と b は m を法として合同といい,この式を合同式といいます.

(注意) つまり,mで割った余りが等しい数を等しいとみなす記号です.a ≡ b (mod m)は,a − bがmで割り切れると言い換えることもできます.

例 6 {31 = 13 × 2 + 5,

−34 = 13 × (−3) + 5.

なので,

31 ≡ −34 (mod 13).

となります.このことは,次の等式からもわかります.

31 − (−34) = 65 = 13 × 5.

2.5 Z/NZの構造定義 2 (Z/NZ) N を自然数とします.

Z/NZ = {0, 1, 2, · · · , N − 1}.

定義 3 (Z/NZの演算) Z/NZには,次のようにして加法と乗法が定義されます.

加法 x, y ∈ Z/NZの和 x + yは,x, yを整数だと思って x + yを計算した値をN で割った余り.

乗法 x, y ∈ Z/NZの積 xyは,x, yを整数だと思って xyを計算した値をN で割った余り.

2.6 Z/NZの性質例 7 Z/5Zの乗積表は次のようになります.

定義 4 (オイラー関数) N を自然数とする.φ(N)を 1, 2, · · · , N の中のN と互いに素 ((a, b) = 1となるとき,a, bを互いに素といいます.) なものの個数で定義します.

2.6. Z/NZの性質 13

表 2.1: 乗積表

× 0 1 2 3 40 0 0 0 0 01 0 1 2 3 42 0 2 4 1 33 0 3 1 4 24 0 4 3 2 1

補題 1 pを素数,nを自然数としたときに次の等式が成り立つ.

φ(pn) = pn − pn−1.

(注意) 1から pn までの pの倍数の個数を求めれば,残りの個数が pと互いに素な数の個数となります.特に φ(p) = p − 1となります.

補題 2 a, bを自然数,(a, b) = 1としたときに次の等式が成り立つ.

φ(ab) = φ(a)φ(b).

(注意) 残りの個数が pと互いに素な数の個数となります.特に p, q を素数とすると,φ(pq) = (p − 1)(q − 1)となります.

補題 3 N を自然数,a ∈ Z/NZとする.方程式

ax = 1

が解を持つような aの個数は,φ(N)となる.

定理 1 (オイラーの定理) N を自然数,a を N と互いに素な整数とするとZ/NZの演算で次が成り立つ.

aφ(N) = 1.

14 第 2章 インターネットと暗号

2.6.1 RSA公開鍵暗号

暗号化の手順

(1). p, q:異なる素数

(2). m = pq

(3). φ(m) = (p − 1)(q − 1)

(4). e: ランダムに選んだ φ(m) と互いに素な数

(5). (m, e): 公開鍵

(6). d: 秘密鍵 (ed ≡ 1 (mod φ(m))となる dを計算しておく)

(7). M : 平文 (のコード化)

(8). C = Me: 暗号文

2.6.2 Mathematicaでの操作

(1). p = Prime[100] , q = Prime[134] (100と 134の部分は自分で適当に選んでよい)

(2). m = pq

(3). n = (p − 1) ∗ (q − 1)

(4). e: ランダムに選んだ n と互いに素な数

(5). (m, e): 公開鍵

(6). PowerMod[e,−1, n]: 秘密鍵 (これを dとおく)

(7). M : 平文 (のコード化)

(8). PowerMod[M, e,m]: 暗号文 (これを Cとおく)

2.6.3 復号化の手順

Cd = (Me)d = Med = M1 = M.

2.6. Z/NZの性質 15

2.6.4 Mathematicaでの操作

(1). M = PowerMod[C, d,m]

問題 3 p = 233, q = 239, e = 101に対する秘密鍵 dを求めてください.

2.6.5 RSA公開鍵暗号の原理

定義 4 [オイラー関数 (再掲 )] N を自然数とする.φ(N)を 1, 2, · · · , N の中のN と互いに素 ((a, b) = 1となるとき,a, bを互いに素といいます.) なものの個数で定義します.

補題 1 [再掲] pを素数,nを自然数としたときに次の等式が成り立つ.

φ(pn) = pn − pn−1.

補題 2 [再掲] a, bを自然数,(a, b) = 1としたときに次の等式が成り立つ.

φ(ab) = φ(a)φ(b).

(注意) 特に p, q を素数とすると,φ(pq) = (p − 1)(q − 1)となります.

補題 3 [一部修正] N を自然数,a ∈ Z/NZとする.方程式

ax = 1

が解を持つための条件は (a, N) = 1.また,そのような aの個数は,φ(N)となる.

定理 1 [オイラーの定理 (再掲)] N を自然数,aを N と互いに素な整数とすると Z/NZの演算で次が成り立つ.

aφ(N) = 1.

補題 4 p, q を素数とする. 任意の a ∈ Z/pqZ, a ̸= 0と任意の n ∈ Z に対し,

anφ(pq)+1 = a

が成り立つ.

16 第 2章 インターネットと暗号

2.7 秘密鍵の作り方p, q を素数,M を平文のコード化,eを φ(pq) = (p − 1)(q − 1)と互いに

素な数とする.このとき,公開鍵 (m, e) = (pq, e)に対する秘密鍵 dの計算方法は以下の

通り.秘密鍵の作り方

x, yについての不定方程式

ex + φ(pq)y = 1

の整数解 の x の値が,公開鍵 (pq, e)に対する秘密鍵 dとなる.

解説 このような dは,任意の 0でない a ∈ Z/pqZに対して

aed = a(−y)φ(pq)+1 = a

となる.つまり,暗号文 C = Me に対し,Cd を計算すると

Cd = (Me)d = Med = M

となり復号化が完了する.

2.8 RSA公開鍵暗号の安全性RSA公開鍵暗号の安全性は,公開鍵 (m, e) = (pq, e) から秘密鍵 dを計算

するのが難しいところにあります.ここで大事なのは,m = pq という素因数分解を見せてはいけないという

点です.あくまで,pqを計算した結果のmだけを公開しないといけません.

解説 公開鍵 (m, e)から秘密鍵 dを求めるには x, yについての不定方程式

ex + φ(pq)y = 1

の整数解を求める必要がありました.そのためには φ(pq)の値を知る必要がありますが,

φ(pq) = (p − 1)(q − 1)

なので,p, q の値がわからないと計算が困難になります.つまり,m = pqという素因数分解ができないとわかりません.素因数分解

はmの桁数が大きくなると非常に困難です.ここに RSA公開鍵暗号の安全性が保証されています.

2.9. 乗法群 (Z/NZ)× 17

2011.10.19, 初等整数論と暗号 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

2.9 乗法群 (Z/NZ)×

命題 1 N を自然数とする.

(Z/NZ)× := {a ∈ Z/NZ | (a,N) = 1}

は,Z/NZの乗法に関して群をなし,Z/NZの乗法群とよぶ.

(証明)

• a, b ∈ Z/NZが,(a,N) = 1かつ (b,N) = 1とすると,(ab,N) = 1となるので,積について閉じている.

• 1 ∈ Z/NZは,(1, N) = 1なので,1 ∈ (Z/NZ)×.

• a ∈ Z/NZならば,ax + Ny = 1に解があるので,a−1 ∈ (Z/NZ)×

• 結合律は,Z/NZが環なので成り立つ.

命題 2 (ラグランジュの定理) 有限群 Gの位数を nとすると,全ての Gの元 x に対して次の等式が成り立つ.ただし,eは Gの単位元.

xn = e

系 1 p, q を異なる素数とすると,全ての (Z/pqZ)× の元 x に対し,次の等式が成り立つ.

xφ(pq) = x(p−1)(q−1) = 1.

(証明) (Z/pqZ)×の位数は φ(pq), 単位元は 1なので,命題 2を適用すると等式を得られる.

19

第3章 認証技術

2011.10.26, 初等整数論と暗号 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

3.1 認証技術本人確認や,書類が正当なものであることの確認などは,社会生活を送る上で欠かせないものです.このことは,インターネット社会においても同様です.しかしながら,現実世界とは様々な差違があるため今までとは違った方法で認証を行う必要があります.

3.2 認証に要求されること現実に応用される暗号技術のほとんどは,認証に用いられています.以下では,どのような場面で認証が必要か,どのような種類の認証が必要か,それを実現する手段は,各認証に対する攻撃とその対策などを見ていくことにしましょう.

文書の信憑性に要求されること

• 文書が改竄されていないこと.

• 文書の作成者が確認できること.

• 文書を送信した事実が確認できること.

• 文書を受信した事実が確認できること.

20 第 3章 認証技術

3.3 アナログ文書の認証デジタル認証の話をする前に,様々なアナログ認証を再確認してみましょ

う.それによって,デジタル認証に共通する部分と異なる部分を明確にすることもできます.

例 8 (筆跡鑑定) 文書が本人直筆のものかを判定する方法に,筆跡鑑定があります.これは,字体,筆圧などの特徴を比較することによって真筆 (本人の直筆) であることを判定するものです.ただし,筆跡は訓練によって非常に似た文字を書くことも可能であったり,

本人の体調などによって変化するものなので,完全な判定はできません.また,文書全体を本人が書くのは大変なので,本人のサインを書き加えて

文書の正当性を保証する場合が多くあります.

例 9 (印鑑証明) 日本においては印鑑に対する信頼が高く,本人のサインだけでは文書の有効性が保証されず,印鑑による押印によってその有効性が保証されることも多くあります.特に重要な文書への押印は,役所に印影を登録することにより (印鑑証明

といいます)正規の印鑑であることを保証したものを用います.最近の問題点は,デジタル押印 (Wordなどで作成された文書には,手続の

簡素化のため印影をデジタル画像として印刷することがあります) の偽造です.デジタル画像の問題点として,全く同じ印影が印刷できてしまうことがあるからです.

例 10 (内容証明郵便) 郵便局に配達する書類のコピーを保存してもらい,書類の改竄を防ぐ.また,配達員が配達確認をするため先方に届くことも保証されます.

例 11 (供託) 代金や家賃などの受取を拒否された場合などに行います.法務局に供託金や有価証券などを納めることで,法的に支払った事実を保証できます.

3.4 ハッシュ関数ハッシュ関数は,デジタル認証の技術で最も基本的なものの一つです.たとえば,コンピュータにログインするためのパスワードを設定した場合,

コンピュータ側ではどのように認証をしたらよいでしょうか.安直に考えると,コンピュータ側にユーザ IDとそれに対応するパスワードの表を持っていて,ログインするたびにそれらが一致するかどうかを調べればよいように思えます.しかし,その方法は非常に危険です.なぜなら,何らかの方法でその対応

表が流出してしまうとセキュリティは崩壊してしまうからです.では,どのようにして安全性を確保しながらパスワードの認証をしている

のでしょうか.

3.4. ハッシュ関数 21

3.4.1 一方向ハッシュ関数の性質

一方向ハッシュ関数とは次のような性質を持つ関数です.

• 一方向ハッシュ関数にメッセージを入力する.

• ハッシュ値を出力する.

• ハッシュ値の長さは,メッセージの長さとは無関係な一定の長さに決められている.

• メッセージからハッシュ値を計算するのは簡単だが,与えられたハッシュ値を持つメッセージを見つけるのは非常に時間がかかる.(これを一方向性といいます)

• メッセージが 1bitでも異なれば,非常に高い確率でハッシュ値も異なる.

• 同じハッシュ値を持つ異なるメッセージを見つけるのは非常に困難.

例 12 (パスワードの認証) 一方向ハッシュ関数を用いると,安全性を確保しながらパスワードの認証ができます.ユーザ登録をする際に作成する対応表を,「ユーザ IDとそれに対応するパスワード」ではなく,「ユーザ IDとそれに対応するパスワードのハッシュ値」とします.すると,パスワードの認証は入力されたパスワードそのものを対応表と比較すのではなく,パスワードからハッシュ値を計算して対応表と比較することで実現できます.

問題 4 一方向ハッシュ関数を用いた認証でも,あまりに短いパスワードは危険です.また,辞書に載っている言葉をパスワードにするのも危険です.その理由を考えてください.

解説 ハッシュ値を保存することで,ファイルそのものを保存しておかなくてもファイルが改竄されたかどうかを確認することができます.与えられたハッシュ値を持つメッセージを見つけられる確率が低い性質を弱衝突耐性といいます.同じハッシュ値を持つ二つのメッセージを見つけられる確率が低い性質を強衝突耐性といいます.

問題 5 「衝突を見つけるのが困難である」という中途半端な性質ではなく,「衝突が存在しない」という性質にしないのはなぜでしょうか.

3.4.2 ハッシュ関数の種類

MD-4 128 bit のハッシュ値を与える.ハッシュ値の衝突を見つける方法が発見されたため安全とはいえない.

22 第 3章 認証技術

MD-5 128 bit のハッシュ値を与える.部分的に攻撃が可能なため,将来にわたって使用するのは推奨されない.

SHA-1 264bit 未満のメッセージに対し,160 bit のハッシュ値を与える.

SHA-256 264bit 未満のメッセージに対し,256 bit のハッシュ値を与える.

SHA-384 264bit 未満のメッセージに対し,384 bit のハッシュ値を与える.

SHA-512 264bit 未満のメッセージに対し,512 bit のハッシュ値を与える.

3.5 デジタル認証3.5.1 共通鍵暗号による認証

共通鍵暗号ベース相手認証方式 (その 1)

(1). お互いに共通鍵K を持っている.

(2). システム (認証する側)は乱数 rを作り,送信者に送る.

(3). 送信者は rをK を用いて暗号化した t = CK(r)をシステムに送る.

(4). システムは,tを復号化して rに戻ることで認証を行う.

共通鍵暗号ベース相手認証方式 (その 2)

(1). お互いに共通鍵K を持っている.

(2). システム (認証する側) は乱数 r を作り,r を K を用いて暗号化したX = CK(r)を送信者に送る.

(3). 送信者は tを復号化して r を求め,r に部分反転などを行った r′ を暗号化した t = CK(r′)をシステムに送る.

(4). システムは,tを復号化して r′を求め,さらに部分反転などを戻して rに戻ることで認証を行う.

3.6. MD5を用いたデジタル署名 23

2010.11.9, 線形代数 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

3.6 MD5を用いたデジタル署名md5make というフリーソフトを用いてMD5を用いたデジタル署名の使い方を学ぼう.

3.6.1 MD5を用いたデジタル署名の例

(1). 以下の URLから md5make をダウンロードする.http://www.vector.co.jp/soft/win95/util/se136327.html

(2). md5make108a.lha をダブルクリックして解凍する.(解凍できないときは Lhaca などの解凍ツールをダウンロードしてください)

(3). ReadMe.txt を読んで使い方を確認する.

(4). http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/から,crypto2008.pdf.lha をダウンロードする.

(5). crypto2008.pdf.lha を ダブルクリックして解凍する.crypto2008というフォルダができ.crypto2008.pdf, crypto2008.pdf.md5という 2つのファイルが入っている.

(6). md5make.exe を実行する (拡張子を表示しない設定だと,md5make と表示されます)

(7). crypto2008.pdf を「*.md5を生成又は確認するファイルをD&D」と書かれたウインドウにドラッグ アンド ドロップし,「MD5確認」をクリックする.

(8). crypto2008.pdfのハッシュ値が自動的に計算され,crypto2008.pdf.md5に書かれているハッシュ値と比較される.「一致」すれば crypto2008.pdf が改変されていないことがわかる.

(9). crypto2008.pdf.md5 をブラウザにドラッグ アンド ドロップすると中に書かれているハッシュ値 (16進 32桁)が読める.

解説 ハッシュ関数を利用した署名では,ハッシュ値そのものが改竄されていない保証が必要です.この例では,この講義のWebサイトには正しい情報があると仮定しています.

24 第 3章 認証技術

(注意) [MD5の衝突安全性] 現在,MD5には同じハッシュ値を持つ異なる二つのメッセージを作成できる方法が報告されています.このため MD5 は使用されなくなりつつあります.代りに用いられているのは SHA-1, SHA-256 といったハッシュ関数です.

(注意) MultiHasherというフリーソフトを用いると,MD5だけでなくSHA-1などのハッシュ関数を利用することができます.

(1). 以下の URLから MultiHasher_1.1_win32.zip をダウンロードする.http://www.abelhadigital.com/multihasherDOWNLOAD(Zip version) の Mirror 1 をクリックすること.

(2). MultiHasher_1.1_win32.zip をダブルクリックして解凍する.

(3). MultiHasher.exe をダブルクリックして起動する.

(4). 詳しい使い方は,Help を参照してください.

3.6.2 ハッシュ関数を用いることの意味と利点

• どんなに長いメッセージでも同じ長さのハッシュ値が得られるので,比較が簡単です.

• 署名部分だけのハッシュ値を用いると,そのハッシュ値を用いてなりすましができてしまいますが,メッセージ全体のハッシュ値を用いることによりメッセージのどの部分も改変できなくなります.なぜなら,どこか一つでも改変すると,メッセージ全体のハッシュ値が変わってしまうからです.

• 衝突耐性があるため,同じハッシュ値を持つメッセージを作成するといった偽造ができない.

3.7 公開鍵暗号によるデジタル署名

3.7.1 RSA公開鍵暗号によるデジタル署名方式

(1). 認証される側は公開鍵 (e,m)と秘密鍵 dを作成し,公開鍵を公開する.

(2). 認証される側は,署名M とM を秘密鍵 dで暗号化した C を認証する側に送信する.

(3). 認証する側は C を公開鍵 eで復号する.

3.8. man-in-the-middle攻撃 25

(4). M と C を復号したものが一致すれば認証が成功.

(注意) RSA公開鍵暗号以外でも,同様の方法でデジタル署名が作成できます.

問題 6 RSA公開鍵暗号を用いて認証を行ってみよう.

• 公開鍵 (e,m) = (34987, 262142950270493)

• メッセージ =しむら 1113

• デジタル署名=4811318084824

3.8 man-in-the-middle攻撃以下の攻撃法は,公開鍵暗号といえどもなりすましをされる危険性を示唆しています.

3.8.1 man-in-the-middle攻撃

(1). 送信者 A と受信者 Bの間に盗聴者 Kがいる.

(2). CはAから Bに送られた公開鍵を横取りし,その代りに Cの作成した公開鍵を Bに送る.

(3). 盗聴者 Cは,BがAの公開鍵 (実際は,Cの公開鍵)で作成した暗号文も横取りし,自分の秘密鍵で復号する.

(4). さらに自分の都合のよいメッセージを Aの公開鍵で暗号化して,Aに送る.

3.9 認証局man-in-the-middle攻撃がなぜ成功したかというと,公開鍵そのものが本物であるという証明をしていなかったからです.そこで,公開鍵が本物であることを証明するための仕組みが必要になります.その一つの方式が認証局方式です.

26 第 3章 認証技術

3.9.1 典型的な認証局の利用手順

(1). 受信者 A は,公開鍵 (eA,mA)を作成し,認証局 CA に登録する.

(2). 認証局 CA は,受信者 A の本人確認を行い,公開鍵 (eA,mA)を受理する.

(3). 認証局 CA は,公開鍵 (eCA,mCA)と秘密鍵 dCA を作成する.

(4). 認証局 CA は,公開鍵 (eA, mA) を秘密鍵 dCA で暗号化して証明書PKCA を作成する.

(5). 送信者 B は,認証局 CA から証明書 PKCA を取り寄せ,eCA で復号化して公開鍵 (eA,mA)と一致すれば認証が成功する.

(注意) 認証局が用いられていたからといって安全とは限りません.もし,悪意を持った受信者が自前で設置した認証局だったとすると,自分で自分が本物であると主張していることになってしまいます.つまり「オレオレ認証局」というわけです.これを回避するためには,認証局の認証局を作る方法があります.これは,

より信頼性の高い認証局が保証してくれるなら,よく知らない認証局も安全だろうという考え方で作られた仕組みです.

27

第4章 乱数

2011.11.23, 線形代数 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

4.1 暗号における乱数の役割解説 (暗号における乱数の重要性) 共通鍵暗号であっても,公開鍵暗号であっても鍵などは予め用意しておくものです.暗号自体は非常に安全性が高くても,鍵を簡単に予測されてしまっては折角の暗号の安全性が意味を持ちません.そのため,予測できないような鍵を用意する必要があります.乱数は,そういった目的のために使われる非常に重要なものです.また,乱数は何度も発生 (乱数を作る操作は発生と呼ぶことが多い) されるため,乱数を並べた数列である乱数列について議論することになります.

例 13 (RSA公開鍵暗号と乱数) RSA公開鍵暗号では,非常に大きな二つの素数 p, qを用意してm = pqを作り,さらに eという自然数をランダムに選びます.つまり,p, q, eは乱数を用いて発生させるわけです.さらに p, qには素数という条件もついているので,単に大きな数を乱数で発生させるだけでは不十分です.素数という条件を満足させるためには,ある数が素数かどうかの判定を短時間で行う必要があります.これを素数判定といい,暗号を支える中核の技術の一つです.

4.2 乱数の満たすべき性質(無作為性) 乱数が十分に「でたらめ」になっている性質.

(予測不可能性) それまでに作られた乱数から次の乱数が予測できないという性質.

(再現不可能性) 乱数列を再現するには,乱数列そのものの情報を用いなければならないという性質.

28 第 4章 乱数

解説 無作為性は,1, 1, 1, 1, 1, 1, · · · や 1, 2, 3, 4, 5, 6, 7, · · · のように数字に偏りがあったり,規則性があるものは乱数とは呼ないという性質です.1の目しか出ないサイコロを用いては公平性は保たれません.無作為性の判定には様々な試験が考えられています.予測不可能性は,次の数が何かわかってしまっては乱数にならないという

当然の性質です.コンピュータを用いていると時刻を乱数に用いるのがとてもよいアイデアに思えますが,時刻をそのまま使ってしまっては簡単に予測されてしまうのでよろしくありません.再現不可能性は,より簡単な方法では乱数列が発生させられないという性

質です.再現不可能性を実現するには,温度変化や原子核の崩壊などの物理現象を観測するなどして得られた乱数列を用います.原子核の崩壊のタイミングは完全にランダムだと考えられているので,仮に全く同じ原子を用意したとしても,そのたびに違う乱数列が得られるというわけです.

4.3 疑似乱数発生器コンピュータの内部だけでは,予測不可能な乱数を発生させることはでき

ません.なぜなら,コンピュータの内部状態は有限なので,ソフトウェアを用いる限りいつかは全く同じ内部状態になってしまい,そこからは前と同じ乱数列を発生させてしまうからです.しかしながら,ある程度よい性質を満たす乱数列を発生させることはでき

ます.それが疑似乱数発生器です.

4.3.1 線形合同法

線形合同法による乱数列の作り方

(1). 定数 a, c, m ∈ Zと,種を用意する.

(2). r0 := a ×種+ c (mod m)

(3). rn+1 := a × rn + c (mod m)

4.3.2 一方向ハッシュ関数による疑似乱数発生器

一方向ハッシュ関数による乱数列の作り方

(1). 種を用意し,それをカウンタの初期値とする.

(2). 一方向ハッシュ関数によってカウンタからハッシュ値を計算し,乱数とする.

(3). カウンタに 1を加え,新しいカウンタとする.

(4). さらに乱数が必要なら,(2)に戻る.

4.3. 疑似乱数発生器 29

4.3.3 暗号による疑似乱数発生器

(1). 種を用意し,それをカウンタの初期値とする.

(2). 暗号の鍵を用意する.

(3). カウンタを暗号化し,暗号文を乱数とする.

(4). カウンタに 1を加え,新しいカウンタとする.

(5). さらに乱数が必要なら,(2)に戻る.

31

第5章 暗号の攻撃法

2011.11.30, 線形代数 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

5.1 ケルクホフスの原理暗号の攻撃に関する大前提として,暗号の方式 (プロトコル)はわかっている,というものがあります.この前提をケルクホフスの原理といいます.

解説 暗号の方式 (プロトコル)を秘密にしておく方が安全だと思うかもしれません.ですが,秘密にしておくと不便な点も出てきます.プロトコルが秘密だと,同じプロトコルを知っている人としか通信ができません.これはインターネット上で不特定多数と取引をしようとする場合などにとても不便な状況だといえます.また,プロトコルが一度外部に漏れてしまったらもう使えないというのも効率的ではありません.このような理由により,現在ではケルクホフスの原理は一般に認められています.

5.2 暗号の攻撃法暗号の攻撃法 (アタック)は,状況に応じて次のように分類されることが多いです.

暗号文アタック 十分に暗号文がある.

既知平文アタック いくつかの平文と暗号文のペアがある.

選択平文アタック 任意の平文に対する暗号文が得られる.

選択暗号文アタック 任意の暗号文 (ただし,目的とする暗号文に対する平文は要求しないという制限をつける)に対する平文が得られる.

解説 以下,それぞれのアタックが起こる状況などをまとめてみます.

32 第 5章 暗号の攻撃法

暗号文アタック 十分に暗号文があるので,換字暗号などに有効に働く.たとえば,平文が何語で書かれているかわかっている場合には,その言語での文字の使用頻度と比較することで文字の対応がわかる場合がある.

既知平文アタック いくつかの平文と暗号文のペアがある状況は,たとえば平文の文頭に日時や名前などを書くことが決まっている場合などに発生します.また,短い定型文などもこのアタックを受ける可能性があります.

選択平文アタック 任意の平文に対する暗号文が得られるのは,暗号文作成のための装置が入手できたけれど,分解しようとすると壊れる危険があり秘密鍵そのものは取り出せないといった場合です.攻撃者にとって都合のよい平文と暗号文の組が自由に得られるので,非常に有利な状況です.

選択暗号文アタック 任意の暗号文に対する平文が得られるのなら何もする必要はなさそうですが,偽の暗号文を作成して送りつける (なりすまし)ことができないので,完全な情報が手に入っているとはいえないわけです.また,プロトコルの状況によっては,解読したい暗号文以外の暗号文に対する平文が手に入ることがあります.そのような状況で用いられる用語でもあります.

5.3 非暗号学的攻撃暗号を数学的な理論によって解読することを暗号学的攻撃といいます.そ

れ以外の攻撃を非暗号学的攻撃といいます.

5.3.1 ソーシャル・エンジニアリング

既に説明しましたが,暗号が解読されてしまう最も多くの原因がソーシャル・エンジニアリングによるものです.

• 容易に推測できるパスワード

• 誰でも見られるところに置いてあるパスワード

• 複数の目的で用いられるパスワードを共通にする.

• ログインしたまま席を外す.

これらの行為は,ソーシャル・エンジニアリングの恰好の標的となります.また,相手の錯覚や思い込みを利用する方法も巧妙になっているので,不

必要な情報は伝えないという基本を守ることが大事です.

5.3. 非暗号学的攻撃 33

5.3.2 ハードウェアに対する攻撃

ICカードなどから直接情報を取り出したり,内部構造を解析したりする攻撃です.この攻撃に対する耐性を耐タンパー性といいます.これは,ソフトウェアに対しても用いられる言葉です.

• サイドチャネル・アタック正規の方法以外で回路などから情報を取り出す方法.回路をショートさせる,電流を流す,X線で配線を調べるなどの手段が代表的.

• タイミング・アタック処理速度を計測することにより,内部でどのような動作が行われているかを推測する攻撃.実際に有効であることがわかってからは,無駄な動作をさせてこの攻撃を避けるなどの対策が必要になっている.

解説 耐タンパー性の実現には,分解しようとすると壊れる,余計な電流を流すと壊れるといった手法を用います.しかしながら,ハードウェアが自由に扱える状況というのは何でもありなので,耐タンパー性の実現は予測できない攻撃との競争でもあります.

35

第6章 素因数分解アルゴリズム

2011.12.7, 初等整数論と暗号 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

6.1 素因数分解アルゴリズム以下,nを自然数として nの素因数分解を求めるアルゴリズムを考える.

6.1.1 全数探索法

1から√

nまでの自然数で順に nを割っていき,素因数分解を求めるアルゴリズム.特徴としては,非常に遅い.

6.1.2 ρ法

乱数を利用して,確率的に素因子を見つけるアルゴリズム

(1). f(x)として適当な多項式を選ぶ.

(2). x1 を初期値とする.

(3). xi+1 = f(xi) (mod n)とする.

(4). GCD(n, x2i − xi)を計算して nの約数を求める.

例 14 n = 2201を ρ法で素因数分解してみよう.

• f(x) = x2 + 1.

• x1 = 1とする.

• x2 = 2, x3 = 5, x4 = 26, x5 = 677, x6 = 522, x7 = 1762, x8 = 1235.

• GCD(n, x8 − x4) = GCD(2201, 1235 − 26) = 31.

36 第 6章 素因数分解アルゴリズム

• 2201 = 31 × 71.

解説 ある数と nとの最大公約数を計算し,1より大きく n未満になればそれが nの約数だとわかります.nの一つの約数そのものを見つけるのは大変ですが,約数の倍数でよいなら見つかる確率が高くなります.そこで多くの素因数の積からなる数を作ってさらに確率を高くしていきます.

ρ法は,コンピュータ上で高速に大きな数を作るために多項式 f(x)を用います.大きな数を作ればその素因数も増え,nの素因数が見つかる確率が高くなります.また,同じ素因数ばかり出てこないように工夫したのが x2i −xi

の部分です.f(x)や x2i − xi をどう選ぶとよいかは難しい問題です.

6.2 Z/NZの数論定義 5 (部分群) Gを群とする. Gの部分集合 H が Gの部分群であるとはH 自身が群になることをいいます.

a ∈ Gに対し,

⟨a⟩ := {an | n ∈ Z}を aで生成される部分群といいます.

補題 5 pを素数とする.Z/pZの乗法群 (Z/pZ)×に対し,ある元a ∈ (Z/pZ)×

が存在し,

(Z/pZ)× = ⟨a⟩となる.この aを原始根という.

例 15 p = 7のとき,a = 3とすると

⟨3⟩ = {30 = 1, 31 = 3, 32 = 9 = 2, 33 = 27 = 6, 34 = 81 = 4, 35 = 5, 36 = 1}となるので,

(Z/7Z)× = ⟨3⟩が成り立ち,3が原始根であることがわかる.

定理 2 (ラグランジュの定理) 有限群 Gの位数を |G|とし,Gの単位元を eとすると,任意の a ∈ Gに対し,次が成り立つ.

a|G| = e.

例 16 (フェルマーの小定理) pを素数とすると,∣∣∣(Z/pZ)×

∣∣∣ = p− 1 なので,

(a, p) = 1となる任意の整数に対して次が成り立つ.

ap−1 ≡ 1 (mod p).

これがフェルマーの小定理です.

6.3. フェルマーの小定理の素因数分解への応用 37

6.3 フェルマーの小定理の素因数分解への応用フェルマーの小定理の応用として p − 1法という素因数分解のアルゴリズムを紹介します.

解説 (p − 1法) (1). 自然数 nを素因数分解する.

(2). もし,nが合成数ならば n = pQ, pは素数,Q > 1, Qは自然数と表せる.

(3). M = (p − 1)m という (p − 1)の倍数を考える.

(4). (a, n) = 1なる自然数 aは (a, p) = 1を満たすので,フェルマーの小定理から ap−1 ≡ 1 (mod p)となる.

(5). aM = a(p−1)m = (ap−1)m ≡ 1m = 1 (mod p)となる.

(6). つまり,aM − 1 ≡ 0 (mod p)なので,aM − 1は pの倍数になる.

(7). そのようなM が見つかったとすると,(n, aM − 1) ≥ pとなって,nの約数が見つかったことになる.

(注意) p − 1法は,p − 1が小さい素数の積に分解するときに有効に働きます.

例 17 (1). n = 2201とする.

(2). a = 2, M の候補として,多くの小さい素数の積で表される数を選ぶことにする.

(3). (n, aM − 1)を計算する.

(4). (n, a2!−1) = (2201, 3) = 1, (n, a3!−1) = (2201, 63) = 1, (n, a4!−1) =(2201, 16777216) = 1, (n, 22·5 − 1) = (2201, 1023) = 31.

(5). 2201 = 31 · 71.

解説 この例では 2201 = 31 ·71 より,p = 31が p−1 = 31−1 = 30 = 2 ·3 ·5のように小さい素数の積だったので比較的早い段階で素因数が求まりました.また,M = 2 · 5 = 10は p− 1 = 30の倍数ではありませんが,運がよいと

M が p − 1の約数であっても素因数が求まることがあります.

解説 (n, aM −1) を計算すると aM −1がとても大きくなってしまい,計算が遅くなってしまうように見えます.しかし,互除法を用いると (n, aM − 1) =(n, aM − 1 (mod n))となるので,途中の計算で上手に nで割った余りを使ってやることで計算が速くなります.

問題 7 36863を p− 1法で素因数分解してください.a = 2, M として 2!, 3!,4!,· · · を用いることにします.

38 第 6章 素因数分解アルゴリズム

6.3.1 2次ふるい法

乱数を利用して,確率的に素因子を見つけるアルゴリズム

(1). mを√

nを越えない最大の自然数とする.

(2). Q(x) := (x + m)2 − nとする.

(3). x = ±1,±2, · · · を代入して Q(x)の値を計算する.

(4). Q(x)は xが小さいと小さい値になるので小さい素因数による素因数分解ができる.

(5). Q(x)をいくつか掛けて,平方数になるように調整する.

(6). t2 をそのような Q(x)の積とする.

(7). s2 を それらに対応する (x + m)2 の積とする.

(8). s2 ≡ t2 (mod n)となる.

(9). GCD(n, s ± t)を計算して nの約数を求める.

例 18 n = 2201を 2次ふるい法で素因数分解してみよう.

•√

n = 46.9148 · · · より,m = 46.

• Q(x) := (x + 46)2 − 2201とする.

• Q(1) := (1 + 46)2 − 2201 = 8 = 23.

• Q(3) := (3 + 46)2 − 2201 = 200 = 2352.

• Q(1)Q(3) = 232352 = (235)2 = t2.

• (1 + 46)2(3 + 46)2 = 472492 = s2.

• GCD(n, s − t) = GCD(2201, 2263) = 31.

• 2201 = 31 × 71.

6.4. レポート問題 39

2011.12.14, 線形代数 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2011Autumn/crypto/

6.4 レポート問題• レポート問題はメールで請求してください.

• レポート問題請求の受付開始は,12月 19日からとします.

• 送り先のメールアドレスは,mahoro@tokai-u.jp

• 件名は,初等整数論と暗号レポート問題請求

• 本文は 学生証番号 と 氏名を明記するだけでなく,メールのマナーに則って書いてください.

• 送られてきたメールの指示に従って,レポートを提出してください.

• 24時間以内に返信が来ないときは,メールアドレスを確認してから再度請求のメールを出してください.

40 第 6章 素因数分解アルゴリズム

6.5 ρ法についての補足乱数を利用して,確率的に素因子を見つけるアルゴリズム

(1). pを nの素因数とする.

(2). x1, x2, · · · , xp, xp+1 を計算し, mod p すると,Z/pZの元の個数はp なので少なくとも一組は等しくなる.その一組を xi, xj とすると,xi ≡ xj (mod p)となる.ただし,i < j.

(3). k = j − iとおく.

xi+1 ≡ x2i + 1 ≡ x2

j + 1 ≡ xj+1 (mod p)

より,xi+1 ≡ xj+1 (mod p)となる.

これを繰り返すと,xi+t ≡ xj+t (mod p) (t = 1, 2, 3, · · · )が成り立つ.

(4). i ≤ klとなる lをとると,

xkl ≡ xkl+k ≡ xkl+2k ≡ · · · ≡ xkl+kl ≡ x2kl (mod p)

となる.これにより,m = klとおくと

x2m ≡ xm (mod p)

となる.

(5). ポイントは,pがわからなくてもこの合同式を満たすmが必ず存在すること.

(6). x2m − xm ≡ 0 (mod p)なので,GCD(n, x2m − xm) ≥ pとなる.この値が nになってしまうと素因数は求まりませんが,nより小さくなれば素因数が求まる.

(7). 以上を利用すると,x2m − xmを順に計算し nとの最大公約数を計算することで素因数分解ができることがわかる.

6.6. 2次ふるい法についての補足 41

6.6 2次ふるい法についての補足例 19 n = 29737を 2次ふるい法で素因数分解してみよう.

m =[√

29737]

= 172

Q(x) := (x + 172)2 − 29737

[Q(x)の素因数分解の指数表]x −1 2 3 7 11 311 0 6 1 0 0 0−1 1 4 0 0 0 12 0 0 0 2 1 0−2 1 0 3 0 0 1

[Q(x)の素因数分解の指数を mod 2した表]x −1 2 3 7 11 311 0 0 1 0 0 0−1 1 0 0 0 0 12 0 0 0 0 1 0−2 1 0 1 0 0 1

Q(x)の積が平方数になればよいので,素因数分解の指数を mod 2で考えればよい.つまり,指数を mod 2で考えて全て 0になれば平方数になる.

ただし,− 1は平方数でないので,− 1の個数も偶数になるようにする−1 2 3 7 11 310 6 1 0 0 01 4 0 0 0 10 0 0 2 1 01 0 3 0 0 1

(mod 2) =

−1 2 3 7 11 310 0 1 0 0 01 0 0 0 0 10 0 0 0 1 01 0 1 0 0 1

1行+ 2行+ 4行 = 0 0 0 0 0 0

よって,Q(1)Q(−1)Q(−2) = 5142528 = 89282 = t2は平方数になる.

Q(1), Q(−1), Q(−2)に対応する (1 + m)2は,(1 + 172)2, (−1 + 172)2, (−2 + 172)2

s2 = (1 + 172)2(−1 + 172)2(−2 + 172)2 = 50291102

gcd(s − t, n) = 131gcd(s + t, n) = 227これらが nの約数となり,n = 131 × 227を得る.

43

第7章 離散対数問題

2010.12.21, 線形代数 (情報数理学科)担当:志村真帆呂

http://www.ss.u-tokai.ac.jp/∼mahoro/2010Autumn/crypto/

7.1 離散対数問題gを 2以上の自然数,xを自然数とすると

a = gx

は簡単に計算できます.逆に,gと aが与えられたとき,xを求めるには

x = logg a

という対数を用いた式になります.対数は,単調増加関数 (aが大きくなると logg aも大きくなる) なので,x

の大まかな桁数などはすぐわかります.そこからだんだん値を正確にしていけば xを求めるのは簡単です.

解説 (離散対数問題) gを 2以上の自然数, pを素数,xを自然数とします.

a = gx (mod p)

を考えてみましょう.gxが p以下のときは単調に値が増加しますが,pを越えると aの値は余りなので p以下になってしまいます.つまり,xを大きくしていっても aの値は大きくなったり小さくなったりします.次の記号 Indで,この関係式から xを表すことにします.

x = Indga (mod p)

mod pをすると,g, aが与えられても xをみつけることは困難です.これを離散対数問題といいます.

44 第 7章 離散対数問題

7.1.1 ElGamal暗号

pを素数,g を (Z/pZ)× の原始根とします.原始根とは,⟨g⟩ = (Z/pZ)×

を満たす元のことでした.すると,任意の a ∈ (Z/pZ)× に対して

gx = a

となる xが存在します.この xを g, aから求める式は

x = Indga

です.今は (Z/pZ)×で考えているので, (mod p)を書く必要はありません.先に述べた理由により,g, aがわかっても xを求めるのには非常に時間が

かかります.これを用いて暗号が作れます.

[鍵生成]

(1). 素数 p, 原始根 g, ランダムな値 x, (0 < x < p)を用意する.

(2). 以下の計算は,(Z/pZ)× で行う.

(3). h = gx とする.

(4). (p, g, h)を公開鍵とし,xを秘密鍵とする.

[暗号化]

(1). 平文のコード化を mとする.ただしmは pより小さい値.

(2). ランダムな値 r, (0 < r < p)を用意する.

(3). c1 = gr, c2 = mhr とする.

(4). (c1, c2)が暗号文.

[復号化]

(1). c2(cx1)−1 を計算すると mが得られます.

(2). 理由は, 以下の計算でわかります.c2(cx

1)−1 = mhr((gr)x)−1 = mhr((gx)r)−1 = mhr(hr)−1 = m

解説 Elgamal暗号は,g, hがわかっても h = gx となる xを求めることが困難であるという離散対数問題を安全性の根拠としています.

top related