公開鍵と秘密鍵の仕組み|SSH鍵認証を理解するための基礎知識

公開鍵と秘密鍵の仕組み

公開鍵暗号方式の仕組みを理解してSSH鍵認証を学ぼう

SSH鍵認証を学習する際、多くの人が最初につまずくのが「公開鍵」と「秘密鍵」の仕組みです。

LinuxサーバへSSH接続するときに「公開鍵を登録してください」「秘密鍵を指定してください」と言われても、なぜ2つの鍵が必要なのか分かりにくいものです。

しかし、この仕組みを理解するとSSHだけでなくHTTPS、電子署名、VPN、クラウドサービスの認証など、多くのセキュリティ技術の理解につながります。

本記事では公開鍵と秘密鍵の基本的な仕組みから、SSH鍵認証でどのように利用されているのかまで詳しく解説します。

公開鍵暗号方式とは

公開鍵暗号方式とは、2つの異なる鍵を利用する暗号技術です。

利用する鍵は以下の2種類です。

  • 公開鍵(Public Key)
  • 秘密鍵(Private Key)

従来の共通鍵暗号では暗号化と復号化に同じ鍵を使用していました。

しかし共通鍵を安全に相手へ渡すことが難しいという問題がありました。

公開鍵暗号方式では異なる2つの鍵を利用することで、この問題を解決しています。

公開鍵と秘密鍵の関係

公開鍵と秘密鍵は必ずペアで生成されます。

例えばSSHで鍵を作成すると次のようなファイルが生成されます。

id_ed25519
id_ed25519.pub

秘密鍵です。

id_ed25519

公開鍵です。

id_ed25519.pub

この2つは数学的に関連付けられていますが、公開鍵から秘密鍵を計算することは現実的に不可能です。

そのため公開鍵は他人へ渡しても問題ありません。

なぜ公開鍵は公開しても安全なのか

初心者が最も疑問に思うポイントです。

公開鍵は名前の通り公開することが前提です。

例えばSSHサーバでは公開鍵を登録します。

サーバ管理者や攻撃者が公開鍵を見ても問題ありません。

重要なのは秘密鍵です。

秘密鍵を持つ人だけが認証できるため、秘密鍵が漏洩しなければ安全性は維持されます。

鍵の役割を鍵穴に例える

公開鍵暗号方式は鍵穴と鍵に例えると理解しやすくなります。

  • 公開鍵 → 鍵穴
  • 秘密鍵 → 本物の鍵

鍵穴は誰に見られても問題ありません。

しかし本物の鍵を持っている人だけが扉を開けられます。

SSH認証も同じ考え方です。

SSHではどのように利用されるのか

SSH鍵認証では以下のような流れになります。

  1. 利用者が鍵ペアを作成する
  2. 公開鍵をサーバへ登録する
  3. 秘密鍵を利用者が保管する
  4. 接続時に秘密鍵で認証する
  5. サーバが公開鍵で検証する

この仕組みによって安全な認証が実現されています。

秘密鍵は絶対に渡してはいけない

秘密鍵は利用者本人だけが保持します。

例えば以下のファイルです。

~/.ssh/id_ed25519

このファイルが漏洩すると、その秘密鍵を利用してサーバへログインされる可能性があります。

そのため実務では厳重な管理が必要です。

  • メール送信しない
  • 共有フォルダへ置かない
  • GitHubへ登録しない
  • バックアップ管理を行う

公開鍵はサーバへ登録する

公開鍵はサーバへ配置します。

通常は以下のファイルへ登録されます。

~/.ssh/authorized_keys

登録例です。
ssh-ed25519 AAAAC3Nza・・・

SSHサーバはこの公開鍵を利用して認証を行います。

認証時に何が起きているのか

SSH接続時、秘密鍵そのものは送信されません。

認証の流れは次のようになります。

  1. クライアントが接続する
  2. サーバが認証データを送る
  3. クライアントが秘密鍵で署名する
  4. サーバが公開鍵で検証する
  5. 認証成功

この仕組みにより秘密鍵を送信せず認証できます。

秘密鍵が送信されない理由

SSH鍵認証の大きな特徴は秘密鍵をネットワーク上へ送らないことです。

パスワード認証の場合は認証情報を送信する必要があります。

しかし公開鍵認証では秘密鍵そのものは端末内だけで使用されます。

そのため盗聴されても秘密鍵は取得できません。

RSAとED25519の違い

SSHで利用される代表的な鍵方式は以下です。

  • RSA
  • ECDSA
  • ED25519

現在はED25519が推奨されています。

理由は以下の通りです。

  • 高速
  • 鍵サイズが小さい
  • 高い安全性
  • 管理しやすい

新規構築時はED25519を利用することが一般的です。

鍵ペアを作成する方法

Linuxではssh-keygenを利用します。

$ ssh-keygen -t ed25519

実行後に以下のファイルが作成されます。
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub

非常に簡単に鍵ペアを生成できます。

秘密鍵へパスフレーズを設定する

秘密鍵の安全性をさらに高めるためにパスフレーズを設定できます。

鍵作成時に以下が表示されます。

Enter passphrase:

設定すると秘密鍵を利用する際に追加認証が必要になります。

ノートPC紛失時などのリスクを軽減できます。

実務での利用例

公開鍵暗号方式はSSH以外にも広く利用されています。

  • SSHログイン
  • HTTPS通信
  • VPN接続
  • 電子署名
  • AWS認証
  • GitHub認証
  • クラウド証明書

現代のITインフラを支える重要な技術です。

よくある誤解

初心者が誤解しやすいポイントです。

  • 公開鍵でログインするわけではない
  • 秘密鍵は送信されない
  • 公開鍵は見られても問題ない
  • 秘密鍵が最も重要である

この4点を理解するだけでも公開鍵暗号方式への理解が深まります。

まとめ

公開鍵暗号方式は公開鍵と秘密鍵のペアを利用することで高い安全性を実現する技術です。

SSH鍵認証では公開鍵をサーバへ登録し、秘密鍵を利用者が保持することで安全な認証を実現しています。

秘密鍵は決して外部へ渡してはいけませんが、公開鍵はサーバへ登録して利用します。

SSHだけでなくHTTPSやVPNなどさまざまな技術の基礎となるため、Linux管理者であれば必ず理解しておきたい重要な知識です。