サマーウォーズの暗号を京大生が解いてみた結果...ポストシェアはてブ送るPocketサマーウォーズは細田守監督の代表作、そして今や夏の映画の定番の一つといってもいいと思います。そんな作品の一番の見所は、やはり主人公のケンジ君が「よろしくお願いしまぁぁああーす」と言いながらエンターキーッッッタアァァアンッと押すシーンではないでしょうか?さてさて、そんなサマーウォーズですが、京大生として注目したいのは、あの暗号!いぶきあれ、解けるの?と疑問に思ったので、解き方とかについて色々調べてみることにしました。※ここからはネタバレを多少含みます。一応サマーウォーズをご存知ない方のためにあらすじを紹介しておきますね。世界中の人々が集うインターネット上の仮想世界OZ(オズ)。OZの管理権限や個人情報などは、世界一安全と言われるセキュリティによって守られていた。ある日、高校2年生の健二は、憧れの先輩である夏希から、一緒に夏希の実家に行くという「バイト」に誘われる。実家には夏希の曽祖母である栄おばあちゃんの90歳の誕生日を祝うために、26人の親族が一堂に集まった。その日の夜、健二の携帯電話に数字の羅列が書かれた謎のメールが送られてくる。数学が得意な健二は、それを何かの問題だと思って回答してしまう。小まとめ最後に暗号についてまずは暗号の概要について、軽く触れておきます。暗号化の種類は”RSA”と言います。調べていくうちに、結構な人がこの暗号について調べていたことがわかりました!この記事とかが参考になりました。サマーウォーズ:曜日の求め方とか2056桁の暗号とかの解説しかし、僕には何が何やらよくわかりませんでした...とりあえず「RSA暗号」というものを使っているらしいということまではわかりました。実際の暗号文を見てみましょう。けんじくんのケータイに送られてきた暗号文はこちらです↓814381625757888867669235779923577997614666120182967212423625362561842935706935245733897830597123563958705058989075149759929002687954354162959592635382962929999373527393893015272028273730979383739039731352452762289782738269898221546122131360619421303021411333103461918121612113166613120121314764123131664436383883993965356373934846376383933154328878976238398563738365433423534644888463839384643839396476573748938457345564245126348446687582487268268599929226493922762658492645161381238929910492254753685216544526687633169497562621466262164751662165496216233621461156486215622262254897462256624662062148316547254564902302454621245456232245162312424565124345181640126512518124243216518454246124324649155489615622654043145149481612161465225465454643245189159164648464546424211515912121512512462155666156124173641635467148361593823787985896185613764728526928789895656425257381651935613893981991374836873823541837167837898784e765434576345637173823138479813768765238613741311236937264827654778277325473898928152422542515522536131313315113131436465191945461216494600604573790464767487277872182954748299792393745245635321521251762851642417215462185215216524128156631535133635135624373234146484945914624245144655937545243151552364728646254632586421653765268752146364216452966051582166316165298691556167867525411656512513466425667026216616514563466741256352312000214153442514256547456176523156416857441156514555136515571345216351461342355314575145551352534665275245434123524164512514854135513552515115617195661675681735681361373613725382416248275264278352381658327184562416554631567452166375415676516659156451553145235234613252553232516852127126451621572321315221367251321433642212341623226546564323221637261423214278263167424542351254254143654215461524423554259418149422453565065652624639606225635206461462565251661258214063232062267640333141325426372633225334823727365243212325634253834253324362370285630743325310023223052360452321456631647857143521514557163023223522423243624702260270285607962516432235723674724715613526215523165518237142314221623715637261634153471で、これを復号化(デコード、つまり暗号を解いた)したのが以下のテキスト(パスワード)です。ossifrage」という文。これは、アメリカで実際に行われた暗号解読問題の解答です。knowledge」となっています。魔法の言葉は”気難しいヒゲわし”。知ることとは、あなたが何も知らないということを知ること。それが本当の意味で”知る”ということである。ちなみに、この暗号文も、1977年にアメリカの科学雑誌・サイエンスで、懸賞問題として発表されました。(解読には数百年以上は必要だとされていましたが、1994年に解読されています。know~」は、古代中国の哲学者・孔子の言葉が元ネタです。(論語の一説「知るを知るとなし、知らざるを知らずとなす。)これを初めて解いた人はどんな思いだったでしょうか?これを知った瞬間、ケンジ君の本当のすごさがわかりました。高校生のご身分でアメリカの懸賞金問題解けるのですよ?立派な数学者レベル、いやもはや人間じゃ...汗ちなみに、サマーウォーズで出てきた例の暗号を「RSA-129」と確信できるのは以下の理由からみたいです。(これは金曜ロードショーでもカットされていないことから、複線的な意味があるのでしょう)「Shorの因数分解アルゴリズム」3健二はモジュロ演算が得意。若い人はmodの方が馴染みがあるかも)<新幹線の中の会話>健二「1992年の7月19日は日曜日でした。健二「いえ、モジュロ演算っていうのを使って...」4メールで送られてきた数字が、RSA-129に符合する。99(RSA-129)スポンサーリンク暗号とは?では、そろそろRSA暗号解読に進みたいと思いますが、その前に...まずは「そもそも暗号ってどういうもの?」、と「暗号を解くとはどういうこと?」ということを軽く触れておきます。通信の内容が相手以外にわからないように、当事者の間だけで決めた記号。出典|小学館デジタル大辞泉というわけです。いってもわかるかぁ(-_-#)って感じですよね。例を挙げて説明します。暗号を送る手順としてはまず相手に伝えたい文を用意するそれを相手以外には内容がわからないようにする相手に送る相手がそれを元の文に戻すということになります。これをどういう風にするのでしょうか?本当に簡単な例を見ていきます。あなたは相手に「おはよう」という文字を送りたいと思います。これが伝えたい文です。「おはよう」という数字を送ってしまっては周りから丸見えです。「かひらえ」という暗号文、そして「-1」というヒント(鍵)を作ります。これが2にあたります。=うのように、50温順に文字を並べて一つづつずらしていくという意味です。ここまでついて来れてますか?そして3で「かひらえ」という暗号文を相手に送ります。その相手にこっそりと「-1」という鍵を渡します。この時、周りの人は「-1」、つまり一つ前にずらす、ということを知らないため、「かひらえ」だけを見ても???となります。(めちゃめちゃ頭のいい人ならできるかも)そして、4で相手は文字を一つ前にずらし、晴れて相手に「おはよう」の文字が届きます。はい、これで暗号文の例は終わりです!......ちょっとまったー!と思ったあなたは鋭いです。この説明、少し無理があるのです。「どうして『おはよう』の文字は周りに見られるかもしれないからって暗号文にしたのに、「ー1」という鍵は誰にも知られずに相手に届くの?」ということです。これが暗号業界(そんな業界があるのかはわかりませんが...)における長年の悩みでした。この矛盾を見事に解決したのが「RSA暗号」という暗号方式なのです!小まとめここで一回小まとめです。暗号とは基本的に相手に送りたい文である「元の文」そしてそれを誰にも話から内容にした「暗号文」さらにその暗号文を解くためのヒントである「(鍵)」の三つからなっていることを覚えておいてください!...長いですね。なんか書いてても疲れてきたのですが、後少しです!頑張ってください!RSA暗号文さて、ここからはいよいよRSA暗号文のお話です。難しくなるかもしれませんが、ここまでこれたあなたならきっと大丈夫です。それでは、いきましょう。先ほど、ヒントを誰にも見られずに渡すことができないことが問題だ!という話をしました。この問題を見事に解決したのがRSA暗号方式だったというお話もしました。ここからは、その謎についてです。結論から言うと、これは「公開鍵」と「秘密鍵」と言う二種類の鍵(ヒント)を使うことで解決できるのです。ま、こう言われてピンと来る人はそういないので詳しく解説します。公開鍵というのはいわば誰でも見れるヒントです。これはヒントというよりは「こういう風にして元の文を暗号文にしてね」という説明書みたいなものです。ここからはこれを「説明書」と呼びましょう。「秘密鍵」の方は本物の鍵です。こちらは先ほどの「鍵」と変わらないので、これからはこちらの方を「鍵」(ヒント)と呼ぶことにします。メッセージを送りたい人はこの説明書通りに自分の送りたい「元の文」を「暗号文」に変換します。先ほどと同じように、この文を相手に送り、相手がヒントを使って「元の文」に戻すのです。おいおい、それじゃあさっきと変わらないじゃないか、とお思いでしょうが、実はこれがRSA暗号のすごいところで、いったん「説明書」で「元の文」を「暗号」にしてしまったら、その「暗号文」を「説明書」で「元の文」にすることは不可能という性質があります。まあ実際は「ほぼ不可能」なのであって、ケンジ君はこれを解いてしまったのですが...意味、わかりましたか?簡単に言うと、そっちでこんな手順に従って元の文を変形すれば、誰にも読めない文ができるから!その後、それをこっちに送ってくれれば私はマル秘技術で解読するから!ってな感じです。公開鍵で暗号化したものは公開鍵で復号化できず、秘密鍵でしか復号できないと言うことになります。これはものすごいことで、今までは誰もいないところで鍵をやりとりしなきゃいけなかったのに、この方法だとそんな心配は無くなります。相手に渡したり受け取ったりするデータは一切秘密にする必要がありません。こんな便利を実現する暗号化方法が「RSA暗号」なわけです。ここからがRSAの解き方ですが...ここからは別の人にお任せします。無理この記事の目的はあくまで「みんなにわかりやすく」解説することを目的としているので、簡単にだけ。ケンジ君に送られてきた2054桁の数字がこちら↓814381625757888867669235779923577997614666120182967212423625362561842935706935245733897830597123563958705058989075149759929002687954354162959592635382962929999373527393893015272028273730979383739039731352452762289782738269898221546122131360619421303021411333103461918121612113166613120121314764123131664436383883993965356373934846376383933154328878976238398563738365433423534644888463839384643839396476573748938457345564245126348446687582487268268599929226493922762658492645161381238929910492254753685216544526687633169497562621466262164751662165496216233621461156486215622262254897462256624662062148316547254564902302454621245456232245162312424565124345181640126512518124243216518454246124324649155489615622654043145149481612161465225465454643245189159164648464546424211515912121512512462155666156124173641635467148361593823787985896185613764728526928789895656425257381651935613893981991374836873823541837167837898784e765434576345637173823138479813768765238613741311236937264827654778277325473898928152422542515522536131313315113131436465191945461216494600604573790464767487277872182954748299792393745245635321521251762851642417215462185215216524128156631535133635135624373234146484945914624245144655937545243151552364728646254632586421653765268752146364216452966051582166316165298691556167867525411656512513466425667026216616514563466741256352312000214153442514256547456176523156416857441156514555136515571345216351461342355314575145551352534665275245434123524164512514854135513552515115617195661675681735681361373613725382416248275264278352381658327184562416554631567452166375415676516659156451553145235234613252553232516852127126451621572321315221367251321433642212341623226546564323221637261423214278263167424542351254254143654215461524423554259418149422453565065652624639606225635206461462565251661258214063232062267640333141325426372633225334823727365243212325634253834253324362370285630743325310023223052360452321456631647857143521514557163023223522423243624702260270285607962516432235723674724715613526215523165518237142314221623715637261634153471改めて見たらすごいですね。これを前半部分と後半部分に分けます。前半部分:814381625757888867669235779923577997614666120182967212423625362561842935706935245733897830597123563958705058989075149759929002687954354162959592635382962929999373527393893015272028273730979383739039731352452762289782738269898221546122131360619421303021411333103461918121612113166613120121314764123131664436383883993965356373934846376383933154328878976238398563738365433423534644888463839384643839396476573748938457345564245126348446687582487268268599929226493922762658492645161381238929910492254753685216544526687633169497562621466262164751662165496216233621461156486215622262254897462256624662062148316547254564902302454621245456232245162312424565124345181640126512518124243216518454246124324649155489615622654043145149481612161465225465454643245189159164648464546424211515912121512512462155666156124173641635467148361593823787985896185613764728526928789895656425257381651935613893981991374836873823541837167837898784後半部分:765434576345637173823138479813768765238613741311236937264827654778277325473898928152422542515522536131313315113131436465191945461216494600604573790464767487277872182954748299792393745245635321521251762851642417215462185215216524128156631535133635135624373234146484945914624245144655937545243151552364728646254632586421653765268752146364216452966051582166316165298691556167867525411656512513466425667026216616514563466741256352312000214153442514256547456176523156416857441156514555136515571345216351461342355314575145551352534665275245434123524164512514854135513552515115617195661675681735681361373613725382416248275264278352381658327184562416554631567452166375415676516659156451553145235234613252553232516852127126451621572321315221367251321433642212341623226546564323221637261423214278263167424542351254254143654215461524423554259418149422453565065652624639606225635206461462565251661258214063232062267640333141325426372633225334823727365243212325634253834253324362370285630743325310023223052360452321456631647857143521514557163023223522423243624702260270285607962516432235723674724715613526215523165518237142314221623715637261634153471さて、ここから前半部と後半部、どちらが鍵でどちらが元の文かということを考えます。この場合鍵は後半部です!ここで「どうして前半と後半の分かれ目はそこなの?」とか、「なんで鍵が前半と後半のどちらかがわかるの?」とかは割愛します。ここからどうするかですが、もちろん秘密鍵を盗み取るようなことはしません。本物のハッキングではこの秘密鍵をどうにかして手に入れることを考えますが、ケンジ君の場合はそうではありませんでした。それを、計算でやります。いうことかというと、この鍵、掛け算によってできています。ともすると語弊があるかもしれませんが、今はそういうことにしておきます。鍵がA×B、という形のかけ算で表すことができればその数と公開鍵を使って秘密鍵を作り出すのです。これを因数分解と言います。タネがわかれば簡単な話。要するに21というのが説明書だとしたら21=7×3というのを元に秘密鍵を見つけるのです。21くらいなら簡単ですが、相手はなんと1138桁。いろんな工夫をして解いても、1日とか2日とかでは求まらないでしょう。家庭用のパソコンでやろうとするとなんと10000000000000000000000000000年(10の28乗年)かかると言われています。パソコンに計算させようと思うと無理があるようですが...小まとめけんじくんは人間ではなくて、量子コンピュータ以上の頭脳を持った生命体だった(?)↑冗談です最後にいやぁ、調べてみて改めて思ったのですが、けんじくんはすごいですね。友達に数学オリンピックの人がいるのですが、その人からみても異次元みたいですね...なんでケンジ君は数オリの日本代表になれなかったんでしょう...作品の中では、50人くらいがこの問題を解いていたとされていますが、こんな問題を世界で50人も解けてしまったら、暗号の意味がなくなってしまうかもですね...ま、そういう難しい話は抜きにしても、サマーウォーズ、面白いですね!何回も見たくなります。微分せよ...】という短歌の解釈について自宅で勉強するのに最適スタディサプリコロナウイルスが蔓延するこんな状況下で、非常におすすめなのが「スタディサプリ」です。オンライン学習だからできる、史上最強の講師とレベルの高い学びを、あなたに。スタディサプリ公式HP【社会人にも!】ミニマリスト大学生の勉強道具・バッグを公開します【意外な事実!】みんな知らないコーヒーの雑学まとめRECOMMENDこちらの記事も人気です。コスパ最強のモ...エンタメ2017.11.16とある京大生の人生を30冊の本とともに振り返る。フォローする!いぶきのプロフィールいぶき普通の高校から1年の浪人を経て京大に合格した京大生ブロガー。中学の時の得意教科は物理と家庭科。30万PVを集めています。「小市民シリーズ」の短編集。言葉のリズム、語彙、話の持っていき方、どれをとっても一級品。僕にピタッとハマって、やっぱりこの人の本好きだなぁと思わせてくれた。稼ぐ!ただのシロウト大学生だった僕が、ブログで年に150万円稼げるようになったその訳は...記事を読む!受験勉強京大に合格することができたという経験を踏まえて、受験についての記事を書いています!エンタメ“面白いこと”、”笑えること”、”ちょっと役立つこと”などをエンタメとしてまとめています。京大卒業式2018に行ってきた!大学生京大生の面白ネタや大学生だからこそかけない記事を書いています!気になることブログ運営ブログ運営のコツ、マネタイズ、ブログ論などを書いています。エッセイ京大生ブロガー、「いぶき」が思ったこと、感じたことなどをエッセイ風に書いています。