「公開鍵は誰に見られても大丈夫」
「秘密鍵は絶対に他人へ渡してはいけない」
暗号化やHTTPS、パスキー、SSHなどについて調べていると、「公開鍵」と「秘密鍵」という言葉が頻繁に登場します。
しかし、
「公開鍵と秘密鍵は何が違う?」
「公開鍵を公開して本当に安全?」
「公開鍵で暗号化して秘密鍵で復号するの?」
「デジタル署名ではどちらを使う?」
「HTTPSではWebサイトの秘密鍵が送られてくる?」
「パスキーの秘密鍵と指紋認証は同じ?」
など、仕組みを理解しようとすると混乱しやすいテーマです。
結論からいうと、「公開鍵」と「秘密鍵」は、公開鍵暗号でセットになって使われる数学的に関連した2つの鍵です。
公開鍵は他人に公開してよい鍵、秘密鍵は所有者だけが厳重に管理する鍵という違いがあります。
ただし、役割を単純に、
「公開鍵=暗号化」「秘密鍵=復号」
だけで覚えると不十分です。
用途によっては、
- 公開鍵で暗号化し、対応する秘密鍵で復号する
- 秘密鍵でデジタル署名を生成し、公開鍵で署名を検証する
- 公開鍵と秘密鍵を利用して共有秘密を確立する
など、役割が変わります。
NISTは公開鍵暗号について、数学的に関連する「公開鍵」と「秘密鍵」という2つの鍵を利用し、公開鍵から秘密鍵を求めることが計算上困難になるよう設計された暗号方式と説明しています。
一言で覚えるなら、
公開鍵=「他人に渡してよい鍵」
秘密鍵=「本人だけが持つ鍵」
です。
この記事では、「公開鍵」と「秘密鍵」の違いから、公開鍵暗号、共通鍵暗号、暗号化、復号、デジタル署名、電子証明書、HTTPS、SSH、パスキーとの関係まで詳しく解説します。
- 「公開鍵」と「秘密鍵」の違い【結論】
- 「公開鍵暗号」とは?
- 公開鍵と秘密鍵は「鍵ペア」
- 「公開鍵」とは?
- 公開鍵はインターネットで公開しても大丈夫?
- 「秘密鍵」とは?
- 秘密鍵が漏れるとどうなる?
- 公開鍵で暗号化するとどうなる?
- 「秘密鍵で暗号化して公開鍵で復号」と覚えてよい?
- デジタル署名では秘密鍵を使う
- デジタル署名の流れ
- 「電子証明書」と公開鍵の違い
- 「PKI」とは?
- HTTPSと公開鍵・秘密鍵の関係
- HTTPSでは秘密鍵がブラウザへ送られる?
- HTTPS通信すべてを公開鍵で暗号化している?
- 「共通鍵」と「秘密鍵」は同じ?
- 公開鍵暗号と共通鍵暗号の違い
- SSHと公開鍵・秘密鍵の関係
- SSHの秘密鍵をメールで送ってもよい?
- パスキーと公開鍵・秘密鍵の関係
- パスキーの「秘密鍵」と指紋は同じもの?
- 公開鍵は同じものをずっと使える?
- 秘密鍵を忘れたらパスワードのように再発行できる?
- 公開鍵を改ざんされたら問題ない?
- 「公開鍵・秘密鍵」で迷ったときの3秒判定
- 「公開鍵」を使った例文
- 「秘密鍵」を使った例文
- 具体例で比較:秘密のファイルを送る
- 具体例で比較:デジタル署名
- 具体例で比較:HTTPS
- よくある間違い1:「公開鍵を知られたら危険」と思う
- よくある間違い2:「秘密鍵も相手へ送る」と思う
- よくある間違い3:「公開鍵と秘密鍵は同じ鍵のコピー」と思う
- よくある間違い4:「デジタル署名は秘密鍵で文章を暗号化すること」と思う
- よくある間違い5:「HTTPSでは秘密鍵がブラウザへ送られる」と思う
- よくある間違い6:「HTTPS通信は最初から最後まで公開鍵暗号だけ」と思う
- よくある間違い7:「公開鍵なら正しい相手のものか確認しなくてよい」と思う
- 「公開鍵」と「秘密鍵」に関するよくある質問
- まとめ
- 参考リンク・出典
「公開鍵」と「秘密鍵」の違い【結論】
| 比較項目 | 公開鍵 | 秘密鍵 |
|---|---|---|
| 英語 | Public Key | Private Key |
| 公開してよい? | 公開してよい | 原則として公開しない |
| 鍵ペア | 対応する秘密鍵とペア | 対応する公開鍵とペア |
| 暗号化での代表的役割 | 暗号化に使う場合がある | 復号に使う場合がある |
| デジタル署名での役割 | 署名を検証する | 署名を生成する |
| 管理方法 | 配布・公開できる | 厳重な秘密管理が必要 |
| 漏えいした場合 | 通常、公開されることを前提としている | 重大なセキュリティ問題になる |
3秒で判断するなら、
「他人へ渡してよい鍵?」 → 公開鍵
「本人だけが厳重に持つ鍵?」 → 秘密鍵
と考えてください。
「公開鍵暗号」とは?
公開鍵と秘密鍵という異なる2つの鍵を使う暗号技術
公開鍵と秘密鍵は、
公開鍵暗号
で使われます。
公開鍵暗号は、
非対称暗号
非対称鍵暗号
とも呼ばれます。
NISTは公開鍵暗号を、数学的に関連する2つの鍵を利用する暗号方式と定義しています。
その2つが、
- 公開鍵
- 秘密鍵
です。
公開鍵は他者へ公開できます。
一方、秘密鍵は所有者が秘密に管理します。
公開鍵と秘密鍵は「鍵ペア」
公開鍵と秘密鍵は無関係な2本の鍵ではありません。
数学的な関係を持つ、
「鍵ペア(Key Pair)」
です。
NISTもKey Pairを、
「公開鍵と、それに対応する秘密鍵」
と定義しています。
重要なのは、公開鍵を知っていても、適切な公開鍵暗号方式では、そこから対応する秘密鍵を現実的な計算量で求めることが困難になるよう設計されている点です。
この性質があるため、公開鍵を広く配布できます。
「公開鍵」とは?
他人へ公開して利用できる鍵
公開鍵は、公開鍵暗号で使う鍵ペアのうち、
他者へ公開してよい側の鍵
です。
NISTでは公開鍵について、公開鍵暗号アルゴリズムで利用され、対応する秘密鍵と関連付けられた鍵であり、公開してもよいものと説明しています。
アルゴリズムや用途によって、公開鍵は、
- データや鍵の暗号化
- デジタル署名の検証
- 共有秘密の計算
などに利用されます。
公開鍵はインターネットで公開しても大丈夫?
公開鍵そのものは、公開されることを前提とした鍵です。
そのため、適切な公開鍵暗号方式では、第三者に公開鍵を知られただけで秘密鍵が直ちに分かることはありません。
たとえばIPAは、脆弱性情報の安全な送信などに利用できるPGP公開鍵を実際に公開しています。
利用者はIPAの公開鍵を使って情報を暗号化し、その公開鍵に対応する秘密鍵を持つIPA側が復号できます。
つまり、
「公開鍵が漏れた」
という表現は通常適切ではありません。
そもそも公開するための鍵だからです。
「秘密鍵」とは?
所有者だけが秘密に管理する鍵
秘密鍵は、公開鍵暗号で使う鍵ペアのうち、
外部へ公開してはいけない側の鍵
です。
英語では、
Private Key
と呼びます。
NISTは秘密鍵について、公開鍵暗号アルゴリズムで使用され、所有者と一意に関連付けられ、公開されない鍵と説明しています。
用途によって秘密鍵は、
- 公開鍵で暗号化された情報の復号
- デジタル署名の生成
- 共有秘密の計算
などに使用されます。
秘密鍵が漏れるとどうなる?
秘密鍵の漏えいは重大な問題です。
利用目的によっては、攻撃者が、
- 本来の所有者になりすます
- 不正なデジタル署名を作成する
- 暗号化された情報を復号する
- 認証を突破する
といった行為を行える可能性があります。
そのため秘密鍵は、
- アクセス権を制限する
- 安全な端末・領域へ保存する
- 必要に応じてハードウェアで保護する
- バックアップも安全に管理する
- 不要になった鍵を適切に廃棄する
など、重要な情報として扱います。
公開鍵で暗号化するとどうなる?
公開鍵暗号を機密性のために利用する方式では、受信者の公開鍵を使ってデータや暗号鍵を暗号化し、対応する秘密鍵で復号する仕組みがあります。
たとえばAさんがBさんへ秘密の情報を送りたいとします。
- Bさんが公開鍵と秘密鍵を作る
- Bさんは公開鍵をAさんへ渡す
- AさんはBさんの公開鍵を使って情報を暗号化する
- 暗号化された情報をBさんへ送る
- Bさんが自分の秘密鍵を使って復号する
という流れです。
AさんはBさんの秘密鍵を知る必要がありません。
これが公開鍵暗号の大きな特徴です。
「秘密鍵で暗号化して公開鍵で復号」と覚えてよい?
一般化して覚えるのはおすすめできません。
古い解説では、
「公開鍵で暗号化して秘密鍵で復号」
「秘密鍵で暗号化して公開鍵で復号するとデジタル署名」
と説明されることがあります。
しかし現代の暗号技術を理解するうえでは、
デジタル署名を単純に「秘密鍵による暗号化」と考えないほうが正確です。
署名アルゴリズムは、署名生成と署名検証のために設計された別の暗号処理です。
したがって、
暗号化:公開鍵で暗号化し、対応する秘密鍵で復号する方式がある
署名:秘密鍵で署名を生成し、対応する公開鍵で検証する
と分けて覚えるのが安全です。
デジタル署名では秘密鍵を使う
デジタル署名では、
秘密鍵を使って署名を生成
し、
対応する公開鍵を使って署名を検証
します。
NISTのDigital Signature Standard(FIPS 186-5)でも、秘密鍵を署名生成に使い、公開鍵を署名検証に利用する鍵ペアが規定されています。
デジタル署名によって、
- データが途中で改変されていないか
- 対応する秘密鍵を持つ主体によって署名されたか
などを確認するための仕組みを作れます。
デジタル署名の流れ
簡略化すると、次のような流れです。
- Aさんが秘密鍵を持つ
- Aさんがデータへデジタル署名を付ける
- Bさんへデータと署名を送る
- BさんはAさんの公開鍵を使って署名を検証する
署名が正しく検証できれば、データが署名後に変更されていないことなどを確認できます。
ただし、
「公開鍵が本当にAさんのものなのか」
という別の問題もあります。
そこで重要になるのが電子証明書やPKIです。
「電子証明書」と公開鍵の違い
電子証明書と公開鍵は同じものではありません。
WebサイトのTLS証明書などの公開鍵証明書には、一般に、
- 公開鍵
- 対象となるドメイン名等の情報
- 発行者
- 有効期間
- 署名アルゴリズム等の情報
- 認証局によるデジタル署名
などが含まれます。
つまり、
公開鍵=暗号鍵そのもの
公開鍵証明書=公開鍵と主体の情報などを結び付けたデジタル文書
です。
MDNも、Webサイトの証明書には、そのWebサイトの秘密鍵に対応する公開鍵が含まれ、証明書によって公開鍵とドメイン名が結び付けられることを説明しています。
「PKI」とは?
PKIは、
Public Key Infrastructure
の略で、日本語では、
公開鍵基盤
と呼ばれます。
公開鍵を安全に利用するためには、
「その公開鍵が本当に目的の相手のものなのか」
を確認できなければなりません。
第三者が偽の公開鍵を、
「これはexample.comの公開鍵です」
と配布できてしまえば、公開鍵暗号の安全性を十分に生かせません。
そこで認証局(CA)や公開鍵証明書などを利用し、公開鍵と主体の関係を検証できるようにするのがPKIです。
HTTPSと公開鍵・秘密鍵の関係
WebサイトのHTTPSでは、TLSというプロトコルが通信の保護に利用されます。
MDNはTLSについて、Web通信の、
- 機密性
- 真正性
- 完全性
を保護するために使われる技術と説明しています。
TLSで証明書認証を利用する場合、Webサーバーは公開鍵を含む証明書を提示し、その公開鍵に対応する秘密鍵を持っていることを暗号学的に証明します。
ブラウザ側は証明書チェーンなどを確認し、接続先の正当性を検証します。
HTTPSでは秘密鍵がブラウザへ送られる?
送られません。
サーバーの秘密鍵はサーバー側で安全に保持する必要があります。
ブラウザへ送られる証明書には公開鍵が含まれますが、対応する秘密鍵そのものを送信するわけではありません。
TLS 1.3では、証明書認証を利用する場合、サーバーが秘密鍵を用いて署名を行い、ブラウザ側が証明書に含まれる公開鍵を用いて署名を検証する処理などが行われます。
HTTPS通信すべてを公開鍵で暗号化している?
通常、そのように単純化するのは正確ではありません。
公開鍵暗号は計算負荷が比較的大きいため、実際のTLSでは、通信全体を公開鍵暗号だけで処理するわけではありません。
TLS 1.3では鍵交換によって共有秘密から通信に使う対称鍵を導出し、その後の大量のデータ通信には効率的な共通鍵暗号方式を利用します。
つまり、HTTPSでは、
公開鍵暗号・デジタル署名・鍵交換・共通鍵暗号などを組み合わせている
と考えるのが適切です。
「共通鍵」と「秘密鍵」は同じ?
言葉が似ていますが、区別したほうが安全です。
共通鍵暗号では、暗号化と復号で同じ秘密の鍵を共有します。
一方、公開鍵暗号の、
秘密鍵(Private Key)
は、公開鍵とペアになる非対称鍵です。
| 比較項目 | 共通鍵 | 公開鍵暗号の秘密鍵 |
|---|---|---|
| 利用する暗号 | 共通鍵暗号 | 公開鍵暗号 |
| 対応する鍵 | 原則として同じ鍵を共有 | 公開鍵とペア |
| 他者へ公開 | しない | しない |
| 代表的用途 | 大量データの高速な暗号化 | 復号・署名・鍵交換等 |
IPAの暗号鍵管理ガイダンスでも、対称鍵と公開鍵・プライベート鍵を分けて説明しています。
公開鍵暗号と共通鍵暗号の違い
| 公開鍵暗号 | 共通鍵暗号 |
|---|---|
| 公開鍵と秘密鍵の2つを使う | 同じ秘密鍵を共有して使う |
| 非対称暗号とも呼ばれる | 対称暗号とも呼ばれる |
| 秘密鍵を相手へ渡さずに済む | 利用者間で秘密鍵を安全に共有する必要がある |
| 署名・鍵交換等にも利用 | 大量データの高速暗号化に向く |
| RSA、楕円曲線暗号等 | AES等 |
実際のセキュリティシステムでは、どちらか一方だけを使うのではなく、公開鍵暗号と共通鍵暗号を組み合わせることがよくあります。
SSHと公開鍵・秘密鍵の関係
SSHでも公開鍵認証を利用できます。
一般的には、利用者側で、
- 公開鍵
- 秘密鍵
の鍵ペアを作ります。
サーバー側には公開鍵を登録し、利用者側は秘密鍵を保持します。
接続時には、利用者が対応する秘密鍵を持っていることを暗号学的に確認します。
したがって、サーバーへ秘密鍵をコピーする必要はありません。
SSHの秘密鍵をメールで送ってもよい?
原則として避けるべきです。
秘密鍵は所有者だけが管理することを前提とした重要情報です。
SSHの秘密鍵が第三者へ渡り、ほかの認証条件も突破されると、不正ログインに利用される可能性があります。
他人へ登録してもらう必要がある場合には、通常は、
公開鍵だけを渡します。
パスキーと公開鍵・秘密鍵の関係
パスキーでも公開鍵暗号が利用されます。
パスキーを作成すると、サービス・アカウントに対応する鍵ペアが作られます。
基本的には、
サービス側=公開鍵を保持
利用者側=秘密鍵を保持
という関係です。
ログイン時には、利用者側の秘密鍵による暗号学的な認証結果を、サービス側が公開鍵を使って検証します。
このため、従来のパスワードのような共通の秘密文字列をサーバーへ送信する必要がありません。
パスキーの「秘密鍵」と指紋は同じもの?
同じではありません。
パスキーの秘密鍵は暗号処理に使う鍵です。
一方、指紋・顔・端末PINなどは、
その端末上で秘密鍵を使用してよい本人か確認する手段
として利用されます。
つまり、
秘密鍵=Webサービスとの暗号学的認証に使う
指紋等=端末上で秘密鍵の利用を許可するための本人確認に使う
という違いがあります。
公開鍵は同じものをずっと使える?
必ずしもそうとは限りません。
暗号鍵には、用途・アルゴリズム・システムの方針などに応じて利用期間を設定します。
秘密鍵が漏えいした場合だけでなく、
- 利用期間が終了した
- アルゴリズムを変更する
- 鍵長や安全性の要件が変わった
- 担当者・システムが変更された
などを理由に鍵を更新する場合があります。
IPAも暗号鍵管理において、鍵の生成から保護、利用、更新、失効、廃棄までを含めたライフサイクル管理の重要性を示しています。
秘密鍵を忘れたらパスワードのように再発行できる?
仕組みによります。
秘密鍵そのものが失われた場合、その鍵を数学的に復元できるとは限りません。
そのためシステムによって、
- 安全なバックアップ
- 別の認証手段
- 新しい鍵ペアの作成
- 証明書の再発行
- アカウント復旧処理
などを利用します。
「秘密鍵を失ってもサービス運営者が同じ秘密鍵を教えてくれる」とは限らない点に注意が必要です。
公開鍵を改ざんされたら問題ない?
問題になります。
公開鍵は秘密にする必要はありませんが、
「正しい相手の公開鍵であること」
は非常に重要です。
攻撃者が本物の公開鍵を自分の公開鍵へすり替えることができれば、利用者は攻撃者向けに情報を暗号化したり、偽の署名を正しいものだと誤認したりする可能性があります。
そのため、公開鍵には、
機密性より真正性・完全性の確保
が重要になります。
HTTPSの電子証明書やSSHのホスト鍵確認などは、この問題と関係しています。
「公開鍵・秘密鍵」で迷ったときの3秒判定
| こんな場合 | 答え |
|---|---|
| 他人へ配布してよい | 公開鍵 |
| 所有者だけが秘密に持つ | 秘密鍵 |
| デジタル署名を生成する | 秘密鍵 |
| デジタル署名を検証する | 公開鍵 |
| 相手だけが読めるよう暗号化する方式 | 相手の公開鍵を利用する場合がある |
| 公開鍵で暗号化された情報を復号する | 対応する秘密鍵 |
| TLS証明書に含まれる | 公開鍵 |
| TLSサーバーが厳重に保持する | 秘密鍵 |
最も簡単に覚えるなら、
公開鍵=「渡してよい」
秘密鍵=「渡してはいけない」
です。
「公開鍵」を使った例文
- 受信者の公開鍵を使ってデータを暗号化する。
- 公開鍵をWebサイトで公開する。
- 署名者の公開鍵でデジタル署名を検証する。
- サーバーへSSHの公開鍵を登録する。
- TLS証明書にはWebサイトの公開鍵が含まれる。
「秘密鍵」を使った例文
- 秘密鍵は第三者へ渡さない。
- 秘密鍵を使ってデジタル署名を生成する。
- 対応する秘密鍵で暗号化された情報を復号する。
- SSHの秘密鍵を安全に保管する。
- Webサーバーの秘密鍵へのアクセスを制限する。
具体例で比較:秘密のファイルを送る
Bさんだけに読んでもらいたい情報があるとします。
Bさんは公開鍵と秘密鍵の鍵ペアを持っています。
AさんはBさんの公開鍵を入手し、その公開鍵を使う公開鍵暗号方式でデータまたはデータ暗号化用の鍵を保護します。
Bさんは、自分だけが持つ対応する秘密鍵を使って復号します。
この仕組みでは、
AさんがBさんの秘密鍵を知る必要がありません。
具体例で比較:デジタル署名
Aさんが文書へデジタル署名するとします。
Aさんは自分の秘密鍵を使って署名を生成します。
BさんはAさんの公開鍵を使って署名を検証します。
ここでは秘密鍵でデータを「隠す」ことが目的ではありません。
署名者とデータの完全性を検証すること
が目的です。
具体例で比較:HTTPS
ブラウザでHTTPSサイトへアクセスしたとします。
Webサーバーは証明書認証を利用する場合、自分の公開鍵が含まれる電子証明書をブラウザへ提示します。
一方、対応する秘密鍵はサーバー側に保持します。
ブラウザは証明書やデジタル署名等を検証し、サーバーの正当性を確認します。
その後の通信では、TLSによって確立された共通鍵などを利用してデータを保護します。
よくある間違い1:「公開鍵を知られたら危険」と思う
公開鍵は、そもそも他者へ公開できるよう設計されています。
重要なのは、公開鍵から秘密鍵を現実的に求められない安全な方式・十分なパラメータを利用することと、その公開鍵が本当に目的の相手のものか確認することです。
よくある間違い2:「秘密鍵も相手へ送る」と思う
秘密鍵は原則として所有者だけが保持します。
相手へ渡すのは公開鍵です。
よくある間違い3:「公開鍵と秘密鍵は同じ鍵のコピー」と思う
違います。
数学的に関連していますが、異なる2つの鍵からなる鍵ペアです。
よくある間違い4:「デジタル署名は秘密鍵で文章を暗号化すること」と思う
単純化しすぎです。
デジタル署名は、署名生成用アルゴリズムを秘密鍵で実行し、対応する公開鍵で検証する仕組みです。
通常の暗号化・復号とは目的も処理も分けて考える必要があります。
よくある間違い5:「HTTPSでは秘密鍵がブラウザへ送られる」と思う
秘密鍵はサーバー側で保持します。
ブラウザへ提示される証明書には公開鍵が含まれますが、サーバーの秘密鍵そのものは送信しません。
よくある間違い6:「HTTPS通信は最初から最後まで公開鍵暗号だけ」と思う
実際のTLSでは、公開鍵技術・デジタル署名・鍵交換・共通鍵暗号などを組み合わせます。
大量のアプリケーションデータをすべて公開鍵暗号だけで暗号化する仕組みではありません。
よくある間違い7:「公開鍵なら正しい相手のものか確認しなくてよい」と思う
公開鍵は秘密ではありませんが、真正性は重要です。
偽の公開鍵へすり替えられれば、中間者攻撃などにつながる可能性があります。
電子証明書・PKI・SSHのフィンガープリント確認などは、正しい公開鍵を確認する仕組みに関係します。
「公開鍵」と「秘密鍵」に関するよくある質問
Q1. 「公開鍵」と「秘密鍵」の一番簡単な違いは?
公開鍵は他人へ渡してよい鍵、秘密鍵は所有者だけが厳重に保持する鍵です。
Q2. 公開鍵から秘密鍵を計算できますか?
安全な公開鍵暗号では、公開鍵から対応する秘密鍵を求めることが計算上困難になるよう設計されています。
Q3. 公開鍵と秘密鍵は別々に作るのですか?
通常は暗号アルゴリズムに従って鍵ペアとして生成され、数学的に関連した公開鍵と秘密鍵が作られます。
Q4. 公開鍵は誰に渡しても大丈夫ですか?
秘密にする必要はありません。
ただし、利用者が受け取った公開鍵が本当に正しい相手のものなのか確認できる仕組みは重要です。
Q5. 秘密鍵を紛失したらどうなりますか?
用途によりますが、復号できなくなったり、署名・認証ができなくなったりする可能性があります。
システムによっては安全なバックアップや新しい鍵ペアへの更新が必要です。
Q6. 公開鍵で暗号化したものは誰でも復号できますか?
対応する秘密鍵で復号する方式では、その秘密鍵を安全に保持している主体だけが復号できるよう設計します。
Q7. デジタル署名ではどちらを使いますか?
署名生成には秘密鍵、署名検証には対応する公開鍵を利用します。
Q8. TLS証明書の中に秘密鍵は入っていますか?
通常の公開鍵証明書にサーバーの秘密鍵そのものは含まれません。
証明書には公開鍵などが含まれ、秘密鍵は所有者側で別に管理します。
Q9. パスキーにも公開鍵と秘密鍵がありますか?
はい。
パスキーでは公開鍵暗号の鍵ペアを利用し、サービス側へ公開鍵を登録し、秘密鍵は利用者側で管理する仕組みが使われます。
Q10. 「公開鍵暗号」と「共通鍵暗号」はどちらが安全ですか?
単純にどちらが安全とはいえません。
用途・アルゴリズム・鍵長・鍵管理・実装などによって安全性は変わります。
実際のTLSなどでは、それぞれの特徴を生かして複数の暗号技術を組み合わせています。
まとめ
「公開鍵」と「秘密鍵」は、公開鍵暗号でセットになって使われる2つの暗号鍵です。
| 公開鍵 | 秘密鍵 |
|---|---|
| Public Key | Private Key |
| 公開してよい | 公開しない |
| 秘密鍵とペア | 公開鍵とペア |
| 署名検証に利用 | 署名生成に利用 |
| 暗号化等に利用する場合がある | 復号等に利用する場合がある |
| 真正性・完全性の確認が重要 | 機密性を厳重に守る必要がある |
最も簡単な覚え方は、
公開鍵=「他人に渡してよい鍵」
秘密鍵=「本人だけが持つ鍵」
です。
公開鍵暗号では、この2つの鍵を数学的に関連付けながら、公開鍵を知っていても秘密鍵を現実的に求めることが困難になるよう設計します。
機密性を守る用途では、公開鍵を使って情報や鍵を暗号化し、対応する秘密鍵で復号する仕組みがあります。
一方、デジタル署名では、
秘密鍵=署名を作る
公開鍵=署名を確かめる
という役割になります。
したがって、
「公開鍵は常に暗号化、秘密鍵は常に復号」
とだけ覚えるのは不十分です。
また、HTTPSでは公開鍵を含む電子証明書とサーバーの秘密鍵が利用されますが、Web通信すべてを公開鍵暗号だけで処理しているわけではありません。
TLSでは鍵交換・デジタル署名・共通鍵暗号など複数の技術を組み合わせ、安全で効率的な通信を実現しています。
公開鍵は、
「秘密にしなくてよいが、本当に正しい相手の鍵か確認することが重要」
です。
秘密鍵は、
「本人以外には知られないよう厳重に守ることが重要」
です。
この2点を押さえておくと、HTTPS、SSH、デジタル署名、電子証明書、パスキーなど多くのセキュリティ技術を理解しやすくなります。
参考リンク・出典
-
NIST CSRC Glossary「Public Key」
― 公開鍵を、公開鍵暗号で使用され、秘密鍵と関連付けられ、公開可能な鍵として定義。署名検証・暗号化・共有秘密の計算などの用途を説明 -
NIST CSRC Glossary「Private Key」
― 秘密鍵を、所有者と関連付けられ公開されない鍵として定義し、署名生成・復号・共有秘密の計算などの用途を説明 -
NIST CSRC Glossary「Public Key Cryptography」
― 公開鍵と秘密鍵という数学的に関連する2つの鍵を利用する非対称暗号について解説 -
NIST「FIPS 186-5: Digital Signature Standard (DSS)」
― デジタル署名アルゴリズムと公開鍵・秘密鍵の鍵ペア、秘密鍵による署名生成と公開鍵による署名検証を規定 -
MDN Web Docs「Public-key cryptography」
― 公開鍵暗号の基本、公開鍵による暗号化・秘密鍵による復号、秘密鍵による署名・公開鍵による検証を解説 -
MDN Web Docs「Transport Layer Security (TLS)」
― HTTPS・TLSにおける証明書、公開鍵、秘密鍵、サーバー認証などの関係を解説 -
IPA「暗号鍵管理ガイドライン」
― 対称鍵・公開鍵・プライベート鍵の分類、鍵の利用目的、生成・保護・更新・失効・廃棄など暗号鍵のライフサイクル管理を解説 -
IPA「IPA/ISEC の PGP 公開鍵について」
― IPAがPGP公開鍵を実際に公開し、脆弱性関連情報等を安全に暗号化して送信する用途を案内
※本記事では一般ユーザー向けに、「公開鍵=公開可能な鍵」「秘密鍵=所有者だけが保持する鍵」と整理しています。実際の役割は利用するアルゴリズム・プロトコルによって異なります。
※「公開鍵で暗号化・秘密鍵で復号」は公開鍵暗号の代表的な用途の一つですが、すべての公開鍵アルゴリズムが同じ方法で暗号化に利用できるわけではありません。署名専用・鍵共有用のアルゴリズムもあります。
※デジタル署名を「秘密鍵による暗号化」と単純に説明すると、現代の署名方式を正確に表せない場合があります。本記事では、秘密鍵で署名を生成し、公開鍵で検証する処理として区別しています。
※TLS・HTTPSでは、公開鍵技術だけでなく、鍵交換・デジタル署名・共通鍵暗号など複数の暗号技術を組み合わせます。サーバーの公開鍵でWeb通信全体を暗号化する仕組みと単純化しないよう注意してください。
※暗号方式の安全性は、アルゴリズム、鍵長、実装、鍵管理、利用期間などによって変化します。実際のシステムではNIST、CRYPTREC、IPA等の最新ガイドラインを確認してください。
