ユーザーはWebアプリにアカウントを登録します。パスワードはソルトされ、ハッシュされます。しかし、パスワードをソルトおよびハッシュする前に、HIBP Pwned Passwords API に対してパスワードをチェックしても安全ですか?もちろん、アプリはTLSを使用します。
したがって、パスワードが違反で見つかった場合は、アカウントの登録を許可しないでください。違反でパスワードが見つからない場合-ソルトしてデータベースに保存します。
パスワードを変更する場合も同様です。
Pwnedされましたか? 誰でもデータベース全体をダウンロードして、ローカルでチェックを実行できます。
それがオプションではない場合、APIの使用は安全です。APIは k-anonimity を使用するため、完全なパスワード/ハッシュを送信せずにチェックを実行できます。
Pwned Passwords APIのオペレーターが悪意のある場合(またはサービスが悪意のあるユーザーによってハッキングされた場合、または誰かが通信を傍受した場合)は、特定のパスワードについて嘘をつく可能性があります(そのハッシュについて知っているパスワードのサブセットのみを返します)。リクエストが送信され、そのIDに属するWebサイトを特定し、アカウントを特定し(たとえば、作成時間に基づいて)、アカウントが侵害される可能性が高いため、嘘をついたパスワードでテストします。
これはかなりありそうもないシナリオです(APIの所有者は立派なセキュリティ専門家であり、既知のハッシュのリストは公開されており、検出されずにこの種の攻撃を行うのは難しいでしょう)。 。ディスカッション掲示板を実行する場合は、APIを使用することをお勧めします。あなたが電子銀行を運営しているなら、多分それほどではないでしょう。
サイズを考えると、データベースをダウンロードしてローカルでチェックすることはもちろん安全ですが、簡単な作業ではありません。
この回答の投稿の時点で、質問は「ソルトとハッシュの前に」、つまり平文でパスワードを送信しても安全かどうかを尋ねます。パスワードは決してプレーンテキストでサードパーティに送信する必要があります(現在ログインしている場合は、セカンドパーティでも問題ありません)。 Rainbow Table を使用してパスワードを検索できるため、パスワードをハッシュするだけでは不十分です。これが 誰かが(ハッシュして)KeePassデータベースのすべてのパスワードをHIBPに送信するのを見たとき だったので、すぐにそれを呼び出しました。
他の回答が指摘したように、 k-anonymity を含むHIBPの新しいバージョンがあります(詳細については、そのリンクと他の回答を参照してください)。ただし、これはパスワードに関する一部の情報を公表しています(HIBPおよびすべての潜在的な [〜#〜] mitm [〜#〜] 攻撃者へ。 一部の情報は、パスワード全体を漏らすほど悪いことではありませんが、それでも心配する必要があります。本当に必要なのは、パスワードを安全ではなく、匿名ではありません。
最終的に、チェックプロセスでパスワードに関する情報が漏洩しないようにしたい場合は、pwnedパスワードの データベース全体 をダウンロードし、パスワードをローカルでハッシュおよびチェックする必要があります(この場合、サーバー上では、アカウントを作成するためだけにDB全体をダウンロードする必要がないためです。 DBと比較するパスワードやハッシュはどこにも保存せず、実際のパスワードデータベースにソルトハッシュのみを保存してください。