一、主要密钥类型概览

SSH 目前支持 4 种主要的密钥类型:

类型全称算法基础首次支持
RSARivest-Shamir-Adleman大整数因数分解1995 (SSH1)
DSADigital Signature Algorithm离散对数问题1999 (SSH2)
ECDSAElliptic Curve DSA椭圆曲线离散对数2011 (OpenSSH 5.7)
Ed25519Edwards-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 曲线,部分人担忧可能存在后门
  • ⚠️ 对随机数生成器质量要求高

曲线对比

曲线密钥位数等效安全强度
nistp256256 位~128 位
nistp384384 位~192 位
nistp521521 位~256 位

4. Ed25519 ⭐ 推荐

ssh-keygen -t ed25519

原理:基于扭曲爱德华曲线 Curve25519,是 EdDSA 签名方案的一种实现。

特点

  • 安全性高:~128 位安全强度
  • 速度最快:签名/验证性能优异
  • 密钥最短:公钥仅 68 字符
  • 抗侧信道攻击:设计时考虑了实现安全
  • 确定性签名:不依赖随机数生成器
  • ✅ 曲线参数透明,无后门担忧
  • ❌ 需要 OpenSSH 6.5+(2014年)

三、综合对比表

特性RSA-4096DSAECDSA-256Ed25519
安全性✅ 高❌ 低✅ 高✅ 高
密钥大小大 (~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
连接云服务/GitHubssh-keygen -t ed25519
企业合规要求 NISTssh-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已淘汰,请勿使用