サマーウォーズのあの暗号を解こう!

RSA-129は無事解けた暗号化できたので、次は映画「サマーウォーズ」のあの暗号を解いて暗号化してみよう。

「サマーウォーズ」の暗号は暗号文Cと公開鍵の片割れN(=pq)のみが示されていて、公開鍵のもう一つの片割れであるE(暗号化の時の指数)は明示されていないそうだ。
困ったな。ダメ元で3、9007、65537あたりを試すしかないか。

ググるとCとNとM(平文)についてはいくつかのサイトが見つかる。

【本気で考えてみた】サマーウォーズのパスワードの暗号の解き方 2056桁の暗号は解けるのか?
映画 サマーウォーズの暗号を京大生が解いてみた結果…
理系男子が世界一輝くアニメ映画(RSA暗号)

書かれている内容は全て一致している。

N = 765434576345637173823138479813768765238613741311236937264827654778277325473898928152422542515522536131313315113131436465191945461216494600604573790464767487277872182954748299792393745245635321521251762851642417215462185215216524128156631535133635135624373234146484945914624245144655937545243151552364728646254632586421653765268752146364216452966051582166316165298691556167867525411656512513466425667026216616514563466741256352312000214153442514256547456176523156416857441156514555136515571345216351461342355314575145551352534665275245434123524164512514854135513552515115617195661675681735681361373613725382416248275264278352381658327184562416554631567452166375415676516659156451553145235234613252553232516852127126451621572321315221367251321433642212341623226546564323221637261423214278263167424542351254254143654215461524423554259418149422453565065652624639606225635206461462565251661258214063232062267640333141325426372633225334823727365243212325634253834253324362370285630743325310023223052360452321456631647857143521514557163023223522423243624702260270285607962516432235723674724715613526215523165518237142314221623715637261634153471
C = 814381625757888867669235779923577997614666120182967212423625362561842935706935245733897830597123563958705058989075149759929002687954354162959592635382962929999373527393893015272028273730979383739039731352452762289782738269898221546122131360619421303021411333103461918121612113166613120121314764123131664436383883993965356373934846376383933154328878976238398563738365433423534644888463839384643839396476573748938457345564245126348446687582487268268599929226493922762658492645161381238929910492254753685216544526687633169497562621466262164751662165496216233621461156486215622262254897462256624662062148316547254564902302454621245456232245162312424565124345181640126512518124243216518454246124324649155489615622654043145149481612161465225465454643245189159164648464546424211515912121512512462155666156124173641635467148361593823787985896185613764728526928789895656425257381651935613893981991374836873823541837167837898784
M = "The magic words are squeamish ossifrage To know is to know that you know nothing That is the true meaning of knowledge"

ググった範囲ではぐだぐだプログラム日記さんのブログが一番古かった。

実は、途中に1ヵ所「e」という数字以外の文字が入れてあります。
これは、私が暗号文を読み取った際に、どうしても数字と認識することができなかった文字を表すために入れた暫定的な記号です。

【本気で考えてみた】サマーウォーズのパスワードの暗号の解き方 2056桁の暗号は解けるのか?

とのことなので、ぐだぐだプログラム日記さんが映画の画像から読み取ったものなのだろう。
映画だと28分くらいのところで佐久間のノートPCに映る。自分でもやろうとしたのだがアマプラだとぼやけてしまって全く読み取れなかった。Blu-rayだと読めるのかな? それともコミック版とか、小説版とかでも確認できるのかな?

まあ、とにかく暗号化してみよう。

n = 765434576345637173823138479813768765238613741311236937264827654778277325473898928152422542515522536131313315113131436465191945461216494600604573790464767487277872182954748299792393745245635321521251762851642417215462185215216524128156631535133635135624373234146484945914624245144655937545243151552364728646254632586421653765268752146364216452966051582166316165298691556167867525411656512513466425667026216616514563466741256352312000214153442514256547456176523156416857441156514555136515571345216351461342355314575145551352534665275245434123524164512514854135513552515115617195661675681735681361373613725382416248275264278352381658327184562416554631567452166375415676516659156451553145235234613252553232516852127126451621572321315221367251321433642212341623226546564323221637261423214278263167424542351254254143654215461524423554259418149422453565065652624639606225635206461462565251661258214063232062267640333141325426372633225334823727365243212325634253834253324362370285630743325310023223052360452321456631647857143521514557163023223522423243624702260270285607962516432235723674724715613526215523165518237142314221623715637261634153471
e = 65537
#e = 9007
#e = 3
msg = "The magic words are squeamish ossifrage To know is to know that you know nothing That is the true meaning of knowledge"

m = 0

for i in msg :
  m *= 100

  if i>='a' and i<='z' :
    m += ord(i) - ord('a') + 1
  elif i>='A' and i<='Z' :
    m += ord(i) - ord('A') + 1

print "m =",m

c = pow(m,e,n)

print "c =",c

結果は次の通り。

m = 20080500130107090300231518041900011805001917210501130919080015191909061801070500201500111415230009190020150011141523002008012000251521001114152300141520080914070020080120000919002008050020182105001305011409140700150600111415231205040705
c = 97071115524948088099478630638223598027477598559032234498575604651442387272818145830700451173643897682643813535586412427266490442030951583732862728989556690189240959008755652264832360298891819350866028436864240590897581912590530626536195305357866219925617852925223359597404341883678747496228872475946984494155079604521623799327624211624377248982651929781805083728166788389154220819874260690437965629602245411923424649300829951555371828513600044798734031771038185290590557597769603403688297377788316561191319020842562332840178465111127888546112250314381265484110299095745233975781397322106918047992770162759798627487940472334413578411102536610317738074138474741689839535336446593067510133768814280926190949672333738509734373921550118766963828026262559956105898018560608747160326075264102177893873860925493487724221219055651152997802305888720070332187524183351662210615659822562800023195567961427362080519300940558814973494247246168555230979209613419205709117064576550079254921375057122668063554704891844648451666773123812159255513648027184536592300162112089155505179259319481048839462783000836974111859430083015383081173233349900203113819

えーと。
困ったぞ。C(暗号文)が合わないぞ…

Eを9007に変えると、

c = 247304581277659754909295894696769186301213637408932615233026880938534270442664540950882881086637926265082741009116451391222957765074709819295917451593522804912668318595969617645638829142447621411932391067337645959815082512516709494962986126549776955874977805476789744090907237517953705212230610508811831214085782917185693569633573162844735948003932902365236767373205609970096704242232262945435966235147000762984943633525850509159367967787922000225578016678986209558309765681263696795175924443750363858444094175198894378987772658771437640600802718346557406379505473663042152705958483002421743560799104910813124309281484805990362999622283922791153551491989574786882262339863987429604806723923141253902635759459410439907477574941685767915707174444513477006347483511659223359056862627392850168981709363517883638245263886986271738565833099411249171323709561354657347184279788855344108726000726219930157250545938023332144465483816785283036715210999650985036286183346083428697272042605236983710102997075592005690695449328110399591882359359219054296491103643854586511149784740978622473979811784487730615573205814371683300044662055484563572209430

E=3だと

c = 8096989494047998251753188295992808007014048895643298888047323590147202532208477107697930162113495896230310710925800257667248942672837746440581599495511335762465262472681815443283235701935372843515895439103661790266047926067435667887949339922778431065081021619459524025079542173094461114913638534549098245041762676544852405182012757094740910895322777254073990774249466315141727172614828287753004396263812237232102998755181598475029236354404054957117722486302024330620292736019295851318666975827529273844079172624145538448209946184429476887023917169589929014594731088377063373001200177294845223665323505418826052428623798478160832166782456796397820777803544721842462267676461810967574862228902697439368402625

うーん。これは困った。
平文の文の区切りを空白2つにしてみたりもしたが、どうやっても暗号文Cを再現することはできなかった。

【結論】
たぶん、あの暗号は嘘。


サマーウォーズの暗号のN(=pq)は3777ビットのようである。
えらく中途半端だな。でもかなり長いね。(富士山は3776m)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください