Ep.03 鍵は、目の前にある。
2012年1月6日、午後5時26分。
僕はノートに書いた数列を眺めながら、シャープペンシルを指先で回していた。
10 2 14 7 19 6 18 12 7 8 17 0 19 7 14 18 14 19 13 0 1 2 0
全部で23個。
最初の13個はRedditのヘッダー画像にあったマヤ数字で、残りの10個はコミュニティの説明欄に載っていた文字列から取り出したものだ。
そこで試しに、残りの文字も同じ規則で数字へ直してみたわけだが。
「……で、これをどうしろと?」
数字は揃った。それで終わりである。
いや、もちろん終わりではないのだろう。出題者がわざわざマヤ数字を使っていたのだから、何か意味があるはずだ。
僕はもう片方のモニターに表示していたRedditの投稿を見た。
《CageThrottleUs》というユーザーが載せた、奇妙な英文だ。昨夜からいくつかの暗号方式を試しているものの、今のところ成果はない。
この数列が鍵になっている可能性は高そうだった。
まあ、多分問題は使い方である。
「23個かあ……」
文字を並べ替える順番として使うには数が多いし、単純に文字コードへ置き換えても意味が通らない。そもそも10や19はともかく、0が混ざっている時点で、何かの位置を指定する数字としては少々扱いにくい。 僕はノートの隅に、試した方法を書き足したが、これ以上手当たり次第に試しても、あまり意味はなさそうだ。
そう思ったところで、チャットの通知音が鳴った。
WALKER:Any progress?
――何か進展あったか?
アレックスだった。
NIL:I got 23 numbers from the subreddit name. Still don't know what they're for.
――コミュニティ名から23個の数字を取り出した。使い道はまだ分からないけど。
WALKER:Same here. I've tried several approaches. Nothing convincing yet.
――こっちも同じだ。いろいろ試したが、まだ納得できる結果は出ていない。
どうやら考えていることは似ているらしい。
僕はマヤ数字の変換結果を送ってから、アレックスが何か別の手がかりを見つけていないか聞いてみた。
WALKER:Did you check the verification key?
――検証用の鍵は調べたか?
「……検証用?」
そんなものがあっただろうか。
Redditの説明欄を開くと、確かに例の文字列の下に別の記載があった。
Verify: 7A35090F
「ああ、これか」
昨日も見た覚えがある。8桁の英数字だったので、何かの識別番号かと思って後回しにしていた部分だ。
WALKER:Looks like a PGP key ID.
――PGPの鍵IDに見える。
なるほど。そう言われれば、その可能性が高そうだ。
PGPは、暗号化した通信をやり取りしたり、電子署名によってメッセージの作成者を確認したりする仕組みだ。
例えば僕がNILとして文章を公開したとしても、その名前を使えば誰でも僕になりすませる。しかし、僕しか持っていない秘密鍵で署名しておけば、対応する公開鍵を持つ人は、その署名が正しいか確かめられる。
つまり、誰かが勝手にNILを名乗っても、同じ署名を作れなければ偽物だと分かるわけだ。
もっとも、公開鍵そのものに本名が書かれているとは限らない。
僕は鍵IDを検索し、見つかった公開鍵の情報を確認した。
そこには、こんな名前が登録されていた。
Cicada 3301 (845145127)
「……シケイダ?」
Cicada。
英語でセミのことだ。
3301は、最初の画像にも繰り返し出てきた数字である。どうやら出題者は、この名前を使っているらしい。
「セミ、ねえ……」
そういえば、あの画像には虫らしい絵なんてなかった気がする。なぜセミなのかは分からないが、少なくとも出題者が自分たちを何と呼んでいるのかは分かった。
気になるのは、その後ろにある9桁の数字だった。
845145127。
何かの暗号だろうか。
とりあえずノートに控えておき、公開鍵を取り込む。これで今後メッセージが追加されたとき、同じ鍵で署名されているか確認できる。
NIL:Found it. Still no idea who they are.
――見つけたよ。相手が何者なのかは分からないけど。
WALKER:That's probably the point.
――たぶん、それが狙いだろうな。
まあ、そうだろう。
ここまで凝った問題を用意しておいて、公開鍵に本名と住所を載せていたら、それはそれで驚く。
僕はアレックスとのチャットを閉じ、もう一度23個の数字と向き合った。
しかし、その後も状況は変わらなかった。
数列を使って文字を並べ替えてみたり、Redditの英文に当てはめたりしたものの、どれも意味のある文章にはならない。
気づけば午後8時を回っていた。
「……そろそろご飯か」
今日はさすがに、母さんに呼ばれる前に降りよう。 そう考えたところで、机に置いていた携帯電話が震えた。
早瀬からのメールだった。
『おーい、生きてるか? 宿題終わった?』
「……うっ」
嫌なところを突いてくる。
『数学と英語は終わった』
そう返信すると、すぐに返事が来た。
『他は?』
『まあ、人生いろいろあるよね』
『終わってねえんじゃねえかw』
なかなか鋭い。
続けて、冬休み前に貸してもらったゲームを学校が始まったら返してほしいという連絡が届いた。
『了解。初日に持ってく』
『忘れんなよ』
『僕を何だと思ってるんだ』
『前も同じこと言って忘れたやつ』
……そういえば、そんなこともあった気がする。
✳︎ ✳︎ ✳︎
2012年1月7日、午後8時41分。
「……お?」
久しぶりにRedditのページを更新すると、見覚えのない画像が追加されていた。
《Problems?》
そんな名前の画像だ。
昼間は宿題に追われていたので、パソコンでCicadaを調べるのは数時間ぶりだった。アレックスからも特に連絡は来ていない。
画像を開いてみる。
そこには、アーサー王伝説を思わせる絵が使われていた。
馬に乗った騎士や、中世風の衣装を着た人物たち。詳しい出典は分からないが、以前のアヒルよりはずっと謎解きらしい見た目である。
「……また画像か」
思い当たることがあった。
最初の問題ではOutGuessを使って画像から文章を取り出した。今回も同じ仕組みなら、画像の見た目に惑わされる必要はない。
僕はファイルを保存し、さっそくOutGuessで調べてみた。
結果はすぐに出た。
画像の内部に、英文のメッセージが隠されていたのである。
しかも、今回は電子署名まで添えられていた。
僕は昨日取り込んだ公開鍵で署名を検証した。
画面には、署名が正しいことを示す結果が表示された。
「おお……」
昨日、わざわざ鍵を調べておいてよかった。
もっとも、正しい署名があるからといって、出題者の正体まで分かるわけではない。少なくとも、このメッセージがこれまでと同じCicadaの鍵で署名されていることは確認できた。
僕は抽出した英文を読み始めた。
The key has always been right in front of your eyes.
――鍵は、ずっと君たちの目の前にあった。
「…………は?」
思わず画面を見直した。
鍵は、ずっと目の前にあった。
つまり、何か新しいものを探す必要はないということだろうか。
続く文章には、聖杯探しをするわけじゃないのだから難しく考えすぎるな、という趣旨のことまで書かれていた。
「……いや、そっちが難しくしてるんでしょ」
出題者に文句を言っても仕方ないのは分かっているが、つい口に出してしまう。
それでも、昨日までとは違っていた。
新しい問題が増えたのではなく、これまでの問題をどう考えればいいのか、ヒントが与えられたのだ。
僕はノートを取り出し、昨日のページを開いた。
23個の数字。
今のところ使い道は分からない。だが、マヤ数字と20進法をわざわざ組み合わせて作らせたものが、単なる飾りとは思えなかった。
その数字の横に、Redditから保存した暗号文を表示する。
「……鍵、か」
最初の画像では、文字コードを4つ戻すことでURLが現れた。
では今回も、文字をずらす方法だったらどうだろう。
もちろん、同じように4つ戻すわけではない。今回の鍵は23個の数字なのだから、文字ごとに違う数だけずらすことになる。
最初の文字を10。
次の文字を2。
その次は14。
23個目まで使ったら、また最初の10に戻る。 「……やっぱヴィジュネル暗号?」
そう考えると、数列の長さにも意味が出てくる。 ヴィジュネル暗号は、鍵に従って文字ごとにずらす数を変える暗号方式だ。同じアルファベットが使われていても、鍵の位置によって別の文字になるため、単純なカエサル暗号より厄介になる。
数字の並びを、そのままずらす量として使うことはできるはずだった。
僕は解析用のプログラムを開き、23個の数字を鍵として入力した。
Redditの暗号文を貼り付け、処理を実行する。
画面に表示されたのは、意味の通らない文字列だった。
「……違うか」
少し残念だったが、これだけで方法が間違っているとは限らない。
僕は処理の内容を確認した。
暗号文には空白や句読点も含まれている。ところが今のプログラムでは、それらを読み飛ばす際にも鍵の位置を進めていた。
文字をずらす数が1つずれれば、その後ろも全部ずれてしまう。
「……ああ、そうか」
ヴィジュネル暗号では、アルファベット以外を鍵の進行に含めない扱い方もある。
僕はプログラムを書き直した。英字だけを復号の対象とし、空白や句読点はそのまま残す。鍵の位置も、英字を処理したときだけ進めるようにした。
もう一度、Enterキーを押す。
今度は結果が表示された瞬間に、手が止まった。
King Arthur was at Caerlleon upon Usk
――アーサー王は、ウスク川沿いのカーリアンにいた。
「……え?」
僕は画面に顔を近づけた。
King Arthur。
アーサー王。
その後ろにも、ちゃんと意味の通る英文が続いている。
念のため、別の行も確認した。こちらも普通に読める。少なくとも、偶然まともな単語が出てきただけではなさそうだった。
「……解けた?」
何度か見直してから、ようやく実感が湧いてきた。
「よっしゃ!」
思わず立ち上がった拍子に、膝が机の下へぶつかった。
「いってぇ!」
最悪である。
せっかく格好よく暗号を解いたところなのに、台無しではないか。
それでも、痛みが引くころにはまた笑っていた。
昨日から悩んでいた数列は、やはり暗号の鍵だったのだ。しかも、使われていたのはそこまで特殊な方式ではない。正しい数字を用意し、正しい条件で処理する。それだけで、あれほど意味不明だった英文が読めるようになった。
僕は復号結果を保存し、アレックスへメッセージを送った。
NIL:Alex, I got it!
――アレックス、解けた!
少しして返事が届いた。
WALKER:Seriously?
――マジ?
僕は思わず口元を緩めた。
せっかくなので、ちょっと聞いてみよう。
NIL:Want a hint?
――ヒントいる?
WALKER:Absolutely not.
――絶対にいらない。
「ははっ」
思わず笑ってしまった。
予想どおりである。
NIL:All right. No spoilers.
――分かった。ネタバレはしないよ。
WALKER:I'll catch up.
――すぐ追いつく。
NIL:Looking forward to it.
――楽しみにしてる。
そう返信してから、僕は復号した英文を読み直した。
どうやら、古い物語の一節らしい。
「……今度は文学っすか……」
思わず机の端にある古文の教科書を見てしまった。 学校の課題ではあれほど苦戦しているのに、暗号のためなら進んで古い物語を調べようとしているのだから、自分でも少しおかしいと思う。
まあ、今はそれどころではない。
僕は復号した英文の冒頭をコピーし、検索欄へ貼り付けた。
すぐにいくつかの検索結果が表示された。
どうやら同じ物語を扱っているページらしい。タイトルは似ているものの、文章の表記や区切り方は少しずつ違っている。
「……あれ?」
そこで、僕は気づいた。
書籍暗号では、文字の位置が重要になる。
同じ作品でも、版が違えば改行や句読点が変わることがある。単語が1つ違うだけでも、その後ろの位置はずれてしまう。
つまり、作品名が分かったとしても、それで終わりではないのだ。
「……くそまじかよ……」




