前幾天 OpenSSH 8.4 釋出了:「Announce: OpenSSH 8.4 released」。
比較重要的改變是 ssh-rsa
預設變成停用,因為是使用 SHA-1 演算法的關係:
It is now possible[1] to perform chosen-prefix attacks against the SHA-1 algorithm for less than USD$50K. For this reason, we will be disabling the "ssh-rsa" public key signature algorithm by default in a near-future release.
官方給了三個方案:
- The RFC8332 RSA SHA-2 signature algorithms rsa-sha2-256/512. These algorithms have the advantage of using the same key type as "ssh-rsa" but use the safe SHA-2 hash algorithms. These have been supported since OpenSSH 7.2 and are already used by default if the client and server support them.
- The ssh-ed25519 signature algorithm. It has been supported in OpenSSH since release 6.5.
- The RFC5656 ECDSA algorithms: ecdsa-sha2-nistp256/384/521. These have been supported by OpenSSH since release 5.7.
掃了一下 ~/.ssh/known_hosts
,看起來目前大多都是 ssh-ed25519
了,還有少數還是 ssh-rsa
。
翻了一下 Ubuntu 這邊的版本,16.04 是 7.2p2,看起來目前有支援的版本都可以用這三個。
官方有提到可以在 command 上強制關閉 ssh-rsa
測試的方法:
ssh -oHostKeyAlgorithms=-ssh-rsa user@host
現在看起來比較麻煩的是 Dropbear 的部份,我自己之前是有包 PPA 來用 (2019.78),但看起來還是不夠新支援 ssh-ed25519
(要今年六月的 2020.79 才支援),所以也許要找時間來把 PPA 更新到 2020.80...
另外一種方法是走 ecdsa-sha2-nistp{256,384,521}
這些演算法,不過從名字就可以知道裡面演算法的由來,卡個 NIST 在那邊看起來就不太舒服,但還是寫一下方法好了:
先用 dropbearkey 產生對應的 ecdsa host key:
sudo dropbearkey -t ecdsa -f /etc/dropbear/dropbear_ecdsa_host_key -s 256
再來在 /etc/default/dropbear
裡面把 DROPBEAR_EXTRA_ARGS
加上對應的 ecdsa host key 資訊,這邊直接用 -r
是因為他可以重複指定,不會影響到其他的 host key 設定:
# any additional arguments for Dropbear DROPBEAR_EXTRA_ARGS="-r /etc/dropbear/dropbear_ecdsa_host_key"
然後重跑 dropbear 就可以了。
另外有興趣的人可以用 ssh -Q key
看 openssh client 支援的演算法。
為什麼 NIST 會不太舒服啊?
另外不太懂 ssh-rsa 和 RFC8332 RSA SHA-2 的區分。這個停用 ssh-rsa 是指產生的金鑰對中,id_rsa.pub 第一欄為 ssh-rsa 的金鑰到時會不能使用嗎?可是我的金鑰是 ssh-rsa ,但加了 -o HostKeyAlgorithms=-ssh-rsa 後仍能登入另一台 server ?
NIST 會有 NSA 的後門疑慮???XDD
所以大大,那是不是大概就 ed25519 可以選?
(基於 SHA-512/256 的 EdDSA 簽章算法,用 Curve25519 這組橢圓曲線的演算法。基於 bcrypt 的新 key 格式,長度固定為 256 bits,不需要調整長度。)