ssh 中如何使用公钥和私钥?

ssh 中如何使用公钥和私钥?

假设我已经在 ssh 中设置了公钥/私钥身份验证。

  1. ssh 服务器拥有公钥但不拥有私钥,而 ssh 客户端同时拥有公钥和私钥,这是否正确?

  2. 通过 ssh 协议进行通信时如何使用公钥和私钥?

    • 当我在 ssh 客户端通过运行命令通过 ssh 协议连接到 ssh 服务器来启动通信时,从我到服务器的初始消息是用公钥还是私钥加密的?

      当ssh服务器收到这个初始消息时,它是否使用公钥来解密初始消息,这听起来很奇怪,因为每个人都可以拥有公钥,从而可以解密初始消息?

    • 如果我发送连接到服务器的命令是将服务器上的某个文件 scp 到我的本地主机,那么当 ssh 服务器将请求的文件发送给我时,公钥是否用于加密该文件?

      当ssh客户端收到加密文件时,是否使用私钥来解密该文件?

    • 公钥和私钥是否仅在身份验证期间使用,而不是在身份验证完成后使用?

      如果这是正确的,那么在身份验证后,是否会对要发送的消息进行某种类型的加密,并对接收到的消息进行解密,以用于 ssh 服务器和客户端之间的通信?

谢谢。

答案1

  1. ssh 服务器拥有公钥但不拥有私钥,而 ssh 客户端同时拥有公钥和私钥,这是否正确?

是的,如果你谈论认证密钥。还有主机密钥,其中所有权是相反的——服务器拥有两者,而客户端只有公钥。

  • 当我在 ssh 客户端通过 ssh 协议运行命令连接到 ssh 服务器来启动通信时,从我到服务器的初始消息是否使用公钥或私钥加密?

否。初始消息未加密。密钥交换后的通信将使用从共享密钥(会话密钥)派生的密钥进行加密,这是 DH 密钥交换(某种形式)的结果。

当ssh服务器收到这个初始消息时,它是否使用公钥来解密初始消息,这听起来很奇怪,因为每个人都可以拥有公钥,从而可以解密初始消息?

解密是使用私钥完成的(签名验证是使用公钥完成的)。

  • 如果我发送连接到服务器的命令是将服务器上的某个文件 scp 到我的本地主机,那么当 ssh 服务器将请求的文件发送给我时,公钥是否用于加密该文件?

不,就像之前那样。文件(整个会话)由“会话密钥”加密

当ssh客户端收到加密文件时,是否使用私钥来解密该文件?

不,不。

  • 公钥和私钥是否仅在身份验证期间使用,而不是在身份验证完成后使用?

是的

如果这是正确的,那么在身份验证后,是否会对要发送的消息进行某种类型的加密,并对接收到的消息进行解密,以用于 ssh 服务器和客户端之间的通信?

不确定这个问题是什么意思。该会话使用对称密码(通常是 AES)以及从上述密钥交换中获得的密钥进行加密。

相关内容