第16話 暗号理論入門

「まさか俺が暗号理論のレクチャーをするとは夢にも思わなかった」

 慈道は学部生の頃に受けた暗号理論入門の講義ノートをぱらぱらめくりながら言った。

「そもそも暗号理論は、インターネットなどを経由して遠方にいる人と安全にメッセージのやりとりをするのが目的で作られた。盗聴については詳しくないが、今やワイファイで電波を通じてそこらに電子データをばら撒いているわけだから、それらをキャッチすることは容易だろうと想像できる。そういったデータの内容を第三者に傍受されないようにするために、電子データを数学的法則で暗号化するわけだ。Amazonなどのインターネットショップで、電話番号や住所、クレジットカードの番号を入力すると思うが、これを暗号化せずに送信してしまうと筒抜けになってしまう」

「え、私、暗号化なんてしてませんよ」

 自身の数学的素養の少なさを感じていたアリサは、慈道の話を聞いて過剰に恐怖心を持ってしまったようだ。

「いや、ノートによると、アドレスがhttps:で始まるホームページは、自動で暗号化してくれているらしい。Amazonとかそういう大手サイトは大丈夫だろう。まあ、この前、アステロイド商事はやらかしたらしいが。俺も通販なんてやったことないからよく分からんが、柴山はよく利用してんだろ」

「そうですね。最近のウェブブラウザは、安全でないホームページにアクセスすると、『暗号化されていないのでこのサイトでデータを送信すると危ないですよ』みたいな警告が出ますね」

「へえ、勉強になります」

「暗号理論なんて知らない人でも、セキュアな通信を促すように配慮してくれているってことだな。ありがたい話だ。さて、暗号理論で使われる用語を紹介する。まず暗号化しようとしているちゃんとした文のことを平文ひらぶんという。『へいぶん』とは読まず、湯桶読みで違和感があるが、俺のノートにもわざわざ読み仮名が振ってあるので、暗号理論を生業とする者たちの習慣だろう。送信者は、平文を暗号化するための『鍵』を用いて、暗号化する。暗号文を平文に戻すことを復号といった。受信者は暗号文を受け取ったら、それを復号するための『鍵』を用いて平文を手に入れる。つまり、暗号化用の鍵と復号用の鍵が必要ということになる。まあ、ここまではもっともな話だろ」

 慈道は二人の様子を伺いながら話を進める。

「暗号理論の話をすると大抵シーザー暗号の説明から始まる」

「アルファベットをずらすやつですよね」

「そう。『2001年宇宙の旅』で登場するコンピューターHALの1文字1文字をアルファベットの順にそれぞれ1つ進ませるとIBMになる。必然か偶然かは知らないが有名な話だ。シーザー暗号で誰かとやりとりする場合、あらかじめ送信者と受信者で、いくつ進ませるかを打ち合わせしておく。例えば、『アルファベットを3つ後にずらして送るからな!』みたいな話を直接スタバとかでしておく。この“直接”ってのは意外と大事だ。さて、打ち合わせで3つ後にずらすことに決めたとしよう。復号するには3つ前にずらすことになるよな。例えば送信者がIAMNOTOKと伝えたかったら、LDPQRWRNと伝えればよい。

受信者はその暗号文を受け取ったら3つ手前に戻せばいいから、IAMNOTOKを得る。このやりとりでは、3つずらすの『3』という数字が、暗号化、復号に必要な鍵ということになる。そして、こういった暗号システムには重大な欠点がある」

「アルファベットは26種類しかないから、総当たりで簡単にバレますよね」

 柴山がすぐ答えた。

「それも一つ。他には?」

「さっき強調していたから気にははなってはいましたが、『直接会って』って部分にヒントがあるんですか?」

 アリサがいい所に気がついていた。

「それ。

直接会えるのであれば直接会って耳打ちするのが一番セキュアな伝言だ。このシーザー暗号は『アルファベットを3つずらす』という暗号化・復号の方法を送信者と受信者で共有していなければ成立しないが、問題はどうやってその方法を承知するかだ」

「地球の裏側にいる人とかだったら難しいですものね」

 そう言って柴山は腕を組み始めた。

「当たり前だが、電話で伝えるとかじゃ盗聴される可能性があるからだめだぞ。もし電話が安全なら、最初から暗号化なんてする必要ないからな。つまり、遠隔的にこの打ち合わせをするのであれば、それにとってかわる安全な通信が既に存在していることになるから、この暗号システムはいらないということになる」

「な、なるほど」

「暗号化と復号の手順を送信者と受信者両方が承知しないと成立しないのが共通鍵暗号。共通鍵暗号の場合、多人数で通信する場合も大変だ。例えばAさん、Bさん、Cさんでやりとりをする場合、AとB、BとC、CとAで、それぞれ打ち合わせが必要になり、それぞれ異なる鍵を用意しなければならない。どのペアでも同じ鍵を使用していたら、BさんとCさんのやりとりをAさんが盗聴可能になるからな」

「つまり、 n 人だった場合は、 nC2 通りの鍵が必要になる、っていうことですよね」

 勘の良い柴山はすぐに察しがついた。

「その通りだ。 10 人でやりとりをする場合は 10C2 = 45 個の共通鍵を用意し、安全に管理しなければならない。個人レベルでは 9 人分の鍵の管理が必要。そして、メッセージが届いたら送信者に対して 9 個の鍵から適切なものを選んで復号しなければならない。コンピューターが自動でやってくれるとはいえ、俺からみても面倒なシステムだと思う。それに、自分が安全に鍵を管理していたとしても、相手が杜撰な管理をしていたら自分が被害を被ることになる」

「連帯責任ってやつですか。先輩が一番苦手なやつですね」

「やかましい。さて、共通鍵暗号に対し暗号化と復号の方法を共有せずに済むのが公開鍵暗号だ。発想としては、暗号化の方法は公開するけど、復号の方法は『絶対に』教えないよ、っていう考え方。暗号化に用いる数を公開鍵という。公開鍵は電話でもなんでも、知りたい人には誰にでも伝える。盗聴したければ勝手にどうぞ、そんなスタンス。送信者はそのばらまかれてる公開鍵を用いて、平文を暗号化して送る。受信者は、自分だけが知っている復号に使うたった一つの秘密鍵を安全に保管しておいて、自分宛に暗号化されたメッセージがきたら、その鍵を用いて復号する。この仕組みならば、自分だけがその暗号化されたメッセージを読むことができる。物体的な例をあげれば、あの……なんだ。よく爆弾とかが入ってる角ばったケース……アタッアタッ……」

「ケンシロウ?」

「違う違う!」

 慈道は両の人差し指で、平べったい直方体を描く。

「もしかして、アタッシュケースのことですか?」

「そう、それそれ」

「さすが。就活もしたことないから、知識に偏りがあるわね」

 柴山はにやにやしながらアリサとこそこそ話をしている。

「こういうアタッシュケースが売ってるかは知らないが、オートロックでパスワードを入力しないと開かない、そんなものを想像してくれ。閉めるのは誰でもできるが、開けるのは持ち主にしかできないという仕様だ。受信者はこのアタッシュケースを大量生産して、開けっぱの状態でばらまくわけだ。いずれもパスワードは同じものとする。そして、『俺にモノを安全に送りたければ、そのケースに入れて閉めて送ってくれ』という。このような仕組みなら、受信者がそのただ一つのパスワードだけを安全に管理すればセキュリティは保たれる」

「なるほど、意外と単純な話ですね」

 アリサは納得している。

「閉めるのは簡単だけど開けるのが難しいという仕組みを数学的に実現するには、一方向性と呼ばれる性質を用いる。その代表格が素因数分解だ。 300 桁程度の素数を 2 つ用意し、それらを p、q とする。コンピューターを用いればそのような素数は簡単に作れるし、その積 N = p q を計算するのも容易い。しかし、その約 600 桁の整数 N だけを知っている人間が p、q を割り出すのは非常に難しい。これが一方向性だ。この N をRSA暗号の公開鍵としてばらまき、受信者は p、q を体内にチップとして埋め込むなどして大切に保管する」

 アリサも少しばかり飛んだ発言には動じなくなってきた。

「p、q がどちらも同じ桁だったら、調べる範囲が狭くなってなんとかなりませんかね」

 柴山が何気なく質問する。

「それは無理だな。 300 桁の素数は約 1.1 × 10^397 個ある」

 柴山とアリサは、 10 の 397 乗と言われてもピンと来ていない。

「ちなみに日本人が知ってる名前付きの巨体数で最も大きい無量大数は 10^68 のことだ」

「そ、そんな程度でしたっけ。小さく思えますね……」

「今から言うのは、俺が勝手に想像した単純計算だからあまり当てにならないが、 1 秒間に 1 個の素数を試してみるとすると、 1 年間で 60^2 × 24 × 365 個の素数を試すことができる。このペースでさっき言った 1.1 × 10^397 個の素数を総当たりするのに要する時間は、最長で約 3.44 × 10^389 年となる。思うに、宇宙は何度か収縮と膨張を繰り返すんじゃ無いかな。この計算をさせられてるコンピューターは無間むけん地獄すら生温いと思うくらい厳しい罰を受けていることになるぞ」

 仏教における八大地獄の第八、無間地獄は阿鼻地獄、阿鼻焦熱地獄とも呼ばれ、刑期は 300 京年以上といわれている。

「はあ、スケールが大きくて言葉が出ません」

 アリサは溜息をもらしてから言った。

「ちなみに、素数の個数なんて簡単に分かるんですか?」

「素数定理というありがたい定理があって、 x 以下の素数の個数を π(x) とすると、 x が十分大きいとき


   π(x) ≒ x / log x


が成り立つ。ガウスも気付いていたらしいが、正式な証明は19世紀後半に与えられた。素数定理によれば、 300 桁の素数の個数はおよそ


   10^400/ log 10^400 − 10^300/ log 10^300


となる。流石にこれはコンピューターに計算させる」

「へえ、そんなシンプルな式で素数の個数は分かるんですね」

「これだけ聞いても、いかにRSA暗号の復号が難しいか分かったろう。次はその仕組みについて説明する。コンピューターのことに関しては詳しくないが、文字には文字コードと呼ばれる数字が割り当てられているらしい。例えば、この世に文字が100種類しかなかったとしよう。すると、00から99までの数に文字を割り当てれば言葉を数値化できる。仮に『あ』に対する文字コードが 01 で、『い』に対する文字コードが 02 だったら、『あい』という文字列は 0102 で表される。これで、どのような文章も整数に直すことができるということだ。暗号化しようとしている平文を数値化したものを m とする。こいつにある変換を施して暗号 c を得る。ちなみに暗号という意味のcipherの頭文字だ」

「mはなんの頭文字なんですか?」

「なんだろうな。messageのmかな。ちなみに平文はplain textという。気になるんだったら自分で調べてみてくれ。さて、どうやって暗号化するかを教える。再三言っているが、巨大な2つの異なる素数 p, q を用意し、 N = p q とおく。次に


   L = (p − 1)(q − 1)


とする。この形を見てフェルマーの小定理が使えそうだなという点は意識しておこう。次に L と互いに素となる正の整数 e をランダムにとる。当然、 e はへたに合成数にするよりも、約数が最も少ない数、すなわち素数を選んだ方が、 L と互いに素になる確率は高い。 L が e で割り切れなければ、互いに素といえるからな。で、 e は 3 とか 5 とか微小なやつではだめで、一般的には 65537 が使われる」

「あれ、その数どこかで見た記憶が……」

 慈道の一番弟子である柴山が呟く。本日何度目かは分からないが、アリサは二人の数学的思考の相互作用に再び圧倒される。

「別名 F_4。 5 番目のフェルマー素数だ」

「ああ! 正多角形の作図問題で出てきた!」

「よく覚えていたな。感心感心」

 今年の夏に慈道が柴山にガロア理論を教えたときに学んだことであった。

「さっきから名前が挙がってるガウスは、十九歳の時に、寝起きで正17角形を目盛りのない定規とコンパスだけで作図可能であることを思いついたという伝説がある。高木貞治の『近世数学史談』に書いてある。その手法を応用すれば、直ちに正257角形と正65537角形も作図可能であることが証明される。これらはフェルマー素数といって、 2^m + 1 という形の素数のことをいう。この形の数が素数ならば、それは必ず


   2^(2^n) + 1


という形をしている。この式を F_n と置くと


   F_0 = 3

   F_1 = 5

   F_2 = 17

   F_3 = 257

   F_4 = 65537


で、いずれも素数であることが古くか知られている。しかし、残念ながら F_5 は素数ではない。現時点で知られているフェルマー素数はこの5個だけだ。そして、頂点の個数が素数個である正多角形が定規とコンパスで作図可能である必要十分条件は、頂点の個数がフェルマー素数であることが知られている。だから、正7角形は作図不可能ということになる。古代ギリシャの時代から、頂点の個数が素数個である作図可能な正多角形は正3角形と正5角形だけだと信じられていたが、18世紀になってガウスはどえらいことを発見しまったわけだ。まあ、正 7 角形とか正 11 角形が無理くさいのに、誰が正 17 角形だったら可能だと思えようか。正 F_n 角形が定規とコンパスで作図可能な理由を、ガウスとほぼ同時期に生まれたガロアの理論で説明すれば、フェルマー素数 F_n に対して、 1 の F_n 乗根を有理数全体 Q に添加してできる体 L に対して、ガロア拡大 L/Q のガロア群が、位数 F_n − 1 = 2^(2^n) の巡回群になっていて、その部分群を考えれば、 Q から2次の代数拡大を続けていけば L に到達することが分かるので、 1 の F_n 乗根が有理数と平方根だけで表せることが直ちに分かる、という話なんだが……」

「先輩!」

 見兼ねた柴山がストップをかける。アリサは口から泡でも吹き出してくるのではないかと思わせるくらい、朦朧としかけていた。慈道の悪い癖に、話がしばしば脱線する上にそれに気付かず相当距離を走行してしまうことが挙げられる。

「す、すまない。退屈だったかな?」

「い、いえ……退屈とは間違いなく異なる感情です。私の言葉では表現できない不可思議さ……」

「途中で訳の分からない発言をしたらスルーするのも先輩とうまく付き合う秘訣よ」

「なんだそりゃ」

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る