我们如何确保这不是一个中间人?
第一次,您可以检查RSA指纹。有人需要事先传达给你,或者你需要以某种方式安全地接收它(即通过https站点发布,或通过签名的电子邮件接收)。例如,许多托管提供商向您发送您的主机SSH指纹。
在Ubuntu,你可以使用你找到自己的RSA指纹:
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
注意,还有其他在使用指纹识别的格式(DSA和ECDSA),根据不同的服务器和客户端配置。在您的known_hosts文件中,您可以看到每个指纹的存储格式。
它是如何编码的?
known_hosts文件是base64编码中的主机名(通常是主机名散列),指纹类型和指纹本身(密码信息)的列表。格式详细信息可在OpenSSH man page,SSH_KNOWN_HOSTS FILE FORMAT部分中找到。
这个所谓的“主机密钥”是不对称的。这是什么意思?
这些不对称机制意味着虽然指纹允许您验证服务器的身份,但不能用它来生成有效标识(模拟)该服务器。
必须指出的是,指纹(和相应的私钥)作为秘密加密操作:随机挑战从客户端发送到服务器。具有私钥的服务器可以签名表示挑战并将其发回,然后客户端可以验证签名是有效的,因为指纹是合适的。
换言之,加密秘密是双重的,私钥可以加密或签名,并且公钥可以用于解密或验证签名。其中一个密钥可以在没有风险的情况下公开发布,并用于验证签名和密文只有私钥所有者才能解码的文本。这大致是密码学中的不对称手段。