SSH 如何确保双向加密通信?

问题描述 投票:0回答:1

有些东西我无法通过公钥/私钥身份验证得到。

我们以在我的 PC 和 GitLab 之间使用 SSH 通信为例。我生成了一对 2 个密钥,一个是私有的,一个是公共的。我可以分享公共的并将其交给 GitLab,而我可以保守私人的秘密。公共用于加密消息,私有用于解密。

因此人们(特别是 GitLab)可以使用公钥向我发送一条加密消息,而我可以使用我的私钥对其进行解密。太酷了,从 GitLab 到我的计算机有一种单向通信。我很高兴 GitLab 可以向我发送加密消息。

但另一方面,我无法向人们(特别是 GitLab)发送加密消息,因为他们没有私钥来解密它。在这种情况下,SSH 如何将加密消息从我的 PC 发送到 GitLab? GitLab 如何确定确实是我在发送消息?

我读过一些关于“私钥用于签署消息”的内容,但我不明白。私钥不就是用来解密的吗?

谢谢。

ssh gitlab ssh-keys private-key
1个回答
0
投票

实际上,您在 SSH 中错过了几个步骤:

  • 主机也有私钥/公钥 - 第一次连接到新主机时系统会提示您接受密钥。
  • 主机和用户密钥用于身份验证,而不是用于加密。在身份验证中,私钥用于对某些数据进行“签名”,以证明相应公钥的所有权。 当您连接到主机时,主机会提供其公钥,您可以决定是否信任该主机的该密钥。主机将使用其私钥对一些数据进行
      签名
    • 以证明其拥有该公钥。 当您以特定用户身份进行身份验证时,您将使用您的私钥
    • 签署
    • 一些数据,服务器将检查相应的公钥是否已获得授权(例如,在authorized_keys中)。
      
      
    实际加密的会话密钥是使用单独的协议进行协商的,通常是基于
  • Diffie-Hellman 密钥交换
  • 的协议。 Diffie-Hellman 通常通过计算“临时”公钥/私钥来完成,并要求端点相互验证以避免中间人攻击。
© www.soinside.com 2019 - 2024. All rights reserved.