サマーウォーズ:曜日の求め方とか2056桁の暗号とかの解説 - A Successful Failure
サマーウォーズ:曜日の求め方とか2056桁の暗号とかの解説
本エントリは現在上映中の映画『サマーウォーズ』のネタバレを含む可能性があるので、未見の人は注意されたい。
主人公の健二が数学オリンピック代表候補であるという設定、最初に健二がShorのアルゴリズムに関する教科書を読んでいるのを見て、サイモン・シンが描き出した迫真のドキュメンタリー『フェルマーの最終定理 』ばりの展開が待っているのかと思いきや、まともな数学的要素は皆無で肩すかしを食らってしまった。
気を取り直して、本エントリでは『サマーウォーズ』における数少ない数学的要素を取り上げたい。なお、無粋なツッコミは無用だという人は読まない方が良いだろう。
誕生日の曜日の求め方
さて、夏希先輩の誕生日、1992年7月19日は何曜日か。劇中で健二はモジュロ演算(mod)を用いて一瞬で日曜日だと回答していたが、その間にどのような演算がなされていたのか見てみよう。
抗うつ薬は高価である
曜日換算を実現するために、ツェラーの公式が知られている。求めたい日の年の千位と百位の連続の数字(例えば2310年ならば23)をJ、年の下2桁(年 mod 100)をK、月をm、日をq、曜日をhとする(ただし求めたい日の月が1月、2月の場合はそれぞれ前年の13月、14月とする)と、曜日は次で与えられる(x以下で最大の整数をで表す)。
modはモジュロ演算(剰余演算)であり、余りを求める演算子である。ここでは7で割った余りを求める事となるが、余りhが0なら土曜日、1なら日曜日、2なら月曜日、……、6なら金曜日となる。
夏希先輩の誕生日1992年7月19日を考える。J=19, K=92, m=7, q=19を代入すると、
妊娠した場合に、どのようにすぐに伝えることができ
つまり夏希先輩の誕生日は日曜日だと言うことがわかる。演算量としては(筆者には当然できないが)暗算が可能な範囲だ。また、ツェラーの公式を知らなくても、特定の日の曜日を予め暗記しておけば、その日との差の日数を計算しmod 7を求めることで曜日を知ることもできる。実際、サヴァン症候群の患者であるキム・ピークは、生年月日を言えばそれが何曜日であるか即座に答えることができるという。そのため健二がこの程度の暗算能力を持っていてもおかしくはない。
健二が解いた暗号の謎
健二が最初に解いた暗号は2056桁の10進数の羅列であった。なぜ2048ではなく2056なのか理解に苦しむが、2048bitと256bitを混ぜてしまったのだろうか。数字だけ並べられて"Solve Me"と言われても、普通は何を解くのかさっぱり分からないと思うが、健二がShorの因数分解アルゴリズムの教科書を見ていたことから、おそらく2056桁の数字をp*qの因数に分解するのだと思われる。
アシネトバクターは、感染症を引き起こすために必要とされるどのように多くの
現在インターネットで広く使われるRSA暗号においては、1024-4096bit(10進数で300-1000桁程度)の鍵が利用されている(RSA-640は2005年に解読されたため、最低でも1024bit以上を利用すべきである)。RSA暗号の安全性は素因数分解の困難性に依っており、素因数分解に成功すれば暗号を解くことができる。健二は2056桁の数字の素因数分解に成功したのだろうか?
CRYPTECが2006年度に発行した「CRYPTREC Report 2006 暗号技術監視委員会報告書」において1024bitRSA暗号の安全性についての調査を行っているが、そこでは当時の素因数分解世界記録保持者の一人であるKleinjung 博士に評価依頼し、1536bit, 2048bitの素因数分解についてAtholon64 2.2GHzのPCを基準にして計算時間を見積もっている。
ここでRSA-2048は次のような数字だ。健二の携帯電話に送られてきたメールと同様に数字の羅列となっている。ただしたった617桁であり、健二が解いた2056桁の1/3に満たない。
RSA-2048 = 25195908475657893494027183240048398571429282126204032027777137836043662020 70759555626401852588078440691829064124951508218929855914917618450280848912 00728449926873928072877767359714183472702618963750149718246911650776133798 59095700097330459748808428401797429100642458691817195118746121515172654632 28221686998754918242243363725908514186546204357679842338718477444792073993 42365848238242811981638150106748104516603773060562016196762561338441436038 33904414952634432190114657544454178424020924616515723350778707749817125772 46796292638635637328991215483143816789988504044536402352738195137863656439 1212010397122822120720357
この数字を素因数分解するための計算時間見積もりを次のグラフに示す。
Athlon2.2GHzのPCを連続稼働させて2048bit(10進数で617桁)の因数分解にかかる時間はおおよそ10,000,000,000,000,000年だ。つまり10進数2056桁の因数分解は手計算では何兆年かかっても解けない。一晩で手計算なんてとんでもない。暗算なんてできっこない。鼻血をだすぐらいじゃ絶対無理である。
よい映画だけに、まともな科学考証がなされてないことが実に惜しい。誰かアドバイスできる人はいなかったのか。
0 コメント:
コメントを投稿