10 暗号 2008年度 電子計算機及び実習 65
電子計算機及び実習 第 10 回 (12/15)
10 暗号
10.1 今日のテーマ
*暗号の概念
**今日の課題課題10.1を別紙にて提出すること.
10.2 暗号の概念
暗号については次の本が面白い.
『暗号解読』サイモン・シン著,青木薫訳,新潮社.
暗号が時には人の命のみならず国家の命運を握っていたこと,暗号作成者と暗号解読者が争いながら暗号自体が 進化してきたことなどが語られている.単なるお話ではなく,暗号のしくみもきちんと説明されており(さすがに 数学的な証明までは付いていないが),これを一読すれば多くの概念が理解できるであろう.今回のレジュメの内 容の多くはこの本を参考にしている.
10.2.1 なぜ暗号が必要か
秘密の通信をしたい,という欲求に異義を唱える者は少ないだろう.たとえ重要な内容でなくとも,電話が盗聴 されたり,封書の中身が盗まれたりしたら良い気分ではいられないはずである.会社間の取り引きの内容や,ク レジットカードの番号などの重要な内容ならなおさらである.今や,メールなどインターネットを介してこのよ うな重要な情報をやりとりすることは珍しくない.この場合,多くの中継点を通るので,情報を盗むのは実に簡 単である.よって,第三者がのぞき見ても意味が分からないように暗号を用いる必要性が高まっている.
日本ではプライバシーの保護は重要視されていて,いわゆる盗聴法の導入の際にはかなりの反発があった.し かし,アメリカでは当局による盗聴は日常的に行われているという.犯罪に対処するという大義名分があるから である.当局にとっては暗号は悪である47.近年では,アメリカ同時多発テロの犯人達は暗号で連絡を取り合って いたと言われ,当局の対応の遅れの一因とされる.次回,授業で用いる PGPを開発したジマーマンは,武器輸 出法違反の容疑で逮捕された(その後長い闘いを経て無罪となった).一概に暗号が善か悪かとは言えないが,そ の重要性が共通に認識されていること,立場によって考え方が異なることは理解するべきである.
10.2.2 シーザー式暗号–暗号の原点
記録に残る最古の暗号48,シーザー式暗号は,ごく単純な暗号であり,基本概念を理解するのに最適であるか ら,ここに簡単に説明する.
ローマ帝国の祖,カエサル(Caesar,英語読みでシーザー)は,戦争の際に,アルファベットを後ろに3 文字シ フトするという暗号を使っていた.ただし,最後まで行くと前に戻ることにする.すなわち,
a→ D, b→ E, c→F, ..., x→ A, y→B, z →C
と変えるのである(区別のため,変換後のアルファベットは大文字で書くのが慣用である).この暗号では,例え
ば meet at six. (六時に会おう)という文章は次のようになる.
PHHW DW VLA.
47多少刺激的な言い方をしていることは認めよう.より正確には,暗号が普及して犯罪者や国家に仇なす者が強力な暗号を用いることは困 る,ということである.自分達が用いる暗号は善だと思っているに違いない.
48正確には,最古の換字式暗号である.転置式暗号ならばもっと古いものが確認されている.
10 暗号 2008年度 電子計算機及び実習 66
元の文章を平文,変換された文章を暗号文という.平文から暗号文を作成する手続きを暗号化といい,暗号化の ための一定の手続きを暗号という49.暗号文を受け取った者は,アルファベットを前に3 文字シフトすれば元の 文章を得ることができる.この手続きを復号化という.
このような,何文字かシフトする,というタイプの暗号をシーザー式暗号という.この暗号の弱点はいろいろ あるが,致命的なのは,「シフトする」というルールが敵に知られたら終わり,という点である.何しろシフトの 方法は 25通りしかないのだから,しらみつぶしに試してみれば,すぐに平文を得ることができる.このように,
正規の受取人でない者が不正に平文を得ることを,暗号の解読という.
10.2.3 鍵
シーザー式暗号は,数学的に次のように理解することができる.まず,アルファベットに数を対応させる(文字 コードのことを思い出して欲しい).例えば次のように決める.
a = 0, b = 1, c = 2, ..., x = 23, y = 24, z = 25
このように,アルファベットを数と同一視すれば,カエサルの用いた暗号は,3 を足す,ということに他ならな い.例えば,
a = 0 −→+3 3 = D
ということである.ただし,26以上になったときは対応するアルファベットがないので,その場合は26を引く ことにする.例えば
x = 23 −→+3 26 −→−26 0 = A のようにする.
暗号化に用いる手がかりを暗号鍵,復号化に用いる手がかりを復号鍵という.今の場合,3が暗号鍵,−3が復 号鍵である.暗号の詳細は,大まかなシステム(今の場合,シフトする,ということ)と鍵によって決まる.暗号 の安全性は,システムを秘密にする,ということに依存するべきではなく,鍵を秘密にする,ということに依存 するべきである.2人だけで個人的に暗号を送り合うだけなら,システムを秘密にすることは可能かもしれない が,大人数で長い期間暗号を用いる場合,システムを秘密にすることは事実上不可能である.よって,鍵の個数 が十分に多いことは,暗号システムが安全であるための必要条件である.
10.2.4 「改」シーザー式暗号
シーザー式暗号では足し算をしたが,掛け算をするとどうであろうか.この場合,a (= 0)は必ずA (= 0) に なるのであまり良くない.改正案として,掛け算の後足し算をしてはどうだろうか.例えば3を掛けて5 を足す という変換をしてみよう.ただし,26以上になったときは,26未満になるまで繰り返し26を引くことにする.
例えば,
a = 0 −→×3 0 −→+5 5 = F,
q = 16 −→×3 48 −→+5 53 −→−26 27 −→−26 1 = B
のようにする.繰り返し 26を引く,という部分は,26で割った余りを取る,と考えても同じである.自明なこ とではないが,この対応は一対一である50.復号化するには,5 を引いて9を掛ければよい51.今度は0に満た なくなるので,0 以上になるまで繰り返し26を足すことになる.
B = 1 −→ −−5 4 −→ −×9 36 −→ −+26 10 −→+26 16 = q
参考までに,この暗号でアルファベットがどのように変換されるのかを表にしておこう.
a b c d e f g h i j k l m n o p q r s t u v w x y z
F I L O R U X A D G J M P S V Y B E H K N Q T W Z C
49日常会話では,暗号文のことを暗号と呼ぶこともあるが,正しくは暗号とは暗号システムのことである.
50掛ける数が13で割れない奇数ならば一対一になる.
519をどこから見付けて来たのか不思議に思うかもしれない.実は,26で割った余りを取る世界では,3を掛けてさらに9を掛けると元 に戻る.やや専門的な用語を用いれば,9は乗法に関して3の逆元である.これを見付けるには,原理的にユークリッドの互除法を用いる.
10 暗号 2008年度 電子計算機及び実習 67
10.2.5 暗号の進化
「改」シーザー式暗号は十分に複雑であると感じたかもしれない.プライベートで用いるにはこれで十分であ ろう.しかし,重要な内容を通信するには,これでは全く不十分なのである.人は,命と同等の物を守るために は,もしくは好奇心とか功名心のようにつまらない理由でも,暗号を解読する努力を惜しまないものである.実 際,暗号の歴史は,暗号作成者と暗号解読者との闘いの歴史であった.
シーザー式暗号の鍵の個数はわずか25個,「改」シーザー式暗号でも12×26−1 = 311個しかない.これは 手作業でもしらみつぶしで調べられる程度である.アルファベットをどのように交換しても良い場合,鍵の個数
は 26!,すなわち約4×1026 個になる.(少なくとも計算機が発達していない時代ならば)これは十分な個数のよ
うに思える.しかし,しらみつぶしに調べなくとも,劇的な近道が存在するのである.最も効果的なのは,頻度 分析と呼ばれる方法である.有名な事実であるが,英語ではeが最も頻繁に使われ,全文における割合は約12 % にも達する.故に暗号文で最もよく使われる記号はeだと推測されるのである.この辺りのトリックは,
エドガー・アラン・ポー 『黄金虫』
コナン・ドイル 『踊る人形』(シャーロック・ホームズのシリーズの一作)
に用いられている.こうして,千年以上用いられてきた,いわゆる単アルファベット暗号は,16世紀には全く安 全ではなくなった.
無線通信の発達や,二度の世界大戦の勃発により,より安全な暗号の必要性が高まった.そこで用いられるよ うになったのは,ドイツ軍のエニグマに代表される多アルファベット暗号である.これは,大雑把に言うと,一 文字ごとに変換する法則を変える,という暗号システムである.この暗号には頻度分析は通用しないので.かな り解読は難しい.しかし,第二次世界大戦中,イギリスは国中の頭脳を集結し,通信文の癖などを手がかりにし て多くの暗号文を解読した.
通信文の癖をなくし,適正に用いれば,多アルファベット暗号はかなり強力であるが,それでも一つの大きな 問題がある.それは鍵の配送である.暗号文をやり取りするには,あらかじめ通信者全員で打ち合わせの上,鍵 を決定しておかなければならないが,これが難しいのである.実際,大戦中にはスパイが鍵を盗む,ということ は頻繁にあった.もちろん,鍵を配る人数が少なければ,配送はそれほど難しくはない.例えば,アメリカ大統 領とロシア大統領のホットラインにおいては,十分に長い鍵が厳重に保管され,多アルファベット暗号でやりと りが行われる.しかも,安全のため,一度用いた鍵は二度と用いられない.これはワンタイムパッド暗号と呼ば れ,完全に安全であることが保証されている.
インターネットが発達している今日では,多くの人が安全に情報をやり取りするための暗号が必要である.そ のために考え出されたのが公開鍵暗号である.
10.2.6 公開鍵暗号
従来の暗号では,鍵を秘密にしておくことが重要であった.シーザー式暗号のように,暗号鍵が分かると簡単 に復号鍵が分かるからである.しかし,1977年にリヴェスト,シャミア,アドルマンの考え出したRSA 暗号で は,暗号鍵から復号鍵を推測するのが非常に難しい.よって,暗号鍵は公開することができ,復号鍵だけ秘密に しておけばよい.この意味で,公開鍵暗号における暗号鍵を公開鍵,復号鍵を秘密鍵という.この暗号システム では,少しだけ難しい数学が用いられているが,大雑把に説明すると,次のようなことである.非常に大きな(数 百桁くらいの)素数を2つ用意する.これが秘密鍵となる.次に,その2つの素数の積を計算する.これが公開 鍵になる.公開鍵は,もちろん一人一人違うから,例えて言うなら電話帳のようなものに収録されている.アリ スに秘密のメッセージを送りたいと思ったボブは,その電話帳からアリスの公開鍵を探しだし,メッセージを暗 号化する.暗号化されたメッセージを受け取ったアリスは,自分の秘密鍵で復号化する.暗号化は誰でもできる が,復号化できるのは秘密鍵を知っているアリスだけなのである.
数学記号を用いて説明しよう.アリスの公開鍵を適用するという関数をfA と書こう.すると,秘密鍵を適用 するという関数は,ちょうど逆関数fA−1である.ボブはメッセージxに対し,y=fA(x)をアリスに送る.fA−1 という関数をただ一人知っているアリスはfA−1(y) =fA−1(fA(x)) =xを得ることができる.
このシステムにおいて,公開鍵から秘密鍵を推測するのは,不可能ではないにしても非常に難しい.巨大な数 の素因数分解は一般に難しいと考えられている.ただし,将来簡単に素因数分解する方法や,他の近道を誰かが
10 暗号 2008年度 電子計算機及び実習 68
開発しないという保証はない.ただ現在の所は RSA暗号は安全であると考えられている.重要なことは,この システムによって,鍵を秘密裏に配送するという危険を回避することが可能になった,ということである.
10.2.7 電子署名
RSA暗号は,電子署名という副産物を与えた.メールでは,他人になりすますことが簡単にできる.ところが,
RSA暗号の鍵を用いると,あたかも紙の書類に判を押したり署名したりするのと同様に,確かにその人物のメー ルであることを保証することができる.方法は次の通り.アリスがボブにメッセージを送るとき,アリスは自分 の秘密鍵であらかじめメッセージを変換しておく.本来,秘密鍵は復号のために用いるのであるが,電子署名に も用いることができるのである.先の記号を用いれば,メッセージxに対して,y =fA−1(x)をボブに送る.ボ ブは「電話帳」からfA を探してきて,fA(y) =fA(fA−1(x)) =xを得る.ここで,意味のあるメッセージxを得 たボブは,暗号文 yが確かにアリスから送られてきたと確信することができる.なぜなら,fA−1を知っているの はアリスただ一人のはずだから52.
アリスが電子署名と暗号化の両方をしようと思ったら,次のようにする.ボブの公開鍵fB を「電話帳」から 探し,自分の秘密鍵 fA−1 と合わせてy=fB(fA−1(x))を計算し,ボブに送る.ボブはアリスの公開鍵fAと自分 の秘密鍵 fB−1 を知っているから,fA(fB−1(y))を計算することができる.これが元のメッセージxに等しいこと は分かるであろう.
10.3 本日の課題
課題 10.1 自分の名前を,「改」シーザー式暗号で暗号化しなさい.また,復号鍵を求め,きちんと復号化できる ことを確かめなさい.具体的には,以下の問題に答えなさい.答案を別紙にて提出しなさい.
(1) 自分の名をアルファベットで表しなさい.例えば,タケシならばTakeshiとなる (shiかsi かなどの細かい ことは問わない).
(2) aを00, b を01,…, zを 25に変換しなさい.例えば,Takeshi ならば,19, 00, 10, 04, 18, 07, 08となる.
(3) 26未満で26と互いに素な自然数αおよび26未満の自然数β を選び、各数を x7→αx+β mod 26で変換 しなさい.例えば,19, 00, 10, 04, 18, 07, 08 で (α, β) = (3,5) ならば 10, 05, 09, 17, 07, 00, 03となる.ただし,α として 1,3以外を選びなさい.
(4) (2)の対応により,暗号文をアルファベットで表しなさい.例えば,10, 05, 09, 17, 07, 00, 03ならば,kfjrhad となる.
(5) αの mod26における乗法逆元を求めなさい.答案に書く必要はないが,この値を用いて暗号文を復号化で
きることを確かめなさい.
10.4 次回のテーマ
計算機における暗号の使用.PGP.
52ここでの説明は,概念を説明しているのであって,実際にはもう少しだけややこしいことをする.