AdAd
  
解読

  メインマシンのモニターに表示されたどっかのマンガに出てくるような挑戦状を思わせる英文と[[rb:未 > いま]]だ謎のままである“13744500e2160”という暗号。カウントダウンが残り50分を切ったことから察するに、昼の1時を回る頃には研究所のどこかでなにか穏やかならぬ事態が引き起こされる未来は想像に難くないものだ。

  「ぼ、僕ヤゲンさんを呼んできます!!」

  現状考えられる最善策をとるため動く[[rb:陸斗 > りくと]]を、ヤツはひょいと首ねっこつかんで取り押さえる。

  「な……なにするんですか[[rb:三八 > さんぱち]]さん!? 離して下さい!!」

  「敵前逃亡とはいい度胸してんなぁリクト。まさか上のもんに話せば問題がチャラになるなんて、甘い考えしているわけねぇよな?」

  不敵に牙をむくオオカミの、[[rb:琥珀 > こはく]]色をした瞳のハイライトが薄暗闇の中で妖しく赤くたゆたう。

  言わんとすることはよくわかる。ここ情報センターの管理人であるヤゲンさんへと知らせれば、ちょっとしたトラブルとしてこの事件はつつがなく処理されるだろう。でもそれは研究所の尻尾を見て見ぬふりして取り逃す行為に他ならない。しかも手がかりを予感させる偶然見つかった暗号を信用ならざる相手に明け渡した上で僕たちの落ち度にされて片づけられるのだから、いい子ちゃんを黙って演じるにはいささか腹にある一物がおさまらないのも事実だった。

  「解こうか、暗号を」

  「そうこなきゃなイッサ。据え膳食わにゃ男がすたる、売られた[[rb:喧嘩 > けんか]]はなんとやら、ってな!」

  「お二方とも本気なのですか……? こんな仰々しいの、とてもじゃないですけど僕には太刀打ちできそうにありません」

  ヤツの手をほどいた陸斗はごもっともな反応を見せる。所詮息巻いたからといってただの中学生男子が三人集まったところでこの暗号が難攻不落である状況に変わりはない。しかも“e”の一文字に区切られた二つの数字。これはまるで——。

  「RSA暗号じゃ——」

  「いや断じて違う」

  予想が口をついて出た[[rb:刹那 > せつな]]、僕がなにを言うのか先んじて把握していたごとく三八は真っ向よりそれを否定した。

  「惑わされることはないだろ。RSA暗号と形は確かに似ちゃいるが、どちらも容易に素因数分解できる。暗号文も鍵もあまりに短すぎるしな」

  「はぁ、……ところでRSA暗号ってなんですか?」

  陸斗は小首を[[rb:傾 > かし]]げて僕らの会話がまったく解せなさそうな表情を見せる。

  「あーごめんごめん。ちゃんと説明するよ」

  RSA暗号とは昔かつての情報社会を支えた、比較的機密性の高い通信に用いられた歴史を持つ公開鍵を特徴とする暗号技術のことだ。桁数の十分な二組の素数をかけ合わせて作られた合成数はコンピューターすら素因数分解に手こずるといった特性を利用したもので有史以前に実在した人間が編み出した方法を獣人が再発見して、インターネット[[rb:黎明 > れいめい]]期の構築に利用したといわれている。

  そんな栄華を誇ったRSA暗号も獣人の科学技術が先史に追いつくにつれて非ノイマン型計算機による高速素因数分解アルゴリズムの開発を皮切りに段々時代遅れとなり、格子暗号や神託機械のランダムオラクルを一方向性関数とした暗号などに代替されて今や過去の遺物と化した。それでも紙とペンで解くには寿命がいくらあっても足りないため特定の環境では重宝されているのだとか。

  「とまあたいそうこの分野が専門であるみたいに述べてみたけれど、自分の知識も所詮は本の中で仕入れたものだからあんまり当てにしないでね。オススメの本ならなんだって紹介できるけどさ」

  「ふむふむふむふむ。めっちゃ面白いですね! 僕、今までコンピューター関係の話ができる方をずっと探していたのですけど[[rb:一朔 > いっさ]]さんがすごい博識でよかったです。またなにかわからないことがあったら聞いてもいいですか?」

  「こういうのは人に聞いた内容をただ[[rb:鵜呑 > うの]]みにするんじゃなくて自分の目で実際に真偽を確かめるまでが大切だと思うんだけども……まあいいや。わかる範囲でよければ答えるよ」

  受け売りの雑学を喜んで吸収する陸斗が若干心配になるかたわら、三八はどうしてRSA暗号について知っているのだろうかとふと疑問に思う。オカルトや都市伝説などの延長線上として暗号に興味を持ったという仮説を立てた時点でヤツにしてみれば毎度のこと、日常茶飯事じゃないかと己を小突きたくなる。“好奇心の及ぶ範囲であればなんだって習得してみせる”、心の中でおもむろに浮かんできたありきたりな言葉はいかにもやっこさんの性分を言い得た表現らしくて、どこか痛快だった。

  「それはそうとなんですけど」

  かように物事を探求する力を持て余した三八の様子を見て、陸斗はまたも首を傾げる。

  「三八さんは一体なにをされているんですかね?」

  いつの間に担いできたリュックサックから取り出されたレポート用紙の上でシャープペンシルが小気味よく躍っていた。B5の白紙は二分、三分も[[rb:保 > も]]たずして数字に埋め尽くされ一枚また一枚とまき散らされては消費されていく。

  「なにしているかって? 13744500と2160を素因数分解して手がかりを探っているのさ」

  計算する手のスピードを一切落とすことなくヤツは陸斗の問いに答えた。

  「素因数分解……って、先ほどこれはRSA暗号じゃないと三八さん自身がおっしゃっていたではないですか。それなのになぜ?」

  「そりゃヒントをよく見てみろ。 『カエサルはエラトステネスを灰に[[rb:還 > かえ]]した』、エラトステネスと聞いたら “エラトステネスの[[rb:篩 > ふるい]]”が真っ先に思い浮かばねぇか? そんで素因数分解をしているんだ」

  「エラトステネスの篩……もしかして高校数学の範囲でしょうか」

  ある数までに素数がいくつあるのかを数え上げる方法に“エラトステネスの篩”と呼ばれるものが存在する。ざっくりいえば値の小さい素数の順に倍数を自然数の一覧から消していって、その数がこれまで現れた素数で割れるか否か確認して勘定するといった流れを有する原始的なアルゴリズムの一種だ。さながら各素数が篩みたいな役割を持つことよりそう名づけられたとされている。

  「ここではエラトステネス自体が素数の篩を指しているって考えればいいんじゃないかな」

  だとしてもヒントの解釈にすこし引っかかる箇所があった。 『カエサルはエラトステネスを灰に還した』の文におけるカエサルの意味はともかくエラトステネスが意味するところは素数である前提に関してもはや疑いようがない。けれどその後に『灰に還した』とあることよりなにか素数に[[rb:囚 > とら]]われてはならない、むしろ素数が出てきたら立ち止まるべきといったニュアンスが感じられた。

  「よっしゃー! こっからは比較だ、ギア上げていくぜ!」

  僕の懸念をよそにヤツは両手の指をポキポキ鳴らしたかと思えば更に計算の速度を高める。否、手計算を放棄して完全に暗算へと切り替えていた。

  「す、すごいです……! まさか四桁同士の掛け算を指だけで解いちゃうなんて」

  「おうよおうよ! オレんちはさ母親がそろばん塾を経営していてな、そろばん講師の息子なだけあってビシバシ鍛えられて段位を取っているんだ。ちなみにイッサも小学五年生まではオレの家でそろばんを学んでいたんだよ」

  「なるほどなるほど、お二方とも頭の回転が速いことはそろばんに源流があるわけですね……僕も頑張らなきゃです」

  見えないそろばんを空に[[rb:弾 > はじ]]いた計算結果が次々と紙面に落とし込まれる。その一方僕はといえば懐かしい単語との思わぬ遭遇にそろばん教室での出来事を想いに巡らせていた。確か通学路の途中に一軒の大きな日本家屋が建っていて、そこが三八の家で二人で帰路へとつく道すがら日々通っていたんだっけ。けど僕は小学五年の冬で教室を去ることになった。それがどうしてなのかは、なぜだか思い出せないでいる。今でも三八のお母さんがお元気になさっていればいいのだけども。

  「うぉーまだだ、まだ諦めねーぞ……」

  ヤツの計算している動きに変化があった。さっきまでブンブンかましていた勢いはどこへやら、大きくスピードが落ちて立ち塞がる暗号を前に苦い面持ちを浮かべている。

  「大丈夫? なにか解けない部分があるの?」

  「いいや実はなイッサ。方針をあまり考えずにとりあえずヒントに従って素因数分解してから糸口を探ろうと思っていたんだが、一向にカギが見つからなくて困っているのさ」

  計算用紙には13744500と2160の最大公約数と最小公倍数を求めた途中式や、約数の総和と総積をそれぞれ割り出し評価した比較が書き殴られていた。どれも素因数分解の結果を用いて容易に導出できる数値だけれど解読への道筋を匂わせてくるものはこれといって見当たらない。

  もしやこの暗号、ある種のヒラメキがものをいうタイプなのか。

  「かーやってらんねぇ。どうせこんなクソ暗号をよこしたヤローは画面越しにあくせくする様子をチラチラ見てはニヤニヤほくそ笑んでいるんだろ。解くだけムダだ、オレの時間を返せっての……ったく」

  一度ペースが失速してしまうと発見がない限り再び熱を持つことはかなり難しくなる。あらゆる手段を講じたところで足がかりさえつかめない事態へ不満の爆発をあらわにした三八は、とうとう椅子にもたれかかってしまった。投げやりにしたい気持ちはわかるもののカウントダウンはすでに残り30分を下回っており、こうして放ったらかしにしていれば僕たちが危険に巻き添えを食らうことは必至だ。

  どうにかして暗号を解くために隠されたカギのありかを見つけ出さなくては。

  「あっ」

  その時だった。床にとっ散らかったレポート用紙を黙々とかき集めてまとめていた陸斗が、突如なにかに勘づいたかのごとく素っ頓狂な声を上げる。

  「おい、どうしたんだリクト」

  「急にどうしたの?」

  僕と三八の差し迫ったリアクションにビクリと身体を震わせ陸斗はおずおずと答えた。

  「いえ。……ただもしかしたら僕、暗号の法則を見つけたかもしれないです」

  ガバッ

  すっかりしな垂れていた姿勢から跳ね起きて、[[rb:半 > なか]]ば血走った瞳をしてヤツは陸斗に詰め寄る。

  「なんか思いついたのか?! この際どんな[[rb:些細 > ささい]]なアイデアでもいい、教えてくれ!!」

  「うわ!? ちょ、ちょっと三八さんってば落ち着いて下さい!!」

  グワッシャ

  「ごふっ」

  ようやく出てきた尻尾を決して逃すまいとしてつかみかかっているヤツを平和的に裏拳で鎮めた後、青ざめた顔色でガクガク震える陸斗に事情をうかがう。

  「ザッパがしつこくてごめんね。それで、なにかひらめいたの?」

  「ああ三八さんが……。えっとですね、二つの数を素因数分解した過程を見直していて思い当たる節がありまして。13744500には33と34と35という連続した因数が登場するんです」

  三八の計算した結果を信用するならば13744500=(2^2)×3×(5^3)×(7^2)×11×17となって実際に任意の素因数二つを選んだ積が11×3=33、17×2=34、7×5=35となることは納得できる。

  「確かに意味ありげな並びだけど、考えすぎなんじゃ」

  「僕もはじめはそう思いました。でもプログラミング関連の知識を調べたときに出会った36進法において10進法での33と34と35は、ちょうどXとYとZに対応しているんですよ。これって偶然にしてはできすぎではないでしょうか?」

  ! 36進法……なるほど、そういうことか。

  36進法とは[[rb:0 > ゼロ]]〜9までのアラビア数字10個とA〜Zまでのアルファベット26個を組み合わせ10進法における36を基準に位が上がるよう定義された記数法の一種である。2進法や16進法が主にコンピューターの世界で活躍しているのに対し影の薄い印象が否めない進数法であるものの、プログラミング言語において基数パラメーターの最大値に36が設定されているケースも多い。

  これでヒントをどう解釈するかにも納得がいく。 『カエサルはエラトステネスを灰に還した』とはおそらく素因数まで分解せずにあえて合成数の積を残しておいて連続する33と34と35より36進法の文字に置き換えればよいという発想が自然と浮かぶように調整された誘導なのだろう。

  どうりでやっこさんがああやってこねくり回してみても手がかりが見つからないわけだ。

  「一朔さん? 突然口をつぐまれてどうしたんですか……てんで見当違いなことを言ってしまったのならすみません」

  「ううん、むしろかなり核心に迫れたと思う。これで暗号を解く手はずは整ったんじゃないかな」

  「ああいかにもその通りだ。でかしたリクト、オレもようやっと方針が決まったところさ」

  頭からプシューと白煙を上げてダウンしていた三八がゆっくりと起き上がりペンを握る。

  「へへっ、やっぱイッサの拳はこうジーンと効いてくるなぁ……おかげさんで脳がバチくそ[[rb:冴 > さ]]えてきやがったぜ!」

  レポートの次なるページがめくられて10進数の35までを36進数に対応させる図面がまたたく間に書き上げられてゆく。そのうち素数である値が消されていって、ヒントが示すエラトステネスの篩に該当する部分がキレイに削ぎ落とされた解読表ができ上がった。

  「けどこれだとまだしぼり込みが甘いんじゃないかな」

  「お。イッサもリクトに釣られてなんかひらめいたのか?」

  僕が36進法について考えていてずっと気になっていたこと。それは33と34と35以外の因数をどの文字に置き換えられるかといった問題だ。

  「33はX、34はY、35はZなのはいいでしょ。だとしたら残りの2×5×5×7はどう分けるかなって思って。いくつかのパターンを実験してみたけど次の条件がわかった。まず文字になる合成数は素因数三つ以上の積では表せない。これは最小になる積の組み合わせ2×5×5でも50になって35つまりZを超えてしまう。すなわちその表にある素数三つ以上の積で構成される数も対象外」

  「い、一朔さんっていざ[[rb:喋 > しゃべ]]るとすごいキレキレですね……」

  そしてあと一つ。

  「その前提を踏まえて想定される可能性は2×5と5×7または2×7と5×5。ここで5×7=35よりZとなって同じアルファベットが二度出現してしまう。仮に意味のある文字列ならXYZを含んだ五文字でZが重なるとは考えにくい。よって2×7と5×5の組み合わせのみが候補に上がると結論できるはず」

  自ら[[rb:啖呵 > たんか]]を切っておいてなんだけど内心かなり根拠に心[[rb:許 > もと]]ない。本来ならば36進法の考え方に対して一つや二つ反例を述べたほうが建設的であるとわかっていたのにそうは問屋が卸さない自分がいた。

  だって、こんなにも三八が[[rb:活 > い]]き[[rb:活 > い]]きとしているのだから。

  「ひひっ」

  ヤツは引き笑いみたいな声を漏らしたかと思えば手を休めて僕のことを見やってくる。

  「どうしたのザッパ。またなにか詰まる箇所でもあった?」

  「いやさ……オレ今すんげー嬉しいんだ。さっきの口調、まるでイッサが昔の性格に戻ってくれたみたいでさ」

  昔、の僕? 『昔の僕』ってどんなだったっけ。

  …………。

  (いけない)

  ロボットと戦ったときに[[rb:叩 > たた]]き鳴らされた警鐘が、封じられた記憶の残響に交じって今なお頭の中でこだましているのを感じ取る。

  そろばん塾、違うあの街を去った10歳の冬。途端によみがえるある日の感覚。

  殴打、激痛、孤独、寒さ。怒り。

  [[rb:脳漿 > のうしょう]]、チアノーゼ、[[rb:煤 > すす]]けた臭いと肉の焦げる音。高笑い。

  「一朔さん?」

  フラッシュバックに埋め尽くされ立ち往生する僕の顔を心配そうにのぞき込んでくる陸斗と目が合った。灰色の体毛と赤色の瞳はいつぞや鮮烈に焼きついた煙と火を呼び起こして思わず吐き気がこみ上げてくる。耐えられないほど気持ちが悪い。

  「一朔さん?! どうしたんですか急にうずくまって」

  「ごめん……イヤなことを思い出してすこし、気分が悪いんだ」

  「まあここまでずっと考えずくめでしたしさぞ無理がたたったのでしょう。それより、三八さんがとうとう解読表を完成させたみたいです!」

  メインマシンのほうに視線を戻せば計算終了のゴングが鳴ったみたいに、成し遂げた表情をした三八が椅子に寄りかかってガッツポーズを決めていた。

  「やった……やり切った。たぶん13744500の解読はこれさえあれば楽勝さ」

  解読のカギとなる表は先ほどよりいくらか書き込みが増してとうに解読不能な代物へと[[rb:変貌 > へんぼう]]している。つまるところ、字が汚すぎて普通に読めない。

  「十中八九イッサとリクトの助言がなければ解読にはこぎつけなかっただろうな。そんじゃ、因数にアルファベットを据えてゆくぞ」

  33がX、34がY、35がZなのと同様に2×7=14はE、5×5=25はPに置き換えられた。

  まとめれば13744500=(2×7)×(5×5)×(11×3)×(17×2)×(7×5)=EPXYZとなる。

  「 “EPXYZ”……ってあれ? 意味がまったく通りませんね。なにかミスしてましたっけ?」

  「ふふん、ちょいと洞察不足みたいだなリクト。ヒントには使っていない “単語”がまだ残されているぜ」

  「ヒントですか。エラトステネスは素数のことですけど……あっ!  “カエサル”の意図するものに関して考えていませんでした!」

  てっきりこのヒントはときの皇帝カエサルが学者エラトステネスも館長を務めた大図書館を戦争の際に焼失させてしまったという史実に由来する引用文だと思っていたけど、どうにもそう簡単な話とはいかないらしい。

  「カエサルは別名皇帝シーザーと呼ばれていてあの “シーザー暗号”の開発者ともいわれている」

  「シーザー暗号って聞いたことあるような……ないような」

  「早い話が順番のある文字列を任意の分だけ前や後ろにずらすってわけさ」

  シーザー暗号も旧文明の史実に登場する、なにか情報を隠して相手に伝達するために発明された技術の一つだ。もっとも単純かつ有名な暗号で当時は戦況を左右するぐらいに重要な役割を担っていたとされる。

  「カエサルは四代皇帝だから仮にEPXYZを四つ左にシフトさせるとEがA、PがL、XがT、YがU、ZがVになる。つまりEPXYZがALTUVとなった。右にやっても循環しちまう」

  「おおー、それでここからどうするんですか?」

  「んーとな。……アナグラム生成の出番だ」

  「えっ」

  えっ。 『最後の最後に文明の利器頼みかよ!!』と、ツッコミ役の自分が心の奥底で叫んでいた。

  しかし同時に謎の感動を覚えている自分がいたことも事実だ。まさか13744500なる一見してなんの変哲もない数字に、ここまで精巧なカラクリが仕込まれていたとは。とてもではないけれど物知りな中学生、いや大の大人ですら解読することはこの上なく難しいに違いない。

  「おっし! 答えは “VAULT”の一通りに求まった、訳すと金庫室って意味になる」

  Vault.さながら、重要な情報を保管するパソコンにおける金庫室ってことか。ここにきて暗号を解いた結果がつじつまの合う単語となったことに安心感を覚えてしまう。

  だがおちおちしてられる時間はもう残されてなどいなかった。カウントダウンが10分を切る。

  「そんなしょげたツラするなってイッサ。あとは消化試合だ、一気に片を付けにかかんぞ!」

  「安心して下さい一朔さん。IDを解いた僕らに怖いものなんてありませんよ!」

  二人は全然といっていいくらい戦意を喪失していない。こんな土壇場で尻込みごときしていたら足を引っ張るだけだ。僕が何者であれ、一緒に立ち向かってやろうじゃないか。

  「まずは条件をしぼろう。さっきまでは手探りに模索していたけどIDを解読したときに判明した前提はパスコードにも応用できるはず。 “パスワード”じゃなくて “パスコード”を入力しろと指示しているなら今度は四つずらすと数字になる合成数を決めればいい。2160の素因数分解は?」

  「2160=(2^4)×(3^3)×5だ。四つずれるってことは素因数二つの積で表される13以下の値からそれぞれ異なるヤツを割り出せばオーケーってことだな。どんな組み合わせが考えられる?」

  「ええっと……最大が2×5=10で、次に3×3=9。あとは2×3=6と2×2=4より一通りのパターンしか存在しません」

  “三人寄れば[[rb:文殊 > もんじゅ]]の知恵”とはよくいわれた[[rb:諺 > ことわざ]]だけど、まさしく今それを体感している。

  「2160=(2×5)×(3×3)×(2×3)×(2×2)がA964に変換できたぜ。コイツを四つずらすんだからA964は6520となる」

  だけどこの結果に僕はあっと虚をつかれてしまった。

  「三八さん、どうしましょう……。アナグラムと違って数字の並びは一つにならないです!!」

  陸斗が慌てふためている気持ちもわかる。ALTUVは“VAULT”とギリギリ一意に定まるけれど、文字と異なり数字はいくらでも存在が許されてしまうのだ。なにか条件を見落としてやいないか。

  「……オレに一つ、考えがある。聞いてくれ」

  三八は真剣な顔つきでおもむろに椅子を立ち上がって僕たちに合図した。

  「 “6520”の比較的あり得る組み合わせに0256=2^8と0625=5^4の二つがある」

  言われてみれば256も625も素数の有名な累乗として覚えられることが多い頻出の数だ。でも二つのうちどうやって片方の正解を導き出そうっていうのだろうか。

  「ここは公平に、多数決でどっちかを決めよう」

  「「……は?」」

  あーあやんなっちゃう。これだからヤツはどうしようもないんだ。アナグラムでさえ不確定要素が絡んでこないかドキドキしていたのに、最終解決策がよりにもよって平凡な多数決だなんて。

  「もしかして三八さんって那仂さんの霊に取り[[rb:憑 > つ]]かれています?」

  「うるせぇ!! そんな冷ややかな目でこっち見んな!! 時間がねぇんだ、さっさとやんぞコラ」

  思っきし紅潮する三八に氷みたいな視線を送ってからどちらにするべきか[[rb:逡巡 > しゅんじゅん]]する。実をいうと5は嫌いな数だ。理由は至極単純、嫌いな母親の誕生月だから。個人的な[[rb:選 > え]]り好みを重大な決定の判断材料にするとはなんとも愚かであることを承知しつつ他に決め手となるものは見当がつかないのでそのまま審判へと突入する。カウントダウンは残すところあと3分。

  「いくぞ、 “0625”にするヤツ! はい!」

  「「…………」」

  シーン

  三八に対し陸斗も僕と同じく手を挙げなかった。やはり5は人気のない数奇な数字なのか。

  「次、 “0256”にするヤツ!」

  「あい」 「はいッ!」

  なんで結果がわかりきっているのに票を取ったの? あえてツッコまないのも優しさのうちかもしれない。

  「お前たち、これで外しやがったらタダじゃおかねぇからな……[[rb:雁首 > がんくび]]そろえて待っていやがれ」

  やたら悔しそうにするやっこさんがついに入力欄を埋めにかかる。残り時間は1分を切った。

  「IDはVAULT。Passは0256。食らえ、クソ作問者——!」

  カチッ

  デスクトップフロアは認識が追いつかないほどのスピードで変化を遂げる。赤いカウントダウンの進行はみるみるうちに消え[[rb:失 > う]]せ照明がチカチカと音を発して、部屋は正常な挙動を取り戻した。

  「や、やったんですかね?」

  「どうだろう……正解だったらメインマシンも操作を受けつけるようになっているはず」

  そういえば三八の反応がない。見れば、モニターへ顔面をくっつけんとばかりに[[rb:釘 > くぎ]]づけの体勢を維持している。おそるおそる画面の隙間に回り込んで様子をうかがう。

  「こ、これは——!」

  ログインに成功した[[rb:Beetle > ビートル]]0691の示す“それ”、は僕らを興奮させるのに十分なものだった。

  「宝の地図だァー!!!」

AdAd