3秒でわかる
公開鍵と対になり、本人だけが手元に持ち続ける鍵。SSH ログインや電子署名の生成に使われ、これが漏れると本人になりすまされます。
もう少し詳しく
どういうものか
秘密鍵は公開鍵暗号方式で使う 2 つの鍵のうち、所有者だけが手元に持ち続ける方の鍵です。ペアで生成され、公開鍵で暗号化したものは対応する秘密鍵でしか復号できず、秘密鍵で署名したものは対応する公開鍵でしか検証できません。この非対称性が、事前に共通のパスワードを共有していない相手とも安全にやり取りできる根拠になっています。
なぜ必要か
パスワード認証には、通信路で盗まれる、使い回される、総当たりで破られるという弱点があります。SSH の鍵認証では秘密鍵そのものはネットワークに流れません。サーバーから送られた乱数に秘密鍵で署名し、サーバーは登録済みの公開鍵で検証するだけなので、通信を傍受されても鍵は漏れません。HTTPS のサーバー証明書も同じ原理で「このドメインの持ち主である」ことを示しています。
具体例
鍵の中身そのものは長い乱数で、ペアの片方から他方を計算で求めることが現実的な時間では不可能である、という数学的な性質に安全性が依存しています。鍵長が短い古い方式(1024 ビットの RSA など)が非推奨になるのは、計算機の性能向上でこの前提が崩れてきたためです。現在は Ed25519 か 3072 ビット以上の RSA が選ばれます。
ssh-keygen -t ed25519 -C "me@example.com"
ls -l ~/.ssh
# id_ed25519 これが秘密鍵。外に出さない
# id_ed25519.pub これが公開鍵。サーバーに登録する
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
chmod 600 ~/.ssh/id_ed25519つまずきやすいところ
600(所有者のみ読み書き)にする.pub の付かない方を GitHub や Deploy 先に貼ってしまう事故が起きる。登録するのは必ず .pub の中身似た用語との違い
| 用語 | 持ち主 | 役割 |
|---|---|---|
| 秘密鍵 | 本人のみ | 復号と署名の生成 |
| 公開鍵 | 誰でも可 | 暗号化と署名の検証 |
| 共通鍵 | 通信する両者 | 同じ鍵で暗号化と復号 |
覚え方
鍵ペアは用途ごとに分けるのが基本です。個人の開発端末用、CI 用、本番デプロイ用を同じ鍵で兼ねると、CI の設定ファイルが漏れただけで本番サーバーまで開いてしまいます。用途ごとに分けておけば、疑わしい 1 本を無効化するだけで被害を止められます。
実印と印鑑証明の関係に近いです。実印(秘密鍵)は金庫にしまい、印鑑証明(公開鍵)は相手に渡して照合してもらいます。