SAGA SITE

夢をプロトタイピング

SSH用の公開鍵の種類

SSHで使う公開鍵にいくつかの形式(フォーマット)があるようです。
公開鍵の仕組みや用語について、よく理解できていないのでメモ。

SSH用の公開鍵を作る

ことの発端はこれ。

sagasite.hatenablog.com

公開鍵の形式が2個あって、用途の違いがよく分かりませんでした。

PuTTYgen.exe

公開鍵のフォーマット

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/UnixSSHサーバーが一般的にサポートする形式です。
  • 特徴:
    • シンプルな1行の文字列。
    • OpenSSHが直接認識するため、~/.ssh/authorized_keysファイルにそのまま貼り付けて使えます。
    • 公開鍵コメントrsa-key-20241213)も末尾に含まれています。

公開鍵 タイプ2 (SSH2形式)

  • フォーマット:
    PEMライクな形式で、ヘッダーとフッター(BEGIN SSH2 PUBLIC KEYEND SSH2 PUBLIC KEY)で囲まれ、改行で区切られています。
  • 用途:
    主にSSH2プロトコルに準拠したサーバーやクライアントとの接続に使われます。Tectia SSHや古い商用SSH実装がこの形式を好む場合があります。
  • 特徴:
    • 公開鍵コメントComment: "rsa-key-20241213")がヘッダー部分に明記されている。
    • 行ごとに64文字の文字列で区切られており、人間が読みやすい(ただし、機械的には冗長)。

主な違い

  1. 互換性:

    • タイプ1はOpenSSHが標準的に使用する形式で、LinuxmacOSなど多くの環境で広くサポートされています。
    • タイプ2は特定の商用SSH実装や古いシステムとの互換性のために使用されます。
  2. フォーマットの見た目:

    • タイプ1はシンプルな1行形式。
    • タイプ2はヘッダーとフッターが付いた多行形式。
  3. 使用環境:

    • タイプ1は一般的なSSH環境向け。
    • タイプ2は商用SSH製品やWindowsでの特定のアプリケーション向け。

実用的なポイント

  • 一般的な用途: OpenSSH形式(タイプ1)が推奨されます。
  • 特殊なケース: SSH2形式(タイプ2)が必要な場合は、使用するソフトウェアやサーバーの要件に応じて選択します。

必要に応じて形式を変換することも可能です(例えば、PuTTYgenや他のSSHツールを使用)。

認証鍵とホスト鍵とは?

ChatGPTへの質問

公開鍵で、認証鍵とホスト鍵の違いを教えて下さい。

ChatGPTからの回答

SSHにおける認証鍵ホスト鍵は、どちらも公開鍵暗号方式を利用しますが、それぞれの役割と目的が異なります。以下に違いを説明します。


1. 認証鍵 (Authentication Key)

  • 目的:
    クライアントの認証に使用されます。
  • 説明:

    • SSH接続時に、クライアント(利用者)が自分を証明するために使う鍵ペアです。
    • クライアント側秘密鍵が保存され、サーバーには対応する公開鍵が登録されます。
    • 認証プロセスでは、サーバーがクライアントに秘密鍵を使った証明を要求し、それが成功すれば接続を許可します。
    • 主に~/.ssh/id_rsa秘密鍵)や~/.ssh/id_rsa.pub(公開鍵)の形で保存されます。
  • 使い方:

    • 公開鍵をサーバーの~/.ssh/authorized_keysに登録。
    • クライアントは秘密鍵を使ってサーバーに接続。
  • 役割:
    クライアントが「私がこの公開鍵の持ち主です」とサーバーに証明するためのもの。


2. ホスト鍵 (Host Key)

  • 目的:
    サーバーの認証に使用されます。
  • 説明:

    • SSHサーバーが自身を証明するために使う鍵ペアです。
    • サーバー側に秘密鍵が保存され、クライアントが公開鍵を利用してサーバーを検証します。
    • SSH初回接続時に「サーバーのホスト鍵の指紋」が提示され、クライアント側で信頼するか確認します。
    • 通常、サーバーの/etc/ssh/ディレクトリに保存されています(例: ssh_host_rsa_keyssh_host_rsa_key.pub)。
  • 使い方:

    • クライアントがサーバーに接続する際、サーバーはホスト鍵を使用して自身を証明。
    • クライアントは、サーバーの公開鍵を~/.ssh/known_hostsに記録し、次回以降の接続で照合。
  • 役割:
    サーバーが「私はこの公開鍵の持ち主です」とクライアントに証明するためのもの。


違いのまとめ

項目 認証鍵 ホスト鍵
目的 クライアントの認証 サーバーの認証
保存場所 クライアント側(秘密鍵)、サーバー側(公開鍵) サーバー側(秘密鍵)、クライアント側(公開鍵)
利用タイミング クライアントがサーバーに接続する際 サーバーがクライアントと接続する際
関連ファイル例 ~/.ssh/id_rsa (クライアント秘密鍵) /etc/ssh/ssh_host_rsa_key (サーバー秘密鍵)
役割 クライアントが「本人確認」するため サーバーが「本人確認」するため

ポイント

  1. 認証鍵は「クライアントの本人確認」、ホスト鍵は「サーバーの本人確認」を目的としています。
  2. 初回接続時にホスト鍵を確認することで、中間者攻撃(Man-in-the-Middle Attack)を防ぎます。
  3. 認証鍵は利用者ごとに作成されますが、ホスト鍵はサーバーごとに一意である必要があります。

もしホスト鍵が変わる(サーバー再構築などで)場合は、クライアント側で古いホスト鍵を~/.ssh/known_hostsから削除する必要があります。

参考サイト

SSHの公開鍵のフォーマットについて解説してあるページがありました。

qiita.com

zenn.dev

まとめ

いろいろあってややこしいですね。 一応、公開鍵の用途と形式について、こういう話もある程度に理解しておければ良いと思いました。




  • 図解即戦力 暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書 – 2021/9/24 光成 滋生 (著)

  • 今さら聞けない暗号技術&認証・認可 Web系エンジニア必須のセキュリティ基礎力をUP (Software Design別冊) – 2023/3/6 大竹 章裕 (著), 瀬戸口 聡 (著), 庄司 勝哉 (著), 光成 滋生 (著), 谷口 元紀 (著), くつなりょうすけ (著), 栃沢 直樹 (著), 渥美 淳一 (著), 宮川 晃一 (著), 富士榮 尚寛 (著), 川﨑 貴彦 (著)