我正在开发一个系统,移动应用程序可以通过HTTPS与服务器进行通信。通信由两个阶段组成:首先,应用程序在服务器上“注册”:在其他内容中,用户选择自己的PIN并将其发送到服务器并存储在那里。现在让我们假设这个阶段是安全的,所有的信息都已经安全地交换了,并且没有泄露任何信息。
通信的第二阶段在登记后开始。App向服务器发送请求,在每个请求中,用户都被请求输入PIN,该PIN被添加到请求中,以便对用户进行身份验证(这实际上只是验证步骤之一,因为我们还使用了client身份验证)。我的问题如下:如果攻击者能够解密我们的HTTPS通信,是否有可能防止该PIN被暴露?大多数解决方案似乎都失败了,因为攻击者能够枚举PIN,因为它们通常有4-6个字符长(例如,通过PIN的散列会因此失败)。
根据需要,我们可以在注册阶段交换一些额外的数据。
发布于 2016-06-30 11:57:30
除了TLS提供的加密之外,您还可以实现自己的加密层。既然您说“我们可以在注册阶段交换一些额外的数据”,我认为最简单的解决方案是在注册期间共享对称加密密钥(例如AES),然后加密所有的进一步通信。(第四章将防止暴力行为,即使可能的明文数量有限。)
请注意,当PIN和密钥被交换时,这完全取决于原始对分的安全性。如果失败了,这个计划就失败了。另一种选择是将您的公钥硬编码到应用程序中。让应用程序生成一个随机对称密钥,用您的公钥对其进行非对称加密,并将其发送到服务器。这可以只做一次,或者每个会话一次。但现在我们开始建立一个完整的密码协议..。
这将是一些工作,也许不值得付出努力。最主要的威胁可能不是TLS破坏,而是用户电话被恶意软件感染或服务器被黑客攻击。
相反,我建议您正确处理TLS,这样攻击者一开始就无法解密它。在移动应用程序中,您可以同时控制客户端和服务器,这比web应用要容易得多。我建议采取以下步骤:
https://security.stackexchange.com/questions/128766
复制相似问题