Security

SSHとRSAキーの解説:キーペアの生成・使用・保護

SSHとRSAキーペアの実践ガイド — 仕組み、ブラウザでの生成方法、安全なサーバーアクセスや暗号化への活用方法を解説します。

7分で読めます

セキュリティキーのコンセプト

公開鍵暗号方式は、セキュアなインターネット通信の基盤です — SSH接続、HTTPS、JWT署名、暗号化メールはすべてこの仕組みに依存しています。キーペアの仕組みを理解することで、より優れた開発者になり、セキュリティ意識の高いユーザーになれます。

基本概念:公開鍵と秘密鍵

キーペアは、数学的に紐付けられた2つのキーで構成されます:

  • 秘密鍵 — 自分のマシンに保管します。絶対に共有しないでください。あなた自身のIDだと考えてください。
  • 公開鍵 — 自由に共有できます。サーバー、GitHub、JWTの設定などに配置します。

数学的な仕組みは一方向にのみ機能します:公開鍵で暗号化されたデータは、対応する秘密鍵でのみ復号できます。また、秘密鍵で署名されたデータは公開鍵で検証できますが、秘密鍵自体は公開されません。

SSHキー:パスワード不要のサーバーアクセス

SSH(Secure Shell)は、リモートサーバーアクセスの標準プロトコルです。パスワード認証は機能しますが、パスワードは推測・フィッシング・漏洩のリスクがあります。SSHキー認証は根本的により強固です:

  1. クライアントが秘密鍵を使って暗号学的な証明を提示する
  2. サーバーが、インストールされた公開鍵に対して証明を検証する
  3. ネットワーク上にパスワードが流れない — 傍受されるものが存在しない

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独自形式

秘密鍵の保護

秘密鍵のセキュリティは非常に重要です:

  1. gitにコミットしない*.pemid_rsaid_ed25519.gitignore に追加する
  2. パスフレーズを使用する — 保存時にキーを暗号化します。ファイルを入手されても、パスフレーズなしでは使用できません。
  3. パーミッションを制限する — SSHは秘密鍵ファイルに chmod 600 を要求し、他者が読み取れるキーは使用を拒否します
  4. 漏洩時はローテーションする — 新しいキーペアを生成し、古い公開鍵をすべてのサーバーから削除する
# 秘密鍵に正しいパーミッションを設定する
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を使用し、秘密鍵は必ずパスフレーズで保護し、キーはローカルで生成してください — 秘密鍵をサードパーティのサービスに生成させてはいけません。