Re: Hash()関数は安全ではない

人物: mcdett

この関数でハッシュされているものは何か? <— これを x と呼ぶことにする

x の可能な総数が SHA256 が提供する 256 ビット空間より小さければ、攻撃はすべての sha256(x)値のテーブルという形になる。

x の可能な組み合わせがすべて 256 ビット空間より大きければ、以下の計算を参照してほしい(攻撃は既知の sha256(x)のテーブルではなく、ハッシュ値そのものに対するものになる):

以下は www.atmel.com/dyn/resources/prod_documents/doc8668.pdf からの引用だ。

鍵が 256 ビットの場合、2^255回の試行後に攻撃者が正しい鍵を見つける確率は 50%であり、2^256回の試行後にはすべての可能な鍵を試し終え、鍵の発見が保証される。

以下は大きな数の推定値だ:

2^66 地球上の砂粒の数 2^76 宇宙の星の数 2^79 アボガドロ数。石炭 12 グラム中の炭素原子の数。 2^96 水 1 立方メートル中の原子の数 2^190 太陽の原子の数 2^255 上記の鍵値を見つけるための試行回数

では、米国国家安全保障局(NSA)のような潤沢な資金を持つ組織はどうか?256 ビットの鍵を解読するマシンを作れるだろうか?理論的なナノコンピューターが毎秒10^13 命令を実行でき(原子振動の概算速度)、一辺 5.43nm の立方体の空間に収まると仮定する(これは幅 10 原子のシリコン格子、または 1000個のシリコン原子を含む結晶の概算サイズだ)。1回の試行を 10 サイクルで計算できると仮定する。地球サイズのそのコンピューターでさえ、256 ビットアルゴリズムに対する総当り攻撃には 10^13年以上(地球の推定年齢の約 58倍)かかるだろう。