わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

512ビット鍵特定と三千世界

「いきなりですが問題です.あ,答えを書いて授業終了時に提出する必要はありません.

512ビットの鍵を特定することができるか?

 512個のゼロイチの並びです.鍵の種類の数,言い換えると鍵空間の大きさは,『2の512乗』となります.
 この問題で,鍵発見のために次の3点を仮定することにします.まず,計算機1台で,毎秒『10の20乗』個の鍵を生成してアタリかハズレかの判定を行えるものとします.ただし,アタリかハズレかの判定だけです.何ビットだけ合っていますよといった判定結果を出すのだったら,特定はうんと易しくなります*1
 そしてそんな計算機が『10の100乗』台あるものとします.電気代や,故障なんかも,考慮せずに使えるものとしましょう.
 それから,いつまでに鍵を特定できればいいかについては,『10の20乗』年までに,どこかの計算機でアタリが出ればよいとします.
 いずれも,きわめて非現実的な仮定です.毎秒『10の20乗』回の鍵判定どころかその速度で単純な演算を行うコンピュータは実在しませんし,『10の100乗』個は,ある試算によると宇宙のすべての原子の数よりも多いそうです.そして地球ができて数十億年,すなわち『10の10乗』年も経っていませんが,それよりも遥かに遥かに長い,『10の20乗』年を,タイムリミットとしているのです.
 人類が,そして地球が滅亡してでも,コンピュータが計算をして,鍵を見つけてくれれば…
 なのですが,上記の仮定をもってしても,512ビットの鍵を特定できる可能性は低い,という結論になります.
 ここまで述べてきた環境で,生成できる鍵の総数を,かけ算を使って表せます.1秒あたり『10の20乗』個の鍵を生成する計算機が『10の100乗』台あります.1年は『60×60×24×366』秒と表します.日数は『365.いくらか』ですが切り上げて『366』にしています.
 そして,『10の20乗』年も,かけ算に入れましょう.
 これらをかけ算しますと,タイムリミットまで,探索できる鍵の総数が得られまして,『10の148乗』を超えることはありません.
 次に,512ビットの鍵の総数ですが,『2の512乗』を,10の何乗に変換します.log 10の3は,0.3010くらいだというのを使うと,およそ『10の154乗』になります.
 大小比較をすると,『10の148乗』小なり『10の154乗』ですので,探索できる鍵の集合は,512ビットの鍵空間全体に及ばない,ということになります.
 あるいは,『10の148乗』÷『10の154乗』をするなら,『10の-6乗』,すなわち『百万分の一』です.毎秒『10の20乗』個の鍵判定を『10の100乗』台の計算機が『10の20乗』年かけて行うという思考実験で,鍵が見つかる確率は『百万分の一』くらいなのです.
 結論が出たのはいいのですが,少々無理をして,『できるんじゃないか』という結論に,持って行くことにします.ここまで使ってきた,鍵生成のための非現実的な環境を,一つの『世界』とみなします.
 仏教の言葉で『三千世界』というのがあります.『三千大千世界』とも呼ばれます.漢訳仏典に『三千大千世界』と書かれているのを,見たことがあります.
 この『三千世界』は,『3つの千個の世界』を意味します.
 ただし『3,000個』ではありません.千個+千個+千個,ではなく,千個×千個×千個,となるのだそうです.
 10億個の『世界』です.そうすれば,先ほどの,探索できる鍵の数に,10億=『10の9乗』をかけ算しまして,鍵空間の大きさの『10の154乗』を超えてくれる,という計算になります.
 とはいえそれぞれの『世界』が,512ビットの鍵特定のために,別々の鍵の候補を出していくというのも必要となります.すべての世界のすべての計算機について,種を含めた乱数生成のアルゴリズムが同一だったら,生成できる鍵の種類は,計算機1台分になってしまうからです」

関連情報

「10の20乗」個,「10の100乗」台,「10の20乗」年の数値と,それらが非現実的であることは,『暗号技術入門 第3版』p.77を元にしています.初版から同じ出題があります.授業で使用するにあたり出題の仕方は変えています.
「三千世界」については,wikipedia:三千大千世界三千世界 - goo辞書で詳しく記されています.このこと(三千世界で計算機をぶん回せば,見つかるかも)も,数年前から授業に取り入れているのですが,三千世界で100万と,間違って話してきたようにも思います.
「三千」あるいは「3つの千」が,1000×3では(3×1000でも)なく,1000×1000×1000になるのだというのは,今朝ツイートしたhttps://twitter.com/takehikom/status/872927829045895168とも別の解釈となります.これもまた,小学校で学習する範囲を超えています*2

*1:あるビット列について,nビットだけ合っていると返ってきたとき,そのビット列の任意の1ビットだけを反転して,送ると,返ってくるのは「n+1ビットだけ合っている」か「n-1ビットだけ合っている」のいずれかとなります.前者であれば,反転したビットが正しく,後者であれば,反転前のビットのほうが正しいと言えます.すべてのビットに対して操作すれば,ビット列の長さに比例する回数で,特定ができることになります.

*2:もともとは,https://twitter.com/yamanamitakeshi/status/872893531790036992です.97を,9×10+7(あるいは10×9+7)のような,かけ算とたし算の式で表しなさい,という出題を,小学校の算数で見かけないのです.