私は、最小の長さを要求してから特定の文字を削除することにより、ユーザーパスワードを永続的に隠すというこのアイデアを思いつきました。たとえば、ユーザーパスワードが_secret123
_の場合、システムはそれを_ecrt12
_に分解し、_ecrt12!@#$%^&*
_のようにランダムな文字を追加してから、ハッシュ、ソルトの追加などを行い、DBに保存します。
すべての一般的な慣行を許可することも、次のように使用されました。
コードで要約すると:
$hash = hash($modifiedpassword.$uniquesalt.$systempepper)
// 1000秒まで繰り返しました。
攻撃者がなんとかすべてのハッシュを元に戻すことができた場合、攻撃者が回復できる最善の情報は_ecrt12!@#$%^&*
_であり、元の_secret123
_ではありません。システムコードをハッキングしたとしても、どの文字が削除されたかはわかりません。
私の質問はセキュリティの専門家ですが、元のユーザーパスワードを削除/追加するこの方法をお勧めしますか?
同じユーザーがパスワードを入力するたびに「同じ」ランダム文字が使用されることをどのように保証しますか?それらを書き留める(または決定論的に生成する)場合にのみ保証できるため、「パスワード」の「!@#$%^&*」は実際には塩の別の部分にすぎません。
これにより、ユーザーのパスワードを「secret123」から正規表現「^ .ecret12。$」に変換した状態になり、パスワードの有効な複雑さが9文字から7文字に減少します。 「pecret129」を試みる攻撃者はで許可されます。
質問に直接回答し、以下のewanm89から見積もりを借りるには:いいえ。私はそれをすることをお勧めしません。