公開鍵と秘密鍵
公開鍵暗号では、秘密に保持する秘密鍵と、他者へ公開できる公開鍵を組み合わせて使用する。
秘密鍵と公開鍵は数学的に対応しており、まとめて鍵ペアと呼ぶ。
| 鍵 | 取り扱い | 主な用途 |
|---|---|---|
| 秘密鍵 | 所有者だけが保持する | CSRや証明書への署名、TLSハンドシェイクで秘密鍵を保持していることの証明 |
| 公開鍵 | 他者へ公開できる | 署名の検証、証明書を通じた配布 |
OpenSSLで秘密鍵を生成すると、対応する公開鍵の情報も秘密鍵ファイルに含まれる。公開鍵は秘密鍵から取り出せるが、公開鍵から秘密鍵を復元することは現実的にはできない。
openssl pkey \ -in server.key \ -pubout \ -out server-public.key証明書発行での使われ方
Section titled “証明書発行での使われ方”秘密鍵を生成 ↓秘密鍵でCSRへ自己署名 ↓CSRに公開鍵を含めてCAへ渡す ↓CAが公開鍵と識別情報を証明書として署名証明書 には公開鍵が含まれるが、秘密鍵は含まれない。
TLSサーバーは、証明書に含まれる公開鍵と対応する秘密鍵を保持していることをTLSハンドシェイク中に証明する。証明書ファイルだけを取得しても、対応する秘密鍵がなければそのサーバーとして通信を成立させることはできない。
署名と暗号化
Section titled “署名と暗号化”公開鍵暗号は、用途によって鍵の使い方が異なる。
| 用途 | 秘密鍵 | 公開鍵 |
|---|---|---|
| デジタル署名 | 署名を作成する | 署名を検証する |
| 公開鍵暗号による暗号化 | 暗号文を復号する | データを暗号化する |
証明書 の発行では、主にデジタル署名として使用する。 CA はCA秘密鍵で証明書へ署名し、検証側はCA証明書内の公開鍵で署名を確認する。
暗号化と復号の行はRSAなど暗号化に対応するアルゴリズムの場合である。Ed25519のように署名専用のアルゴリズムもある。
デジタル署名とハッシュ関数(SHA-256)
Section titled “デジタル署名とハッシュ関数(SHA-256)”大きなデータ全体をそのまま署名する代わりに、通常はハッシュ関数で固定長の値へ変換し、その値に対して署名を作成する。
証明書の内容 ↓ SHA-256などのハッシュ関数ハッシュ値 ↓ 秘密鍵で署名デジタル署名検証側は同じハッシュ関数で値を計算し、公開鍵で検証した結果と一致するか確認する。内容が少しでも変更されるとハッシュ値が変わるため、改ざんを検出できる。
-sha256 は、署名時のハッシュ関数としてSHA-256を指定するオプションである。秘密鍵の暗号化方式を指定するものではない。
秘密鍵を失った場合
Section titled “秘密鍵を失った場合”- 秘密鍵を紛失すると、その鍵に対応する証明書を継続して使用できない。
- サーバー秘密鍵が漏えいした場合は、 証明書を失効 させて新しい鍵と証明書へ交換する。
- CA秘密鍵が漏えいした場合は、不正な証明書を発行される可能性があるため影響が大きい。
OpenSSL公式ドキュメント
Section titled “OpenSSL公式ドキュメント”-
openssl-genpkey 秘密鍵の生成と、対応する公開鍵アルゴリズムの指定。
-
openssl-pkey 秘密鍵・公開鍵の表示、変換、検査。