暗号の使い分け — 同じ鍵で速く、南京錠で安全に
金庫の同じ鍵で開け閉めする方式は、速くて確実です。でも相手に鍵を渡すとき、その鍵を盗まれたら終わり——鍵の配送が急所です。
そこで発明されたのが「開いた南京錠をばらまく」方式——誰でも南京錠(公開鍵)でカチッと閉められるが、開けられるのは合鍵(秘密鍵)を持つ本人だけ。配送問題は消えますが、処理は遅い。実際の通信は、この2つのいいとこ取りで動いています。
共通鍵暗号と公開鍵暗号の長所・短所は何で、実際の通信ではどう組み合わせるのでしょうか。
速いが配送が問題(共通鍵)、配送を解決したが遅い(公開鍵)です
共通鍵暗号(AES・DES・3DES)は暗号化と復号に同じ鍵を使います。処理は速いが、相手ごとに秘密の鍵を安全に届ける鍵配送問題を抱え、n人が互いに通信するにはn(n−1)/2個もの鍵が要ります。
公開鍵暗号(RSA・楕円曲線暗号)は公開鍵で暗号化・秘密鍵で復号——南京錠は公開してよく、合鍵は本人が持ったまま。配送問題が消え、鍵も1人1ペアで済みますが、処理は遅いのです。
ハイブリッド暗号——遅い公開鍵は「鍵を運ぶためだけ」に使います
ハイブリッド暗号の役割分担は明快です。①まず公開鍵暗号で共通鍵を安全に相手へ渡す(配送問題の解決に、遅くても量が小さい鍵の受け渡しだけ任せる)。②以後の実データは共通鍵暗号で高速に暗号化する。これがTLS/SSL(HTTPSの中身)の基本構造です。
もう1つの道具がハッシュ関数(SHA-256など)——任意のデータから固定長の値を作る一方向の計算で、元に戻せず(一方向性)、同じ値になる別データを見つけにくい(衝突耐性)。「データの指紋」として、次ユニットの電子署名で主役になります。
「公開鍵の方が速い」と、鍵の本数の取り違えが定番です
定番の誤り肢は速度の逆転——「公開鍵暗号は共通鍵暗号より高速である」(逆です。速いのは共通鍵、だからこそ実データは共通鍵に任せます)。方式名の帰属替え(「AESは公開鍵暗号」——AES・DES・3DESは共通鍵、RSA・楕円曲線は公開鍵)も的です。
鍵の本数も計算させられます——共通鍵はn(n−1)/2個(10人なら45個)、公開鍵は1人1ペアで済む。「共通鍵の方が鍵の管理が楽」という肢は逆です。
顧問先への説明では、南京錠の言い換えがそのまま使えます——「ECサイトの通信が安全なのは、お客様のブラウザがお店の南京錠で閉じてから送っているから」。ファイルを添付し、同じメールの次便でパスワードを送る昔ながらの運用(いわゆるPPAP)は、鍵と金庫を同じ経路で運ぶ行為で配送問題が解決されていない——共有リンクや暗号化された共有サービスへの移行を勧める、が定番の助言です。
冒頭の問いに答えます。共通鍵は速いが鍵配送とn(n−1)/2個の管理が急所、公開鍵は配送問題を解決するが遅い——だから実際の通信は、公開鍵で共通鍵を運び、実データは共通鍵で高速に暗号化するハイブリッド方式です(ハッシュ関数=データの指紋も道具箱に)。次は公開鍵の「逆の使い方」——電子署名へ。