使用 SSH 密钥登录未知/受损服务器不是很危险吗?

Gur*_*ngh 10 ssh public-key public-key-encryption

假设我向某人提供了我的公共 SSH 密钥 id_rsa.pub,并且他/她将其安装在受到威胁的服务器上,然后我被要求登录。

登录过程是否涉及将我的私钥发送到受感染的服务器?

如果是,那么攻击者现在可以访问我的私人 SSH 密钥,这很可怕。

如果没有,那么为什么我会在 ssh -vvv 输出中看到这一行:

debug1: Server accepts key: pkalg ssh-rsa blen 277
Run Code Online (Sandbox Code Playgroud)

这意味着私钥已发送到服务器,并且它接受了它。

我误解了这个问题吗?

pjc*_*c50 11

你误解了这个过程。

不会发送密钥,而是通过使用公钥加密某些内容来构建“挑战”,而公钥只能用匹配的私钥解密。

如果您确实被要求提供密码,或者您将 X 转发到受感染的服务器,则存在潜在的安全风险。


all*_*tic 7

,您的私钥永远不会“发送”或传输到任何地方。

公钥密码学与传统的用户名/密码认证不同。

  • 你的公钥就是——公开的。分享它是完全安全的。将您的公钥发送给某人可能会泄露您的身份(人们可以知道它来自您,因为它是一个唯一的号码),但它永远不会允许其他人冒充您或以您的身份进行身份验证。您也可以通过常规 HTTP 在 SuperUser 或您的网页上发布您的公钥;这是完全安全的,如果有人没有你的私钥,它完全没用。

  • 你的私钥就是——私人的。它仅驻留在您拥有和信任的系统上(希望如此),并且应始终使用解锁密码进行加密以实现最大安全性,以防有人获得对存储它的系统的物理访问权限。任何按照公钥密码学规则正确实施的安全程序都不会传输私钥。也就是说,除非您的本地系统上有一个程序受到威胁并且能够读取您的私钥(并且私钥未通过密码加密),否则您的私钥始终是安全的。

消息在发送到远程服务器之前,会在您的计算机上使用私钥进行签名。因此,您不是将私钥发送到远程服务器,而是发送私钥加密的消息。但是这两件事是不一样的:你不能从签名的消息中推导出私钥;这是公钥密码学要点的一部分。

简而言之,即使有敌意的攻击者获得了您的公钥获得了您的私钥签名的消息,他们仍然无法获得您的实际私钥,因此他们无法冒充您的凭据或使用您的私钥进行身份验证“作为你”。