あなたのパスワードは「暗号化」されていない?
「パスワードは暗号化して保存しています」──こんな説明を見たことはありませんか?実はこの表現、セキュリティの専門家が聞くと少し眉をひそめます。なぜなら、パスワードの保管に使われているのは暗号化ではなく「ハッシュ化」という別の技術だからです。
IT業界では、データを別の形に変換する技術がいくつもあります。しかし「暗号化」「ハッシュ化」「エンコーディング」の3つは、目的も仕組みもまったく異なるのに、しばしば混同されています。この記事では、郵便物のたとえ話を使いながら、それぞれの違いを明確にしていきます。
郵便局で理解する3つの変換技術
データ変換の違いは、郵便物の送り方に例えるとスッキリ整理できます。
暗号化は「書留の封書」です。手紙の内容を鍵のかかった封筒に入れて送り、受け取った相手だけが鍵を使って開封できます。元の手紙に完全に戻せるのがポイントです。
ハッシュ化は「手紙の指紋」です。手紙の内容から固有の指紋(ハッシュ値)を生成しますが、指紋から元の手紙を復元することはできません。「この手紙が改ざんされていないか?」を確認するために使います。
エンコーディングは「翻訳」です。日本語の手紙を英語に翻訳して送るようなもので、英語がわかる人なら誰でも元の内容を読めます。秘密にする目的はなく、相手が読める形式に変えるだけです。
一覧表で見る決定的な違い
| 項目 | 暗号化 | ハッシュ化 | エンコーディング |
|---|---|---|---|
| 目的 | データの機密性を守る | データの完全性を検証する | データの形式を変換する |
| 元に戻せるか | 鍵があれば可能(復号) | 不可能(一方向) | 誰でも可能(デコード) |
| 鍵の必要性 | 必要 | 不要 | 不要 |
| 代表的な技術 | AES, RSA, ChaCha20 | SHA-256, bcrypt, Argon2 | Base64, UTF-8, URL encoding |
| 主な用途 | 通信の保護、ファイル暗号化 | パスワード保管、改ざん検知 | メール添付、URL処理 |
共通鍵と公開鍵──暗号化の中にもある「2つの流派」
暗号化をさらに深掘りすると、共通鍵暗号方式と公開鍵暗号方式という2つの方式に分かれます。
共通鍵暗号は、送り手と受け手が同じ鍵を使う方式です。家の合鍵を相手に渡しておくイメージで、処理が高速な反面、「その鍵をどうやって安全に渡すか」という問題があります。AESが代表格で、大量データの暗号化に使われます。
公開鍵暗号は、公開鍵(誰でも使える鍵)と秘密鍵(本人だけが持つ鍵)のペアを使います。南京錠を開けっ放しで配って、誰でもロックできるけれど開けられるのは鍵の持ち主だけ、という仕組みです。RSAやECCが代表的で、鍵の受け渡し問題を解決しました。
現実のHTTPS通信では、この2つを組み合わせたハイブリッド方式が使われています。最初に公開鍵暗号で共通鍵を安全にやりとりし、その後は高速な共通鍵暗号でデータをやりとりするという、いいとこ取りの設計です。
現場で間違えやすい3つの落とし穴
落とし穴① パスワードを「暗号化」して保存する
暗号化は鍵があれば元に戻せてしまうため、万が一鍵が漏洩するとパスワードが全件流出します。パスワード保管には必ずハッシュ化(bcryptやArgon2)を使いましょう。ハッシュ化なら、元のパスワードに戻す手段がそもそも存在しません。
落とし穴② Base64を「暗号化」だと思っている
Base64はバイナリデータをテキストに変換するエンコーディングの一種であり、セキュリティ機能はゼロです。APIキーやトークンをBase64でエンコードしただけで「暗号化済み」と思い込むのは、手紙に透明なセロハンを貼って「封をした」と言っているようなものです。
落とし穴③ MD5やSHA-1をまだ使っている
MD5やSHA-1は衝突攻撃(異なるデータから同じハッシュ値を意図的に生成する攻撃)に対して脆弱であることが証明されています。新規開発ではSHA-256以上を選択し、パスワードハッシュにはbcrypt・scrypt・Argon2のいずれかを使用してください。
よくある質問(FAQ)
Q. HTTPSの「S」は暗号化という意味ですか?
A. 「S」はSecure(安全な)の頭文字で、TLS(Transport Layer Security)プロトコルによる暗号化通信を指します。ブラウザのアドレスバーに鍵マークが表示されていれば、そのサイトとの通信は暗号化されています。
Q. ハッシュ化されたパスワードは絶対に解読できない?
A. 理論上は元に戻せませんが、「レインボーテーブル攻撃」や「ブルートフォース攻撃」で推測される可能性はあります。これを防ぐために、ハッシュ化の前にランダムな文字列(ソルト)を追加する手法が標準的です。
Q. 個人情報保護法で「暗号化」は義務ですか?
A. 法律で暗号化そのものが義務付けられているわけではありませんが、個人情報保護委員会のガイドラインでは「高度な暗号化」を施していれば漏洩報告義務が免除される場合があり、実務上は強く推奨されています。
まとめ:迷ったときの判断フローチャート
最後に、どの技術を使うべきか迷ったときのシンプルな判断基準を整理します。
データを秘密にしたいなら → 暗号化(AES, RSA)を選択。
データが改ざんされていないか確認したいなら → ハッシュ化(SHA-256)を選択。
パスワードを安全に保管したいなら → ハッシュ化(+ソルト)(bcrypt, Argon2)を選択。
データの形式を変えたいだけなら → エンコーディング(Base64, UTF-8)を選択。
暗号化・ハッシュ化・エンコーディングは、どれも「データを変換する」技術ですが、その目的と性質はまったく異なります。正しく使い分けることが、セキュリティ対策の第一歩です。

コメント