web-dev-qa-db-ja.com

ゼロ知識証明認証で新しいパスワードを強制する

パスワードの検証にZKP(SRP6aなど)が使用されているとします。

ユーザーにパスワードの変更を強制する必要があるとしましょう(したがって、現在のパスワードのソルトとベリファイアがあります)。このため、クライアントは新しいソルトとベリファイアの値を私に送信する必要があります。しかし、ソルトがランダムである場合、使用されたパスワードが同じであるかどうかを確認できません。

私がわざわざする理由は、最初のパスワードが安全性の低い方法で配信される可能性があり、そのパスワードが長引くことを望まないためです。

私が見つけたパスワードが異なることを確認する唯一の方法は、新しいソルトが古いものと同じであることを要求することです。

パスワードを変更するメカニズムはAPIとしてクライアントに公開されており、クライアントがその検証を行うことを必ずしも信頼できるとは限りません。

質問は次のとおりです。

  1. より良い方法はありますか?
  2. いいえの場合、同じ塩を要求することの欠点はありますか?つまり、私は何かを妥協していますか?
7
Pawel Veselov

まず、サーバーが最初の安全でないパスワードを生成した場合、クライアントがパスワードを切り替えたかどうかを確認するのは簡単であることに注意してください。このスキームの唯一の秘密の値はパスワード自体だからです。したがって、サーバーはv変数の生成を試み、それらが同一であるかどうかを確認するだけです。したがって、元の問題はそのように解決されます。

私が理解している限り、このスキームのソルトの背後にある考え方は、同じパスワードがいつ使用されているかを攻撃者が理解するのを防ぐことです。クライアントごとにランダムなソルトを修正すれば、スキームは十分に安全であるように思われます(まだ確認していませんが、一目でわかります)。この場合の唯一の利点は、サーバーがパスワードの再利用を検出できることです。

1
DiGMi