🔍 まずはここから

そのパスワード、
もう漏れてない?

世界中の流出事件で出回ったパスワード、何億件ものデータベースと照合します。
しかも、あなたのパスワードはこのページから外に出ません。その仕組みも、下で図解します。

遊べる学べる所要 2分
🤔

「本物のパスワードを、知らないサイトに入れるのは怖い」――その感覚、大正解です。

気になる人は、昔使っていたパスワードや思いついた例で試してください。普段使いのパスワードは、Google パスワードマネージャーや iCloud キーチェーン、1Password などに付いている「漏洩チェック機能」で確認するのがいちばん安心です。

🔬 いま実際に何が送られたか見る

あなたのパスワードを SHA-1 という方式で「ハッシュ値(指紋のような40文字)」に変換し、先頭5文字だけを送りました。

(まだ調べていません)

送信先:api.pwnedpasswords.com/range/?????

サーバーは、先頭5文字が同じハッシュの「残り35文字」を数百件まとめて返します。その中に自分のものがあるかどうかは、このブラウザの中で確かめます。返ってきた一覧(一部):

—

どうして「送らずに」調べられるの?

ヒミツは「ハッシュ」と「ぼかし」。図書館で本を探すのに似ています。

図書館で「タイトルが『さ』で始まる本の棚はどこ?」って聞くようなもの。司書さんは棚を教えてくれるけど、あなたがどの本を探してるかはわからないよね。

🔤あなたのパスワード
password
➜ハッシュ化
(ブラウザ内)
🧬40文字の指紋
5BAA61E4C9B9…
➜先頭5文字
だけ送信
🌐サーバーは
5BAA6 しか知らない

ハッシュってなに?

文字を「元に戻せない指紋」に変える計算です。同じ文字からは必ず同じ指紋ができますが、指紋から元の文字は計算できません。

例:password → 5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8

k-匿名性(けー・とくめいせい)

先頭5文字が同じ指紋は、平均して数百件あります。サーバーには「その数百件のどれか」までしか分からない。これをk-匿名性と呼びます。

GACHI / 実装の話
  • 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 のトップページから無料で調べられます(英語ですが、入力欄にメールアドレスを入れるだけ)。見つかったら、表示された「どのサービスから漏れたか」を確認し、そのサービスと同じパスワードを使っている所を変更しましょう。

次の訓練へ