SSH 加密算法是保障 SSH 安全性的核心技术,用于保护数据传输的机密性和完整性。SSH 使用多种加密算法来满足不同的安全需求。
加密算法类型
对称加密算法
对称加密使用相同的密钥进行加密和解密,适用于大量数据的加密传输。
AES (Advanced Encryption Standard)
bash# AES-GCM 模式(推荐) aes256-gcm@openssh.com aes128-gcm@openssh.com # AES-CTR 模式 aes256-ctr aes192-ctr aes128-ctr
特点:
- 高性能,硬件加速支持
- 128/256 位密钥长度
- GCM 模式提供认证加密
- 被广泛采用和验证
ChaCha20-Poly1305
bashchacha20-poly1305@openssh.com
特点:
- 在没有硬件加速的设备上性能优异
- 256 位密钥
- 内置认证加密
- 适合移动设备和 ARM 架构
3DES (Triple DES)
bash3des-cbc # 已弃用,不推荐使用
特点:
- 较慢,安全性较低
- 仅用于向后兼容
- 不建议在生产环境使用
非对称加密算法
非对称加密使用公钥和私钥对,用于身份验证和密钥交换。
RSA
bashssh-rsa rsa-sha2-256 rsa-sha2-512
特点:
- 广泛支持
- 密钥长度:2048/4096 位
- 计算速度较慢
- 适合签名和密钥交换
ECDSA (Elliptic Curve DSA)
bashecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521
特点:
- 更小的密钥尺寸
- 更快的计算速度
- 基于椭圆曲线
- NIST 标准曲线
Ed25519
bashssh-ed25519
特点:
- 最新的签名算法
- 256 位密钥
- 极快的速度
- 高安全性
- 推荐使用
加密模式
CBC (Cipher Block Chaining)
bashaes256-cbc aes128-cbc
特点:
- 传统的加密模式
- 需要填充
- 可能受到填充攻击
- 不推荐用于新系统
CTR (Counter Mode)
bashaes256-ctr aes128-ctr
特点:
- 流密码模式
- 无需填充
- 并行加密
- 较好的性能
GCM (Galois/Counter Mode)
bashaes256-gcm@openssh.com aes128-gcm@openssh.com
特点:
- 认证加密模式
- 同时提供加密和完整性
- 高性能
- 推荐使用
配置加密算法
服务器配置
bash# /etc/ssh/sshd_config # 推荐的加密算法 Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr # 禁用不安全的算法 Ciphers -3des-cbc,-aes128-cbc,-aes192-cbc,-aes256-cbc
客户端配置
bash# ~/.ssh/config # 指定加密算法 Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com # 测试连接 ssh -c aes256-gcm@openssh.com user@hostname
性能对比
| 算法 | 加密速度 | 解密速度 | 安全性 | 硬件加速 |
|---|---|---|---|---|
| AES-256-GCM | 快 | 快 | 高 | 是 |
| ChaCha20-Poly1305 | 快 | 快 | 高 | 否 |
| AES-256-CTR | 快 | 快 | 中 | 是 |
| AES-256-CBC | 中 | 中 | 中 | 是 |
| 3DES | 慢 | 慢 | 低 | 是 |
安全最佳实践
1. 使用现代算法
bash# 优先使用 GCM 模式 Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
2. 禁用弱算法
bash# 禁用 CBC 模式和 3DES Ciphers -aes128-cbc,-aes192-cbc,-aes256-cbc,-3des-cbc
3. 定期更新
bash# 检查支持的算法 ssh -Q cipher # 测试算法性能 ssh -c aes256-gcm@openssh.com -o "Compression yes" user@hostname
4. 监控和审计
bash# 查看连接使用的加密算法 ssh -v user@hostname 2>&1 | grep "cipher" # 使用 nmap 检查服务器算法 nmap --script ssh2-enum-algos -p 22 hostname
常见问题
Q: AES-GCM 和 ChaCha20-Poly1305 如何选择?
A: AES-GCM 在有硬件加速的设备上性能更好,ChaCha20-Poly1305 在没有硬件加速的设备上更优。
Q: 为什么禁用 CBC 模式?
A: CBC 模式容易受到填充预言机攻击(Padding Oracle Attack)。
Q: 如何检查服务器支持的加密算法?
A: 使用 nmap --script ssh2-enum-algos -p 22 hostname 或 ssh -Q cipher。
Q: Ed25519 比 RSA 好在哪里?
A: Ed25519 提供更好的性能、更小的密钥尺寸和更强的安全性。
SSH 加密算法的选择直接影响系统的安全性和性能,合理配置是保障 SSH 安全的重要环节。