テレビドラマ「ハードナッツ! 〜数学girlの恋する事件簿〜」(2013)(Wikipedia)の第1・2話「天才数学科女子大生VS爆弾テロリスト」(NHKオンデマンド)に出てきた暗号を紹介したい。放送当時からあらすじをメモしていたのだが、あまりにまとまりがなく長年放置してしまった。このたび配信を見てなんとか整えて公開することにした。
なお、素因数分解を使った簡単な暗号が面白いと思っていたのだが、このたびいざ自分で例題を作ろうとしてみると、少なくとも手計算では実用的ではないことがわかった。
(ネタばれあります)
連続爆破事件が起こるが、犯行声明をしたのは15年前から服役中の数学者湯沢だった。
湯沢に差し入れられた書物のうち、トーマス・シムス著『数理統計 ケース分析』の数表(χ2分布表、F分布表)などのページの紙質が違うことから、数学研究室に持ち込まれる。
数字は6283185...
これは円周率3.141592...の2倍であることを見抜く。
だがこれはダミーだった。
数学研究室にいついている女子大生くるみは、獄房に入れてもらって、本物のメッセージは本のしおりを使って届けられたと気づく。
いちばん最近届けられた本にはしおりが残っていて、ところどころ黒い点がある。それを窓の格子に巻き付けると、0909 IJK bombというメッセージが現われた(これは一種のスキュタレーで、別稿(英文)で言及済み)。9月9日は3日後だ。
だがIJKの意味がわからない。湯沢は、教えてほしければ外に出してくれと要求する。
くるみは「ダミーのダミー作戦」と称して二重のいかさまでポーカーに勝ったことで、湯沢の暗号もダミーのダミーだったのではと気づき、何かのわなだと察する。
教えさせるために湯沢の要求どおり池に連れて行った警察は、爆弾騒ぎにまぎれて湯沢に逃げられた。
外部協力者と連携した逃走ぶりに、くるみは、しおりだけでそんな複雑なことを伝達できるはずはないと思って数表を再検討したところ、ところどころ空白の桁があるのに気づいた。その裏にある数字を書き出すと、0がやけに多い(第2話26分付近)。
5054513093411246763678200375112304687500000
39691944853449701997041702270507812500
406438976094410024841796875000000000000000000
15058282601669086797818581591748437500000
320435461500451171875000000000000000000
291721500000000
367124694418107970225428234500 [正しくは3671246944181079702254282342400
しかも0の連続の前は5。だから2と5をかけあわせたものだ。
さらにどれも3の倍数であることもわかる。
これは素因数分解してみると、次のようになる。くるみは、指数がかなを表わすことに気づいた(たとえば18番目のかなは「つ」)。
5054513093411246763678200375112304687500000 →25×38×516×731 [おくたま]
39691944853449701997041702270507812500 →22×39×525×72×1113 [いけのいす]
406438976094410024841796875000000000000000000 →218×37×527×79×119[つきひ99]
15058282601669086797818581591748437500000 →25×35×511×77×1113×136×172[おおさきすかい]
320435461500451171875000000000000000000 →218×37×527×79×111×132 [つきひ912]
291721500000000 →28×35×79×114 [8594]
3671246944181079702254282342400 →232×325×52×79 [みのいけ]
(最後の例のように、3文字目が1文字目より若い場合、因数は5より2を多く含むから、0でない最低位の数字は5にならない。)
なお、実際に黒板(?)に書かれた因数分解は次のようなもので、上記とは順番等が違う。
218×37×527×7×9×119 [つきひ99]
25×38×516×731 [おくたま]
232×325×52×79 [みのいけ]
22×39×525×72×1113 [いけのいす]
26×33×55×72 [6352(池からの逃走を助けた車のナンバー)]
218×37×527×79×111×132 [つきひ912]
25×35×511×77×1113×... [おおさきスカイ]
次のターゲットが大崎スカイホールだということはわかったが、8594はわからない。
現地にいくと先に行った伴田(ともだ)刑事が縛られていて、パソコンが置いてある。湯沢からは、時限爆弾を解除するにはパスワードを入力しなければならないと連絡が。だがそこでくるみは、パソコンに何も入力してはいけないと気づく。湯沢は自分が来ることはわかっていたというが、いつ来るかはわからなかったはずなので、自分に爆破のスイッチを入れさせようとしたと気づいたのだ。何か1文字でも入力すれば爆発するしかけだったことが、その後の警察の調査で確認された。
用意してあった逃走用の車で逃げた湯沢は爆死した。くるみは、8594が湯沢に制服を奪われたガードマンの制服の番号だと気づいた。湯沢を爆殺したのはガードマンであり、湯沢に復讐するために近づいたのだった。
(本筋も面白かったが、一万人に一人がかかる難病の一次検査(精度99.9%)でひっかかって落ち込む伴田をくるみが励ますロジックがおもしろかった。つまり、1万人に一人が有病なのに、精度99.9%の精度の一次検査ということは、一万人のうち10人程度は、病気でないのに病気と判定されてしまう。病気なのは一万人に一人だから、伴田が二次検査で本当に病気だと判明する確率は10分の1なのだと。)
メインとなる暗号の原理は簡単だ.素因数分解形式で整数を表す:
2a×3b×5c×7d×11e×…
このa,b,c,d,e,…のところに、文字(ドラマではかなだが、英字でもいい)を表す数字を入れる。たとえば「さ」なら11番目のかなだから11となる。計算して求めた積が暗号文となる。解読するには暗号文の整数を因数分解し、指数に対応する文字を書き出していけばいい。
たとえば「あさくさ」であれば、あ=1、さ=11、く=8だから、
21×311×58×711
だがこんな短いものでもいざ計算しようとすると膨大な数になってしまう。(エクセルやAIに計算させようとしても桁数が多すぎて処理できないようだ。)
英語でもやってみよう。BAGであれば、B=2、A=1、G=7だから、
22×31×57=937500が暗号文となる。因数分解すれば解読もできる。
だがこれは大きな数字にならないように無理に選んだもの。代わりにDOG:24×315×57にしようとするともう手計算ではお手上げだ。(937500の因数分解をAIにやらせたら、最初は間違った答えが出てきた。)
上記の検証では、大きな数字の計算を桁落ちせずにやってくれるオンラインサービス、WalframAlphaを使った。たとえばfactor 123のようにコマンドを入力すると因数分解してくれる。