Security 客户验证

Security 客户验证,security,authentication,networking,client-server,secret-key,Security,Authentication,Networking,Client Server,Secret Key,假设我们有两台机器,机器一和机器二: 机器一有一个静态IP 机器二有一个动态IP 现在机器2想要连接到机器1。机器一如何验证另一台机器是机器二 我正在寻找一个可扩展的解决方案,以便将其用于具有多个客户端的服务器 我的解决方案是使用两台机器已经知道的密钥 机器2将尝试连接到机器1。将以随机生成的字符串进行响应, 这台机器将使用已知的密钥进行加密。并将其发送回机器一,机器一可以检查加密字符串是否使用正确的密钥加密 我的解决方案很容易扩展,但我不确定它是否足够安全。这样做有标准的解决方案吗? 你几

假设我们有两台机器,机器一和机器二:

  • 机器一有一个静态IP
  • 机器二有一个动态IP
现在机器2想要连接到机器1。机器一如何验证另一台机器是机器二

我正在寻找一个可扩展的解决方案,以便将其用于具有多个客户端的服务器

我的解决方案是使用两台机器已经知道的密钥

机器2将尝试连接到机器1。将以随机生成的字符串进行响应, 这台机器将使用已知的密钥进行加密。并将其发送回机器一,机器一可以检查加密字符串是否使用正确的密钥加密


我的解决方案很容易扩展,但我不确定它是否足够安全。这样做有标准的解决方案吗?

你几乎就在那里,但是如果你只依靠这一点,你就有被中间人攻击的危险。假设一台恶意机器3假装是机器1

  • 机器2试图连接到机器1,但却打开了与机器3的连接
  • 机器3打开与机器1的连接,机器1以 字符串“请加密我”
  • 机器3通过以下方式响应机器2的连接请求: “请给我加密”
  • 机器2将“encrypt_me_please”加密为(比如)“x10hsdapg”并发送 把它送回机器3
  • 机器3用加密字符串“x10hsdapg”响应机器1
  • 机器1验证机器3是否使用了正确的加密密钥,因此必须是机器2
你所能确定的就是机器2在网络上。但是,从某种意义上说,这就是你真正能做的。我的意思是,你永远无法真正确定你连接的主机是他们所说的在不安全网络上的主机。但我们能做的是采用各种加密技术,这样我们发送的消息只能由其预期收件人解密。有关例如RSA的信息,请参阅


我希望这至少能有所帮助,我承认我已经学习密码学好几年了。

研究双向/双向TLS。