第25話 復号の刻《とき》
「なるほどな。“CARLFRIEDRICHGAUSS”を文字コードに直すと素数になるとは。よくそういう発想に行き着いたな」
「この前、“先輩”っていう漢字を文字コードに変換したら素数だったじゃないですか。よくよく考えれば、それって先輩も素数学者の一人ってことなんじゃないかって」
日曜の昼下がりに、慈道と柴山は電車に乗って井上昭一の旧邸へ向かっていた。七人掛けのシートに並んで座り、柴山は728桁の公開鍵が素因数分解できたことのあらましを得意げに語っていた。
「……分かってると思うけど、俺の名前は先輩じゃないぞ」
柴山はクスッと笑った。
「で、井上先生が以前呟いてた素数学者関連のツイートを見返して色々試してみたわけです」
「そういやそんな話もあったな」
慈道は二、三頷いてみせた。
「エラトステネスやラグランジュは素数学者ということでしたが、英語の大文字に直したときの文字コードが素数でした」
「ふーん。でもさ、“CARLFRIEDRICHGAUSS”を文字コードに変換してもそれほど大きな桁数にならなくないか?」
「そうですね。それを p とすると、 p は10進法で 43 桁の整数です。 q の方は確か……」
柴山はスマートフォンを出してメモアプリを開く。
「685 桁です」
「随分差があるな。普通は p も q も同じくらいの桁数にするのが普通だ。 p がその程度の桁数だったら、スパコンでも現実的な時間に計算仕切れたかもな」
「今回の試練、ガウスそのものが鍵といってもいいじゃないですか。金庫の中のメッセージで、第一の試練と対なるって言ってましたけど、それの意味も分かったような気がします」
「そうか。第一の試練のキーワードは数学の女王。そして、ガウスは数学王の異名を持っている」
「女王に対する王、っていう意味だったのかなあって」
「なるほど。色々ヒントをばら撒いているんだな。それに今思ったんだが、 43 × 16 は幾つだ?」
「えー、 688 です」
柴山は素早く暗算で答える。
「q は 685 桁って言ったよな。ということは、大雑把にいって p^16 ≒ q が予想される。言い換えれば、 p^17 ≒ N だ」
「つまり?」
「p が N の 17 乗根にほぼ等しくなるように設定していた可能性もある。 17 乗根といえばガウスの最初の偉業だ」
「はあ、なるほどー。そこら辺から当たりをつけていっても素因数分解の可能性は高まりそうですね」
「アステロイド商事の秘密鍵が割れたのは、 p と q が極めて近い値だったって話だったよな。あれは N の平方根に近い整数から当たりをつけていく、という分解法だと思うんだが、その発想でいくと、 3 乗根などの場合でも似たようなことができるのではないか、という発想もできる。なんだか……自分の研究内容を世に出すかためらっているようで、実際はあちこちにヒントをばら撒いて復号されることを期待していたんじゃないか?」
「かもしれませんね。アリサ以外の子孫には研究を理解してもらえなさそうですし。かといってインターネットだけの繋がりの人に明かすのも……井上先生はアリサに賭けていたんでしょうね。きっと、自分が生きた証をアリサに引き継がせたかったんですよ。だから、必要以上に難しい試練にしなかったのかもしれません」
「結局お前が解いちまったぞ。良いのか? 今回、俺はほとんど関わっていない」
「ど、どうなんでしょう」
柴山は舌を出して頭をかいた。
慈道は自分の発言に思うことがあった。褐色肌の男、佐藤正宏は慈道に三つの試練が訪れるといった。しかし、それはアリサに課せられた試練であり、柴山がことごとく解いてしまっている。ならば、慈道の試練とは一体なんなのか。もしすべてを突破しなければ彼女が死ぬとも言われた。慈道が越えなければならない試練を柴山が突破してしまっているのだろうか。だから、彼女が死ぬのか。柴山の身代わりになれということなのか。もしそうだとすると、慈道は彼女が助かるチャンスを逃してしまっていることになる。
慈道は今頃になって、自分が置かれている立場に焦りだした。
「先輩。どうします? あのUSBメモリの中身。本当に本当だったら……」
慈道は腕を組んで険しい顔をして溜息をつく。
「まだ分からん」
「私は……先輩に従いますからね」
「それさ、俺に対する忠誠を示しているようで、いざとなったら俺に責任転嫁しようてしているだけじゃないか?」
「はは、バレました?」
柴山は口元を指四本で隠してにんまりとした。
「ふん。したたかな女だ」
慈道はそう言いながらも微笑んで、顎を引いて目を閉じた。
「着いたら起こしてくれ」
「了解です」
慈道は居眠りするふりをして精神を落ち着かせ、今後の自分がとるべき行動を思案し始めた。
午後二時半に、二人は井上昭一の旧邸に到着した。あらかじめ駆けつけていたアリサが出迎え、書斎へと直行する。アリサは黒のパンツを履いていた。いつもはロングスカートを履いていることが多いので、慈道は少し気になっていた。
書斎の入口と部屋の奥にある井上昭一の机の間に、来客用の長方形のテーブルがある。入口側と机側に二人掛けのソファーがテーブルを挟んでいた。柴山とアリサは入口側のソファーに座り、ノートパソコンの操作をしている。慈道はというと、いつぞやのアリサの好意に甘えて、井上の遺したウイスキーでいっぱいやっていた。アリサに用意してもらったロック用のグラスに人差し指一本程度の分量を注ぎ、ストレートに挑戦している。銘柄は慈道が直感的に選んだマコーレーと呼ばれるものであった。慈道は右手をズボンのポケットに突っ込んで、左手にグラスを持ち、意味もなく井上の机の周りをうろうろしていた。慈道は口に含むたび、歯にしみているような反応をとる。
「これは確かに強烈だ。鮮烈と言った方がいいか……」
「ちょっと、ちょっとー。完全に酔っ払わないでくださいよ。頭使うかもしれないんですから」
「分かってるって。ほんのちょびっとだけだから。それより復号はできそうなのか」
「ちょーっと待っててください……」
柴山はまず、秘密鍵の設定にとりかかる。
In [1]: def str2int(s):
return int(s.encode().hex(), 16)
def int2str(n):
return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
def xEuclid(a, b):
x, y = 1, 0
X, Y = 0, 1
while b > 0:
q, r = divmod(a, b)
a, b, x, y, X, Y = b, r, X, Y, x − X*q, y − Y*q
return x
def encrypt(m, e, N):
return pow(m, e, N)
def decrypt(c, d, N):
return pow(c, d, N)
In [2]: N = 112……(略)……809
p = str2int('CARLFRIEDRICHGAUSS')
q = N//p
L = (p − 1)*(q − 1)
e = 65537
d = xEuclid(e, L)
xEuclid(a, b) は柴山が土曜日をふいにして書き上げた魂の結晶で、拡張ユークリッド互除法をコード化したものである。すなわち、 a x + b y = 1 を満たす x を 1 つ返す関数である。言わずもがな、秘密鍵 d を生成するのに用いる。 encrypt(m, e, N) と decrypt(c, d, N) はRSA方式で暗号化、復号を行う関数である。
ここまでは順調だが、次の段階で壁が生じた。柴山は昨日今日得た付け焼き刃の知識で、井上昭一の残したUSBメモリのデータを取り込もうとしている。しかし、USBメモリのファイルをJupyter上で開くにはどうすればいいか手こずっているようだった。スマートフォンとテザリングをしてインターネットに接続し、情報を収集している。
「これでどうだ……」
In [10]: f = open('/Volumes/TOSHIBA/nmpof')
「あ、ちゃんと行けているかな? ここまで来れば、きっと大丈夫……」
In [11]: lines = f.readlines()
print(lines)
Out[11]: [4602474115253746969400559906044147290742
0126035173068637842073407396853944404119
5802481715860062675757351028375666390145
5855341049251453880135905487115143068444
8509518807221567539797139427380479541880
5968188862603658954677096581072603093131
0890304113472624399364402403109504121542
8460195668777049449185122627188320252188
4137597756345352130005176488452028269471
7454621888400787829065925151369131191524
4519806204392223063017300686226840957968
1291045256391343061201897798103169325791
9386631384975328477893320846491473790060
7455400902179401266592845618230009357985
9862448651418341309895356259417662584503
6971187927439008768111570783179820980214
2888452107580061599161090479889691322959
1215442624829192660453220363256746908336
2525721, ……,
6157489398937063215465068541124080594436
8427745635583461799720124465335478997412
2814025762501522176328777442987110794239
7376650119884924179342121421934280461314
3012050508694327489856413709162156407366
0142111181425391027309857432393488036804
7733704473540345313107215491915129622255
7212567294229023509642083751933880643080
7511447667434754539729303319992332103573
7737921159464346244947231234218572139826
7535920996001709291241099384367880606933
4211217237243937592912670114184876317424
9852491885749468104000333783692002251623
4625590027054527164226542993467691551162
6207572232614088243718740201974917037521
3841004037653642808658579722120074876850
1936608922042657951635153450564938286527
3284627103567386549752195053878047262491
5209442]
柴山は井上昭一が残したnmpofという名前のファイルを、リストに取り込んだ。柴山は前髪を書き上げて一息ついた。
「さて……データの一行目だけを復号してみます。先輩、いいですよね?」
退屈していた慈道は、グラスを机の上にある灰皿のすぐ脇において、本棚から適当に取り出したプログラミングの本を立ち読みしていた。ちょうど、ASCIIコードの表のページである。
「ああ。とりあえずそれだけな」
慈道はパタンと本を閉じて棚に戻し、遠目にコンピューターに取り憑かれている柴山の様子を伺っていた。アリサも隣で両手を合わせて見入っている。
「ではひとまず……」
柴山は次のコードを実行した。
In [12]: print(decrypt(lines[0]))
「先輩!」
柴山の声色が激変した。当たりのようだ。
「きたか?」
慈道は早歩きで回り込んで、ソファーの後ろからノートパソコンの画面を覗き込む。
そこにはこうあった。
Out[12]: \documentclass[a4paper, 12pt]{article}
\title{New Method of Prime Factorization}
\author{Shoichi Inoue}
\usepackage{amsmath, amssymb, amsthm}
\newtheorem{defi}{Definition}[section]
\newtheorem{thm}[defi]{Theorem}
\newtheorem{prop}[defi]{Proposition}
\newtheorem{lemma}[defi]{Lemma}
\newtheorem{cor}[def
「どれ、見してみろ……うっ」
修士論文執筆の時に四苦八苦したTeX形式のソースを見て吐き気を催した。TeXは数学の文書を書くのに最も普及しているフォーマットである
「ああ、そうだった。先輩は見なくていいですから」
慈道は、プログラムコードやそれに準ずるコンピューター言語を見ると気分を害する。慈道にとっては蜂の巣や蓮の花に近い。
「これ、TeXファイルの一部です。きっと論文に間違いありません!」
「……そうか」
慈道は反対側のソファーに座って、柴山と向かい合う形になった。
「タイトルは“New Method of Prime Factorization”、著者はまさしく“Shoichi Inoue”です!」
「す、凄い!」
アリサは小さくはあるが感情がこもったような拍手をする。
「素因数分解の新しい方法、か。ファイル名の“nmopf”はその頭文字だったんだな」
「一行ずつ復号していって、それらを繋げば一つのTeXファイルが出来上がって、それをpdfにすれば……先輩、どうしますか?」
「ここまで来たらお前は引き下がらないだろ」
「え、まあ……」
「それにまだ、その論文を読んでみないことには、その理論が正しいか分からんだろ」
「お……ということは、ひとまず全文を復号してもいいんですね?」
慈道は深いため息をついてから、うずくまり、頭を両手で抱えては、髪をかきまくる。かくのが終わったと思ったら今度は立ち上がり、本棚の反対側の壁にあるガウスの額縁を眺めながら「お前がやってみたいんだったら、やってみれば?」と小声で言った。
そうは言われたものの、どうも釈然としない態度なのは明らかだったので、柴山は手を止めて慈道の様子を伺っている。
慈道はなにかをブツブツ言いながら、書斎内を当てもなく歩き始める。やがて、机の上に置いておいたグラスを手に取ろうとすると、そのすぐ横にある灰皿に目をやる。慈道は、以前来た時よりも、吸殻の本数が増えていたことに気が付いた。
「柴山!」
慈道は我に返り声を張らせた。
「は、はい!」
柴山は背筋をぴんと伸ばす。
「やっぱり止めよう。この暗号を復号するのは」
慈道は柴山の方に近づいて立ったまま静かに言った。
「え?」
「なにかがおかしい。そもそも……」
慈道は考えを整理し、深呼吸をしてから意を決したように神妙な面持ちで語り始める。
「RSAが破られるリスクを考えたらこれはやはり立ち入るべきじゃない。確かアステロイド商事でリストラもあったんだろ。たった一企業の不祥事で、どれだけの家庭が被害を被ったか……極論を言えば、素因数分解ができないことに、なにか不自由なことがあるのか? 普通の暮らしをする分には必要ないんだよ。純粋数学なぞ机上の空論だ。応用ができて初めて価値が宿るといってもよい」
抽象的な数学を研究している慈道らしからぬ発言である。
「応用ができて俺たちの生活が豊かになることで、初めて数学の価値が発生する。そう考えたら、素因数分解が自由にできるようになるという数学の発展の結果、俺たちの生活が危ぶまれるのであれば、本末転倒とはいえないか。そんなことをしたら数学に価値はなくなる。分かっている部分と分からない部分、この二つが共存しているからこそバランスを保てているんだ」
柴山は普段中々見ることのできない激昂した慈道の言葉に圧倒され、そして心を打たれているようである。その一方でアリサはどこか不満そうな表情を浮かべている。
「……でも知らないよりはましじゃないでしょうか」
アリサが攻め入るように言った。
「どうだろうな。世の中には知らない方がいいこともある。知ることによって、嫌な現実を直視せざるを得ない事態にもなりうる」
日頃他人と距離を置く慈道の経験則である。
「でも知ることによって新たな対策を考えることが初めて可能になるのでは?」
「鈴木さん、やたら興味津々だな。この前は、やっていけるか不安だ、みたいなことを言っていたけど」
「え? あ……いざ目前になると、ちょっと好奇心が……」
「私は先輩に従いますからね。一応先輩の弟子ですから」
「一応じゃなくてがっつり弟子だろうが。俺は少しだけ……時間が欲しいな。いいかな鈴木さん」
「え? あ、はい……」
アリサは冴えない返事をして、ソファーから立ち上がり、背を向けてスマートフォンを操作し始めた。
「果たして時間が解決するか……」
慈道はガウスの肖像画と向き合っていた。まるでガウスにどうすればよいか、教えを請うているようであった。
「兜石先生に相談してみようかな。さすがに俺たちだけじゃ判断しかねる」
兜石准教授は慈道の指導教官である。
「それ、いいアイディアだと思いますよ」
柴山も賛同する。
一方、スマートフォンの操作を終えたアリサはくるっと回って慈道の方に体を向けた。
「……あのう、慈道さん。私、どうしてもこの論文を手に入れたいんです」
慈道の熱弁にも関わらず酷く澄ました表情のアリサが言った。
「……まあ、それでもやめた方がいいと思うよ」
「ごちゃごちゃ言ってないでさっさと復号しなさい!」
二人は初めてアリサの感情的な発声を聞いた。豹変したアリサを見て慈道と柴山は目を丸くする。
アリサは携帯していたのか部屋のどこかに隠していたのか定かではないが、サバイバルナイフを突き出し二人を威嚇している。そしてアリサの冷徹な瞳は、ナイフよりも鋭かった。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます