• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ハッシュを使った擬似乱数)

ハッシュを使った擬似乱数

このQ&Aのポイント
  • ハッシュを使って予測不能な擬似乱数列を生成する方法について説明します。
  • 鍵(種)のサイズや変化の方法について考える必要があります。
  • bit数を大きくしなければならないが、1加算したときの変化が小さいことが課題です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

まず、SHA1の安全性については「(弱衝突ではなく)強衝突に対する脆弱性が見つかった」というもので、m1≠m2かつSHA-1(m1)=SHA-1(m2)となるm1とm2の組が2^(-80)よりも高い確率で見つかることが理論的に示されました。ただし、現時点でこの条件を満たすm1とm2が見つかったわけではありません。また、SHA2が同じような脆弱性の危険性が言われたりしますが、現時点では実際に脆弱性が見つかったわけではありません。 さらにSHA1に変わるアルゴリズムとして、NISTでSHA3コンペティションというのが開催されており、様々なアルゴリズムが提案されております。 さて、ご質問の「bit数をどの程度にしたら適当か?」という問いに対する答えとしては「一方向性ハッシュ関数の脆弱性が見つかるかどうかに依存するが、今のところ脆弱性が見つかっていないのであれば共通鍵暗号における鍵の全数探索の耐性と同等(今なら128ビット)以上であれば」となるのかなと思います。 「鍵(種)を総当り攻撃されないようにbit数を大きくしなけらばならない」はその通りですが、「bit数を大きくすると1加算したときに変化が小さすぎる」については、安全な一方向性ハッシュ関数であればここは問題にはなりません。なぜならば、もしある特定のビットを固定した複数のメッセージを一方向性ハッシュ関数に入力し、その出力に相関があるのであれば原像攻撃に弱いことになる(すなわち脆弱性がある)ことから、安全な一方向性ハッシュ関数であれば当然その脆弱性は(見つかって)ないということになるからです。 よって、あとは一方向性ハッシュ関数しだいということになります。そして、その脆弱性が見つけられていないのであれば、あとは入力値である鍵(種)の全数探索の耐性があればよく、共通鍵暗号の鍵長と同じ考えになるかと思います。

kaz161573
質問者

お礼

ありがとうございます。確かに現時点でSHA1のアルゴリズムを使用している例は たくさんあるようですね。SHA1の強衝突(質問の文章で間違えてましたね^^;) に対する脆弱性が見つかったということについては過剰に認識していたようです。 鍵の長さは128bitがよく使われているようですね。最近ではコンピュータの計算速度が とても早くなり、並列計算も増えてきたということで160bitや256bitもあるみたいです。 bit長をのばしても問題ないということで、今回は128bit以上で決定しようと思います。

関連するQ&A