Skip to content
Chris Yuan | Blog
Go back

選擇 SSH key 的加密演算法

Updated:
Edit page

Table of contents

Open Table of contents

前言

ssh-keygenman page 說明中有一個 -t 參數,可以設定要產生的 SSH key type。本文比較各種演算法的安全性與適用情境,並整理近年的重要變化。

演算法比較

DSA

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

參考:Digital Signature Algorithm

ECDSA

在 OpenSSH 5.7 開始支援,有 256、384、521 bits 三種 key 長度可以選擇,指定其他長度會報錯。

安全疑慮:

參考:Elliptic Curve Digital Signature Algorithm

Ed25519(推薦)

使用 SHA-512/256EdDSA 簽章方案,選用 Curve25519 橢圓曲線。在 OpenSSH 6.5(2014)後支援。

優勢:

唯一限制是在極舊的 SSH client/server 上可能不支援。但截至目前,主流平台(GitHub、GitLab、各大雲端服務)皆已全面支援。

參考:Ed25519: high-speed high-security signatures

RSA

SSH 協定 version 2 使用的 RSA 算法,曾長期是 ssh-keygen 預設的 key type,相容性最佳。

安全性取決於 key 長度,可用 -b 參數指定,範圍 1,024 ~ 16,384 bits:

參考:RSA cryptosystem

RSA1

SSH 協定 version 1 專用,僅在極老舊的系統上才會使用。OpenSSH 7.6(2017)已完全移除 SSH v1 支援,現在已無使用場景。

分類

以底層數學問題區分:

近年重要變化

OpenSSH 8.2 — FIDO/U2F 硬體金鑰支援(2020)

新增兩種 key type,支援 FIDO/U2F 硬體安全金鑰(如 YubiKey):

產生方式:

ssh-keygen -t ed25519-sk

使用時必須插入實體金鑰並觸碰確認,即使私鑰被竊取,攻擊者沒有實體金鑰也無法使用。適合高安全需求的伺服器管理場景。

OpenSSH 8.8 — 棄用 ssh-rsa 簽章(2021)

這是影響最大的變更。 OpenSSH 8.8 預設停用使用 SHA-1 的 ssh-rsa 簽章演算法,因為 SHA-1 已被證實可被碰撞攻擊破解。

影響範圍:

解法:

Host old-server
    HostkeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa

注意:RSA key 本身沒有被棄用,只是簽章從 SHA-1(ssh-rsa)改為 SHA-256/512(rsa-sha2-256rsa-sha2-512)。如果伺服器端支援 OpenSSH 7.2+,現有的 RSA key 仍可正常使用。

OpenSSH 9.5 — 後量子密碼學的前哨(2023)

OpenSSH 9.0 起,預設的金鑰交換方法改用混合式方案,結合傳統的 X25519 與後量子的 Streamlined NTRU Prime,以防禦未來量子電腦的威脅。

OpenSSH 9.5 進一步引入 mlkem768x25519-sha256 金鑰交換方法(基於 NIST 標準化的 ML-KEM),作為後量子過渡的準備。

這僅影響連線時的金鑰交換過程,不影響使用者的 SSH key 選擇。但預示著未來可能出現後量子的 SSH key type。

如何選擇

一般用途(推薦)

直接選用 Ed25519,安全、快速、key 短:

ssh-keygen -t ed25519 -C "[email protected]"

GitHubGitLab 及所有主流雲端服務皆已支援。

需要相容舊系統

選用 RSA 4096 bits

ssh-keygen -t rsa -b 4096 -C "[email protected]"

高安全需求(搭配硬體金鑰)

選用 Ed25519-SK,需搭配 FIDO2 硬體金鑰:

ssh-keygen -t ed25519-sk -C "[email protected]"

速查表

演算法推薦程度Key 長度支援版本備註
Ed25519最推薦256 bits(固定)OpenSSH 6.5+安全、快速、key 短
RSA次選3,072-4,096 bits全版本相容性最佳
ECDSA不建議256/384/521 bitsOpenSSH 5.7+NIST 曲線有疑慮
Ed25519-SK高安全256 bits(固定)OpenSSH 8.2+需硬體金鑰
DSA禁用1,024 bits(固定)已停止支援OpenSSH 7.0 移除
RSA1禁用已停止支援SSH v1 已淘汰

參考資源


Edit page
Share this post on:

Previous Post
mDNS 全解析:從 .local 到 Matter 智慧家庭
Next Post
教父經濟學:從 An Offer You Can't Refuse 看川普政府的國際貿易談判術