映画「サマーウォーズ」の暗号について考える

映画「サマーウォーズ」の暗号については解法の解説記事や動画が沢山ありますが、この記事ではちょっと違う、ITエンジニアならではの視点で見てみたいと思います。

まず、健二君に届いた最初のメールを振り返ってみましょう。佐久間君との会話でありますが「最初の数字は8」です。この時点で、2進数または8進数だという可能性は消えます。では16進数でしょうか?残念ながらそうでもないようです。0から9の数字しかありません。冒頭も0xではありません。

でも、暗号化された情報、コンピュータ上の情報ならば2進数か8進数かもしくは16進数で表現されているのが自然だと思うんですよ。たとえば、

0xdeadbeef….

みたいに。でもね、分かってはいるんです。そんな風に思うのは一部のgeekだけだって。エンタメ作品としてはこれで正解だって。

さて、暗号の解説記事や動画ではRSA暗号だという前提でお話しされていることがほとんどです。
それでは、RSA暗号について、ChatGPTさんに聞いてみました。

鍵の生成
素数の選定: まず、大きな素数 𝑝 と 𝑞 を選びます。
積の計算: これらの素数を掛け合わせて 𝑛n を計算します。
オイラーのトーシェント関数の計算: 𝑝 と 𝑞 のオイラーのトーシェント関数 𝜙(𝑛)ϕ(𝑛) を計算します。𝜙(𝑛)=(𝑝−1)×(𝑞−1)ϕ(𝑛)=(𝑝−1)×(𝑞−1)
公開指数 𝑒 の選定: 公開指数 𝑒 は、1<𝑒<𝜙(𝑛)1<e<ϕ(𝑛) であり、𝑒 と 𝜙(𝑛)ϕ(n) が互いに素である整数を選びます。一般的に 𝑒 としては 65537 などが使われます。
秘密指数 𝑑 の計算: 秘密指数 𝑑 は、以下の条件を満たすように計算します。𝑑×𝑒≡1(mod𝜙(𝑛))𝑑×𝑒≡1(modϕ(𝑛))
つまり、𝑑 は 𝑒 の 𝜙(𝑛)ϕ(𝑛) における逆元です。これを計算することで、秘密鍵が得られます。公開鍵は (𝑒,𝑛)、秘密鍵は (𝑑,𝑛) です。

この後、暗号化、復号について解説してくれました。

さて、もう一度、健二君に届いたメールを振り返ってみましょう。
届いたメールは…ひとつの長い数字の羅列です。pとかqとか、eとかnとかですね…

こんなツッコミ、無粋なのは分かってるんですけど、気になっちゃうんですよ…

最後に、物語終盤、GPSに偽の補正情報を送るためのラブマシーンとのバトルを見て見ましょう。

こんなやりとりがあります。

「パスワードが変更された。」「もう一度解きます。」

アツイ展開です。
でもちょっと待って。

復号して平文のパスワードが得られるって!?普通、ハッシュ値を保存するでしょ!?

でもね、そういうことを気にさせない、圧倒的なパワーがある作品なんです。見ているときは夢中です。

さて、なんで今更「サマーウォーズ」を取り上げたのか。
今年、「サマーウォーズ」公開15周年なんですよ!

夏に2週間限定リバイバル上映されました。結局、期間中3回観に行っちゃいました。もちろん、Blu-rayソフト持ってますよ。でも、劇場のスクリーンで見られるならそれに越したことはないじゃないですか!

でもね、「15年かぁ…」ってちょっと遠い目をしちゃいました。

作品中に「スマホ」「スマートフォン」「タブレット」という単語は出てきません。かろうじて、侘助おじさんがiPhone3GS(と思われるモノ)を使っているだけです。他のみんなは、二つ折りのガラケー使っています。

OZへのアクセスに使うデバイスの案内は「パソコン、携帯電話…」の順です。いまなら確実にスマホが最初ですよね。

最後に「健二君羨ましい」と思っていた自分が「チューしろ」と背中を押す側の視点で見ていました。

時間の流れって残酷ですね。

5年後の20周年、今から楽しみです。