ポイント●ハイブリッド暗号方式とは,共通鍵暗号方式の「処理が高速」という点と,公開鍵暗号方式の「鍵の管理・配布が容易」という点の両方を生かすように組み合わせて出来ている暗号方式である●ハイブリッド暗号方式を理解するためのポイントは,「送信者が共通鍵を任意に作る」ことと,「その鍵を受信者の公開鍵で暗号化して送る」ことである |
![]() |
今回勉強するハイブリッド暗号方式は,共通鍵暗号方式と公開鍵暗号方式の長所を組み合わせて作られている仕組みです。ハイブリッド暗号方式の話に入る前に,共通鍵暗号方式と公開鍵暗号方式,両者の特徴を整理してみましょう。
ハイブリッド暗号方式が作られた背景
|
上記のようにそれぞれの長所が短所に,短所が長所にというように,特徴がトレードオフの関係になっていました。
インターネットのようにグローバルエリアを通過するパケットは誰に中を見られているかわかりません。公開鍵暗号方式は,そんな場所でも鍵の配布や運用が楽であるという特徴を持っており,非常に有用です。しかし,この点だけを重視して公開鍵暗号方式を採用すると,処理に時間がかかるというデメリットを避けて通ることができません。大容量のファイルをやり取りする時,パフォーマンスに影響が出るようでは使い勝手が落ちてしまいます。そこで,公開鍵暗号方式の「鍵の管理・配布が容易」という長所と,共通鍵暗号方式の「処理が高速」という長所の両方を生かすように,両方式を組み合わせたハイブリッド暗号方式が考えられました。
ハイブリッド暗号方式のしくみ
それでは,それぞれの方式をどのように組み合わせて実装しているか,シーケンスを見てみましょう(なお,まだ共通鍵暗号方式と公開鍵暗号方式の仕組みを理解していない方は,もう一度復習してから本編を読むことをお勧めします)。
![]() |
図1がハイブリッド暗号方式の処理シーケンスです。順番に流れを追っていくと,以下のようになります。
(1)送信者は,平文(伝送経路上で第三者に見られたくないデータ)を作成します
(2)送信者は,平文を暗号化するための共通鍵を作成します
(3)送信者は,(2)で作成した共通鍵を利用して,平文を暗号化します。ここで利用するのは共通鍵暗号方式です
(4)送信者は,(2)で作成した共通鍵を,あらかじめ入手しておいた受信者の公開鍵で暗号化します。ここで利用するのは公開鍵暗号方式です
(5)送信者は,(3)で作成した「暗号化した本文」と,(4)で作成した「暗号化した共通鍵」の両方を受信者に送ります
(6)受信者は,送信者から送られてきた「暗号化された共通鍵」を復号します。この共通鍵は受信者の公開鍵で暗号化されているため,復号には受信者の個人鍵を使います
(7)受信者は,(6)で復号して取り出した共通鍵を使って本文を復号します
送信者が任意に共通鍵を作成する
処理シーケンスに目を通していただいたところで,ハイブリッド暗号方式の特徴を確認しておきましょう。ハイブリッド暗号方式を実現するための1つめのポイントは,「送信者が任意に共通鍵を作成する点」です。もちろん,仕組み全体の約束事,どんな共通鍵アルゴリズムを使うかといった大枠の取り決めは必要ですが,決められた枠内で,送信者が任意に共通鍵を作成します。
さらに,この共通鍵は,1回使ったら次回以降は同じものを使用しません。この約束事を守ることにより,悪意のある第三者が共通鍵の盗聴に成功したとしても,これを再利用することを防いでいます。1回の通信(セッション)に限って有効なことから,この共通鍵のことをセッション鍵とも呼びます。
もちろん,いくら再利用できないとはいえ,共通鍵をそのまま送付してしまったら,中を見られてしまいます。そこで,あらかじめ入手しておいた受信者の公開鍵を使って,共通鍵そのものを暗号化します。この点が2つめのポイントです。
公開鍵暗号方式の仕組みにより,受信者の公開鍵で暗号化したものを復号できるのは,受信者の個人鍵です。受信者の個人鍵を所持しているのは世界でただ一人,受信者だけです。つまり,正しい受信者しか共通鍵を復号できません。したがって,その共通鍵を使って暗号化した本文も,受信者しか復号できないことになります。
平文のサイズと鍵のサイズ
漢字を利用した日本語の文書を作成する場合,基本的に1文字あたり2バイト(16ビット)のデータ量を使います。ですから,例えば『毎度お世話になります。○○○と申します。』などと20文字書いただけで2×20=40バイト(320ビット)のサイズになります。
これに対して共通鍵のサイズは,56ビット~256ビット程度です(アルゴリズムによって異なります)。このため,ハイブリッド暗号方式を利用するほとんどのケースにおいて,本文(暗号化したいデータ:平文)の方が共通鍵のサイズよりもはるかに大きくなります。
ハイブリッド暗号方式において,処理に時間がかかる公開鍵暗号方式を使用しているのは,セッション鍵(共通鍵)の暗号化と復号の部分だけです(図2の下半分)。データ量の大きい本文に対しては,高速な共通鍵暗号方式を使っているため(図2の上半分),全体の処理を考えた時,パフォーマンス向上に寄与していることがわかります。
![]() |
このように二つの暗号方式を組み合わせることによって,共通鍵暗号方式の長所である「処理が高速」という部分を利用しつつ,公開鍵暗号方式の長所である「鍵の配布が容易で管理が楽」という長所が使えるようになっています。