🔐 【通信と信用 第2部】パスワードの真実:なぜあなたのパスワードは盗まれても大丈夫なのか?

📚 通信と信用シリーズ学習マップ

🔥 2012年 LinkedIn パスワード流出事件の悲劇

第1部では、通信の途中でハッカーにパスワードを盗み見られないための「HTTPSとTLS」の仕組みを学びました。
では、無事に暗号化されて企業のサーバー(顧客データを保管する巨大な金庫)に到着したあなたのパスワードは、その後どのように保管されているのでしょうか?

2012年、ビジネス特化型SNS「LinkedIn」から、約650万件(のちの調査で実は1億1700万件以上と判明)ものユーザーパスワードが流出する大事件が起きました。

しかし、ITエンジニアたちを本当に戦慄させたのは「データベースが盗まれたこと」自体ではありません。LinkedInがパスワードを、「ハッカーから見れば一瞬で解読できてしまう、極めて無防備な状態」のまま保存していたという事実でした。
(※専門用語で「ソルトなしの古いハッシュ」と呼ばれますが、この言葉の意味は後ほど解説します)

パスワードは暗号化のような処理(ハッシュ化)がされてはいたものの、防備が甘すぎたため、ハッカーは「よく使われるパスワードの解読リスト(逆引き辞書)」を使うだけで、一瞬にして数百万人の元のパスワードを復元してしまったのです。

もふねこ

「ユーザーのパスワードをそのままの文字で、企業側の保管庫(データベース)に保存してはいけない」。これは現代のインターネットサービスを運営する上での絶対の掟なんだよ🐾

では、私たちが毎日安全にログインできている裏側で、企業のシステムにはどんな「防衛線」が張られているのか。一緒に見ていこう!


1. パスワード ハッシュ化とは?盗まれる前提の防衛線

信頼できるサービスはユーザーのパスワードを「そのまま(平文)」では絶対に保存しません。代わりにハッシュ関数という「一方向の変換機」を通します。

SHA-256によるハッシュ例:

"password" → 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

"Password" → e7cf3ef4f17c3999a94f2c6f612e8a888e5b1026878e4e19398b23bd38ec221a

※大文字小文字1文字違うだけで全く異なるハッシュ値になる(雪崩効果)

企業のシステムには、あなたのパスワードそのものは保存されません。保存されるのは、上記のような特殊な計算で変換された「意味不明な暗号文字列(ハッシュ値)」だけです。
つまり、企業側ですら元のパスワードを直接見ることはできません。ログインのときは、あなたが入力したパスワードをもう一度同じ方法で変換し、保管されている文字列と一致するかだけを確認するのです。

👆 ハッシュ化は「答えの指紋」だけを保存する仕組み

イメージとしては、「パスワードという答えそのもの」を保存するのではなく、「答えが一致しているか確認するための指紋」だけを保存している感じです。
「企業はパスワードを保管している」のではなく、「パスワードを直接知らなくても本人確認できる仕組みを保管している」のです。

この仕組みのおかげで、万が一企業側の保管庫がハッカーに丸ごと盗み出されても、ハッカーの手に入るのは大量の「指紋データ」だけです。そこから元のパスワードそのものをすぐに復元することはできないため、被害を防ぐことができるのです。

もふねこ
もふねこ

「パスワードを忘れた」をクリックしたとき、メールに元のパスワードがそのまま送られてくるサービスは極めて危険だよ。それはハッシュ化せずにパスワードを保存している証拠だからね🐾


2. ソルトとは?ストレッチングと合わせた天才たちの補強工事

しかし、「単純にハッシュ化するだけ」では安全ではありません。それが冒頭のLinkedIn事件です。
ハッカーは「よく使われるパスワード」のハッシュ値をあらかじめ計算した巨大な辞書(レインボーテーブル)を持っており、単純なハッシュ値からなら元のパスワードを逆引きしてしまったのです。

これを防ぐため、現代の暗号学者は二つの強力な補強工事を施しました。

① ソルト(Salt):同じパスワードでも全く別の指紋にする

パスワードを指紋(ハッシュ値)に変換する直前に、ユーザーごとに異なるランダムな文字列をパスワードにくっつけます。この追加する文字列を、専門用語でソルト(塩)と呼びます。

実はこの「ソルト」は、秘密の情報として隠す必要はありません。企業のシステム内に、そのまま見える状態で保存されます。
「えっ、セキュリティの重要パーツなのに丸見えでいいの?」と思いますよね。

でも、ソルトの役割は「隠すこと」ではありません。
ソルトは、あなたのパスワードにだけ付与されるランダムな「背番号」や「会員番号」のようなものです。

ソルトは背番号のようなもの

たとえば、他の人と偶然同じ「password123」というパスワードを使っていても、

  • password123 + あなた専用の背番号A
  • password123 + 別の人専用の背番号B

となれば、出来上がる指紋(ハッシュデータ)は全くの別物になります。
つまり、ハッカーが事前に用意した「よくあるパスワード解読リスト」は、あなた専用の背番号が付いた瞬間に何の役にも立たなくなるのです。

ソルトなし(危険): Hash("password123") = ef92b778...(辞書で即解読)

ソルトあり(安全): Hash("password123" + "xK9m2p") = a3f7c891...(ユーザーごとに異なる結果に)

② 鍵ストレッチング:あえて計算を遅くする

ハッシュ関数は元々「超高速」に処理できるように設計されていますが、それではハッカーの「総当たり攻撃」も超高速になってしまいます。
そこで、意図的に計算を遅くする関数を用いて、ハッシュ計算を何千〜何十万回と繰り返すストレッチング(Stretching)を行います。これによりハッカーの一回の試行コストが爆発的に増え、総当たり攻撃を物理的に不可能にするのです。

🔬 ここから先はマニア向け!パスワード保存アルゴリズム(読まなくても進めるにゃ🐾)

現在推奨されている『パスワードベース鍵導出関数(PBKDF2等)』の主要なアルゴリズム一覧です。

方式 推奨度 特徴
Argon2id ✅ 最推奨 CPU・メモリ・並列度を調整可能。GPUを用いた攻撃も防ぐ現在の最高標準
bcrypt / scrypt ✅ 推奨 ソルト内蔵でコストパラメータ調整可。広く使われている強力なアルゴリズム
SHA-256(単純) ⚠ 不十分 高速すぎるため、パスワードの保存には不向き

3. 認証の3要素と「知識」の限界

ここまでで、サーバーのデータベースは安全に守られました。しかし、ユーザー側が偽サイト(フィッシングサイト)に自分でパスワードを入力してしまえば、どんなに堅牢なデータベースも意味がありません。

そもそも、パスワードとは「あなたが本人であることを証明する」ための一つの要素に過ぎません。セキュリティの世界ではこれを「認証の3要素」と呼びます。

🧠

知識要素(Something You Know)

あなたが「記憶している」情報
パスワード、PIN、秘密の質問

📱

所持要素(Something You Have)

あなたが「物理的に所有」する物
スマホ、ハードウェアトークン

👆

生体要素(Something You Are)

あなた「自身の身体的・行動的特徴」
指紋、顔認証、静脈認証

パスワードによる認証は最もシンプルですが、「知識(知っていること)」という1要素だけに依存しているという根本的な弱点があります。フィッシング詐欺やマルウェアで「知られてしまった瞬間」、攻撃者はあなたと区別がつかない「もう一人のあなた」になれてしまうのです。


4. MFA(多要素認証)とは?究極の防御の仕組み

そこで必要になるのが、パスワード(知識)に「スマホ(所持)」を組み合わせる多要素認証(MFA / 2FA)です。

🚨 昔ながらの「SMS認証」はなぜ危険視されているのか?

現在、電話番号にショートメッセージを送る「SMS認証」は、セキュリティの専門家から推奨されていません。

なぜなら、本物そっくりの偽サイトに騙されて「パスワード」と「SMSに届いた6桁の数字」を入力してしまった場合、ハッカーはそれをリアルタイムで抜き取り、本物のサイトに入力し直すことで簡単に突破できてしまうからです。(※この手口を専門用語で「中間者フィッシング / AiTM」と呼びます)

また、携帯会社を騙して「あなたの電話番号そのものを乗っ取り」、ハッカー自身のスマホに直接SMSの暗証番号を届かせるという恐ろしい手口(※SIMスワッピング攻撃)も横行しています。
このように、SMSはもはや「あなただけが持っている安全な鍵」とは言えなくなってきているのです。

🔐 認証アプリと「パスキーとは?」

SMSの代わりに、Google Authenticator などの認証アプリ(TOTP)が推奨されています。これはスマホの中にだけある秘密の鍵と「現在の時刻」を組み合わせて、30秒ごとに新しい6桁の数字を生成する仕組みです。完全なオフラインで動作するため、通信を傍受されても安全です。

さらに究極の形がパスキー(Passkey)です。
これはパスワード自体を完全に廃止し、次回の第3部で学ぶ「公開鍵暗号によるデジタル署名」を利用します。スマホの指紋認証や顔認証を使うだけで、裏側で暗号学的な「ハンコ」が捺され、パスワードを入力することなくログインが完了します。しかも、URLが1文字でも違う偽サイト(フィッシングサイト)ではそもそもハンコが捺せない仕組みになっているため、フィッシング詐欺を完全に無効化できる夢の技術です。

🔬 ここから先はマニア向け!最新認証の裏側技術(読まなくても進めるにゃ🐾)

■ TOTPの裏側(HMAC)
認証アプリは『HMAC(Hash-based Message Authentication Code)』という技術を使用しています。サーバーと共有したシークレットキーをソルトのように使い、現在時刻をハッシュ化して6桁の数値を生成します。

■ パスキーの裏側(WebAuthn / CTAP)
パスキーはFIDO2規格に準拠しています。ブラウザとOS間の規格である『WebAuthn』と、デバイス間通信の『CTAP(Client to Authenticator Protocol)』を連携させ、スマホ等のセキュア領域に保存された秘密鍵を用いて署名を行います。さらに、認証時にブラウザが「アクセス先のドメイン名(Origin)」と秘密鍵の生成を暗号学的に紐付ける(Origin Binding)ため、原理上フィッシングが不可能になります。

「じゃあ、世の中のすべてのサイトをパスキーにしてしまえばいいじゃないか」と思われるかもしれません。しかし、企業がパスキーを導入するにはシステムの大規模な改修(莫大なコスト)が必要になるため、まだ一部の大手サービスでの導入にとどまっています。

「えっ、じゃあパスキーに対応していないサイトは危険なの?」と不安になる必要はありません。たとえパスワードを使うサイトであっても、「強固なパスワード(使い回しをしない)」と「認証アプリ(Google Authenticator等)」の二重ロックを組み合わせていれば、現時点でも極めて高い安全性を確保できます。

パスキーはあくまで「パスワードを覚える手間をなくし、より強固にした次世代の仕組み」です。まずは現在の主流である『パスワード+認証アプリ』を正しく設定しておくことが、今私たちができる最善かつ十分な防衛策になります。

もふねこ

「なるほど!企業はハッシュやソルトで見えないところで必死に私たちを守ってくれていたんだね🐾

でも、私たちが『同じパスワードを使い回す』とか『偽サイトに騙されて入力しちゃう』と、企業の防衛線も一瞬で突破されちゃうんだ…。インターネットの安全って、『企業の技術』と『私たち自身の行動』の両方が揃って初めて完成するんだね!

だからこそ今日から、
・パスワードの使い回しをやめる
・認証アプリ(二重ロック)を設定する

知識を知るだけじゃなくて、『設定して初めて防御になる』ってことだね!✨」

🔍 次のステージへ

あなた自身の行動を変えることで、セキュリティは極めて高いレベルに到達します。

……しかし、ここで最大の疑問が残ります。
そもそも、その「通信が安全」「このサイトは本物」と証明している仕組み自体は、誰が信用を担保しているのでしょうか?
もし、その『信用の土台』そのものが崩れたら……?

次章では、インターネット全体の『信用の王様』である認証局(CA)と、PKI(公開鍵基盤)の世界に進みます。

第3部:インターネットの信頼の限界(PKI)へ進む ➔

実践的な仮想通貨・ブロックチェーンの知識を学ぶなら

☕ 姉妹サイト『暗号資産カフェ』へ