如何验证我在Python应用程序中控制的服务器的身份?

时间:2015-07-26 16:33:19

标签: python python-3.x

我的应用程序会自动从中央服务器下载更新。我有点担心某人,例如,劫持我的域名并将其指向他们自己的服务器,该服务器提供应用程序的颠覆副本。

在我看来,对称键就是解决这个问题的方法。我想我可以将公钥编码到程序的源代码中并将私钥保存在我的服务器上,然后在协议中添加一个步骤,客户端发送消息意味着"你是授权服务器"并且服务器发回一条消息,意思是"我确定是"使用私钥进行编码,然后使用公钥对其进行解码,验证它是否来自我的服务器。然后我们正常进行。

假设这不是一个完全愚蠢的事情,我该怎么办呢?使用RSA密钥编码/解码存在哪些轻量级库?我不想我希望使用SSL完整的TLS;我不在乎谁读取更新,我无论如何都无法承受解密开销 - 下载时间很烦人!

1 个答案:

答案 0 :(得分:1)

这个过程需要像这样......

服务器端:

  • 在服务器上构建您的消息数据
  • 使用SHA256
  • 之类的东西来哈希
  • 使用私钥对哈希进行签名
  • 将签名和数据发送到客户端

客户端:

  • 接收数据和签名
  • 独立计算数据的哈希值
  • 使用公钥验证我们生成的哈希是否与服务器签名的哈希匹配。

如果是这样,我们知道数据已由服务器发送并且未经修改。我们不会阻止任何其他人看到数据,只是篡改它。

这样做的原因是非对称加密非常昂贵(并且随着消息大小的增加而变得更加昂贵)。通过简单地签署哈希,我们将限制我们需要以加密方式处理的数据量,同时仍然确保消息未被修改。

请注意,这是一个非常高级的概述,并且有许多细节需要正确处理。任何与加密相关的东西都很难正确完成。如果可能,找到已经执行此操作的库并使用它。

如果找不到符合您需求的内容,请查看pycryptorsa并阅读。 This question可能是一个很好的起点,但请务必阅读both answers