あなたのパスワードはデータ漏洩に含まれていますか?
データ漏洩とは、あるサービスのパスワードデータベースが外部に逃げ出してしまうことです。そして漏洩コーパスとは、そうした数百件の流出から収穫されたパスワードの集合であり、索引化されているため、誰でも特定のパスワードがその中に含まれているかを問い合わせることができます。もしあなたのパスワードがその中にあれば、攻撃者はすでにそれを持っています。攻撃者が到達できるあらゆるログインページに対して自動的に試される単語リストに載っているのです。この記事では、パスワードを明かすことなくチェックがどのように機能するのか、「5,200万回見つかった」という回数が実際に何を意味するのか、「見つかりませんでした」が健康証明ではない理由、そしてパスワードが安全かどうかを尋ねるためにパスワードをチャットボットに貼り付けてはいけない理由を解説します。チェックを実行するにはパスワード漏洩チェックをお使いください。
漏洩コーパスとは
あらゆる大規模な漏洩は、同じ残留物を残します。ユーザー名とパスワードのデータベースです。通常はハッシュとして保存され、企業のシステムからコピーされて、回覧され、売買され、あるいは公開されます。個々に見れば、それらのデータベースは1社の失敗の証拠にすぎません。しかし集められ、重複が除去され、索引化されると、それは別のものになります。人々が実際に使っているパスワードの国勢調査です。Have I Been Pwned の Pwned Passwords コーパス(このサイトのチェッカーが照会するもの)には、数百件の漏洩から集められた10億を超えるパスワードが含まれており、新しい漏洩が表面化するたびに増え続けています。これは理論家が編んだ弱いパスワードのリストではありません。実際の人々が選び、入力し、失ったパスワードの記録なのです。
だからこそコーパスは、これほど容赦のない鏡なのです。あなたが5秒で考えついたパスワード(名前と生まれた年、スポーツチームと感嘆符、末尾に数字を付けたキーボード上の連続キー)は、他の何千人もの人がまったく同じ形で考えついている可能性が非常に高く、そのうちの誰かが侵害されたサービスでそれを使っていたなら、それはコーパスに含まれています。攻撃者は人のようにパスワードを1つずつ推測したりはしません。クレデンシャルスタッフィングを行います。漏洩したユーザー名とパスワードのペアのリスト、あるいは漏洩したパスワードの単語リストを取り、1時間に数百万回、あらゆる場所のログインページに対して自動的に試すのです。コーパスに含まれるパスワードとは、すでにリストに載っているパスワードのことです。
5文字チェックの仕組み
10億件のエントリを持つデータベースに対してパスワードをチェックするには、パスワードを誰かに送らなければならないように聞こえます。何年もの間、それがあらゆる漏洩チェックサービスに対する誠実な異議でした。その解決策は k-匿名性(k-anonymity)と呼ばれる仕組みで、1文で言い表せるほど単純です。サービスはあなたが尋ねたパスワードがどれなのか決して知りません。なぜなら、それを識別するのに十分な情報を見ることがないからです。パスワードはブラウザ内で SHA-1 を使ってハッシュ化され、40文字の指紋が生成されます。その指紋の最初の5文字だけが Have I Been Pwned に送られます。サービスはその5文字を共有するすべての指紋サフィックス(通常は800件ほど)を返し、ブラウザはそのリストの中から自分のサフィックスをローカルで、自分のデバイス上で探します。
5文字というのが要となる数字です。5文字の16進プレフィックスには約100万通りの可能な値があるため、10億件のエントリを持つコーパスでは、各プレフィックスはおよそ1,000件のパスワードによって共有されます。サービスがあなたのパスワードを識別できないほど十分に多くの似たものがあり、しかも答えが1回の小さな応答に収まるほど十分に少ないのです。パスワード自体に関する情報がネットワークを横切ることはありません。パスワードでも、完全なハッシュでも、その長さのヒントでさえもです。同じ設計が、このチェックにアカウントも API キーも、気にするほどのレート制限も不要な理由であり、応答を数週間キャッシュできる理由でもあります。あるプレフィックスに対する答えは、誰が尋ねても同じなのです。このサイトのパスワード漏洩チェックは、まさにこのモデルをブラウザ内で実装しており、ハッシュは何かが送信される前にローカルで計算されます。
「N回見つかった」とは何を意味するのか — そして何をすべきか
回数がゼロより大きい場合、そのパスワードが漏洩でそれだけの回数見られたことを意味し、その数字は、どれだけ早く試されるかの直接的な尺度です。数百万回という回数(「password」自体は5,000万回以上見られています)は、そのパスワードがすべてのクレデンシャルスタッフィング実行において最初に試される推測の1つであることを意味し、使用しているすべての場所で変更すべきです。まず他のアカウントを守るアカウントから始めます。メール、次に銀行、そしてパスワード回復の経路です。回数が小さくても合格ではありません。たった1回の登場でも、そのパスワードが攻撃者の単語リストに入っていることを意味し、通常は、推測可能なパターンに従っているサインでもあります。同じパターンが、その横に何千もの似たパスワードをコーパスに入れたのです。
回数にかかわらず対処法は同じです。どこでも使ったことのない一意のパスワードに置き換え、頭の中ではなくパスワードマネージャーに保存してください。人間の記憶こそが使い回しパスワードが存在する理由です。誰も100個の異なるランダムな文字列を覚えることはできません。マネージャーは、一意性を手頃なものにするツールです。パスワードジェネレーターで代替パスワードを生成し、マネージャーに保存してから、古いパスワードが使われていたすべてのサービスでパスワードを変更します。まず、攻撃者が他のアカウントをリセットできるようになるサービスからです。同じパスワードが複数のアカウントを守っていた場合、すべてを露出済みとみなしてください。攻撃者は、漏洩したパスワードを、漏洩元だけでなく、到達できるすべてのサービスで試すからです。
「見つかりませんでした」が意味しないこと
回数がゼロなのは良い知らせですが、厳密な限界があります。そのパスワードが、このコーパスが把握している漏洩では見られなかったということにすぎません。それだけです。パスワードが強いことを意味しません。辞書の単語と数字から作られた短いパスワードはコーパスに存在しなくても、数分で推測攻撃に敗れる可能性があります。推測には、パスワードが先に漏洩している必要はないからです。パスワードが安全であることを意味しません。漏洩が表面化するには数か月から数年かかり、まだ報告されていない漏洩の中にあるパスワードは、そうでなくなる日まで、すべてのコーパスから見えません。そして、使い回しのパスワードが問題ないことを意味しません。10のサイトで使われているパスワードは、今日の回数が何であれ、1件の漏洩で10件すべてを失います。
ゼロを誠実に読む方法は、いくつかのチェックのうち1つに合格したものとして見ることです。そのパスワードは漏洩したことが知られていない。それは知る価値があり、チェックが教えてくれる唯一のことです。それが十分に長く、十分にランダムで、正確に1か所だけで使われているかどうかは別の問題であり、チェックはそれに答えることはできません。守る価値のある基準は、以下に挙げる NIST の記憶シークレットに関するガイダンスにあるものです。複雑さの規則よりも長さを優先し、定期的な変更をそれ自体のために決して要求せず、パスワードが選ばれるその瞬間に漏洩コーパスと照合して新しいパスワードをチェックすること。それこそが、この記事で説明しているチェックです。長く、ランダムで、一意で、見つからないパスワードは、良いパスワードです。その4つの性質のうち1つでも取り除けば、ゼロの意味は大きく薄れます。
パスワードをチャットボットに貼り付けてはいけない
「私のパスワードは安全ですか?」と尋ねる最も危険な方法は、パスワードをチャットボットや AI アシスタントに貼り付けて直接尋ねることです。チャットは会話記録を保持します。あなたのパスワードは他者のサーバーに保存され、その保持ポリシーの下で保持され、モデルの訓練や調整に使われ、後の回答でそのまま引用される可能性さえあります。まったく別の誰かに対してです。同じことは、フォームにパスワードを入力して判定を約束するあらゆるウェブサイトにも当てはまります。このサイトのチェッカーのように、ページがパスワードをローカルでハッシュ化し、その仕組みを示してくれない限り、パスワードが送信され、保存され、記録されているものと想定してください。漏洩チェックがやる価値があるのは、まさに秘密を誰にも渡さずに実行できるからであり、秘密をチャットに貼り付けて尋ねた瞬間、あなたはチェックが検出するために存在する露出そのものを作り出してしまったのです。
この規則は一般化できます。パスワード、API キー、トークン、秘密鍵はすべて、チャット、チケット、フォーラムへの投稿、共有ドキュメントに生の形で入力してはいけないものです。だからこそこのサイトには、共有する前にテキストからそれらを除去するためのシークレットリダクターがあり、貼り付ける前にシークレットを伏せることについてのコンパニオン記事もあります。秘密が本当に他者に渡らなければならないときは、シークレットマネージャーや期限付きの1回限り表示の共有リンクを通じて、議論とは別のチャネルで送ってください。そして、パスワードが漏洩したかどうかを知る必要があるときは、その質問のために作られた仕組みを使ってください。ローカルでハッシュ化し、5文字を送り、残りを自分のデバイス上で照合する。それがチェックのすべてであり、新しい漏洩を作ることで自らに答えることのない、唯一の質問の形です。