たくさんのユーザーがいるデータベースがあるとします。このユーザーデータベースには、通常、ユーザーごとにハッシュ化されたパスワードがあります。使用するハッシュアルゴリズムをこのハッシュの前に付けるのは悪い習慣でしょうか?
たとえば、ハッシュの作成方法はSHA1であるため、ハッシュaaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
の代わりにsha1_aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
を格納します。
Argon2がこれを実行していることに気づきましたが、実際にそれは非常に便利だと思います。これは、新しいユーザーのために、新しいハッシュアルゴリズムに部分的に移行することが容易になるためです。
パスワードの実稼働コードでSHA1を使用していません。SHA1はランダムに選択されました。この質問はハッシュ法の使用に関するものではありません。
多くの異なるパスワードハッシュシステムがこれを行います。使用されるハッシュメカニズムのタイプは、秘密であってはなりません(そして秘密である必要はありません)。 Kerckhoffsの原則 は言う:
暗号システムは、キー以外のシステムに関するすべてが公開知識であっても、安全でなければなりません。
したがって、システムが適切に安全であれば、ハッシュメカニズムが公開されているかどうかは問題になりません。
私は schroeder に同意します。これは問題ありません。プレフィックスがなくても、攻撃者はおそらく figure out 使用しているアルゴリズムを特定できます。とにかく、パスワードを保護するのはハッシュアルゴリズムの強さであり、アルゴリズムの機密性ではありません。
多くのハッシュアルゴリズムとライブラリが既にこれを行っていることに注意してください。それらは、関連するすべての情報(アルゴリズム、コスト要因、ソルト、実際のハッシュ)を1つのシリアル化された文字列に埋め込みます。たとえば Modular Crypt Format またはPHP password_hash 関数を参照してください。独自のスキームを作成しないでください。すでに入手した降下ハッシュライブラリを使用します。
ただし、パスワードのハッシュにSHA1を使用しないでください。 それは問題です。
いいえ、それは悪い習慣ではありません、そしておそらく、あなたはすべきこの情報を保持します。
お気づきのとおり、これにより、すべてのユーザーの既存のパスワードを無効にすることなく、いつでも新しいパスワードのアルゴリズムを変更できます(これにより、何らかの理由で不人気になる傾向があります)。
これにより、攻撃者は古くて弱いパスワードを検索して最初に攻撃することができますが、セキュリティはまったく低下していません(アルゴリズム自体が秘密である必要はないという前提で、ケルコフの原理を前提としています)。
ハッシュアルゴリズムを保存することをお勧めしますが、Argon2やPBKDF2などの適切なパスワードハッシュ関数がすでにこれを処理しています。ただし、SHA1またはSHA256を単独でパスワードハッシュに使用することはお勧めできません。これらは、辞書攻撃やブルートフォースを使用して解読するための固定された(そして比較的少ない)作業量だからです。これらのパスワードは、次回のログイン時にパスワードを再ハッシュすることにより、安全なハッシュ関数に移行する必要があります。詳細は https://crypto.stackexchange.com/a/45405 を参照してください。
それは悪い習慣ではなく、実際に行うことです。実際、Linuxマシンで/etc/shadow
ファイルを開くと、ハッシュされたパスワードの前に$ x $ salt $が付いています。xは、使用されたハッシュアルゴリズムを示す番号です。
ここで考慮すべきいくつかのこと: