ssh
Secure Shell (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 6239 (Historic 8423) Suite B Cryptographic Suites for Secure Shell (SSH)
RFC 9212 Commercial National Security Algorithm (CNSA) Suite Cryptography for Secure Shell (SSH)
鍵
RFC 4716 SSH2 PUBLIC KEY
RFC 7468 PEM
主な実装は OpenSSH など
TeraTerm Pro ( + TTSSH )
PuTTY
鍵形式 (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 , 4252, 4253からヘッダフッタを除いて1行にしたものがOpenSSHの公開鍵っぽい形式
table:鍵と署名
アルゴリズム 鍵 参照 openssh
ssh-dss ssh-dss RFC 4253 DSA鍵
ssh-rsa ssh-rsa RFC 4253 <8.8 RSA鍵 RSASSA-PKCS1-v1_5 + sha1 sha1のため無効化
rsa-sha2-256 ssh-rsa RFC 8332 7.2<= RSA鍵 RSASSA-PKCS1-v1_5 + sha256
rsa-sha2-512 ssh-rsa RFC 8332 7.2<= RSA鍵 RSASSA-PKCS1-v1_5 + sha512
spki-sign-rsa spki-sign-rsa RFC 4253
pgp-sign-rsa pgp-sign-rsa RFC 4253, 2440
pgp-sign-dss pgp-sign-dss RFC 4253
null null RFC 4462
ecdsa-sha2-nistp256 ecdsa-sha2-nistp256 RFC 5656 5.7<= ECDSA
ecdsa-sha2-nistp386 ecdsa-sha2-nistp384 RFC 5656 5.7<= ECDSA
ecdsa-sha2-nistp521 ecdsa-sha2-nistp521 RFC 5656 5.7<= ECDSA
x509v3-ssh-dss x509v3-ssh-dss RFC 6187
x509v3-ssh-rsa x509v3-ssh-rsa RFC 6187
x509v3-rsa2048-sha256 x509v3-rsa2048-sha256 RFC 6187
x509v3-ecdsa-sha2-* x509v3-ecdsa-sha2-* RFC 6187
ssh-ed25519 ssh-ed25519 RFC 8709 6.5<= EdDSA Ed25519
ssh-ed448 ssh-ed448 RFC 8709 未 EdDSA Ed448
sk-ssh-ed25519@openssh.com
sk-ecdsa-sha2-nistp256@openssh.com
https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml Public Key Algorithm Names
ssh-rsa 鍵で ssh-rsa, rsa-sha2-256, rsa-sha2-512 署名に対応可能、OpenSSH最新版はssh-rsa(アルゴリズム)を無効化、サーバがssh-rsa のみのとき通信不可
OpenSSH 7.1p2 までは ssh-rsa(SHA-1) のみ対応でssh-rsa通信不可に。
6.5以降でEd25519対応しているので鍵を変更する
サーバ側を7.2以降(7.4を除く)にする
クライアント側の設定を変更してssh-rsaを有効化する
の3択
TeraTerm では 4.107と5以降で対応
OPENSSH PRIVATE KEY の PEM形式
ASN.1 ではなくOPENSSHによる適当なテキストバイナリ混合形式なので比較的読むのは簡単
公開鍵情報、暗号化された秘密鍵情報が格納されているようだ bcrypt などのパスワード+aes256-ctrなどの暗号で保護されている
公開鍵がパスワードなしで取り出せるのが旧式との違いか
RSA鍵(パスワード保護あり)の場合
識別情報 openssh-key-v1\0
あとは 4バイトデータ長 + データの組み合わせが多い
encode: aes256-ctr
kdf: bcrypt
salt?
count: 1
公開鍵
形式 ssh-rsa
e 65537
n 長めのデータ
秘密鍵 (aes256-ctrで暗号化されている? ので略)
https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key
公開鍵部分はそのまま公開鍵として利用可能 テキストで形式を記述後にスペースをはさんで base64化するだけ
旧形式
RSA PRIVATE KEY の PEM形式
opensslの旧形式と同じ 公開鍵部分も暗号化されているので不便なのかも 中身はPKCS #1 の形式
https://www.openssh.com/specs.html