ssh
telnet に暗号化を加えたような感じのもの
X.509 証明は不要
ssh1 と ssh2 がある
ssh1は旧式
Core
RFC 4250 SSH プロトコル割り当て番号
RFC 4251 SSH アーキテクチャ
RFC 4252 SSH 認証プロトコル
RFC 4253 SSH Transport Layer Protocol
RFC 4254 SSH Connection Protocol
Extension
RFC 4255
鍵
RFC 4716 SSH2 PUBLIC KEY
鍵形式 (OpenSSH)
.ssh/id_xxx 秘密鍵
.ssh/id_xxx.pub 公開鍵
.ssh/known_hosts
.ssh/authorized_keys
RSA, ECDSA, EdDSA などがあり
openssh の鍵は比較的広範囲で使える
PuTTYは独自形式の鍵を採用しているが変換も可能
公開鍵をサーバ側の authorized_keys に追加することで、公開鍵認証が利用できる
サーバの鍵はクライアント側の known_hosts に保存されることで、同名サーバが異なるサーバに入れ代わっていたときに警告される
秘密鍵の形式
OPENSSH PRIVATE KEY形式 拡張子なし PEM
PuTTY形式 拡張子 .ppk
旧OpenSSL RSA PRIVATE KEY形式 拡張子なし? PEM
RFC 4716形式? (公開鍵?)
主にOPENSSHとPuTTY、2つの形式が利用される。パスワード保護が可能。
RFC 4716 , 4253からヘッダフッタを除いて1行にしたものがOpenSSHの公開鍵っぽい形式
OPENSSH PRIVATE KEY の PEM形式
ASN.1 ではなくOPENSSHによる適当なテキストバイナリ混合形式なので比較的読むのは簡単
公開鍵情報、暗号化された秘密鍵情報が格納されているようだ bcrypt などのパスワード+aes256-ctrなどの暗号で保護されている
公開鍵がパスワードなしで取り出せるのが旧式との違いか
RSA鍵(パスワード保護あり)の場合
識別情報 openssh-key-v1\0
あとは 4バイトデータ長 + データの組み合わせが多い
encode: aes256-ctr
salt?
count: 1
公開鍵
形式 ssh-rsa
e 65537
n 長めのデータ
秘密鍵 (aes256-ctrで暗号化されている? ので略)
公開鍵部分はそのまま公開鍵として利用可能 テキストで形式を記述後にスペースをはさんで base64化するだけ
旧形式
RSA PRIVATE KEY の PEM形式
opensslの旧形式と同じ 公開鍵部分も暗号化されているので不便なのかも 中身はPKCS #1 の形式