私はasp.netアプリケーションに取り組んでおり、セキュリティ要件の1つは、アプリケーションが「パスワード履歴」を実行する必要があることです-(以前の8つのパスワードを覚えておいてください)。
誰かがこの目的のために(SQL 2008を使用して)テーブルを設計した経験があるかどうか知りたいです。これまでのところ、テーブルを1つ、以前のパスワードごとに1つのフィールド、パスワードの日付用に1つのフィールドを用意することを考えています。
他の提案/ベストプラクティスはありますか?
私はasp.netアプリケーションに取り組んでおり、セキュリティ要件の1つは、アプリケーションが「パスワード履歴」を実行する必要があることです-(以前の8つのパスワードを覚えておいてください)。
誰かがこの目的のために(SQL 2008を使用して)テーブルを設計した経験があるかどうか知りたいです。これまでのところ、テーブルを1つ、以前のパスワードごとに1つのフィールド、パスワードの日付用に1つのフィールドを用意することを考えています。
他の提案/ベストプラクティスはありますか?
もちろん、ソルトおよびハッシュされた古いパスワードを保存するためだけに、パスワード履歴テーブルを作成します。これは古典的な1対多の関係であり、8つの異なる古いパスワードに対して8つのフィールドがあると脆弱に見えます。
パスワードを8回以上変更した場合にエージングアウトするために、各履歴パスワードの日付をパスワード履歴テーブルに保存できます。
あなたの提案は問題ないように聞こえますが、代わりにパスワードのソルトハッシュを保存することをお勧めします。ユーザーごとにソルトを一定に保ち、ユーザーテーブルに保存するか、パスワードが変更されるたびにソルトを更新する場合は、前のパスワードエントリと一緒に保存する必要があります。最初のオプションは、以前のパスワードをチェックするための最も簡単なデータベースクエリになります。後者では、各比較を個別に実行する必要があります。
パスワードの変更にレート制限を実装することを忘れないでください。私の経験では、ユーザーはパスワードがないかどうかを確認し、その機会を離れると、パスワードを9回続けて変更して、古いパスワードになってしまうことを示唆しています...
他のベストプラクティスは、システムの安全性によって異なります。たとえば、私が見た1つのことは、新しいパスワードをシードとして(既存のツールの場合)または基本的な反復で使用して、10秒間のブルートフォーシングを試みることです。つまり、foobar5の形式のパスワードが表示された場合は、foobar1/2/3/4が古いハッシュのいずれかと一致するかどうかを確認してください。