そのパスワード、
もう漏れてない?
世界中の流出事件で出回ったパスワード、何億件ものデータベースと照合します。
しかも、あなたのパスワードはこのページから外に出ません。その仕組みも、下で図解します。
「本物のパスワードを、知らないサイトに入れるのは怖い」――その感覚、大正解です。
気になる人は、昔使っていたパスワードや思いついた例で試してください。普段使いのパスワードは、Google パスワードマネージャーや iCloud キーチェーン、1Password などに付いている「漏洩チェック機能」で確認するのがいちばん安心です。
🔬 いま実際に何が送られたか見る
あなたのパスワードを SHA-1 という方式で「ハッシュ値(指紋のような40文字)」に変換し、先頭5文字だけを送りました。
送信先:api.pwnedpasswords.com/range/?????
サーバーは、先頭5文字が同じハッシュの「残り35文字」を数百件まとめて返します。その中に自分のものがあるかどうかは、このブラウザの中で確かめます。返ってきた一覧(一部):
どうして「送らずに」調べられるの?
ヒミツは「ハッシュ」と「ぼかし」。図書館で本を探すのに似ています。
図書館で「タイトルが『さ』で始まる本の棚はどこ?」って聞くようなもの。司書さんは棚を教えてくれるけど、あなたがどの本を探してるかはわからないよね。
password(ブラウザ内)
5BAA61E4C9B9…だけ送信
5BAA6 しか知らない
ハッシュってなに?
文字を「元に戻せない指紋」に変える計算です。同じ文字からは必ず同じ指紋ができますが、指紋から元の文字は計算できません。
例:password → 5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8
k-匿名性(けー・とくめいせい)
先頭5文字が同じ指紋は、平均して数百件あります。サーバーには「その数百件のどれか」までしか分からない。これをk-匿名性と呼びます。
- SHA-1 は
crypto.subtle.digest("SHA-1", …)でブラウザ内計算。先頭5桁(165 = 1,048,576 バケット)をGET /range/{prefix}。 - レスポンスサイズからプレフィックスを推測されないよう、
Add-Padding: trueヘッダーで件数0のダミー行を混ぜてもらっています(このページはダミー行を除外して照合)。 - SHA-1 は衝突耐性の点では非推奨ですが、ここでは「照合キー」として使っているだけなので問題になりません。パスワード保存に使うべきなのは bcrypt / scrypt / Argon2 などの遅いハッシュです(強さラボ参照)。
- 同じ仕組みは Firefox Monitor、1Password Watchtower、各種 IdP の「漏洩パスワード禁止」機能でも使われています。NIST SP 800-63B でも、既知の漏洩パスワードを拒否することが求められています。
「見つかった!」ときの3ステップ
① 慌てない
見つかった=「あなたのアカウントが乗っ取られた」ではありません。世界の誰かが同じパスワードを使っていて、それが漏れたということ。つまり攻撃者の「試すリスト」に載っている、という意味です。
② 使っている場所を変える
そのパスワードを使っているサービスを思い出して、全部別々のパスワードに。メール、銀行、通販、SNS の順に優先。
③ 二度と覚えなくていい仕組みに
全部覚えるのは人間には無理。パスワードマネージャーとパスキーに任せましょう。
メールアドレスが漏れているか調べたいときは?
メールアドレスの検索はAPI経由だと有料・要登録のため、このサイトでは行いません。本家の Have I Been Pwned のトップページから無料で調べられます(英語ですが、入力欄にメールアドレスを入れるだけ)。見つかったら、表示された「どのサービスから漏れたか」を確認し、そのサービスと同じパスワードを使っている所を変更しましょう。