これに関するいくつかの投稿を見てきましたが、必ずしも決定的な答えを見たわけではありません。したがって、私はこの質問を新しい文脈(国防総省)で言い直そうと思いました。
DISA の「Application Security and Development STIG, V3R2」のセクション3.1.24.2 Password Complexity and Maintenanceによると、DoD エンタープライズ ソフトウェアには、パスワードに関するかなり厳しいガイドラインがあります。
パスワードは 15 文字以上にする必要があります。
パスワードには、大文字、小文字、数字、および特殊文字を混在させる必要があります。
パスワードを変更する場合、氏名、電話番号、アカウント名、辞書の単語などの個人情報を使用できないようにする必要があります。
パスワードは 60 日後に失効する必要があります。
ユーザーは、以前の 10 個のパスワードを再利用できてはなりません。
パスワードが変更されたときに、新しいアカウントのパスワードが以前のパスワードと少なくとも 4 文字異なることを要求する機能がアプリケーションにあることを確認してください。
管理者または特権ユーザーの場合を除き、ユーザーは 1 日に複数回パスワードを変更できてはなりません。特権ユーザーは、ユーザーが忘れたパスワードをリセットし、パスワードを 1 日に複数回変更できるようにする必要がある場合があります。
NullUserException の投稿で述べられているように、開発者が実際に最後の X 個のパスワードを確認できるようにする (また、新しいパスワードが以前のパスワードと異なることを確認する [箇条 6 ]) には、パスワードを可逆暗号化を使用して暗号化する必要があります。パスワードをハッシュするのではなく、メソッドを使用します (NSA 承認の暗号化アルゴリズムを使用している場合でも、これははるかに安全ではありません)。Dan Vinton の投稿に見られるように、いくつかの不一致や議論があるように見えましたが、提案された回答はかなり理にかなっているように見えました。
ここでの本当の問題は、システムのセキュリティを実際に低下させることなく、これらの一見一般的なパスワードの複雑さの制約をすべて実装できた人がいるかということだと思います。
編集:脆弱性APP3320.7(箇条書き6)には、「パスワードが変更されたときに、新しいアカウントのパスワードが以前のパスワードと少なくとも4文字異なることをアプリケーションに要求する機能があることを確認してください。」そのため、類似性をチェックするには、Levenshtein などの文字列類似性アルゴリズムを実行する必要があると思いました。ハッシュ/ソルトでこれを行うことはできません。ここで間違っているかどうか教えてください。