我读到的每个地方都说他们说ssh密钥对身份验证比简单的密码身份验证更安全,因为签名发送到服务器总是不同的。因此,如果有人得到我的签名,他下次不能使用它来代表我登录。
现在我的问题是这个签名是如何独特的?
服务器是否先发送一些随机字符串,然后我的计算机使用我的私钥对其进行签名并将其发回。因为这是我每次看到签名都是唯一的唯一方式。但是网络上的每个地方都说客户端发送签名FIRST(因为这是第一步),但我认为服务器应该首先发送随机字符串!!
答案 0 :(得分:0)
我不是安全专家,但这是我对基于密钥的身份验证如何工作的理解:服务器发送使用您的私钥加密的随机数。客户端解密挑战并将其发送回服务器,验证它是否拥有私钥。
但是,我认为类似的技术用于基于密码的身份验证:服务器发送一个随机数。客户端将随机数附加到密码,计算散列,并将其发送到服务器,通过以相同的方式计算它来验证它。
因此,这似乎不是基于公钥的身份验证“更安全”的原因。
答案 1 :(得分:0)
对于密钥身份验证,您的私钥永远不会泄露给服务器(因此不会泄露给攻击者),只会泄露给您的公钥。同样,服务器的私钥永远不会泄露给您(或攻击者),只会泄露给公钥。
Diffie-Hellman用于派生两个密钥对(每个密钥对一个),然后用于来回发送应用程序数据,无论是使用简单密码还是使用公钥验证进行身份验证。
在password authentication的情况下,会话密钥对在用户/密码通过网络发送之前计算。这可以防止简单的窃听,但当然不会阻止攻击者直接尝试连接和猜测用户/密码组合。当然,many users choose poor passwords。
在public-key authentication的情况下,计算会话密钥对,然后使用RSA或类似算法完成简单会话(通常是数学问题/答案)以验证声明的用户是否匹配公钥。如果不猜测其中一个私钥,就无法伪造这个对话。如果操作正确,这比使用最强密码要困难得多。即使公钥验证存在缺陷,例如在random number generator中,由此产生的弱公钥验证仍然比密码验证强得多。