我正在为 PC 创建一个软件,它将通过 http post 定期验证服务器 (VPS) 中的许可证。基本上,它会向服务器发送一个包含用户 ID、许可证 ID、计算机 ID 等的字符串,服务器将回复另一个字符串,验证(或不验证)许可证。我不是这个领域的专家,所以有一些问题:
一些“中间人”可以拦截这种通信并更改敏感数据(双向),对吗?
仅使用 HTTPS 就能有效解决中间人攻击问题吗?还是我(也)应该使用 AES-256 来加密字符串?
使用 HTTPS(无 AES 加密),“黑客”可以多次复制帖子以进行 DoS(拒绝服务)攻击吗?
关于问题 3(DoS 攻击),我的解决方案是使用带有过期时间的令牌验证。这是一个好方法吗?
关于问题 4(令牌),每次进行许可证验证时,它都会向服务器生成 2 个帖子,第一个用于获取令牌,第二个用于发送数据。我说得对吗?还有其他方法只用一个帖子就能获得相同的结果吗?
任何关于这个主题的建议都非常受欢迎!顺便说一句,我的软件大约要花 40 美元,所以我认为不需要超级安全……谢谢!!
答案1
免责声明:我不是安全交换方面的专家……即使我知道一点。对于很多专家,我建议您将您的问题发布到安全专用堆栈
一些“中间人”可以拦截这种通信并更改敏感数据(双向),对吗?
仅使用 HTTP:是的。
使用 HTTPS:如果你没有嵌入自己的证书颁发机构来直接在应用程序上验证服务器的证书,那么是的因为人们可以轻易地使用由先前添加到其“受信任的证书存储”中的假证书颁发机构签名的 HTTPS 证书来制作假的许可证服务器。
仅使用 HTTPS 就能有效解决中间人攻击问题吗?还是我(也)应该使用 AES-256 来加密字符串?
为了严格保证传输的安全,您可以信任 HTTPS....如果您正确实施了 HTTPS 证书检查。
使用 HTTPS(无 AES 加密),“黑客”可以多次复制帖子以进行 DoS(拒绝服务)攻击吗?
不确定复制之前的会话是否足以在服务器端创建有效的 HTTPS 会话。无论如何,用这种不一致的流量污染服务器也可能导致 DoS。
关于问题 3(DoS 攻击),我的解决方案是使用带有过期时间的令牌验证。这是一个好方法吗?
DoS 之所以发生,是因为服务器正忙于做其他事情。您的令牌可能会保护您免受重放攻击,但无法保护您的服务器免受大量无用流量的侵扰,因为它总是需要计算令牌来验证令牌。
关于问题 4(令牌),每次进行许可证验证时,它都会向服务器生成 2 个帖子,第一个用于获取令牌,第二个用于发送数据。我说得对吗?还有其他方法只用一个帖子就能获得相同的结果吗?
有几种方法可以实现这一点。我过去使用过的一种方法是使用nonce
(随机值) 和timestamp
作为请求的一部分:
- 客户端推送
nonceA
和tsA
+其标识符。 - 服务器检查
tsA
+/-now()
(让我们接受3秒的延迟)并推送nonceA
++tsB
授予客户端的权利。 - 客户端验证
nonceA
正确并且tsB
为+/-now()
这应该可以保护您免受重放攻击。您可以使用加密的有效负载来混淆通过 HTTPS 使用的协议。例如,客户端可以使用以下 JSON 有效负载请求服务器:
"identifier": "it's identifier",
"machine_id": "it's machine id",
"payload" : "AES_variant_of_your_choice(IV=part of identifier, KEY=machine_id, CLEAR_TEXT=nonceA+tsA+others identifier)"
选择 AES 变体时要小心,因为有些变体可能会泄露信息和/或允许修改信息。