web-dev-qa-db-ja.com

使用するアルゴリズムをハッシュの前に付けるのは悪い習慣ですか?

たくさんのユーザーがいるデータベースがあるとします。このユーザーデータベースには、通常、ユーザーごとにハッシュ化されたパスワードがあります。使用するハッシュアルゴリズムをこのハッシュの前に付けるのは悪い習慣でしょうか?

たとえば、ハッシュの作成方法はSHA1であるため、ハッシュaaf4c61ddcc5e8a2dabede0f3b482cd9aea9434dの代わりにsha1_aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434dを格納します。

Argon2がこれを実行していることに気づきましたが、実際にそれは非常に便利だと思います。これは、新しいユーザーのために、新しいハッシュアルゴリズムに部分的に移行することが容易になるためです。

パスワードの実稼働コードでSHA1を使用していません。SHA1はランダムに選択されました。この質問はハッシュ法の使用に関するものではありません。

多くの異なるパスワードハッシュシステムがこれを行います。使用されるハッシュメカニズムのタイプは、秘密であってはなりません(そして秘密である必要はありません)。 Kerckhoffsの原則 は言う:

暗号システムは、キー以外のシステムに関するすべてが公開知識であっても、安全でなければなりません。

したがって、システムが適切に安全であれば、ハッシュメカニズムが公開されているかどうかは問題になりません。

117
schroeder

私は schroeder に同意します。これは問題ありません。プレフィックスがなくても、攻撃者はおそらく figure out 使用しているアルゴリズムを特定できます。とにかく、パスワードを保護するのはハッシュアルゴリズムの強さであり、アルゴリズムの機密性ではありません。

多くのハッシュアルゴリズムとライブラリが既にこれを行っていることに注意してください。それらは、関連するすべての情報(アルゴリズム、コスト要因、ソルト、実際のハッシュ)を1つのシリアル化された文字列に埋め込みます。たとえば Modular Crypt Format またはPHP password_hash 関数を参照してください。独自のスキームを作成しないでください。すでに入手した降下ハッシュライブラリを使用します。

ただし、パスワードのハッシュにSHA1を使用しないでください。 それは問題です。

38
Anders

いいえ、それは悪い習慣ではありません、そしておそらく、あなたはすべきこの情報を保持します。

お気づきのとおり、これにより、すべてのユーザーの既存のパスワードを無効にすることなく、いつでも新しいパスワードのアルゴリズムを変更できます(これにより、何らかの理由で不人気になる傾向があります)。

これにより、攻撃者は古くて弱いパスワードを検索して最初に攻撃することができますが、セキュリティはまったく低下していません(アルゴリズム自体が秘密である必要はないという前提で、ケルコフの原理を前提としています)。

13
Toby Speight

ハッシュアルゴリズムを保存することをお勧めしますが、Argon2やPBKDF2などの適切なパスワードハッシュ関数がすでにこれを処理しています。ただし、SHA1またはSHA256を単独でパスワードハッシュに使用することはお勧めできません。これらは、辞書攻撃やブルートフォースを使用して解読するための固定された(そして比較的少ない)作業量だからです。これらのパスワードは、次回のログイン時にパスワードを再ハッシュすることにより、安全なハッシュ関数に移行する必要があります。詳細は https://crypto.stackexchange.com/a/45405 を参照してください。

9
leo v

それは悪い習慣ではなく、実際に行うことです。実際、Linuxマシンで/etc/shadowファイルを開くと、ハッシュされたパスワードの前に$ x $ salt $が付いています。xは、使用されたハッシュアルゴリズムを示す番号です。

ここで考慮すべきいくつかのこと:

  • ハッシュアルゴリズムとしてSHA1を直接使用しないでください。代わりにbcrypt、scrypt、またはargon2を使用してください(これについては言及しましたが、これをあまり繰り返すことはできません)。これらはSHA1のような単純なハッシュアルゴリズムをベースとして使用しますが、攻撃に強い特別な方法で実行します。
  • 実用的な理由から、ファイルではなくデータベースを使用しているので、ハッシュ方法とソルトを別々の行に保存したい場合があります。ただし、$ x $ salt $で始まる文字列をデータベースに保存し、パスワードを確認するときにその文字列からソルトおよびハッシュメソッドを解析することもできます。おそらく、十分な速度があり、大きな違いはありません。どちらの場合も、システムのセキュリティは同じになります。
1