IT技术博客大学习 共学习 共进步

为什么要用公钥/私钥而不是密码去做SSH身份验证

车东[Blog^2] 2010-08-02 10:07:45 浏览 5,703 次

    SSH提供了很多种不同的身份验证,其中最常用的两种便是密码验证和基于公钥/私钥的身份验证。

    基于公钥/私钥的身份验证有非常多的优点。

    首先,公钥/私钥可以从根本上挫败监听来截取验证信息的企图。

    公钥/私钥验证本质上是一种 零知识证明。即,在身份验证的过程中,服务器并不需要知道用户的私钥是什么。【注:公钥/私钥验证并不是零知识证明,感谢 snnn 指正。】

    公钥/私钥验证在身份验证的过程中,服务器只需要知道用户的公钥,而用户则使用自己的私钥对一组数据签名,并在服务器端进行验证。服务器并不需要知道用户的私钥。目前为止,还没有有效的方法能从这些信息推导出私钥。

    与密码相比,这种方法有显著的优点:在验证身份的那一方,没有任何办法可以拿到用户的私钥,即使获得了那台机器的root权限。验证信息只能使用一次----这意味着,也没有办法把这个验证信息用于在其他地方再次验证身份。

    其次,公钥/私钥要比密码长的多,因而可以挫败通过穷举的方式破解的可能性。

    典型的密码是8位字符,假设可以使用大小写字母、数字和特殊符号,可选的范围无非是96^8而已,我们不妨算它128^8。典型的私钥有2048个bit,如果按7个来分组的话,有128^(2048/7)。当然,最高位和最低位一定是1,但向下取整,也有128^292种。

    最后,除了吃点带宽之外,SSH口令穷举对于仅采用公钥/私钥验证的服务器安全不构成任何威胁。

    通过适当的配置sshd,可以让其直接明确地告诉对方此处不支持口令验证,并且能够容易地将攻击者记录在案,并将数据反馈给防火墙来减少带宽的占用。

建议继续学习

  1. Linux shell脚本使用while循环执行ssh的注意事项 (阅读 8,064)
  2. RSA 公钥格式转换之PHP实现 (阅读 5,885)
  3. 在ssh服务里使用chroot (阅读 5,842)
  4. 如何让ssh登录更加安全 (阅读 5,604)
  5. ssh连接超时解决办法 (阅读 5,507)
  6. 懒人连ssh不输密码若干大法 (阅读 5,484)
  7. SSH无密码登录 (阅读 5,483)
  8. ssh命令 (阅读 5,227)
  9. 公钥私钥加密解密数字证书数字签名详解 (阅读 5,125)
  10. 共享会话的ssh连接配置 (阅读 4,706)