資格道場 › レッスン一覧 › セキュリティ
セキュリティ・2/23・12分

共通鍵暗号と公開鍵暗号のしくみ

ゴール

共通鍵暗号と公開鍵暗号の違い、使う鍵の選び方、AESやRSAなど方式名の分類、必要な鍵の数を区別して、関連する科目Aの過去問を自力で解けるようになる。

公開鍵暗号で「誰のどの鍵で暗号化するか」は、本試験系でも免除試験でも最も多く出ている論点です。HTTPSやVPNの裏側も同じしくみなので、API設計の通信要件を読むときにも役立ちます。

このレッスンで稽古する(用語チェック・過去問)

結論:暗号は「鍵が1本か、ペアか」で2種類

暗号化とは、読める文(平文)を、鍵がないと読めない文(暗号文)に変えることです。暗号文を平文に戻すことを復号と呼びます。暗号方式は、暗号化と復号に同じ鍵を使う共通鍵暗号方式と、ペアになった別々の鍵を使う公開鍵暗号方式の2つに分かれます。

比較項目 共通鍵暗号方式 公開鍵暗号方式
暗号化と復号の鍵 同じ鍵(共通鍵) 別の鍵(公開鍵と秘密鍵のペア)
鍵の扱い 相手と秘密に共有する 公開鍵はみんなに配る。秘密鍵は本人だけが持つ
処理速度 速い 遅い
弱点 鍵を安全に渡すのが難しい。相手が増えると鍵の数も増える 処理が重い
必要な鍵の数(n人) n(n−1)/2 2n
代表例 AES、KCipher-2 RSA、楕円曲線暗号

共通鍵暗号方式は秘密鍵暗号方式と呼ばれることもあります。公開鍵暗号の「秘密鍵」と名前が似ているので、選択肢で「共通の秘密鍵」と出てきたら共通鍵のことだと読み替えてください。

最頻出:公開鍵暗号では「受信者の公開鍵」で暗号化する

秘密の内容を送るときは、受信者の公開鍵で暗号化し、受信者が自分の秘密鍵で復号します。公開鍵で暗号化した文は、ペアになった秘密鍵でしか戻せません。秘密鍵を持っているのは受信者本人だけなので、途中で盗まれても読まれません。

たとえるなら、公開鍵は誰でも閉められる開いた南京錠で、秘密鍵はそれを開ける本人だけの鍵です。Bさんは南京錠をたくさん配っておき、Aさんはその南京錠で箱を閉めて送ります。箱を開けられるのは、鍵を持っているBさんだけです。

flowchart LR
  A["Aさん(送信者)平文"] -->|"Bさんの公開鍵で暗号化"| C["暗号文(ネットワーク上)"]
  C -->|"Bさんの秘密鍵で復号"| B["Bさん(受信者)平文"]

目的によって使う鍵が逆になるので、表でまとめて覚えます(デジタル署名は後のレッスンで詳しく扱います)。

目的 送る側が使う鍵 受け取る側が使う鍵
内容を秘密にする(機密性) 受信者の公開鍵で暗号化 受信者の秘密鍵で復号
本人が送ったと証明する(デジタル署名) 送信者の秘密鍵で署名 送信者の公開鍵で検証
  • 公開するのは、暗号化に使う鍵と署名の検証に使う鍵です。復号鍵と署名鍵は秘密にします。
  • 「Bさんの公開鍵で暗号化したメールをCさんにも送った」場合でも、復号できるのはBさんだけです。公開鍵では復号できず、Cさんの秘密鍵では合いません。
Aさん(送信者)平文をBさんの公開鍵で閉める暗号文(ネットワーク上)南京錠で閉じた箱が届く途中Bさん(受信者)Bさんの秘密鍵で開けて平文にCさん自分の秘密鍵では開かない公開鍵=誰でも閉められる南京錠秘密鍵=Bさんだけが持つ鍵
Bさんの公開鍵(南京錠)で閉じた箱は、秘密鍵を持つBさんしか開けられず、途中のCさんは開けられない。

方式の名前を見て分類できるようにする

「公開鍵暗号はどれか」「同じ鍵で暗号化と復号をするのはどれか」という問題は、名前と分類を覚えていれば解けます。暗号ではない仲間(ハッシュ関数や基盤)が選択肢に混ざるのが定番です。

名前 分類 覚えるポイント
AES 共通鍵暗号 現在の標準。DBのデータ暗号化やIPsecの通信暗号化に使う
KCipher-2 共通鍵暗号 日本で開発された高速な共通鍵暗号
RSA 公開鍵暗号 安全性の根拠は大きな数の素因数分解が難しいこと
楕円曲線暗号 公開鍵暗号 RSAより短い鍵長で同じレベルの安全性を実現できる
DH 鍵交換方式 安全性の根拠は離散対数問題。暗号化そのものではなく、鍵を共有するための方式
DSA 署名方式 安全性の根拠は離散対数問題
SHA-256 ハッシュ関数 暗号ではない。元に戻せない要約値を作る
PKI 公開鍵基盤 暗号方式ではなく、公開鍵が本人のものだと保証するしくみ

「素因数分解」と書いてあればRSAです。「短い鍵長で同等の安全性」と書いてあれば楕円曲線暗号です。楕円曲線暗号は公開鍵暗号なので、「共通鍵暗号で高速」という選択肢は誤りです。

共通鍵は速いが、鍵の受け渡しが弱点

同じ暗号強度で比べると、共通鍵暗号は公開鍵暗号より暗号化と復号にかかる時間が短いです。そのため、大量の通信データの暗号化には共通鍵が使われます。たとえば、IPsec(IP通信を暗号化する技術)でAESを使う場合は、PCとサーバで共有した共通鍵を使います。

弱点は、鍵を相手に安全に渡す必要があることです。平文で鍵を送ると盗まれるので、「事前に平文で送付する」という選択肢は誤りです。また、相手ごとに別の鍵が必要なので、相手が増えるほど鍵の管理が大変になります。

実際には、公開鍵暗号で共通鍵を安全に渡し、データ本体は速い共通鍵で暗号化するという組合せ(ハイブリッド暗号方式)がよく使われます。両方の長所を活かすやり方です。

AさんBさん共通鍵を作る共通鍵をBさんの公開鍵で暗号化Bさんの秘密鍵で共通鍵を取り出す鍵だけ送るAさんとBさんが同じ共通鍵を持ったデータ本体を共通鍵で暗号化共通鍵で復号(速い)大量データ公開鍵暗号=鍵の受け渡し(遅い)共通鍵暗号=データ本体(速い)
ハイブリッド暗号方式:共通鍵だけを公開鍵暗号で渡し、データ本体は速い共通鍵で暗号化する。

必要な鍵の数:共通鍵 n(n−1)/2、公開鍵 2n

n人が互いに暗号通信をする場合、必要な鍵の数は次のとおりです。

方式 数え方 式 100人の場合
共通鍵暗号 2人の組ごとに1本 n(n−1)/2 100×99÷2 = 4,950
公開鍵暗号 1人1ペア(2本) 2n 2×100 = 200

共通鍵は、AさんとBさんの組とBさんとAさんの組が同じなので、2で割るのを忘れないでください。下の例題で手順を確認します。

共通鍵暗号公開鍵暗号ABCDA公秘B公秘C公秘D公秘2人の組ごとに1本4×3÷2=6本式 n(n−1)/21人1ペア(2本)2×4=8本式 2n100人なら 4,950本 と 200本
4人の例:共通鍵は2人の組ごとに線が1本で6本、公開鍵は1人1ペアで8本。

暗号の危殆化とは

危殆化(きたいか)とは、計算能力の向上や新しい解読法の発見によって、暗号アルゴリズムそのものの安全性が下がることです。たとえば、ハッシュ値が同じになるデータの組を現実的な時間で見つける方法が見つかった場合は、危殆化にあたります。

鍵の漏えいや証明書の有効期限切れは運用上の問題なので、危殆化ではありません。「アルゴリズムが弱くなったか、それとも運用のミスか」で見分けます。

試験での問われ方

  • 鍵選びの問題:「秘密にして送るとき、使う鍵はどれか」と聞かれたら、答えは受信者の公開鍵です。送信者の秘密鍵は署名用のひっかけです。
  • 分類の入れ替え:「AESは公開鍵暗号、RSAは共通鍵暗号」のように、2つを逆にした選択肢が出ます。
  • 特徴の付け替え:「同じ鍵を使う」「共通鍵の配送が必要」は共通鍵の特徴です。これを公開鍵暗号の説明として出してきます。
  • 公開する鍵の取り違え:「復号鍵を公開する」「署名鍵を公開する」はどちらも誤りです。
  • 鍵の数の計算:200(2n)、9,900(n(n−1))、10,000(n²)を並べて選ばせます。
  • 危殆化:鍵の漏えいや有効期限切れを正解に見せかけます。
例題 1

共通鍵の総数を計算する(100人)

共通鍵暗号方式において,100人の送受信者のそれぞれが,相互に暗号化通信を行うときに必要な共通鍵の総数は幾つか。

ア 200
イ 4,950
ウ 9,900
エ 10,000

出典:基本情報技術者試験 科目A免除 修了試験 20260125 実施分 問28

解き方と答えを見る
  1. 共通鍵は「通信する2人の組」ごとに1本必要だと確認する。
  2. 1人あたりの相手は自分以外の 100−1 = 99人。全員分を足すと 100 × 99 = 9,900。
  3. この数え方では、AさんからBさんとBさんからAさんを2回数えている。同じ組なので2で割る:9,900 ÷ 2 = 4,950。
  4. 式にすると n(n−1)/2 = 100×99/2 = 4,950。
  5. 選択肢を確認する。ア 200 は公開鍵の 2n、ウ 9,900 は2で割り忘れ、エ 10,000 は n²。

答え:イ:4,950

例題 2

公開鍵暗号で必要な鍵の数を求める

公開鍵暗号を使って n 人が相互に通信する場合,全体で何個の異なる鍵が必要になるか。ここで,一組の公開鍵と秘密鍵は 2 個と数える。

ア n+1
イ 2n
ウ n(n−1)/2
エ log_2 n

出典:基本情報技術者試験 科目A免除 修了試験 20161211 実施分 問39

解き方と答えを見る
  1. 公開鍵暗号では、利用者1人が公開鍵と秘密鍵のペアを1組持つ。
  2. 1組は2個と数えるという条件なので、1人あたり2個。
  3. n人なら 2 × n = 2n 個。相手が何人いても、自分のペアは1組で足りる。
  4. ウ n(n−1)/2 は共通鍵暗号の式なので、ひっかけ。

答え:イ:2n

例題 3

XさんがYさんに秘密のメールを送るときの鍵

X さんは,Y さんにインターネットを使って電子メールを送ろうとしている。電子メールの内容を秘密にする必要があるので,公開鍵暗号方式を使って暗号化して送信したい。そのときに使用する鍵はどれか。

ア X さんの公開鍵
イ X さんの秘密鍵
ウ Y さんの公開鍵
エ Y さんの秘密鍵

出典:平成27年度 秋期 基本情報技術者試験 午前 問38

解き方と答えを見る
  1. 目的を確認する。内容を秘密にしたいので、目的は機密性(署名ではない)。
  2. 機密性のルールは「受信者の公開鍵で暗号化し、受信者の秘密鍵で復号」。
  3. 受信者はYさんなので、暗号化に使うのはYさんの公開鍵。
  4. イ Xさんの秘密鍵は署名で使う鍵。エ Yさんの秘密鍵はYさん本人しか持っていないので、Xさんは使えない。

答え:ウ:Yさんの公開鍵

要点(試験直前に読む)

  • 共通鍵暗号は鍵が1本(同じ鍵)で処理が速い。公開鍵暗号は鍵がペアで処理が遅い。
  • 秘密に送るときは受信者の公開鍵で暗号化し、受信者の秘密鍵で復号する。署名はその逆で送信者の秘密鍵で作る。
  • 共通鍵暗号はAESとKCipher-2、公開鍵暗号はRSAと楕円曲線暗号。SHA-256はハッシュ関数、PKIは基盤。
  • RSAは素因数分解の難しさが根拠。楕円曲線暗号はRSAより短い鍵長で同じ安全性を実現できる。
  • n人で必要な鍵の数は、共通鍵がn(n−1)/2、公開鍵が2n。100人なら4,950と200。
  • 危殆化は、アルゴリズムそのものの安全性が下がること。鍵の漏えいは含まない。

ひっかけ

  • 「送信者の秘密鍵で暗号化して秘密にする」は署名の話で、機密性は得られない。秘密にするなら受信者の公開鍵を選ぶ。
  • 「AESは公開鍵、RSAは共通鍵」という入れ替えに注意。Aは共通鍵(Advanced)、Rは公開鍵と覚える。
  • 「同じ鍵を使う」「共通鍵の配送が必要」を公開鍵暗号の説明にした選択肢は誤り。どちらも共通鍵暗号の特徴。
  • 鍵の数の計算では、9,900(2で割り忘れ)や200(公開鍵の2n)を選ばせる。共通鍵なら組の数なので最後に2で割る。
  • 危殆化の問題では、鍵の漏えいや証明書の期限切れを正解に見せかける。アルゴリズムの弱体化だけが危殆化。

用語(18)

平文 ひらぶん
暗号化する前の、誰でも読める状態のデータ。
暗号文 あんごうぶん
鍵がないと元の内容が分からないように変換されたデータ。
復号 ふくごう
暗号文を鍵を使って元の平文に戻すこと。
⚠ 「解読」は鍵を持たない第三者が暗号を破ること。正規の受信者が鍵で戻すのが復号。
共通鍵暗号方式 きょうつうかぎあんごうほうしき
暗号化と復号に同じ鍵を使い、その鍵を相手と秘密に共有する方式。処理が速い。
⚠ 秘密鍵暗号方式とも呼ばれる。公開鍵暗号の「秘密鍵」と名前が似ているので注意。鍵が1本なら共通鍵暗号、ペアなら公開鍵暗号。
公開鍵暗号方式 こうかいかぎあんごうほうしき
公開鍵と秘密鍵のペアを使い、一方で暗号化したものをもう一方でしか復号できない方式。
⚠ 「暗号化鍵と復号鍵が同一」「共通鍵の配送が必要」は共通鍵暗号の特徴。
公開鍵 こうかいかぎ
誰にでも配ってよい鍵。秘密の通信では、送る側が受信者の公開鍵で暗号化する。
⚠ 公開鍵で暗号化したものは公開鍵では復号できない。復号するのはペアの秘密鍵。
秘密鍵 ひみつかぎ
本人だけが持つ鍵。自分宛ての暗号文の復号と、デジタル署名の作成に使う。
⚠ 選択肢の「共通の秘密鍵」は共通鍵暗号の鍵のこと。
デジタル署名 でじたるしょめい
送信者が自分の秘密鍵で署名し、受信者が送信者の公開鍵で検証して、本人が送ったことと改ざんされていないことを確かめるしくみ。
⚠ 秘密通信は受信者の公開鍵で暗号化、署名は送信者の秘密鍵で作成。鍵の持ち主と種類が逆になる。
AES Advanced Encryption Standard
現在の標準となっている共通鍵暗号方式。DBのデータ暗号化やIPsecの通信暗号化に使われる。
⚠ RSAは公開鍵暗号。「AESは公開鍵」という選択肢は誤り。
KCipher-2 ケーサイファーツー
日本で開発された高速な共通鍵暗号方式。
⚠ 公開鍵暗号の選択肢に混ぜられる。共通鍵の仲間。
RSA Rivest-Shamir-Adleman(開発者3人の頭文字)
大きな数の素因数分解が難しいことを安全性の根拠とする公開鍵暗号方式。
⚠ DH・DSAは離散対数問題が根拠。「素因数分解」と書いてあればRSA。
楕円曲線暗号 だえんきょくせんあんごう(ECC: Elliptic Curve Cryptography)
楕円曲線の数学を利用した公開鍵暗号で、RSAより短い鍵長で同じレベルの安全性を実現できる。
⚠ 共通鍵暗号ではない。総当たりで解読できないことが数学的に証明されているわけでもない。
DH Diffie-Hellman(ディフィー・ヘルマン鍵交換)
離散対数問題の難しさを利用して、通信相手と安全に共通鍵を共有するための鍵交換方式。
⚠ 素因数分解が根拠のRSAと取り違えやすい。
DSA Digital Signature Algorithm
離散対数問題の難しさを利用したデジタル署名の方式。
⚠ 名前に署名と入っている。素因数分解が根拠のRSAとは別。
SHA-256 Secure Hash Algorithm 256-bit
データから元に戻せない256ビットの要約値(ハッシュ値)を作るハッシュ関数。
⚠ 暗号化方式ではないので、暗号方式を選ぶ問題では外す。
PKI Public Key Infrastructure(公開鍵基盤)
認証局がデジタル証明書を発行して、公開鍵が本人のものだと保証するしくみ全体。
⚠ 暗号アルゴリズムではなく基盤。暗号方式の選択肢に混ぜられる。
IPsec Security Architecture for Internet Protocol
IPの通信を暗号化するなどして保護する技術で、VPNに使われる。
⚠ 通信データの暗号化にAESを使う場合、使う鍵は共有した共通鍵。
危殆化 きたいか
計算能力の向上や解読法の発見によって、暗号アルゴリズムの安全性が下がること。
⚠ 鍵の漏えいや証明書の有効期限切れは運用上の問題で、危殆化ではない。

このレッスンの過去問

このレッスンで稽古する