2つの暗号方式は「鍵が同じか違うか」
情報セキュリティの土台は暗号方式の理解です。暗号化と復号に同じ鍵を使うのが共通鍵暗号方式(秘密鍵暗号方式・対称鍵暗号方式)、対になる別々の鍵を使うのが公開鍵暗号方式(非対称鍵暗号方式)です。
| 共通鍵暗号方式 | 公開鍵暗号方式 | |
|---|---|---|
| 鍵 | 送信者と受信者で同じ鍵を共有 | 公開鍵と秘密鍵のペア |
| 代表的な方式 | AES、DES | RSA、楕円曲線暗号(ECC) |
| 処理速度 | 速い | 遅い |
| 主な課題 | 鍵をどう安全に渡すか(鍵配送問題) | 公開鍵が本物かの保証、処理の重さ |
| n人が相互に通信する鍵の数 | n(n-1)÷2 個 | 2n 個(1人1ペア) |
鍵の数は計算問題として問われます。100人が相互に暗号通信する場合、共通鍵方式では100 × 99 ÷ 2 = 4,950個の鍵が必要ですが、公開鍵方式では各人がペアを1組持つだけなので**100ペア(鍵200個)**で済みます。人数が増えるほど共通鍵方式の管理負担が跳ね上がる、というのがこの式の意味です。
実務ではこの2つを組み合わせたハイブリッド方式が使われます。データ本体は速い共通鍵で暗号化し、その共通鍵(セッション鍵)だけを公開鍵暗号で相手に渡す方式で、TLS(SSL)がその代表です。「速さは共通鍵、鍵配送は公開鍵」と役割分担で覚えてください。
「誰の、どちらの鍵か」で機密性と署名を分ける
公開鍵暗号でいちばん混乱するのが、鍵の使い分けです。秘密鍵は本人しか持たず、公開鍵は誰でも入手できるという大前提から、次の2用途が導けます。
| 目的 | 送信側が使う鍵 | 受信側が使う鍵 | 実現できること |
|---|---|---|---|
| 秘匿(暗号化) | 受信者の公開鍵 | 受信者の秘密鍵 | 機密性(受信者しか読めない) |
| 電子署名 | 送信者の秘密鍵 | 送信者の公開鍵 | 真正性・完全性・否認防止 |
暗号化は「受信者の鍵」、署名は「送信者の鍵」を使う、という点が判別の決め手です。理屈も単純で、受信者の公開鍵で閉じれば対になる秘密鍵を持つ受信者だけが開けるので秘密が守れます。逆に、送信者の秘密鍵でしか作れないデータが送信者の公開鍵で検証できたなら、それは送信者本人が作った証拠になります。
電子署名はハッシュ値に対して行う
電子署名(デジタル署名)では、文書全体を秘密鍵で処理するのではなく、まずハッシュ関数で固定長の**ハッシュ値(メッセージダイジェスト)**を作り、そのハッシュ値を送信者の秘密鍵で暗号化したものを署名として添付します。受信者は、①受け取った文書から自分でハッシュ値を計算し、②署名を送信者の公開鍵で復号したハッシュ値と突き合わせ、一致すれば「送信者本人が作り、改ざんされていない」と判断します。
処理を軽くするためでもありますが、ハッシュ関数には次の性質があるからこの検証が成立します。
- 一方向性:ハッシュ値から元のデータを復元できない。
- 衝突困難性:同じハッシュ値になる別のデータを作ることが事実上できない。
- 入力が1文字でも変われば、出力は大きく変わる。
そのため電子署名で保証されるのは真正性(なりすまし防止)・完全性(改ざん検知)・否認防止であって、機密性は保証されません。署名を付けただけでは文書の中身は誰でも読めます。この点は正誤問題の定番なので必ず区別してください。
PKIと認証局が「公開鍵の持ち主」を保証する
公開鍵暗号には「その公開鍵が本当に相手のものか」という弱点が残ります。攻撃者が自分の公開鍵を相手のものと偽って配れば、中間者攻撃が成立してしまいます。これを解決する仕組み全体がPKI(公開鍵基盤)です。
中心にいるのが認証局(CA: Certification Authority)で、申請者の実在性を確認したうえで、公開鍵と持ち主の情報を結びつけた**電子証明書(デジタル証明書)**を発行します。証明書にはCA自身の電子署名が付いており、利用者はCAの公開鍵で検証します。上位のCAがさらに下位のCAを保証する階層構造の頂点がルート認証局で、自らの証明書には自分で署名します(自己署名証明書)。
秘密鍵の漏えいや退職などで証明書が有効期限前に無効化されることがあるため、失効の確認手段も用意されています。失効した証明書の一覧がCRL(証明書失効リスト)、その都度オンラインで問い合わせる仕組みがOCSPです。
最後に、これらが守ろうとしている情報セキュリティの3要素(CIA)を確認しておきましょう。機密性(Confidentiality:許可された者だけがアクセスできる)、完全性(Integrity:改ざんされていない)、可用性(Availability:必要なときに使える)です。暗号化は機密性、電子署名は完全性と真正性、バックアップや冗長化は可用性、という対応関係で整理すると、対策と目的を結びつける問題に強くなれます。