web-dev-qa-db-ja.com

1つの入力2つのハッシュ

パスワードxと、2つの異なるハッシュ関数_h1_と_h2_があるとします。次に、ハッシュy1 = h1(x)y2 = h2(x)を計算できます。

  1. この場合、何らかの脆弱性はありますか?より具体的には、_y1_から_y2_を取得することは可能ですか?その逆も可能ですか?他に気をつけなければならないことはありますか?

これは理論的な質問であり、特定のハッシュ関数を指定しない理由の1つです。この質問を表現する別の方法は次のとおりです。

  1. この特定の場合のセキュリティは、ハッシュ関数ペアの「正しい」選択に帰着しますか?それとも関係ありませんか?

  2. ここで、この質問の「ハッシュ」を「鍵導出関数」に置き換えます。違いはありますか?

1
nehcsivart

この場合、何らかの脆弱性はありますか?より具体的には、y2からy1を取得し、その逆も可能ですか?他に気をつけなければならないことはありますか?

Y1をy2から計算したり、その逆を行ったりできる、安全なハッシュ関数のペアを作成できます。

  • 機能#1:SHA-256
  • 機能#2:最初の2ビットが交換されたSHA-256

どちらの機能も明らかに異なり、出力から入力を取得したり、衝突攻撃を行ったりすることができないという点で、どちらも安全です。ただし、関数#2の結果がわかっている場合は、関数#1の結果を計算できます。その逆も可能です。

この特定の場合のセキュリティは、ハッシュ関数ペアの「正しい」選択に帰着しますか?それとも関係ありませんか?

まったく異なるアイデアに基づくハッシュ関数では、出力間の依存関係が見つからない可能性が高いと思います。しかし一方で、数学における一見無関係に見える問題の多くは、最後に関連していることがわかります。したがって、ハッシュアルゴリズムの各ペアの独立性を証明する必要があると思います。

ここで、この質問の「ハッシュ」を「鍵導出関数」に置き換えます。違いはありますか?

2つの従属ハッシュ関数を作成したのと同じ方法で、従属出力を持つKDFを作成できます。また、KDFはハッシュ関数に基づいていることが多いので、ハッシュに使用したのと同じ引数を使用できることをお勧めします。

3
Steffen Ullrich