公開鍵認証
Public Key Authentication
概要(サマリー)
公開鍵認証とは、公開鍵と秘密鍵という2つの鍵を使い、パスワードを直接送らずに本人確認を行う認証方式のことである。
SSHでサーバーへ接続するときによく使われる。サーバー側には「公開鍵」を登録しておき、自分のPC側には「秘密鍵」を安全に保管する。そして接続時に、その秘密鍵を持っている本人かどうかを確認する。初心者向けには、「サーバーに照合用の鍵情報を登録しておき、自分だけが持つ秘密鍵で本人確認する仕組み」と考えるとわかりやすい。
詳細解説
公開鍵認証は「鍵のペア」で本人確認する仕組みである
公開鍵認証では、1つのパスワードではなく、2つで1組の鍵を使う。
- Public Key (公開鍵)
サーバーなど、相手側に登録してよい鍵 - Private Key (秘密鍵)
自分だけが持っておく秘密の鍵
この2つはペアになっている。
公開鍵だけを見ても、秘密鍵を簡単に作り出すことはできない。
そのため、公開鍵はサーバー側へ登録し、秘密鍵は自分のPCなどに安全に保管する。
SSH接続では、サーバーが「この公開鍵に対応する秘密鍵を本当に持っていますか?」と確認する。
接続する側が正しい秘密鍵を持っていれば、本人として認証される。
実際には、秘密鍵そのものをサーバーへ送るのではなく、秘密鍵で作った署名などをサーバーが公開鍵で確認する。
なぜパスワードではなく鍵を使うのか
パスワード認証は分かりやすいが、弱いパスワードを使ったり、使い回したり、入力中に盗まれたりするリスクがある。
また、サーバーがインターネット上に公開されている場合、パスワード総当たり攻撃の対象になることもある。
公開鍵認証では、秘密鍵そのものをネットワーク上に送るわけではない。
そのため、単純なパスワード認証よりも安全に運用しやすい。
もちろん、秘密鍵を盗まれれば危険である。
しかし、適切に管理すれば、SSH接続などでは非常に有効な認証方式になる。
SSHでよく使われる理由
公開鍵認証は、特に SSH とセットでよく使われる。
SSHは、サーバーへ安全に遠隔接続してコマンド操作するための仕組みである。
そのSSH接続時の本人確認として、公開鍵認証がよく使われる。
流れをざっくり書くと、次のようになる。
- 自分のPCで公開鍵と秘密鍵のペアを作る
- 公開鍵をサーバーに登録する
- 秘密鍵は自分のPCに保管する
- SSH接続時に秘密鍵を使って本人確認する
- サーバーが正しい鍵だと判断すればログインできる
つまり、公開鍵認証はSSHの安全性を高めるための重要な仕組みである。
公開鍵と秘密鍵の違い
公開鍵認証で最も大事なのは、公開鍵と秘密鍵の扱いを間違えないことである。
Public Key(公開鍵)
公開鍵は、サーバーへ登録する側の鍵である。
名前に「公開」とある通り、秘密鍵ほど厳重に隠す必要はない。
SSHでは、公開鍵の中身をサーバーの authorized_keys などに登録することがある。
Private Key(秘密鍵)
秘密鍵は、自分だけが持っておく鍵である。
これは絶対に他人へ渡してはいけない。
秘密鍵が漏れると、その鍵を使ってサーバーへ接続される危険がある。
そのため、秘密鍵は安全な場所に置き、必要に応じてパスフレーズで保護する。
初心者向けには、次のように覚えるとよい。
- Public Key = 相手に渡してよい鍵
- Private Key = 自分だけが守る鍵
パスフレーズとは何か
秘密鍵には、さらにパスフレーズを設定できることがある。
パスフレーズとは、秘密鍵を使うときに必要になる追加の合言葉のようなものである。
もし秘密鍵ファイルが盗まれても、パスフレーズが設定されていれば、すぐに悪用されにくくなる。
つまりパスフレーズは、秘密鍵にかける追加ロックのような役割を持つ。
ただし、パスフレーズを忘れると自分でも鍵を使えなくなることがある。
安全な場所に管理することが大切である。
Password Authentication(パスワード認証)との違い
公開鍵認証と混同しやすいのが Password Authentication(パスワード認証) である。
- Password Authentication
ユーザー名とパスワードで本人確認する - Public Key Authentication
公開鍵と秘密鍵のペアで本人確認する
パスワード認証では、パスワードそのものが本人確認の中心になる。
公開鍵認証では、秘密鍵を持っていることが本人確認の中心になる。
SSHでは、セキュリティを高めるためにパスワードログインを無効化し、公開鍵認証だけを許可する設定にすることもある。
ただし、設定を間違えると自分もログインできなくなるため、変更時は慎重に行う必要がある。
Two-Factor Authentication(二要素認証) との違い
Two-Factor Authentication は、日本語では二要素認証と呼ばれる。
公開鍵認証とは目的が近い部分もあるが、同じものではない。
- Public Key Authentication
鍵のペアを使って本人確認する方式 - Two-Factor Authentication
パスワードに加えて、スマホ認証コードや認証アプリなど別要素を使う方式
公開鍵認証は「鍵を持っていること」で確認する。
二要素認証は、「知っているもの」「持っているもの」「本人の特徴」など、複数の要素を組み合わせる考え方である。
SSHでも、公開鍵認証に加えて二要素認証を組み合わせる運用が行われることがある。
Encryption との関係
公開鍵認証は、公開鍵暗号の考え方と関係している。
そのため Encryption と混同されやすい。
- Encryption
データを読めない形に変換して守ること - Public Key Authentication(公開鍵認証)
公開鍵と秘密鍵を使って本人確認すること
公開鍵認証でも暗号技術は使われるが、目的は「本人確認」である。
一方、暗号化は「データの中身を守ること」が主な目的である。
つまり、公開鍵認証は暗号技術を利用した認証方式であり、暗号化そのものとは役割が違う。
代表的なファイル名
SSHの公開鍵認証では、鍵ファイルに次のような名前が使われることがある。
id_rsa
id_rsa.pub
id_ed25519
id_ed25519.pub
一般に、.pub が付いているものが公開鍵である。
.pub が付いていないものが秘密鍵である。
たとえば、
id_ed25519.pub= 公開鍵id_ed25519= 秘密鍵
という関係である。
ここを間違えると危険である。
サーバーやGitHubなどに登録するのは基本的に .pub が付いた公開鍵であり、秘密鍵を貼り付けてはいけない。
GitHubでも使われる
公開鍵認証は、サーバー接続だけでなく、GitHubなどの開発サービスでも使われる。
たとえば、GitHubにSSH公開鍵を登録しておくと、ローカルPCからGitHubへSSH経由で接続できる。
これにより、毎回パスワードを入力せずに git pull や git push を行いやすくなる。
この場合も考え方は同じである。
- GitHubに公開鍵を登録する
- 自分のPCに秘密鍵を置く
- GitHubが秘密鍵を持っている本人か確認する
つまり公開鍵認証は、AIコーディングやGit運用でもかなり身近な仕組みである。
公開鍵認証でよくあるトラブル
公開鍵認証では、設定の小さな違いで接続できなくなることがある。
公開鍵を登録していない
サーバー側に公開鍵が登録されていなければ、秘密鍵を持っていても認証できない。
秘密鍵の指定が違う
複数の鍵を持っている場合、接続時に違う秘密鍵を使っていることがある。
ファイル権限が緩すぎる
SSHでは、秘密鍵ファイルの権限が緩すぎると安全でないと判断され、使用を拒否されることがある。
ユーザー名やホスト名が違う
鍵が正しくても、接続先のユーザー名やサーバーが違えばログインできない。
パスフレーズを忘れた
秘密鍵にパスフレーズを設定している場合、それを忘れると鍵を使えなくなることがある。
秘密鍵の扱いで注意すること
公開鍵認証で最も注意すべきなのは、秘密鍵の管理である。
秘密鍵を共有しない
秘密鍵は自分だけが持つものであり、チャット、メール、GitHub、公開リポジトリなどに貼ってはいけない。
公開リポジトリに入れない
.ssh フォルダや秘密鍵ファイルを誤ってGit管理に含めると非常に危険である。
.gitignore などで除外し、そもそもプロジェクトフォルダ内に秘密鍵を置かないようにしたほうがよい。
バックアップを安全に保管する
秘密鍵を失うとログインできなくなることがある。
ただし、バックアップも安全な場所に保管する必要がある。
不要になった鍵は削除・無効化する
古いPCや退職者、使わなくなった環境の公開鍵は、サーバーやサービス側から削除することが望ましい。
AI時代に公開鍵認証の理解が重要な理由
AIにサーバー作業やGit操作を手伝わせると、公開鍵認証はよく出てくる。
たとえば、次のような場面である。
このとき、公開鍵と秘密鍵の違いを理解していないと、秘密鍵を誤って貼り付けたり、サーバーに間違った鍵を登録したりする危険がある。
AIに相談するときも、秘密鍵の中身をそのまま見せてはいけない。
見せる必要があるとしても、公開鍵やエラーメッセージなど、安全な範囲に絞るべきである。
つまり、公開鍵認証は単なる接続設定ではなく、AI時代の開発・サーバー運用における重要なセキュリティ知識である。
初心者向けの理解の仕方
最初は、公開鍵認証を「サーバーに公開鍵を登録し、自分だけが持つ秘密鍵で本人確認する仕組み」と覚えれば十分である。
そして、次の3点を必ず押さえておきたい。
- 公開鍵は相手に登録してよい
- 秘密鍵は絶対に他人へ渡さない
- SSHやGitHub接続でよく使われる
この感覚があれば、SSH接続、SFTP接続、GitHubのSSH設定、サーバー管理の説明がかなり読みやすくなる。
よくある勘違い
公開鍵認証は名前だけ覚えれば十分?
名前だけでは不十分である。
実際の開発では、どんな場面で使われ、何と混同しやすいかまで理解しておくと判断しやすい。
公開鍵認証はAIに任せれば理解しなくてよい?
そうではない。
AIは説明やコードを出せるが、最終的にその内容が正しいか、今の目的に合っているかを確認するのは人間である。
公開鍵認証は単独で覚えればよい?
単独ではなく、関連する用語や実際の作業の流れと一緒に覚えると理解しやすい。
用語同士のつながりを意識すると、AIへの質問やエラー調査もしやすくなる。
まとめ
- 公開鍵認証は、公開鍵と秘密鍵という2つの鍵を使い、パスワードを直接送らずに本人確認を行う認証方式のこと。
- 関連する用語や実際の作業場面と一緒に理解すると、使いどころを判断しやすい。
- AIコーディングでは、用語の意味を理解しているほど、AIの説明や生成コードを確認しやすくなる。
- 迷ったときは、エラー内容、目的、前提条件を整理してAIに聞くとよい。
より詳しくAIに聞いてみよう
- 公開鍵認証とは何かを、中学生でもわかるように具体例つきで説明してください。
- Public Key と Private Key の違いを、初心者向けに整理してください。
- SSHで公開鍵認証を使う流れを、やさしく説明してください。
- GitHubにSSH公開鍵を登録するときの注意点を教えてください。
- AIにSSH鍵まわりのエラーを相談するとき、見せてよい情報と見せてはいけない情報を整理してください。