SSHとRSAキーの解説:キーペアの生成・使用・保護
SSHとRSAキーペアの実践ガイド — 仕組み、ブラウザでの生成方法、安全なサーバーアクセスや暗号化への活用方法を解説します。
公開鍵暗号方式は、セキュアなインターネット通信の基盤です — SSH接続、HTTPS、JWT署名、暗号化メールはすべてこの仕組みに依存しています。キーペアの仕組みを理解することで、より優れた開発者になり、セキュリティ意識の高いユーザーになれます。
基本概念:公開鍵と秘密鍵
キーペアは、数学的に紐付けられた2つのキーで構成されます:
- 秘密鍵 — 自分のマシンに保管します。絶対に共有しないでください。あなた自身のIDだと考えてください。
- 公開鍵 — 自由に共有できます。サーバー、GitHub、JWTの設定などに配置します。
数学的な仕組みは一方向にのみ機能します:公開鍵で暗号化されたデータは、対応する秘密鍵でのみ復号できます。また、秘密鍵で署名されたデータは公開鍵で検証できますが、秘密鍵自体は公開されません。
SSHキー:パスワード不要のサーバーアクセス
SSH(Secure Shell)は、リモートサーバーアクセスの標準プロトコルです。パスワード認証は機能しますが、パスワードは推測・フィッシング・漏洩のリスクがあります。SSHキー認証は根本的により強固です:
- クライアントが秘密鍵を使って暗号学的な証明を提示する
- サーバーが、インストールされた公開鍵に対して証明を検証する
- ネットワーク上にパスワードが流れない — 傍受されるものが存在しない
SSHキー認証のセットアップ:
# キーペアを生成する(Ed25519が現代の標準)
ssh-keygen -t ed25519 -C "your-email@example.com"
# 公開鍵をサーバーにコピーする
ssh-copy-id user@yourserver.com
# 接続 — パスワード不要
ssh user@yourserver.com
公開鍵はサーバーの ~/.ssh/authorized_keys に配置されます。秘密鍵は決して自分のマシンの外に出ません。
SSHにおけるEd25519とRSAの比較
Ed25519 が現在の推奨方式です:
- 小さなキーサイズ(256ビット)でRSA-4096と同等以上のセキュリティを実現
- 署名の生成と検証が高速
- 最新のSSHサーバーすべてでサポート済み
RSA は、特に古いシステムを使うエンタープライズ環境で今も広く使われています:
- 現在は2048ビットが許容できる最小サイズ
- 4096ビットは長期利用するキーに余裕をもたせられる
- キーサイズが大きいほど認証がわずかに遅くなる
ブラウザでSSHキーを生成するには、SSH Key Generator をご利用ください — Ed25519とECDSAに対応し、Web Crypto APIを使用します。キーの素材はブラウザの外に出ません。
RSAキー:暗号化と署名
RSAキーはSSH以外にも活用されます — TLS証明書、JWT署名、暗号化メール(PGP)、API認証などです。
RSAの主な用途:
JWT(JSON Web Tokens)とRS256:
- RSA秘密鍵でトークンに署名する
- クライアントが公開鍵で検証する
- HS256(対称方式)と異なり、検証者が署名シークレットを知る必要がない
コード署名:
- 秘密鍵でリリース成果物に署名する
- ユーザーが公開された公開鍵で署名を検証する
- 成果物があなたから提供されたものであり、改ざんされていないことを証明する
TLS/SSL証明書:
- 認証局(CA)が自身の秘密鍵であなたの公開鍵に署名する
- ブラウザはCAの公開鍵(ブラウザに組み込み済み)を使って検証する
PEM形式でRSAキーペアを生成するには、RSA Key Generator をご利用ください — 2048ビットまたは4096ビットを選択でき、すべてブラウザ内で処理されます。
PEM形式の解説
RSAキーとSSHキーは一般的にPEM(Privacy Enhanced Mail)形式で配布されます:
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7o4qne60...
-----END PRIVATE KEY-----
ヘッダーとフッターがキーの種類を示します。中間部分はbase64エンコードされたキーデータです。異なるヘッダーはキーの種類を示します:
BEGIN RSA PRIVATE KEY— 従来のPKCS#1形式BEGIN PRIVATE KEY— PKCS#8形式(現代のツールでより一般的)BEGIN PUBLIC KEY— PKCS#8形式の公開鍵BEGIN OPENSSH PRIVATE KEY— SSHキー向けのOpenSSH独自形式
秘密鍵の保護
秘密鍵のセキュリティは非常に重要です:
- gitにコミットしない —
*.pem、id_rsa、id_ed25519を.gitignoreに追加する - パスフレーズを使用する — 保存時にキーを暗号化します。ファイルを入手されても、パスフレーズなしでは使用できません。
- パーミッションを制限する — SSHは秘密鍵ファイルに
chmod 600を要求し、他者が読み取れるキーは使用を拒否します - 漏洩時はローテーションする — 新しいキーペアを生成し、古い公開鍵をすべてのサーバーから削除する
# 秘密鍵に正しいパーミッションを設定する
chmod 600 ~/.ssh/id_ed25519
キーフィンガープリント
フィンガープリントとは、公開鍵の短いハッシュ値で、鍵全体を比較せずに同一性を確認するために使います:
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# 出力例: 256 SHA256:abc123... your-email@example.com (ED25519)
初めてサーバーに接続する際、SSHはホストのフィンガープリントを表示して確認を求めます。承認する前に、別の手段(サーバープロバイダーのドキュメントなど)でこのフィンガープリントを検証してください。
まとめ
SSHとRSAキーペアは、パスワードよりも根本的に強固な認証と暗号化を提供します。SSHにはEd25519、署名と暗号化にはRSA-4096を使用し、秘密鍵は必ずパスフレーズで保護し、キーはローカルで生成してください — 秘密鍵をサードパーティのサービスに生成させてはいけません。