一、主要密钥类型概览
SSH 目前支持 4 种主要的密钥类型:
| 类型 | 全称 | 算法基础 | 首次支持 |
|---|---|---|---|
| RSA | Rivest-Shamir-Adleman | 大整数因数分解 | 1995 (SSH1) |
| DSA | Digital Signature Algorithm | 离散对数问题 | 1999 (SSH2) |
| ECDSA | Elliptic Curve DSA | 椭圆曲线离散对数 | 2011 (OpenSSH 5.7) |
| Ed25519 | Edwards-curve DSA | 扭曲爱德华曲线 | 2014 (OpenSSH 6.5) |
二、各类型详细介绍
1. RSA
ssh-keygen -t rsa -b 4096原理:基于大整数分解的困难性,即将两个大质数相乘容易,但反向分解极难。
特点:
- ✅ 兼容性最好:几乎所有系统、设备都支持
- ✅ 久经考验,研究充分
- ❌ 密钥长度大(2048-4096位)
- ❌ 签名和验证速度较慢
- ⚠️ 2048 位已不推荐,建议至少 3072 或 4096 位
密钥长度与安全性:
| 密钥长度 | 等效安全强度 | 状态 |
|---|---|---|
| 1024 位 | ~80 位 | ❌ 已不安全 |
| 2048 位 | ~112 位 | ⚠️ 勉强可用 |
| 3072 位 | ~128 位 | ✅ 推荐 |
| 4096 位 | ~140 位 | ✅ 更安全 |
2. DSA
ssh-keygen -t dsa原理:基于离散对数问题的数字签名算法。
特点:
- ❌ 已被弃用(OpenSSH 7.0+ 默认禁用)
- ❌ 固定只支持 1024 位,安全性不足
- ❌ 随机数生成有缺陷风险
- ❌ 不推荐使用
⛔ 不要使用 DSA,它已经过时且不安全。
3. ECDSA
ssh-keygen -t ecdsa -b 256 # nistp256 曲线
ssh-keygen -t ecdsa -b 384 # nistp384 曲线
ssh-keygen -t ecdsa -b 521 # nistp521 曲线(注意不是512)原理:在椭圆曲线上实现的 DSA 算法,利用椭圆曲线离散对数问题。
特点:
- ✅ 密钥短,同等安全性下比 RSA 小很多
- ✅ 签名/验证速度快
- ✅ 较好的兼容性(2011年后的系统)
- ⚠️ 使用 NIST 曲线,部分人担忧可能存在后门
- ⚠️ 对随机数生成器质量要求高
曲线对比:
| 曲线 | 密钥位数 | 等效安全强度 |
|---|---|---|
| nistp256 | 256 位 | ~128 位 |
| nistp384 | 384 位 | ~192 位 |
| nistp521 | 521 位 | ~256 位 |
4. Ed25519 ⭐ 推荐
ssh-keygen -t ed25519原理:基于扭曲爱德华曲线 Curve25519,是 EdDSA 签名方案的一种实现。
特点:
- ✅ 安全性高:~128 位安全强度
- ✅ 速度最快:签名/验证性能优异
- ✅ 密钥最短:公钥仅 68 字符
- ✅ 抗侧信道攻击:设计时考虑了实现安全
- ✅ 确定性签名:不依赖随机数生成器
- ✅ 曲线参数透明,无后门担忧
- ❌ 需要 OpenSSH 6.5+(2014年)
三、综合对比表
| 特性 | RSA-4096 | DSA | ECDSA-256 | Ed25519 |
|---|---|---|---|---|
| 安全性 | ✅ 高 | ❌ 低 | ✅ 高 | ✅ 高 |
| 密钥大小 | 大 (~750字符) | 中 | 小 (~180字符) | 最小 (~68字符) |
| 签名速度 | 慢 | 中 | 快 | 最快 |
| 验证速度 | 快 | 慢 | 快 | 最快 |
| 兼容性 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 推荐程度 | ✅ 兼容用 | ❌ 禁用 | ⚠️ 可选 | ⭐ 首选 |
四、公钥长度实际对比
# RSA 4096 公钥(约 750 字符)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... [很长]
# ECDSA 256 公钥(约 180 字符)
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlz... [中等]
# Ed25519 公钥(约 68 字符)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... [很短]
五、选择建议
🎯 决策流程图
你的服务器/设备支持 Ed25519 吗?
│
├─ 是 → 使用 Ed25519 ✅
│
└─ 否 → 需要连接很老的系统吗?
│
├─ 是 → 使用 RSA 4096
│
└─ 否 → 使用 ECDSA 521
📋 场景推荐
| 场景 | 推荐命令 |
|---|---|
| 日常使用(首选) | ssh-keygen -t ed25519 -C "your_email" |
| 需要最大兼容性 | ssh-keygen -t rsa -b 4096 |
| 连接云服务/GitHub | ssh-keygen -t ed25519 |
| 企业合规要求 NIST | ssh-keygen -t ecdsa -b 384 |
| 硬件安全密钥 (FIDO2) | ssh-keygen -t ed25519-sk |
六、额外提示
生成密钥的完整命令
# 推荐:Ed25519 + 注释 + 自定义文件名
ssh-keygen -t ed25519 -C "me@example.com" -f ~/.ssh/id_ed25519_personal
# 备用:RSA 4096
ssh-keygen -t rsa -b 4096 -C "me@example.com" -f ~/.ssh/id_rsa_legacy查看现有密钥类型
# 查看公钥指纹和类型
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# 输出示例: 256 SHA256:xxx... me@example.com (ED25519)七、总结
| 排名 | 类型 | 一句话评价 |
|---|---|---|
| 🥇 | Ed25519 | 现代首选,安全快速 |
| 🥈 | RSA 4096 | 老牌可靠,兼容性王者 |
| 🥉 | ECDSA | 折中方案,企业合规用 |
| ❌ | DSA | 已淘汰,请勿使用 |