プレーンテキストのパスワードから始めて BCrypt アルゴリズムを適用すると、Java 単体テストを実行する目的でハッシュ化されているかどうかをテストするにはどうすればよいですか?
1 に答える
暗号化ハッシュ関数の「プロパティ」の非常に大まかな解釈を使用すると、ハッシュ値しかない場合、それを生成するために使用されたハッシュ関数の種類を特定できません。
暗号と MAC には、同じ方法で大まかに解釈できる特別な「区別できない」プロパティさえあります。より厳密に言えば、暗号と出力値という 2 つの入力値が与えられた場合、出力が最初の入力に対応するのか 2 番目の入力に対応するのかを識別できないということです。
特定の暗号化機能が正しく実装されているかどうか、または特定のコードが特定の暗号化機能を使用しているかどうかを確認する方法の 1 つは、各項目がすべての入力データと期待される出力を完全に記述するテスト ベクトルを用意することです。
これらすべてをユースケースに適用します。信頼できる bcrypt 実装を使用して、アイテムのベクトルを {input, bcrypt(input)} の形式で準備します。入力をシステムに送信し、出力が期待値と等しいことを確認するテストを作成します。
テストが失敗した場合、テスト対象のシステムで使用されている bcrypt の実装が壊れているか、テスト対象のシステムが bcrypt をまったく使用していない (bcrypt の代わりに他のハッシュ関数を使用している) ことがわかります。
テストに合格すると、テスト対象のシステムが、少なくともテスト ベクトルの値に対して適切な bcrypt を使用していることがわかります。