312手目 浮かび上がったアルファベット
ふわぁ……眠い。
私が教室で大きく背伸びをすると、粟田さんが話しかけてきた。
「香子ちゃん、どうしたの? 寝不足?」
「うん、ちょっといろいろ重なってて……」
「そっか。寝不足は健康の敵だよ。気をつけてね」
ほんとそれ。
肌は荒れるし授業はよく理解できないしで、最悪。
でもなあ、あんな暗号を見せられたら、頭が冴えて眠れないというもの。
私はテキストをカバンに入れて、図書館のグループスタディルームへ向かった。ドアを開けると、10人がけのテーブルに、松平と大谷さんが座っていた。ラップトップパソコンをまえにスタンバイしている。
「お、裏見、そろそろ始まるぞ」
「ごめん、前の授業が長引いちゃった」
私は松平のとなりに座って、イヤホンを右耳にはめた。
ヘッドセットのほうがやりやすいんだけど、左耳は空けておきたい。
部屋のなかで物音がしたとき、ヘッドセットだと気づかない可能性があった。
まあここまで侵入してくることはないと思うけど。たぶん。
松平はリモート会議用のアプリを立ち上げて、接続を待った。
すぐに繋がって、他のメンバーの顔が映った。
太宰くんの音声が入る。
《そろったね。それじゃ、暗号解読を始めようか。もうしわけないけど、僕のほうでは全然進展がなかった。だれかアイデアはある?》
磐くんの声が入った。
めっちゃどや顔してる。これはなにかあったわね。
《俺は1番目の鍵を解いたぜ》
みんな驚いたような表情。
太宰くんは解き方をたずねた。
《これが換字式暗号だって前提で話を進めるぞ。数字がそのまま暗号の可能性、例えば緯度と経度を示してる可能性も捨てきれないが、基本はアルファベットだと思う。というわけで、まず数字をアルファベットに変換する必要がある》
そこは私も考えた。
あとこれが2進数っぽいってところも。
だけど2進数をアルファベットに変換する方法がわからなかった。
磐くんは先を続けた。
《暗号は0と1だけだから、2進数をアルファベットに変換できればいいわけだろ。俺も最初は悩んだが、数字が296桁だってことがヒントになった。296の約数は1、2、4、8、37、74、148、296。つまり、この296桁の2進数は、これらの数できっちり分割できる。あとは簡単だな。ASCIIコードでアルファベットを表すのは、8ビットコードだ》
アスキーコード? なんか聞いたことがあるような、ないような。
磐くんはそのコード表を見せてくれた。
65がA、66がBと、ひとつずつ大きな数字と対応していって、最後にZが90と対応していた。
《まずASCIIコード上のアルファベットを、2進数に直す》
A 01000001 B 01000010 C 01000011
D 01000100 E 01000101 F 01000110
G 01000111 H 01001000 I 01001001
J 01001010 K 01001011 L 01001100
M 01001101 N 01001110 O 01001111
P 01010000 Q 01010001 R 01010010
S 01010011 T 01010100 U 01010101
V 01010110 W 01010111 X 01011000
Y 01011001 Z 01011010
《さらに暗号を8桁ごとに区切る》
11100000 11101100 11100001 11100010
11011010 11101010 11100101 11110011
11110011 11110011 11100011 11100111
11101101 11101100 11101011 11100110
11110001 11110010 11100110 11101010
11101101 11110100 11110111 11110000
11101001 11101111 11101101 11100011
11100111 11100000 11101010 11100001
11110000 11100100 11100110 11110000
11101111
これを見た火村さんは、
《全然対応してなくない?》
と指摘した。
磐くんは、まあまあ待て、という感じで手を振った。
《この8桁の区切りが正しそう、ってのは分かるよな?》
松平はうなずいた。
「1か所を除いて、最初が111で始まってる。規則性がある」
《そういうこと。で、ここからが1番目の鍵、聖生に余っているもの、だ》
ついにキーワードの解釈に入った。
磐くん、これが分かったの? すごい。
私たちが感心していると──
《この意味はわからなかった》
全員ずっこける。
太宰くんは、
《さっき解けたって言ってなかった?》
と、あきれぎみ。
《待て待て、解けてないとは言ってないだろ》
《聖生の意味はわからなかったんでしょ?》
《それはわからなかった……けどな、わかんなくても解けるんだよ》
ディスプレイ上で視線が飛び交う。
磐くんは笑って、
《俺の仮定が正しいなら、この数字は全部アルファベットに変換できるわけだろ。だったら、一番小さい数字がAに近くて、一番大きい数字がZに近いって考えても、おかしくはないよな?》
と、思わせぶりなことを言った。
松平はひざを打った。
「そうか。あてずっぽうでもパターンは限られるわけか」
《そういうこと。もちろんAが使われてなかったりZが使われてなかったりする可能性もあるから、1つには絞れない。で、1番小さい数は11011010だが、これは111で始まってないから、外れ値だと思う。これを除外すると……》
最小候補
11100000
= 10進数で224
最大候補
11110111
= 10進数で247
《差は23だから。24文字の列がこの暗号で使われている。つまりAからX、BからY、CからZの3パターンだ》
やりますねぇ。
アルファベットという前提ともマッチしていた。
《あとはあてはめるだけだ。あてはめで一番しっくり来たのは、CからZのパターン。つまり……》
CODE?MHVVVFJPONITUIMPWZSLRPFJCMDSGISR
《これだ。冒頭にCODE、つまり『暗号』の4文字が出てくる》
す、すごい……けど、ちょっと不安も残る。
火村さんがこれを代弁してくれた。
《1ヶ所解けてなくない? 5文字目は?》
《ああ、これは逆から考えて解ける。11100000がCだ。ASCIIコードに照らした場合、Cの本来の2進数表記は01000011だ。この差を取る》
11100000 #暗号中のC
-01000011 #ASCIIコードのC
=10011101 #差分
=10進数表記で157
《つまり暗号文中の『引いてやればいい』は、157を引けって意味だ。これを5文字目にも当てはめてやる》
11011010 #暗号中で解読されていない部分
-10011101 #差分
=00111101 #ASCIIコード上の表記
《この2進数に該当するのは、特殊記号のイコールだ》
CODE=MHVVVFJPONITUIMPWZSLRPFJCMDSGISR
完璧ぃ! 理路整然としているし、結果ももうしぶんない。
ようするにまとめると、8桁ごとに区切って、それぞれから10011101を引き、最後にASCIIコードへ変換すればよかったわけだ。
そしてその答えはMHVVVFJPONITUIMPWZSLRPFJCMDSGISRだ。
なんで157が聖生に余ってるのかわかんないけど、解決してしまった。
太宰くんは、
《いや、びっくりしたよ……磐、やるね》
と褒めた。
《だろ?》
《で、ここから第2の鍵をKYOJIにして変換すると?》
磐くんは、アァ~と間延びした返事をしてから、
《そこはわかんなかった》
と白状した。
え? そっちがわからないの?
太宰くんも不思議に感じたようで、
《鍵がわかっているのにわからない、というのは?》
とたずねた。
《ヴィジュネル暗号だと思うんだが、KYOJIじゃ意味のある文にならなかった》
磐くんはヴィジュネル暗号がなにかを説明した。
以前、部室で風切先輩と穂積お兄さんが教えてくれたやつだった*。
ちなみに、KYOJIでこの解読法をやると──
【暗号表】
暗号
MHVVVFJPONITUIMPWZSLRPFJCMDSGISR
鍵
KYOJIKYOJIKYOJIKYOJIKYOJIKYOJIKY
平文
CJHEDVLBFFYVGZEFYLJDHRRAUCFEXAIT
こうなるらしい。たしかに意味はなさそう。
ちなみにKYOUJIやKYOZI、KYOUZIでもダメだったらしい。
ここで火村さんがわりこんだ。
《ちょっと待って。この表自体、組み替えられない?》
《おっと、いいところに気づいたな。そのとおりだ。表は組み替えられる。その場合、クロスさせた結果は異なるものになる……が、今回はそのパターンじゃないと思う》
《どうして?》
《暗号表を変えるなら、そのヒントも書いてないとおかしい。でないと解けなくなる》
火村さんは、なるほどね、と引き下がった。
とはいえ、2番目の鍵が解けないという事実に変わりはなかった。
どうするのか、という話になったところで、磐くんは試したいことがあると言った。
《もう力技で解けばいいと思うんだよな》
私たちはその力技とやらをたずねた。
磐くんの回答は、コンピュータを使った総当たり。
つまり、
A -> B -> ... -> Z -> AA -> ... -> ZZ -> AAA ...
と、ひたすら鍵を変更してチェックする方法だ。
太宰くんは、総当たりのパターンが多すぎるのではないか、とたずねた。
だけど磐くんは楽観的だった。
《大文字と小文字を区別しないアルファベットだけのパスワードみたいなもんだ。8文字ならすぐにチェックできる。それ以上になると難しいが、日本人の男性名だろ。だいたい8文字で収まると思うし、解けなかったら解けなかったでヒントになる。そうとう長い名前ってことだからな》
んー、どうかなあ。
SHINICHIROUとかよくあるけど、これだけで11文字でしょ。
とはいえ、ほかにアイデアもなかったし、この提案は通った。
太宰くんがまとめに入る。
《オッケー、じゃあ役割分担をしよう。松平、磐を手伝ってもらえない?》
「かまわないが、俺のプログラミング知識なんて大したことないぞ」
《そこの判断は、僕にはつかない。でもふたりでやって欲しい。そのほうが安全だ。それから、大谷さん、僕と組んで、90年代初期の文化史を調査してもらえない?》
「と、おっしゃられますのは?」
《このハガキは、25年も前のものだからね。今ではわからないネタもあると思うんだ。例えばバージニア州って部分。もしかすると当時の流行語だったのかもしれない》
「なるほど、90年代初頭の流行を追うわけですか。承知しました。聖生という単語も、当時の学生ならばすぐにわかったネタなのかもしれません」
《というわけで、よろしく。最後に、裏見さんと火村さんは、92年前後の経済ニュースをあさってみてもらえないかな》
私は「バブルのこと?」と確認を入れた。
《それ以外も含めて、広範に調べてみて欲しい。このハガキの文面からして、聖生たちは資金集めに奔走していたみたいだ。巨額の資金が動いている可能性がある》
「了解」
ミーティングはそこでお開きになった。
パソコンを閉じて、都ノのメンバーで打ち合わせをする。
とりあえず松平は、
「安全第一でいこう。太宰がペアを指定したのも、そのためだろう」
と言った。
そのとおり。安全第一。
というわけで、私は90年代の経済史を調べることに。
さっそく図書館のOPACへと向かった。
*98手目 2つめの暗号
https://ncode.syosetu.com/n0474dq/99/