web-dev-qa-db-ja.com

パスワード/プレーンテキストを使用してソルト値を暗号化することは、直接ハッシュ化の実行可能な代替策ですか?

私の知る限り、ハッシュの欠点は、パスワードがハッシュに含まれていることです。非対称暗号化の欠点は、パスワードが暗号化されており、元に戻すことができることです。

私が見た投稿は非対称暗号化を使用しておらず、より安全なハッシュアルゴリズム(bcrypt/scrypt/etc)を使用していると言っています。

代わりに、非対称暗号化(Rijndael/AESなど)を使用し、各ユーザーに固有の既知のプレーンテキスト値をユーザー指定のパスワード(より良い値にするためにハッシュ可能)で暗号化し、結果を保存するとどうなりますか。

これは、ユーザーのパスワードを回復から保護するために保存できる暗号化された文字列を提供しないでしょうか?または、私が見落としている/見落としている固有の欠陥はありますか?

5

あなたが解決している問題がわかりません。データベースが危険にさらされるとどうなるか想像してみてください。攻撃者は、この暗号化された文字列、ソルト、および(おそらく)暗号化キーを入手します。

ユーザーのソルトまたはパスワードを復号化してパスワードを取得するのを妨げているものは何ですか?

専門家によって開発され、長年「戦闘テスト」されたアルゴリズム(つまり、bcrypt)よりも安全なものを発明するのはかなり困難です。

7
Oleksi

現時点での最良の解決策の1つは、ハッシュアルゴリズムに salt + pepperを追加することです(報告されているため、md5でもsha1でも壊れていません。それらのステータスの詳細については ここではmd5 、そして ここではsha1 です。さらに、この StackOverflowでの回答 私の言葉を完成させます)。

さらに、ハッシュアルゴリズムとして BCrypt を使用すると、時間をかけてクラッキングする時間が短くなるため、攻撃者の可能性がさらに高まります。

「bcryptはアダプティブハッシュです。時間が経つにつれて徐々に遅くなり、ハッシュとソルトに対する特定のブルートフォース検索攻撃に対する耐性を維持できます。」

2
Cyril N.

あなたが説明するソリューションは、実際にはハッシュです。

ハッシュ関数 MD5 について考えます。これは、長さ128ビットの従来の固定値(「IV」)から開始することで機能します。次に、入力データの512ビットブロックごとに、圧縮関数が計算され、現在の128ビット状態と512-ビットメッセージブロック、および次の128ビット状態を出力します。 MD5圧縮機能がどのように機能するかを見ると、512ビットのメッセージブロックが次のように使用されているブロック暗号(一般化された Feistelスキーム 4つのサブワード)に似ていることがわかります。キー。つまり、MD5は、説明どおりに動作します。つまり、パスワードをキーとして使用して、固定値を暗号化します。固定値がユーザー固有である場合、それは一種の「塩」です(これはパスワードハッシュに適しています)。

だからあなたの質問は:ブロック暗号からハッシュ関数を構築できないのですか?そして答えは:はい、butいくつかの注意が必要です。 [〜#〜] aes [〜#〜] などの一般的なブロック暗号は暗号化用に設計されており、そのセキュリティはそのコンテキストで分析されています。上記のようにブロック暗号をハッシュ関数に変換する場合、徹底的に検討されていない方法で堅牢なブロック暗号に依存しています-暗号が耐性を持つ必要があります 関連キー攻撃 、これは暗号化に関する限り問題ではありませんが、ハッシュ関数にとっては致命的です。たとえば、AESは関連するキーに関して多少弱いことが知られているため、ハッシュ関数で「そのまま」使用することは必ずしも良い考えではありません。

WhirlpoolSkein は、ブロック暗号を再利用する2つのハッシュ関数です。どちらの場合も、その特定の状況での耐性に最適化された専用のブロック暗号です。


ハッシュ関数の設計の詳細に関係なく、anyパスワードストレージシステムには、パスワードを保存するという大きな重大な弱点があります。パスワード検証トークン(特定のパスワードが正しいかどうかを判断するために使用できるもの)パスワードは人間の頭脳から来ています。彼らは強いことができない。ほとんどの潜在的なパスワードを列挙することは非常に可能です。

パスワードを検証するサーバーに、たとえばパスワードを検証するのに十分な情報が含まれていることは避けられません。したがって、攻撃者がサーバーのディスクのダンプを取得できる場合、攻撃者はその能力も獲得し、「自宅で」パスワードを試すことができます。これは オフライン辞書攻撃 です。唯一知られている防御策(おそらく、唯一の可能な防御策)は、各パスワードの検証を本質的に遅くすることです。それが bcrypt のポイントです。パスワードハッシュでは、既知のショートカットなしで、基本操作の何百万を使用するため、攻撃者は試行ごとに高額を支払う必要があります。

ブロック暗号から構築された自家製のハッシュ関数は、one暗号化ではなく100万回連続して暗号化。それはまだ自家製です(それは暗号法では非常に悪いです;自家製のデザインを信用しないでください)が、少なくともそれに関してはそれほどひどく弱くはありません辞書攻撃へ。

1
Thomas Pornin