コンテンツにスキップ

公開鍵と秘密鍵

公開鍵暗号では、秘密に保持する秘密鍵と、他者へ公開できる公開鍵を組み合わせて使用する。


秘密鍵と公開鍵は数学的に対応しており、まとめて鍵ペアと呼ぶ。

鍵 取り扱い 主な用途
秘密鍵 所有者だけが保持する CSRや証明書への署名、TLSハンドシェイクで秘密鍵を保持していることの証明
公開鍵 他者へ公開できる 署名の検証、証明書を通じた配布

OpenSSLで秘密鍵を生成すると、対応する公開鍵の情報も秘密鍵ファイルに含まれる。公開鍵は秘密鍵から取り出せるが、公開鍵から秘密鍵を復元することは現実的にはできない。

Terminal window
openssl pkey \
-in server.key \
-pubout \
-out server-public.key

秘密鍵を生成
↓
秘密鍵でCSRへ自己署名
↓
CSRに公開鍵を含めてCAへ渡す
↓
CAが公開鍵と識別情報を証明書として署名

証明書 には公開鍵が含まれるが、秘密鍵は含まれない。

TLSサーバーは、証明書に含まれる公開鍵と対応する秘密鍵を保持していることをTLSハンドシェイク中に証明する。証明書ファイルだけを取得しても、対応する秘密鍵がなければそのサーバーとして通信を成立させることはできない。


公開鍵暗号は、用途によって鍵の使い方が異なる。

用途 秘密鍵 公開鍵
デジタル署名 署名を作成する 署名を検証する
公開鍵暗号による暗号化 暗号文を復号する データを暗号化する

証明書 の発行では、主にデジタル署名として使用する。 CA はCA秘密鍵で証明書へ署名し、検証側はCA証明書内の公開鍵で署名を確認する。

暗号化と復号の行はRSAなど暗号化に対応するアルゴリズムの場合である。Ed25519のように署名専用のアルゴリズムもある。

デジタル署名とハッシュ関数(SHA-256)

Section titled “デジタル署名とハッシュ関数(SHA-256)”

大きなデータ全体をそのまま署名する代わりに、通常はハッシュ関数で固定長の値へ変換し、その値に対して署名を作成する。

証明書の内容
↓ SHA-256などのハッシュ関数
ハッシュ値
↓ 秘密鍵で署名
デジタル署名

検証側は同じハッシュ関数で値を計算し、公開鍵で検証した結果と一致するか確認する。内容が少しでも変更されるとハッシュ値が変わるため、改ざんを検出できる。

-sha256 は、署名時のハッシュ関数としてSHA-256を指定するオプションである。秘密鍵の暗号化方式を指定するものではない。


  • 秘密鍵を紛失すると、その鍵に対応する証明書を継続して使用できない。
  • サーバー秘密鍵が漏えいした場合は、 証明書を失効 させて新しい鍵と証明書へ交換する。
  • CA秘密鍵が漏えいした場合は、不正な証明書を発行される可能性があるため影響が大きい。


  • openssl-genpkey 秘密鍵の生成と、対応する公開鍵アルゴリズムの指定。

  • openssl-pkey 秘密鍵・公開鍵の表示、変換、検査。