SSHで使う公開鍵にいくつかの形式(フォーマット)があるようです。
公開鍵の仕組みや用語について、よく理解できていないのでメモ。
SSH用の公開鍵を作る
ことの発端はこれ。
公開鍵の形式が2個あって、用途の違いがよく分かりませんでした。
公開鍵のフォーマット
ChatGPTへの質問
PuTTYgen.exeでSSH用の公開鍵を作りました。
公開鍵には2つの形式がありますが、それぞれの違いは何ですか?
- 公開鍵 タイプ1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCSCiO1tA4U7PIHwtOw4MCTjFcW8mtW3jQfxqzFGaGf65x71J1XwEORPBuVd8DlMDDurj7NomcXXm2xQUAd5OjV9iAdnA3VXkpbYBwMIUNTKl+S2lm9xAySY1a7UIdWes04jb1zZw8tZTy8qJUwZaGdxtdClZZqZVWxrjF51+89VxE4YZj46sw6bRx7SBRwqiBYOdD+/fiLF0FYA3Mk1wvm9lr93ZwYrit1/rJ9cXCV3XEVnwF80z/vNJVF/yVV7gAtwl+soe9+iQNg0mNVVYbksM+Zs/ipFRjfegiY4F6RtdfC5NhJ73ctFVXERX9J71ZPs2R3pbiMgYRJJUAQXqpZ rsa-key-20241213
- 公開鍵 タイプ2
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20241213"
AAAAB3NzaC1yc2EAAAADAQABAAABAQCSCiO1tA4U7PIHwtOw4MCTjFcW8mtW3jQf
xqzFGaGf65x71J1XwEORPBuVd8DlMDDurj7NomcXXm2xQUAd5OjV9iAdnA3VXkpb
YBwMIUNTKl+S2lm9xAySY1a7UIdWes04jb1zZw8tZTy8qJUwZaGdxtdClZZqZVWx
rjF51+89VxE4YZj46sw6bRx7SBRwqiBYOdD+/fiLF0FYA3Mk1wvm9lr93ZwYrit1
/rJ9cXCV3XEVnwF80z/vNJVF/yVV7gAtwl+soe9+iQNg0mNVVYbksM+Zs/ipFRjf
egiY4F6RtdfC5NhJ73ctFVXERX9J71ZPs2R3pbiMgYRJJUAQXqpZ
---- END SSH2 PUBLIC KEY ----
ChatGPTからの回答
PuTTYgenで作成される公開鍵には、以下の2つの形式があります。それぞれ異なる目的や互換性を持っています。
公開鍵 タイプ1 (OpenSSH形式)
- フォーマット:
ssh-rsa
で始まる1行形式。 - 用途:
主にOpenSSHを使用するサーバやクライアントとの接続に使われます。この形式は、Linux/UnixのSSHサーバーが一般的にサポートする形式です。 - 特徴:
- シンプルな1行の文字列。
- OpenSSHが直接認識するため、
~/.ssh/authorized_keys
ファイルにそのまま貼り付けて使えます。 - 公開鍵コメント(
rsa-key-20241213
)も末尾に含まれています。
公開鍵 タイプ2 (SSH2形式)
- フォーマット:
PEMライクな形式で、ヘッダーとフッター(BEGIN SSH2 PUBLIC KEY
とEND SSH2 PUBLIC KEY
)で囲まれ、改行で区切られています。 - 用途:
主にSSH2プロトコルに準拠したサーバーやクライアントとの接続に使われます。Tectia SSHや古い商用SSH実装がこの形式を好む場合があります。 - 特徴:
主な違い
互換性:
フォーマットの見た目:
- タイプ1はシンプルな1行形式。
- タイプ2はヘッダーとフッターが付いた多行形式。
使用環境:
実用的なポイント
- 一般的な用途: OpenSSH形式(タイプ1)が推奨されます。
- 特殊なケース: SSH2形式(タイプ2)が必要な場合は、使用するソフトウェアやサーバーの要件に応じて選択します。
必要に応じて形式を変換することも可能です(例えば、PuTTYgenや他のSSHツールを使用)。
認証鍵とホスト鍵とは?
ChatGPTへの質問
公開鍵で、認証鍵とホスト鍵の違いを教えて下さい。
ChatGPTからの回答
SSHにおける認証鍵とホスト鍵は、どちらも公開鍵暗号方式を利用しますが、それぞれの役割と目的が異なります。以下に違いを説明します。
1. 認証鍵 (Authentication Key)
- 目的:
クライアントの認証に使用されます。 説明:
使い方:
- 公開鍵をサーバーの
~/.ssh/authorized_keys
に登録。 - クライアントは秘密鍵を使ってサーバーに接続。
- 公開鍵をサーバーの
役割:
クライアントが「私がこの公開鍵の持ち主です」とサーバーに証明するためのもの。
2. ホスト鍵 (Host Key)
- 目的:
サーバーの認証に使用されます。 説明:
使い方:
- クライアントがサーバーに接続する際、サーバーはホスト鍵を使用して自身を証明。
- クライアントは、サーバーの公開鍵を
~/.ssh/known_hosts
に記録し、次回以降の接続で照合。
役割:
サーバーが「私はこの公開鍵の持ち主です」とクライアントに証明するためのもの。
違いのまとめ
項目 | 認証鍵 | ホスト鍵 |
---|---|---|
目的 | クライアントの認証 | サーバーの認証 |
保存場所 | クライアント側(秘密鍵)、サーバー側(公開鍵) | サーバー側(秘密鍵)、クライアント側(公開鍵) |
利用タイミング | クライアントがサーバーに接続する際 | サーバーがクライアントと接続する際 |
関連ファイル例 | ~/.ssh/id_rsa (クライアント秘密鍵) |
/etc/ssh/ssh_host_rsa_key (サーバー秘密鍵) |
役割 | クライアントが「本人確認」するため | サーバーが「本人確認」するため |
ポイント
- 認証鍵は「クライアントの本人確認」、ホスト鍵は「サーバーの本人確認」を目的としています。
- 初回接続時にホスト鍵を確認することで、中間者攻撃(Man-in-the-Middle Attack)を防ぎます。
- 認証鍵は利用者ごとに作成されますが、ホスト鍵はサーバーごとに一意である必要があります。
もしホスト鍵が変わる(サーバー再構築などで)場合は、クライアント側で古いホスト鍵を~/.ssh/known_hosts
から削除する必要があります。
参考サイト
SSHの公開鍵のフォーマットについて解説してあるページがありました。
まとめ
いろいろあってややこしいですね。 一応、公開鍵の用途と形式について、こういう話もある程度に理解しておければ良いと思いました。
- 図解即戦力 暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書 – 2021/9/24 光成 滋生 (著)
- 今さら聞けない暗号技術&認証・認可 Web系エンジニア必須のセキュリティ基礎力をUP (Software Design別冊) – 2023/3/6 大竹 章裕 (著), 瀬戸口 聡 (著), 庄司 勝哉 (著), 光成 滋生 (著), 谷口 元紀 (著), くつなりょうすけ (著), 栃沢 直樹 (著), 渥美 淳一 (著), 宮川 晃一 (著), 富士榮 尚寛 (著), 川﨑 貴彦 (著)