暗号化は、データを決まったルール(アルゴリズム)と鍵で変換して読めない形にし、正しい鍵を持つ相手だけが元に戻せるようにする技術です。インターネットでパスワードやクレジットカード番号をやり取りできるのも、盗まれたノートパソコンの中身がすぐには読まれないのも、この技術のおかげです。
南京錠のかかった箱を思い浮かべてください。差出人が荷物を入れて錠をかける(暗号化)。途中で誰かが箱を持っていっても、鍵がなければ開けられない。受取人だけが鍵で開けられる(復号)。Webサイトの通信(HTTPS)、ファイルやディスクの保護、メールの内容の保護と、使われる場面は違っても、やっていることはこの箱の受け渡しです。
鍵の渡し方で分かれる2つの方式
暗号化でいちばん厄介なのは、実は錠そのものより、鍵をどうやって相手に渡すかです。そこで2つの方式が使い分けられています。
| 共通鍵暗号(対称暗号) | 公開鍵暗号(非対称暗号) | |
|---|---|---|
| 鍵 | 送る側と受ける側が同じ鍵を使う | 誰でも使える公開鍵(閉める用)と、自分だけが持つ秘密鍵(開ける用)のペア |
| 南京錠でいうと | 合鍵を持ち合う | 開いた南京錠を誰にでも配り、鍵は自分だけが持つ |
| 得意なこと | 処理が速い | 合鍵を事前に渡さなくてよい |
| 苦手なこと | 合鍵を安全に渡す方法が課題 | 処理が重い |
TLS(SSL)では、公開鍵暗号の仕組みを使って通信を守っています。
鍵が漏れたら、錠はただの飾り
どんなに頑丈な南京錠でも、鍵を箱にテープで貼り付けて送ったら?
……誰でも開けられちゃうね。
「暗号化してあるから安全」は過信です。鍵が漏れれば、どんなに頑丈な錠も意味がありません。鍵をどこに保管し、誰が使えるようにするかの管理まで含めて、はじめて暗号化は役に立ちます。
錠の古さも問題になります。DES のような古い方式は解読されうるので、今は AES、RSA、楕円曲線暗号といった現在の標準的な方式を使います。
もう一つ、パスワードの保存には暗号化ではなく、元に戻せないハッシュ(ソルト付き)を使うのが基本です。鍵で戻せるということは、鍵を盗まれれば全部戻されるということだからです。暗号化、ハッシュ、エンコーディングの違いは、エンコード・ハッシュ・暗号化の違いで詳しく比べています。