web-dev-qa-db-ja.com

よく知られているハッシュアルゴリズムを使用する場合、独自の定数を使用する必要がありますか?

私は自分で設計するのではなく、よく知られ十分にテストされたハッシュアルゴリズムを使用することが重要であることを理解しています。そのため、手動で選択した乱数を使用して必要な定数を初期化する参照実装が利用できることがよくあります。

このような実装を使用すると、カスタム定数を選択することでセキュリティが向上しますか?攻撃者は、ハッシュをブルートフォースするときに最も可能性の高い値を使用することを期待します。これは、参照からのものです。

強力な暗号化ハッシュアルゴリズムは、ソルティングを使用するときにRainbowテーブルを使用したとしても、壊れないはずです。したがって、理論的な観点からは、大きな違いはないはずです。しかし、私は専門家ではないので、あなたの言うことを聞きたいです。

20
danijar

いいえ定数はハッシュを安全にするものの一部であり、仕様の定数はハッシュの暗号化コミュニティの検査で使用されたものです現在安全だと私たちが信じている機能。 意図的に不適切に選択された定数は、ハッシュ関数を微妙ですが悪用可能な方法で破壊する可能性があります 、そして独自の定数を思い付くと、誤って弱いハッシュ関数が残る可能性があることが示されています。

30
Xander

いいえ、すでに述べた理由により、独自のアルゴリズムを設計しないでください。nique salt 、ハッシュアルゴリズムの定数をいじる必要はありません。 NIST SP800-90 Dual Ec Prng のように、アルゴリズムは国際的な専門家による完全な暗号分析の対象となっています。定数について同じことを行うリソースがない可能性があります。ただし、ほとんどの場合、数値は選択されます 非常にランダムに 。場合によっては、独自の定数を選択することでメリットが得られることもありますが、それでもお勧めしません。

編集:fsmv は、自分でハッシュを実装するのではなく、ライブラリを使用する必要があることを指摘しています。同意する。独自の定数を本当に使用したい場合は、アルゴリズムのよく知られたライブラリ実装(ライセンスに注意)を取得し、変更をそのコードに適用します。実装はサイドチャネル攻撃耐性を備えています。

8
user10008

私はセキュリティの専門家ではありませんが、NSAは、NIST標準の1つで壊れやすい定数を意図的に選択したことで悪い評価を得ていませんでしたか?

それは私が推測するあなたの脅威モデルに依存します。 NSAについて心配している場合は、世界で最高の暗号技術者を雇って、より良い定数を見つけるようにしてください。それ以外の場合は、標準にあるものをそのまま使用してください。他のエージェントに対してかなり安全である可能性が高いためです。

3
user541686

短い答え:いいえ

定数はアルゴリズムの一部です。定数を信頼しない場合は、アルゴリズムを信頼しないでください。いくつかの例を見る価値があります。

Merkle-Damgårdハッシュ

このようなアルゴリズムで変更できる定数の1つはIVです。セキュリティ分析の場合、IVを変更することは、データに1ブロックのキーマテリアルを付加することと同じです。ただし、実際のアルゴリズムを変更する必要がないため、先頭に追加することをお勧めします。

ただし、キーマテリアルの先頭に追加するだけでは、キー付きハッシュを作成するのに適した方法ではないことは既に知られています。より良いアプローチは、HMAC構造を使用することです。

IVは、Merkle-Damgårdハッシュの唯一の定数ではありません。圧縮関数にも定数があります。独自の定数を選択すると、何らかの理由で定数が弱くなるという重大なリスクがあります。したがって、すべての調査でオリジナルが安全であることを示している場合でも、バージョンが弱い可能性があります。元のアルゴリズムに弱点が見つかった場合でも、より良い定数を考え出すことはできません。

実際、その場合により良い定数を考え出すには、弱点と解決策を見つける必要があったでしょう。言い換えると、定数が元の定数よりも優れている理由についての論文を書き、それを暗号化に関するジャーナルで受け入れてもらえなかった場合、定数はこれ以上優れていません。

[〜#〜] decdrbg [〜#〜]

これは定数を信頼しない良い例です。元の定数は、それらがどのように構築されたかについての説明はありませんでした。これは警告のサインであり、これらの定数は信頼すべきではありません。

これらの定数がどのように構成されているかをさらに分析すると、バックドアの可能性が明らかになりました。アルゴリズム全体が疑わしいと見なされます。

そのアルゴリズムを使用したい場合は、元の信頼できない定数を使用しないでください。しかし、独自の定数を生成した場合、他の誰かにその定数を信頼させるにはどうすればよいでしょうか。

実際、私たちが現在持っている知識では、非標準定数を使用したDECDRBGは、独自のバックドアを使用して暗号アルゴリズムを作成し、それを無害な間違いのように見せるための最も簡単な方法の1つです。

DECDRBGは、アルゴリズムの定数について正当化された懐疑論があると、誰かがアルゴリズムに適切な定数を決定するための実際の基準を考え出すまで、アルゴリズムを信頼すべきではない理由を示しています。

2
kasperd