SSH主流加密算法全解析
引言
SSH是一种在应用层运行的加密网络协议,最初于1996年提出,作为Telnet等不安全远程通信协议的替代方案。其当前主流版本SSH v2于2006年引入,至今仍是主要使用的协议版本,相较于早期版本提供了更健壮的加密算法和更丰富的功能。SSH的核心安全机制涉及多个密码学算法,按功能可分为四大类:密钥交换算法、主机密钥算法、用户认证算法和对称加密算法。SSH协议允许对这四个环节的算法进行独立选择和协商。
本文将系统介绍当前SSH中使用的主流加密算法,分析其原理、特点及适用场景,并给出安全实践建议。
一、密钥交换算法
密钥交换是SSH连接建立的第一个密码学步骤。在TCP连接建立后,客户端与服务器通过SSH_MSG_KEXINIT消息协商会话密钥,使用Diffie-Hellman(DH)或其椭圆曲线变体ECDH来完成密钥交换。
1.1 ECDH(椭圆曲线Diffie-Hellman)
ECDH是当前最推荐的密钥交换方案。它基于椭圆曲线密码学,在等效安全强度下,密钥长度远短于传统DH,计算性能也显著更优。OpenSSH文档明确指出,256位曲线域下的ECDH是客户端和服务器都支持时的首选密钥协商算法。
常用的ECDH曲线及其安全强度如下:
| 曲线名称 | 估计安全强度 |
|---|---|
| nistp256 | 128位 |
| nistp384 | 192位 |
| nistp521 | 512位 |
| Curve25519 | 128位 |
| Curve448 | 224位 |
其中,Curve25519(对应算法名curve25519-sha256)因其高安全性、高性能以及不依赖NIST标准化过程而广受推荐,IETF建议实现者优先支持。
1.2 传统DH密钥交换
传统DH使用有限域密码学,基于大素数模运算。常用的MODP群组包括:
- group14(2048位素数) :约112位安全强度,IETF将
diffie-hellman-group14-sha256列为MUST级别 - group16(4096位素数) :约152位安全强度,建议优先使用
- group18(8192位素数) :约200位安全强度
1.3 SHA-1密钥交换的弃用
所有使用SHA-1哈希的密钥交换方法都应被弃用和淘汰。diffie-hellman-group1-sha1仅提供约80位安全强度,已过于薄弱;diffie-hellman-group14-sha1虽稍强,但IETF也建议逐步淘汰,仅保留用于与遗留IoT设备的互操作性。
此外,OpenSSH 9.9已引入基于ML-KEM(FIPS 203模块格密钥封装机制)与X25519 ECDH的混合后量子密钥交换算法mlkem768x25519-sha256,标志着SSH密钥交换向后量子时代迈出了重要一步。
二、主机密钥与用户认证算法(非对称加密)
SSH使用非对称加密算法实现两大功能:主机密钥用于验证服务器身份,用户公钥认证用于验证客户端身份。截至2025年,最广泛采用的SSH认证算法为RSA、ECDSA和EdDSA(Ed25519),而DSA已在所有现代SSH实现中被弃用和禁用。
2.1 RSA
RSA是最早且兼容性最广的SSH密钥算法,基于大整数分解的数学难题。作为历史标准,RSA至今仍被广泛部署。推荐的最小密钥长度为2048位,安全强度约为112位;3072位可提供128位安全强度。SSH中RSA的签名模式已从SHA-1升级为rsa-sha2-256和rsa-sha2-512,这两种模式分别使用SHA-256和SHA-512哈希算法,是当前RSA密钥的推荐签名方案。
RSA的主要缺点是计算成本随密钥大小呈立方增长,RSA-4096的签名速度明显慢于RSA-2048,且达到128位安全强度需要3072位密钥,远长于ECC所需的256位。因此,在性能敏感场景中,RSA逐渐让位于椭圆曲线方案。
2.2 ECDSA
ECDSA基于椭圆曲线数字签名算法,在同等安全强度下密钥长度远短于RSA,计算速度也更快。常用的曲线包括NIST P-256、P-384和P-521,分别对应约128位、192位和256位安全强度。
ECDSA的主要顾虑在于NIST P曲线标准化过程中存在不透明性——部分密码学家对其可能含有NSA植入的后门参数表示担忧。在FIPS合规场景中,ECDSA仍是推荐选择;但在非合规环境中,Ed25519通常被视为更优方案。
2.3 Ed25519(EdDSA)
Ed25519是基于Curve25519的EdDSA签名方案,提供约128位安全强度,在SSH实践中几乎等同于EdDSA的代称。OpenSSH文档指出,Ed25519是一种比ECDSA和DSA提供更好安全性且性能良好的椭圆曲线签名方案,可用于用户密钥和主机密钥。
Ed25519的核心优势包括:
- 安全性:不依赖NIST曲线参数,设计过程透明
- 性能:签名和验证速度快
- 密钥长度:仅32字节公钥,远短于RSA
- 不兼容FIPS:由于不基于NIST标准曲线,在需要FIPS合规的环境中不可使用
libssh2等SSH库已将Ed25519的主机密钥优先级置于ECDSA之上,行业趋势明确指向Ed25519作为现代默认选择。
2.4 DSA(已弃用)
DSA是SSHv2协议中唯一被规定为强制实现的算法,之所以如此,主要是因为SSHv2协议制定时替代算法受专利限制。然而,DSA本质上存在缺陷——其私钥被限制为160位,使用SHA-1摘要,估计安全强度仅为80位。OpenSSH自2015年起默认禁用DSA密钥,并于2025年初完全移除了DSA签名算法支持。
三、对称加密算法
会话密钥协商完成后,SSH使用对称加密算法保护实际的数据传输。对称加密涉及Cipher(加密算法)和MAC(消息认证码)两个组件。当前主流SSH实现支持以下加密算法。
3.1 AES系列
AES(高级加密标准)是目前使用最广泛的对称加密算法,具有128位分组大小,支持128、192和256位密钥长度。AES本身是分组密码,但在SSH中以两种模式使用:
AES-GCM(Galois/Counter Mode) :这是AEAD(带关联数据的认证加密)模式,同时提供加密和完整性校验,无需额外MAC,性能优异。推荐使用的算法包括aes256-gcm@openssh.com和aes128-gcm@openssh.com,AES-GCM提供可证明的IND-CCA安全性,且开销极小。
AES-CTR(Counter Mode) :将AES置于可证明安全的流密码配置中,需配合强MAC使用。RFC 4344将AES-CTR标准化用于SSH,推荐算法包括aes256-ctr、aes192-ctr和aes128-ctr。
在现代Intel和AMD CPU中,AES-NI指令集显著加速了AES运算,使每核心加密速度可超过3,500 MB/s。
3.2 ChaCha20-Poly1305
ChaCha20是一种流密码,与Poly1305认证器配对形成AEAD结构。chacha20-poly1305@openssh.com是OpenSSH定义的实例化算法,具有安全性证明,被列为安全推荐算法。
ChaCha20在纯软件实现中通常比AES更快,尤其在缺乏AES硬件加速指令的移动设备和低功耗IoT硬件上,速度可达AES的约3倍。然而,在具备AES-NI的平台上,AES的性能可能反超ChaCha20。例如,IBM Power8及更高版本系统内置AES加速功能,使用ChaCha20反而可能导致性能下降。
3.3 已弃用的对称加密算法
以下算法因安全缺陷已被弃用:
- 3DES-CBC:64位分组大小,易受Sweet32生日攻击,不应用于长会话
- Blowfish-CBC:同样为64位分组,存在相同的Sweet32漏洞
- CAST128-CBC:64位分组,同类问题
- RC4(Arcfour) :流密码存在严重的偏差攻击,可在实践中恢复密钥流字节
四、消息认证码(MAC)算法
MAC算法确保传输数据的完整性。推荐的MAC算法包括:
hmac-sha2-256和hmac-sha2-512:基于SHA-2家族的HMAC,安全且广泛支持hmac-sha2-256-etm@openssh.com和hmac-sha2-512-etm@openssh.com:Encrypt-then-MAC版本,在加密后计算MAC,被认为更安全
MD5和SHA-1的HMAC已不再推荐使用。
五、安全实践建议
基于以上分析,给出SSH加密算法的配置建议:
密钥交换:优先使用curve25519-sha256或ecdh-sha2-nistp256;在需要更高级别安全强度时使用ecdh-sha2-nistp384;传统DH至少使用diffie-hellman-group16-sha512。禁用所有SHA-1密钥交换方法。
主机密钥与用户认证:新部署优先使用Ed25519(ssh-ed25519);需要FIPS合规时使用ECDSA NIST P-256/P-384或RSA 2048+(rsa-sha2-256/rsa-sha2-512)。彻底禁用DSA。
对称加密:优先使用chacha20-poly1305@openssh.com或aes256-gcm@openssh.com;次选aes256-ctr配合hmac-sha2-512-etm@openssh.com。禁用CBC模式加密,因为CBC模式不应与SSH协议配合使用,其容易受到明文恢复攻击。
监控与审计:可使用ssh -Q ciphers、ssh -Q kex、ssh -Q key等命令查询当前OpenSSH支持的算法列表,并根据合规要求和安全基线进行配置。在修改服务器端加密配置时需格外谨慎,错误的配置可能导致无法远程登录目标系统。
SSH加密算法的选择需要在安全性、性能和兼容性之间取得平衡。随着后量子密码学的发展,SSH协议也在持续演进,OpenSSH 9.9引入的后量子混合密钥交换算法预示着SSH加密生态即将迎来新一轮重要变革。
- 点赞
- 收藏
- 关注作者
评论(0)