第3章 三つの試練

第19話 公開鍵先に立たず

 翌日の正午、慈道は大学のしなの木の下にいた。三人がけのベンチの真ん中で大股を開いて座っており、腕を組みながらやや顎を引いて目を瞑っていた。

「お、いたいた」

「今日は横になって寝てませんね!」

「でもやっぱり寝てるのかなー?」

 柴山とアリサが談笑しながら慈道の元へやってくる。二人がベンチの二メートル寸前のところに辿り着いたとき、「よう」と慈道の方から低い声をかけてきた。

「あ、起きていたんですか?」

 柴山が答えた。

「まあな。鈴木さんもいるな」

 慈道は目を瞑ったままだ。

「先輩、もしかしてアリサの足音覚えようとしています?」

「え……?」

 アリサは驚いている。

「ああ。でも、二人の足音を同時に聞くのって難しいな」

 慈道は視力と聴力が生まれつきよく、聞き耳を立てて人間観察――主に女子観察――をする趣味を持っていた。また、足音で人を識別する能力もなにに使うのかは定かではないが日々トレーニングをしている。

「あ、アリサ。別に気にしないで。ストーカーっぽくてキモいと思うけど」

「はあ」

「なにを言うか! 足音でその人の精神衛生が分かることもあるらしいぞ。普段と違っていたら心境に変化があったのかなあとか、色々想像できる」

 慈道はようやく目を空けて力説する。

「お?」

 慈道は冷静に柴山の格好を見て驚いた。

「おお、今日はジャージじゃないんだな」

「ええまあ。それがなにか?」

「いや別に」

 とはいっても柴山は青いジーンズに白のパーカーと、田舎臭い格好であることには変わりない。一方、アリサは濃いグレーのVネックニットに焦茶のロングスカートと、地味ではあるが高級感のある生地でやはり上品な印象を与える。これは服装というよりも、アリサ自身が放つ大人びたアウラによるものであろう。ちなみにこの時期の慈道は、ロングTシャツにジーンズと決まっている。肌寒ければ、肌着で補填する。ちなみにまだサンダルだ。

「そんなことより、先輩。すごい進展がありましたよ」

 柴山は溌剌とした表情に切り替えて、慈道の左隣に座り、タブレットを取り出す。自然とアリサは慈道の右隣に座る。慈道は思わず背筋を伸ばし、柴山のタブレットの画面を注視し始める。アリサが放つ弱い香水かなにかの匂いが慈道に妙な緊張感を与えた。

「実際にRSA暗号でメッセージを暗号化するのであれば、日本語とかもデジタルに直してからってことになりますよね」

「まあそうだろうな」

 柴山はメモアプリを開きながら喋る。

「先輩がRSA暗号のときに話していた文字コードについて私も詳しく調べてみたんですが、例えば先輩の“先”は“e58588”になりますね」

 文字コードにも様々あるが、最も主流のUTF-8で柴山は話を進めている。

「16進法だよなそれ」

「はい、その通りです。で、“輩”は“e8bca9”になります。だから、“先輩”を文字コードに直すと“e58588e8bca9”という、16進法で12桁の数になるんですよ。これを10進法に直すと


   252361690365097


になります。で、この数をWolframAlpha で素数判定をすると……」

 柴山はhttps://www.wolframalpha.comの入力フォームに


   PrimeQ[252361690365097]


と入力していた。 PrimeQ[n] は n が素数かどうかを判定するMathematicaの関数である。

「おお! おめでとうございます! 先輩は素数でした! 良かったですね。これかなり珍しいですよ」

 柴山はタブレットの画面を慈道に見せたあと、膝の上において大げさに拍手をした。

「なんだそりゃ。先輩は別に俺だけを指す言葉じゃないだろ」

「まあまあまあ。これはただの余興です。アリサのTwitterに登録している名前覚えてます?」

「平仮名で“すずき・ありさ”だったよな。ああ、なるほどー。お前の狙いはだいたい分かった。真ん中のポチは積の記号と考えるて、“すずき”と“ありさ”を整数に直すと実は素数だったって落ち?」

「さっすがー。読みが鋭い!」

「お前に褒められてもあんまり嬉しくないな」

 慈道はあくびをしながら言った。

「“ずすき”、“ありさ”の文字コードはそれぞれ


   “e38199e3819ae3818d”、“e38182e3828ae38195”


です。そしてこれを 10 進法に直すと、それぞれ


   4196749650180186538381, 4196743176259748725141


です。Wolframalphaにかけると……」

 柴山は入力フォームに


   PrimeQ[4196749650180186538381], PrimeQ[4196743176259748725141]


と打ち込んでいる。

「じゃーん! どっちも素数でしたー!」

 画面には {True, True} と表示されていた。柴山は弾けたように、ハイテンションな態度を見せていた。

「お、おう、そうか。これって偶然じゃないよな」

 柴山のテンションに感化されそうになるが、慈道はなんとか冷静さを保とうとする。クールな男を演じているのだ。

「そりゃそうですよ。“たなか”とか、“しばやま”とかやってもだいたい素数じゃないですからね。苗字も下の名前も素数なのは偶然じゃないと思います」

「ちょと待て。もしかして、アリサの名付け親って……」

 慈道は途端に眉間にしわを寄せた。

「はい。祖父です。もっと言うと、お母さんにお父さんを紹介したのも祖父です」

 アリサが淡々と答えた。

「ちょいちょいちょい……わざと鈴木って苗字の人とくっつけたのか。まあありきたりな苗字だったから探しやすかったのかもしれないが……もしかして、これがやりたいがために……結構ぶっ飛んでないか?」

 慈道は顔が笑っているが、若干引いているようである。

「数論学者の鑑……といっていいのか分かりませんが、発想が凄いですよね。実はまだ逸話があって、井上先生はアリサの名前を本当は漢字にしたかったらしいですよ」

 柴山はメモアプリの手書き機能で「阿李沙」と書いて慈道に見せた。

「……李を『り』と読ませるのはあまり日本的でない気がするが。この三つの漢字になんか法則があるのか?」

「真意は不明ですけど、私の推理はこうです。前々からRSAとアリサって語感が似ていると思っていたのですが、RSAは開発者のRivest、Shamir、Adlemanの頭文字から来ているのは知っていると思います。実は、彼らの中国語表記がこうなんです」

 柴山は既に出来上がってあるメモファイルに画面を切り替えた。そこには「李維斯特」、「沙米尔」、「阿徳曼」と縦に箇条書きされている。

「頭文字を拾って並び替えれば阿李沙になるってか……」

「この漢字はあまり綺麗じゃないとかで、結局カタカナに落ち着いたそうです」

 アリサが補足する。

「とんでもない爺さんだな。ただこの名前の由来を聞いてしまうと、あのメッセージの暗号方式はRSAで間違いなさそうだ。結局この鈴木さんのネーミングは、この暗号ごっこをするための伏線といういうことになる。本人はいきな計らいだと思ってそうだが……これを知って鈴木さんはどう思うの?」

「そうですね。私ももう大人なので、祖父らしいなって思うくらいですかね。もう亡くなった方のことを言うのも……ただ、思春期の時に聞かされたら非行に走っていたかもしれませんが」

 アリサは苦笑して紛らわす。

「さすが、大人だな……とまあ、柴山のお手柄で、公開鍵 N の前に秘密鍵 p, q が分かっちまった。これぞ公開鍵先に立たずだな!」

 しばらく無音が続いたが、間も無くアリサが噴き出した。

「ふふ。なんか祖父も同じことを言いそう!」

 それに釣られて柴山も笑い出す。

「で、実はもう復号は終わってたりするのか?」

「えっと、秘密鍵の d も求まっているので、あとは計算するだけなんですけど、決定的瞬間は先輩と一緒の方がいいかなって思いまして」

「ああそう。別に勝手にやっててくれてよかったのに」

「そういうと思ってましたけど、一緒に見ましょうよ」

 井上昭一の残したメッセージの暗号に関係する値をまとめると以下のようになる。


   p = 4196749650180186538381

   q = 4196743176259748725141

   N = 17612680456864185396727765012338034616136721

   L = 17612680456864185396719371519511594680873200

   e = 257

   d = 17270021304006905525187866237030824356342593

   c = 6036874075441016874423820128016670617645079


ここで、 d は


   e d + L M = 1 (d > 0)


を満たす整数である。この形の方程式は、拡張ユークリッド互除法で求まる。それにはMathematicaの関数


   ExtendeGCD[a, b]


が有効で、これが {g, {x, y}} という形の数を返す。ここで g は a、b の最大公約数で、 x、y は


   a x + b y = g


を満たすものの一つである。 a、b が互いに素の場合は自動的に g = 1 となる。柴山は前もってWolframAlphaで


   ExtendeGCD[257, 17612680456864185396719371519511594680873200]


と入力することによって


   {1, { − 342659152857279871531505282480770324530607, 5}}


を得ていた。すなわち


   d = − 342659152857279871531505282480770324530607

   M = 5


である。ただし、先日の慈道のレクチャーでもあった通り、 d < 0 だった場合は、 d を L で割ったときの余りを d と再定義する。柴山は再びWolframAlphaで


   − 342659152857279871531505282480770324530607

   mod 17612680456864185396719371519511594680873200


とすることで、


   d = 17270021304006905525187866237030824356342593


を求めていた。

「よし……」

 柴山はWolframAlphaの入力フォームに


   PowerMod[6036874075441016874423820128016670617645079,

   17270021304006905525187866237030824356342593,

   17612680456864185396727765012338034616136721]


と入力していた。ここで、Mathematicaの関数 PowerMod[a, x, m] は a^x を m で割ったときの余りを返す。WolframAlphaでは a^x mod m と入力してもよい。その計算の速さから、 a^x を計算し切ってから m で割るのではなく、繰り返し2乗法を実行しながら余りを求めているものと考えられる。

「はい、じゃあここのボタンをタップしてください」

 柴山はタブレット上のリターンキーを促す。

「なんで俺がやる?」

「いやあ、ここまで来られたのも先輩のお陰ですから」

 柴山の顔には陰りがない。無邪気に笑顔を振舞っている。そんな彼女の清々しい表情を見せつけられたら、慈道の方も頬を緩ませそれに乗っかるしかない。

「ほらよ」

 慈道はリターンキーをタップした。

「さあ、どうだ!」

 柴山はタブレットを両手でがっちり掴んで画面に集中する。アリサも体を乗り出している。

「ええっとですね……


   7352955804260888321651758519707200440789038


と返ってきました」

「ながっ!」

(https://www.wolframalpha.com/input/?i=PowerMod%5B6036874075441016874423820128016670617645079,+17270021304006905525187866237030824356342593,+17612680456864185396727765012338034616136721%5D)

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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