当使用 SSH 密钥对服务器进行身份验证以进行远程访问时,为什么可以设计真正的密钥,从而从加密的私钥中设计出密码,而不需要根据服务器检查密码的每个猜测以查看它是否经过身份验证?
我知道密码仅用于解密密钥而不发送到远程服务器,但我不明白为什么很容易从错误解密的结果中分辨出正确解密的结果。如果这是不可能的(或难以置信的),那么 SSH 密钥肯定会更不受暴力破解,因此更强大吗?
我认为这是一个弱点,但我几乎不了解公钥身份验证背后的数学,所以我假设我错过了一个原因,但你们更聪明的人都知道。
当使用 SSH 密钥对服务器进行身份验证以进行远程访问时,为什么可以设计真正的密钥,从而从加密的私钥中设计出密码,而不需要根据服务器检查密码的每个猜测以查看它是否经过身份验证?
我知道密码仅用于解密密钥而不发送到远程服务器,但我不明白为什么很容易从错误解密的结果中分辨出正确解密的结果。如果这是不可能的(或难以置信的),那么 SSH 密钥肯定会更不受暴力破解,因此更强大吗?
我认为这是一个弱点,但我几乎不了解公钥身份验证背后的数学,所以我假设我错过了一个原因,但你们更聪明的人都知道。
由 RSA 私钥组成的明文很容易被识别,因为它满足某些数学特性。特别是:
d = e^-1 mod (p-1)(q-1)
这意味着给定公钥和候选d
者,您可以计算
d . e mod (p-1)(q-1)
如果结果是1
,那么您找到了正确的密钥。
解决方案是使用强密码来保护您的私钥。
现在这是一个值得研究的想法。
正如@caf 所示,RSA 私钥有很多内部结构,很容易识别。设计一个基于密码的加密方案是非常困难的,这样使用错误密码解密加密的 RSA 密钥仍然会产生看起来像有效 RSA 私钥的东西。
但是,使用DSA密钥(以及椭圆曲线变体ECDSA )相对容易做到这一点。DSA 私钥使用不需要保密的密钥参数(称为p、q和g)(它们也存在于相应的公钥中);密钥中唯一真正私密的部分是x,一个整数模q。任何以q为模的整数都是有效的 DSA 私钥。因此,您可以通过这种方式对x进行基于密码的加密:
所以这是可行的。这是个好主意吗 ?这种加密的优点是密码不能再被获得加密私钥副本的攻击者暴力破解。另一方面,如果攻击者也有公钥的副本,那么他可以很容易地验证他使用正确的密码进行了解密。公钥本来就是公开的,它不一定像私钥一样保密。目标服务器有它。其实,所有使用私钥登录的服务器拥有公钥的副本。因此,公钥充其量只是适度保密。因此,上述“无法验证的密码加密”所提供的优势似乎微不足道。另一方面,它有以下缺点:如果用户输入错误的密码,服务器仍然会被询问,SSH 无法再区分“用户摸不着键盘”和“服务器有问题”。
因此,尽管您所要求的至少对于某些关键类型是可行的,但它尚未实现(还)是可以理解的。这不是一场无可争议的胜利。这是可用性和安全性之间的权衡(你会失去一点可用性来获得一点安全性)。
“私钥”文件存储公钥和私钥。
该文件使用对称算法加密。
如果我偷了一个带有文件的笔式驱动器,我可以离线暴力破解密码,就像我可以暴力破解任何其他加密文件一样。解密文件后,我同时拥有公钥和私钥。
很少使用密钥进行身份验证。通常,它们用于建立受信任的安全通道,之后您必须使用用户名/密码对自己进行身份验证。窃取您的随身碟并解密密钥仍然无法让我访问服务器,但它可以让我在您的连接中进行中间人操作。
我不确定你在问什么,但我希望这会有所帮助。
请注意,您始终可以从私钥生成公钥,因此如果攻击者拥有公钥(这是合理的,它是公开的),那么检查答案总是微不足道的。我想这是所有非对称加密算法的基础。