ITの教科書検索
入門読了 約9分

共通鍵暗号と公開鍵暗号の違いとは ― 暗号化の基礎

共通鍵暗号は暗号化と復号に同じ鍵を、公開鍵暗号は別々の鍵を使います。鍵の数・速さ・鍵の渡し方の差から、TLSが2つを組み合わせる理由まで説明します。

目次
  1. 共通鍵暗号と公開鍵暗号の違い
  2. 共通鍵暗号方式とは
  3. 公開鍵暗号方式とは
  4. 鍵の数・速度を比べる
  5. 鍵配送問題
  6. ハイブリッド暗号方式
  7. デジタル署名:秘密鍵で署名する
  8. どの記事がどちらの方式を使うか
  9. 練習問題

共通鍵暗号と公開鍵暗号の違いは、暗号化と復号に同じ鍵を使うかどうか

共通鍵暗号方式は、暗号化と復号に同じ鍵を使います。公開鍵暗号方式は、暗号化に公開鍵、復号に秘密鍵という別の鍵を使います。HTTPSのサイトを開くたびに、ブラウザはこの2つを組み合わせて通信を守っています。

鍵が同じか別かの違いから、鍵の数・処理速度・鍵の配り方という3つの違いが生まれます。この違いを知っておくと、TLSやVPNが2つの方式をどう組み合わせているかが分かります。

共通鍵暗号方式とは:同じ鍵で暗号化と復号を行う

暗号化とは、データを第三者に読めない形式に変換することです。元に戻す操作を復号と呼びます。共通鍵暗号方式は、この暗号化と復号の両方に、同じ1つの鍵を使います。

送信者は、その鍵でデータを暗号化して送ります。受信者は、同じ鍵でデータを復号します。鍵を知らない第三者は、暗号文を手に入れても元のデータに戻せません。

共通鍵暗号方式の代表的な方式はAES(Advanced Encryption Standard)です。AESは、アメリカの国立標準技術研究所(NIST)の規格FIPS 197で定められています。鍵長は128・192・256ビットの3種類があります。どの鍵長でも、1回に処理するデータの単位(ブロック長)は128ビットです。

共通鍵暗号方式は、一般に公開鍵暗号方式より処理が速く、大量のデータを扱う通信に向いています。保存するデータを共通鍵で暗号化し、その鍵をさらに別の鍵で守る仕組みは、AWS KMSの記事で説明しています。

公開鍵暗号方式とは:暗号化と復号に別の鍵を使う

公開鍵暗号方式は、1人が2つの鍵を組にして持ちます。1つは公開鍵で、誰にでも渡してよい鍵です。もう1つは秘密鍵で、本人だけが持ち、誰にも渡しません。

データを送るときは、受信者の公開鍵で暗号化します。復号できるのは、その公開鍵と組になった秘密鍵を持つ受信者だけです。公開鍵を盗み見られても、対になる秘密鍵が分からなければ復号できません。

共通鍵暗号方式公開鍵暗号方式送信者暗号文受信者暗号化(鍵K)復号(同じ鍵K)送信者暗号文受信者暗号化(受信者の公開鍵)復号(受信者の秘密鍵)秘密鍵は受信者だけが持つ
共通鍵暗号方式は、送信者と受信者が同じ鍵Kで暗号化と復号を行います。公開鍵暗号方式は、暗号化に受信者の公開鍵、復号に受信者の秘密鍵という別の鍵を使います。

公開鍵暗号方式の代表的な方式は、RSA暗号と楕円曲線暗号です。楕円曲線暗号には、署名に使うECDSAや、鍵の共有に使うECDHなどがあります。日本の電子政府推奨暗号リストでは、RSAを使う方式・ECDSA・ECDHはいずれも「公開鍵暗号」に分類されています。このリストは、公開鍵暗号を「署名」「守秘(暗号化)」「鍵共有」の3つの用途に分けています。ECDSAやECDHのように、データの暗号化そのものには使わない方式もあります。

公開鍵暗号方式は、計算量が多く、一般に共通鍵暗号方式より処理が遅くなります。そのため、大量のデータをそのまま暗号化するのには向きません。

鍵の数・速度・鍵の配り方を比べる

次の図で2つの方式を切り替えると、鍵の数の求め方・処理速度・鍵を配る方法を比べられます。

鍵の数
1組の相手とやり取りするのに鍵は1個。全員が別の相手と話すには、ペアの数だけ鍵が要る
処理速度
一般に速い。計算量が少なく、大量のデータでも処理が軽い
鍵を配る方法
通信を始める前に、その鍵を相手と安全に共有しておく必要がある。経路の途中で鍵そのものが漏れると、暗号は破られる
代表的な方式
AES(Advanced Encryption Standard)

鍵配送問題:共通鍵をどう安全に渡すか

共通鍵暗号方式には、1つ大きな課題があります。通信を始める前に、送信者と受信者が同じ鍵をあらかじめ持っていなければなりません。

初めて通信する相手に、その鍵をどう渡すかが問題になります。ネットワークの経路は、盗聴される可能性があるからです。鍵を暗号化せずに送れば、経路上の第三者にも読まれてしまいます。この問題を鍵配送問題と呼びます。

人数が増えると、この問題はさらに大きくなります。n人の全員が、それぞれ別の相手と共通鍵で通信する場合、必要な鍵の数はn(n-1)/2個です。n人から2人を選ぶ組み合わせの数(nC2)が、そのまま必要な鍵の数になるためです。

一方、公開鍵暗号方式では、1人が公開鍵1個・秘密鍵1個の組を持てば済みます。必要な鍵の数は2n個です。人数が増えても、鍵の数は人数に比例するだけで済みます。

人数n共通鍵暗号:n(n-1)/2個公開鍵暗号:2n個
2人1個4個
5人10個10個
10人45個20個
100人4,950個200個

100人の場合、共通鍵暗号方式では4,950個の鍵が必要になりますが、公開鍵暗号方式では200個で済みます。人数が増えるほど、この差は大きくなります。

公開鍵暗号方式は、公開鍵を誰にでも渡せるため、この鍵配送問題そのものが起きません。ただし、公開鍵暗号方式にも確かめることが1つ残ります。その公開鍵が、本当に名乗っている相手のものかどうかです。これを確かめるには、証明書と認証局を使います。TLSでの確かめ方はHTTPとHTTPS(TLS)の記事で説明しています。証明書の中身とチェーンの検証は、電子証明書とPKIの記事にあります。

ハイブリッド暗号方式:2つを役割分担させる

共通鍵暗号方式は速いものの、鍵配送問題を抱えています。公開鍵暗号方式は鍵配送問題を解決できますが、処理が遅い方式です。この2つを組み合わせた考え方を、ハイブリッド暗号方式と呼びます。

最初に、公開鍵暗号方式の仕組みで、共通鍵を安全に共有します。処理が重い公開鍵暗号方式を使うのは、この鍵の共有と相手の確認だけです。鍵さえ安全に共有できれば、あとは処理が軽い共通鍵暗号方式に切り替えて、本文のやり取りを行います。

共通鍵を共有する方法は、大きく2つあります。1つは、送信者が作った共通鍵を、受信者の公開鍵で暗号化して送る方法です。もう1つは、ECDHEのような鍵交換です。お互いが公開鍵を交換し、それぞれの計算で同じ共通鍵を導き出します。共通鍵そのものは経路を流れません。

現在のTLS 1.3では、鍵交換の方法を使います。共通鍵を公開鍵で暗号化して送る方法(RSA鍵交換)は廃止されています。

ハイブリッド暗号方式は、Webの通信を暗号化するTLSで使われています。TLSハンドシェイクという手順の詳細は、HTTPとHTTPS(TLS)の記事で説明しています。ほかにも、拠点間やリモートアクセスの通信を守るVPNで、同じ考え方を使います。IPパケットを暗号化・認証するIPsecも同じです。

TLSのバージョンによって鍵の共有の方法がどう変わったかは、SSL/TLSの記事で比べています。

デジタル署名:秘密鍵で署名し、公開鍵で検証する

公開鍵暗号方式には、暗号化とは別の使い方があります。デジタル署名です。暗号化では、送信者が受信者の公開鍵で暗号化し、受信者が自分の秘密鍵で復号します。

デジタル署名では、鍵を使う人が入れ替わります。送信者が自分の秘密鍵で署名を作ります。受信者は、送信者の公開鍵で署名を検証し、その署名が本人のものかを確かめます。

デジタル署名は「秘密鍵で暗号化し、公開鍵で復号する」と説明されることがあります。これは単純化した説明で、仕組みが近いのはRSA暗号だけです。楕円曲線暗号を使うECDSAなどの署名は、暗号化・復号の計算をしません。「秘密鍵で署名を作り、公開鍵で検証する」と覚えるのが正確です。

暗号化の目的は、内容を読めなくすることです。デジタル署名の目的は、本人が作ったことと、途中で書き換えられていないことを確かめることです。目的は違いますが、どちらも公開鍵と秘密鍵の組を使います。

Webサイトの証明書は、このデジタル署名を使って作られています。認証局(CA)が、自分の秘密鍵でサーバの証明書に署名します。証明書とCAが何を保証するかは、HTTPとHTTPS(TLS)の記事を読むと分かります。署名を使ってパスワードなしでログインする仕組みには、パスキーがあります。

RSAやECDSAなどの署名では、送るデータそのものには署名しません。データから計算した固定長の値(ハッシュ値)をもとに、秘密鍵で署名を作ります。ハッシュ値の求め方は、ハッシュ関数の記事で説明しています。ブロックチェーンのように、取引にデジタル署名を付けて、本人が出した取引かを確かめる使い方もあります。共通鍵で改ざんを確かめるメッセージ認証符号との違いは、MACとデジタル署名の違いの記事で比べています。

どの記事がどちらの方式を使っているか

この教科書の中でも、共通鍵暗号方式と公開鍵暗号方式はいくつもの場面で使われています。

この教科書の記事どちらの方式を使うか
HTTPとHTTPS(TLS)ハイブリッド暗号方式。鍵の共有に公開鍵暗号方式(ECDHEによる鍵交換)、本文のやり取りに共通鍵暗号方式(AES)を使う
SSH共通鍵暗号方式で通信を暗号化し、その鍵はDiffie-Hellman鍵交換で共有する。サーバの確認と公開鍵認証には、公開鍵と秘密鍵の署名を使う
VPNトンネリングで運ぶデータの暗号化は共通鍵暗号方式。その鍵は、IPsecならIKE(Diffie-Hellman鍵交換)、SSL-VPNならTLSの仕組みで共有する
IPsecESPによるデータの暗号化は共通鍵暗号方式。IKEのフェーズ1では、Diffie-Hellman鍵交換(公開鍵暗号方式の一種)で鍵の材料を安全に送り合う
無線LANWPA2・WPA3による通信の暗号化は共通鍵暗号方式(AES)。家庭向けのパーソナルモードでは、あらかじめ共有したパスワードをもとに通信用の鍵を作る

練習問題(全5問)

Q1共通鍵暗号方式と公開鍵暗号方式の違いとして正しいものは?
Q25人の全員が、相手ごとに別々の共通鍵を使って互いに通信する場合、必要な鍵の数は?
Q3AESの説明として正しいものは?
Q4TLSなどが、共通鍵暗号方式と公開鍵暗号方式を組み合わせる理由として正しいものは?
Q5デジタル署名で、送信者が署名に使う鍵として正しいものは?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

おすすめの本 PR

セキュリティとデータベースは、基本情報技術者試験の対策本でまとめて学べます。

目的別の本の選び方を見る

セキュリティの記事を続けて読む

セキュリティ 全37本中13本目