秘密鍵と公開鍵とは?違い・仕組み・使い方を初心者向けに徹底解説


「秘密鍵と公開鍵って何が違うの?」「公開鍵は公開しても大丈夫?」「秘密鍵はどのように使うの?」と疑問に感じている方も多いのではないでしょうか。

秘密鍵と公開鍵は、インターネット上で安全に通信したり、本人確認を行ったりするために欠かせない「暗号鍵」です。HTTPS通信やSSH、電子署名、暗号資産など、さまざまな場面で利用されています。

この記事では、秘密鍵と公開鍵の違い、仕組み、具体的な利用例、管理方法について、初心者にもわかりやすく解説します。

秘密鍵と公開鍵とは?

秘密鍵と公開鍵は、公開鍵暗号方式で利用される2種類の鍵です。

簡単にいうと、次のような違いがあります。

  • 公開鍵:他人に公開してよい鍵
  • 秘密鍵:本人だけが厳重に管理する鍵

この2つは数学的に関連した「鍵のペア」として生成されます。

秘密鍵とは?

秘密鍵とは、本人だけが知っておくべき鍵です。

第三者に知られてしまうと、本人になりすまされたり、暗号化された情報を復号されたりする可能性があります。

そのため、秘密鍵はパスワード以上に慎重に管理する必要があります。

例えばSSHでは、秘密鍵を使ってサーバーへのログイン認証を行います。

公開鍵とは?

公開鍵とは、第三者に公開しても問題ない鍵です。

公開鍵は、Webサイトやサーバー、通信相手などに渡して利用します。

公開鍵から秘密鍵を簡単に逆算することはできないよう、数学的に設計されています。

秘密鍵と公開鍵の違い

秘密鍵と公開鍵の違いを表にすると、次のようになります。

項目 秘密鍵 公開鍵
公開 原則として非公開 公開してよい
管理する人 本人 通信相手など
漏洩した場合 非常に危険 基本的に問題なし
用途 復号・署名・認証など 暗号化・署名検証・認証など
役割 本人であることを証明する 本人の秘密鍵と対応する鍵
代表例 SSH秘密鍵、電子署名用秘密鍵 SSH公開鍵、電子証明書

重要なのは、「公開鍵は公開してよいが、秘密鍵は絶対に他人へ渡さない」という点です。

公開鍵暗号方式の仕組み

公開鍵暗号方式では、秘密鍵と公開鍵という2つの鍵を使います。

        鍵のペアを生成
             ↓
     ┌──────────────┐
     │              │
  公開鍵          秘密鍵
     │              │
  公開してOK      厳重に管理
     │              │
     └──────┬───────┘
            ↓
       暗号化・認証

ただし、公開鍵暗号では「暗号化」と「電子署名」で鍵の使い方が異なります。

公開鍵で暗号化、秘密鍵で復号する

公開鍵暗号の代表的な使い方が、公開鍵による暗号化です。

例えばAさんがBさんに秘密の情報を送りたいとします。

Bさんが公開鍵と秘密鍵を持っている場合、AさんはBさんの公開鍵を使ってデータを暗号化できます。

Aさん
  │
  │ Bさんの公開鍵で暗号化
  ↓
暗号化されたデータ
  │
  ↓
Bさん
  │
  │ Bさんの秘密鍵で復号
  ↓
元のデータ

この場合、復号に必要になるのがBさんの秘密鍵です。

そのため、秘密鍵を持っていない第三者は、暗号化されたデータを簡単には元に戻せません。

秘密鍵で署名、公開鍵で検証する

秘密鍵と公開鍵は、電子署名にも使われます。

この場合は、秘密鍵を使ってデータに署名します。

秘密鍵
  ↓
電子署名を作成
  ↓
データ+署名
  ↓
公開鍵で検証
  ↓
本人が署名したことを確認

例えば、ソフトウェアの配布や電子契約などでは、電子署名を使って「このデータが本当に本人によって作られたものなのか」を確認できます。

「暗号化」と「電子署名」は鍵の使い方が違う

初心者が混乱しやすいのが、この部分です。

暗号化の場合

公開鍵 → 暗号化
秘密鍵 → 復号

電子署名の場合

秘密鍵 → 署名
公開鍵 → 検証

ただし、実際の暗号方式やプロトコルでは、単純に「秘密鍵で暗号化する」という説明をすると誤解につながる場合があります。

特に電子署名は、署名アルゴリズムによって生成・検証の仕組みが定義されていると理解するのがおすすめです。

秘密鍵と公開鍵はどうやって作る?

秘密鍵と公開鍵は、通常は専用の暗号アルゴリズムを使って生成します。

代表的なものには、次のような方式があります。

  • RSA
  • ECC
  • Ed25519
  • ECDSA

例えばSSHでは、Ed25519などの鍵ペアを生成できます。

LinuxやmacOSであれば、次のようなコマンドが代表例です。

ssh-keygen -t ed25519

実行すると、秘密鍵と公開鍵のペアを作成できます。

一般的には、次のようなファイルが作られます。

秘密鍵:~/.ssh/id_ed25519
公開鍵:~/.ssh/id_ed25519.pub

SSHでは秘密鍵と公開鍵をどう使う?

秘密鍵と公開鍵は、SSHによるサーバーログインで非常によく利用されています。

例えば、自分のパソコンからサーバーへSSH接続するとします。

まず自分のパソコンで鍵ペアを作ります。

自分のPC
├── 秘密鍵
└── 公開鍵

そして公開鍵だけをサーバー側に登録します。

自分のPC                    サーバー
秘密鍵                       公開鍵
  │                            │
  └────── SSH認証 ────────────┘

ログイン時には、秘密鍵を使って認証を行います。

SSHのポイント

サーバーに登録するのは公開鍵です。

秘密鍵をサーバー管理者などに渡す必要はありません。

つまり、

公開鍵はサーバーに置く。秘密鍵は自分のPCで管理する。

というのが基本です。

公開鍵は本当に公開しても大丈夫?

はい。

公開鍵は、その名前の通り公開することを前提としています。

例えばSSHの公開鍵は、サーバーに登録する必要があります。

一方で、秘密鍵は公開してはいけません。

公開鍵
↓
公開OK

秘密鍵
↓
絶対に公開しない

ここを間違えるとセキュリティ事故につながります。

秘密鍵が漏洩するとどうなる?

秘密鍵が第三者に流出すると、非常に危険です。

例えばSSHの場合、秘密鍵を使ってアクセスできる環境であれば、第三者に不正アクセスされる可能性があります。

そのため、秘密鍵を次のような場所に保存するのは避けるべきです。

  • GitHubなどの公開リポジトリ
  • SNS
  • 公開Webサイト
  • チャット
  • ブログ
  • 他人のPC
  • パスワードなしの共有フォルダ

特に注意したいのがGitです。

誤って秘密鍵をGitHubなどにコミットすると、削除しただけでは十分な対策にならない場合があります。

漏洩した可能性がある秘密鍵は、利用を停止して新しい鍵へ交換することが重要です。

GitHubでも公開鍵と秘密鍵が使われる

GitHubなどのGitサービスでも、SSH鍵を使った認証が利用されています。

例えば、ローカルPCからGitリポジトリへSSH接続する場合、次のような形で認証できます。

ローカルPC
  │
  ├─ 秘密鍵
  │
  └─ 公開鍵
          ↓
       Gitサービス

公開鍵をGitサービス側に登録し、秘密鍵は自分のPCで管理します。

HTTPSでも公開鍵暗号が使われる

Webサイトを閲覧するときに表示される、

https://

のHTTPS通信でも、公開鍵暗号の技術が利用されています。

HTTPSでは、公開鍵暗号だけですべての通信データを暗号化しているわけではありません。

実際には、公開鍵暗号などを利用して安全に通信相手を認証したり、暗号通信に必要な鍵を安全に確立したりしたうえで、通信データには高速な共通鍵暗号を利用する方式が一般的です。

このように、公開鍵暗号と共通鍵暗号を組み合わせることで、安全性と通信速度を両立しています。

公開鍵暗号方式と共通鍵暗号方式の違い

暗号には大きく分けて、

  • 公開鍵暗号方式
  • 共通鍵暗号方式

があります。

項目 公開鍵暗号 共通鍵暗号
公開鍵+秘密鍵 1つの共通鍵
鍵の共有 比較的容易 安全な共有が課題
処理速度 比較的遅い 高速
主な用途 認証・鍵交換・電子署名など 大量のデータの暗号化
代表例 RSA、ECCなど AESなど

実際のインターネット通信では、両者を組み合わせて利用するケースが多くあります。

秘密鍵とパスワードは何が違う?

秘密鍵はパスワードとは異なります。

パスワードは、通常ユーザーが文字列を覚えて入力します。

一方、秘密鍵は暗号学的に生成されたデータで、非常に長く複雑な値になります。

例えばSSHでは、

パスワード認証
↓
ユーザーがパスワードを入力

SSH鍵認証
↓
秘密鍵を利用して認証

という違いがあります。

秘密鍵そのものを覚える必要はありません。

秘密鍵はパスフレーズで保護できる

秘密鍵には、パスフレーズを設定して保護することができます。

例えばSSH鍵を生成するとき、

ssh-keygen -t ed25519

と実行すると、パスフレーズの設定を求められる場合があります。

秘密鍵自体が流出した場合でも、適切なパスフレーズで保護されていれば、不正利用のリスクを低減できます。

ただし、パスフレーズを設定したからといって、秘密鍵を安全に扱わなくてよいわけではありません。

秘密鍵の安全な管理方法

秘密鍵は次のように管理することが重要です。

1.秘密鍵を他人に渡さない

最も基本的なルールです。

管理者から「秘密鍵を送ってください」と言われても、安易に送信してはいけません。

2.公開リポジトリに保存しない

GitHubなどの公開リポジトリに秘密鍵をアップロードしないようにします。

3.適切なファイル権限を設定する

LinuxやmacOSのSSH秘密鍵では、例えば次のようにアクセス権を設定することがあります。

chmod 600 ~/.ssh/id_ed25519

4.バックアップを安全に保管する

秘密鍵を紛失すると、アクセスできなくなるシステムがあります。

ただし、バックアップする場合も暗号化された安全な場所に保管しましょう。

5.漏洩したら鍵を交換する

秘密鍵が流出した可能性がある場合は、放置せず新しい鍵を作成して、古い鍵を無効化することが重要です。

公開鍵から秘密鍵を作ることはできる?

通常、公開鍵から秘密鍵を現実的な時間で逆算することはできません。

公開鍵暗号では、この「逆算することが非常に困難」という数学的性質を安全性の基礎としています。

ただし、「絶対に不可能」という意味ではありません。

暗号アルゴリズムの安全性は、数学的問題の計算困難性や鍵長、実装方法などに依存します。

そのため、古い暗号方式や短すぎる鍵を使い続けるのではなく、現在推奨されている方式を利用することが重要です。

秘密鍵と公開鍵を理解するための覚え方

初心者なら、まず次のように覚えておくとよいでしょう。

公開鍵=みんなに渡してよい鍵
秘密鍵=自分だけが持つ鍵

さらに、

秘密鍵を守ることが最重要

と覚えておけば、SSHやHTTPS、電子署名を学ぶ際にも理解しやすくなります。

秘密鍵と公開鍵のよくある間違い

「公開鍵は秘密にしないと危険」

これは基本的に誤りです。

公開鍵は公開されることを前提としています。

問題になるのは秘密鍵の漏洩です。

「公開鍵から秘密鍵を簡単に作れる」

これも基本的に誤りです。

暗号方式が適切に利用されている限り、公開鍵から秘密鍵を現実的な時間で求めることは困難です。

「秘密鍵を相手に送れば安全」

これも危険です。

秘密鍵は基本的に本人が管理するものです。

相手に渡すのではなく、公開鍵を相手側に登録するという考え方が基本になります。

秘密鍵と公開鍵はなぜ重要なのか?

インターネットでは、相手が本当に本人なのか、通信内容が盗み見られていないか、データが改ざんされていないかを確認する必要があります。

秘密鍵と公開鍵を利用した暗号技術は、次のような仕組みに利用されています。

  • 本人確認
  • データの暗号化
  • 電子署名
  • SSH認証
  • HTTPS通信
  • 証明書
  • ソフトウェアの署名

普段は意識しなくても、Webサイトやクラウドサービス、サーバーなどを利用する際に、その恩恵を受けています。

まとめ|秘密鍵は厳重に、公開鍵は公開して使う

秘密鍵と公開鍵は、公開鍵暗号方式で利用される重要な暗号鍵です。

ポイントをまとめると、次のとおりです。

  • 公開鍵は公開して利用できる
  • 秘密鍵は本人だけが管理する
  • 公開鍵と秘密鍵はペアになっている
  • 暗号化では公開鍵と秘密鍵を組み合わせて利用する
  • 電子署名では秘密鍵で署名し、公開鍵で検証する
  • SSHでは公開鍵をサーバーに登録し、秘密鍵を自分で管理する
  • HTTPSなどでも公開鍵暗号の技術が利用されている
  • 秘密鍵が漏洩した場合は速やかに鍵を交換する

特にIT初心者の方は、まず「公開鍵は公開してOK、秘密鍵は絶対に他人へ渡さない」という基本を覚えておきましょう。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら