選擇 SSH key 的加密演算法

·

0 min read

ssh-keygenman page 說明中有一個 -t 參數,可以設定要產生的 ssh key type。有以下五種不同 key type 可以選擇:

  • dsa

    已被認為是一個不安全的演算法,不再建議使用,由於存在安全性缺陷,OpenSSH 7.0 已停止支援 DSA 演算法。

  • ecdsa

    在 OpenSSH 5.7 開始支援 ECDSA key type,有 256, 384, 521 bits 三種 key 長度可以選擇,如果指定不是這三種長度,會發生錯誤。從政治上考量,ecdsa 所使用的橢圓曲線是由 NIST 所選擇的,有被 NSA 植入後門的疑慮。另外由於規格複雜,技術上不容易被正確完整的實作。該兩點疑慮在 libssh curve25519 introduction 有說明。

  • ed25519

    以使用 SHA-512/256EdDSA 簽章算法方案,並選用 Curve25519 這組橢圓曲線的演算法。基於 bcrypt 的新 key 格式,長度固定為 256 bits,不需要調整長度。是最新的演算法,在 OpenSSH 6.5 後才支援,在稍微舊版的 ssh client/server 上可能會遇到無法支援的狀況,相容性最低。安全性和效能最佳,沒有可能造成安全性漏洞而寫死在程式中的常數,而且能抵抗 side channel attack。

  • rsa

    SSH 協定 version 2 使用的 RSA 算法,為目前 ssh-keygen 預設使用的 key type,是目前各家 SSH server/client 實作中相容性最佳的演算法。安全性強度取決於 key 長度,可以用 -b 參數指定長度,預設長度是 2,048 bits,可設定長度範圍從 1,024 ~ 16,384 bits。key 長度 1,024 bits 已被證明安全性強度不足。一般來說預設的 2,048 bits 強度已足夠安全,但還是建議使用長度更長的 key 如 3,072 或 4,096 bits。

  • rsa1

    SSH 協定 version 1 使用的 RSA 算法,在版本比較老舊的作業系統上只能使用 ssh protocol version 1。除非是為了在極有歷史的系統上使用,否則現在不會使用到這個 key type。

分類

  • DSA 和 RSA 都是基於對兩個極大質數乘積作質因數分解的困難度,細節可見 practical difficulty
  • ECDSA, ED25519 則是基於橢圓曲線的離散對數問題。

如何選擇

如果有要和較舊的作業系統互動的需求,建議選用 RSA key type, 並指定至少 3,072 bits 長度的 key。

如果要連線的 server 都是比較新的系統,建議 key type 直接選用 ED25519 。GitHubGitLab 都能支援設定 ED25519 key type public key。

參考資源