0

就像我们现在的 .jar 文件一样,我们可以打开它并使用任何反编译器查看代码和类。现在假设以下情况:

我在 JAVA 下开发了一个客户端-服务器应用程序,在客户端和服务器中,我使用 AES-256 来加密通过互联网发送的数据。所以,我把“客户”给了我的朋友。现在..问题是......他能否破解我的服务器,知道客户端如何接收、处理和发回数据包?我的意思是......当你有一个泄露的代码时加密数据,它......是徒劳的,不是吗?

问题是......我可以做些什么来在服务器中获得最好的安全性?在这种情况下加密有效吗?

谢谢 !!!

4

3 回答 3

4

不要使用加密来隐藏客户端-服务器协议的工作方式。如果您希望您的服务器是安全的,即使客户端完全控制发生的事情,也要确保它是安全的。

正如您所提到的,控制客户端很容易:不仅通过反编译,还可以通过在调试器中运行客户端(可以修改任何对象的内容,修改控制流等)。

那么,我的观点是:

  1. 确定服务器中潜在攻击向量的位置并解决这些问题非常重要。例如,如果您希望能够将 cookie 发送给客户端,并且您希望他们原封不动地发回,那么您不需要为此加密;只需使用 HMAC。
  2. 如果您真的想加密客户端和服务器之间的流量,请不要使用直接的 AES(特别是因为听起来您使用的是不安全的固定密钥)。您想使用专为有线加密设计的协议,例如 TLS (SSL)。是的,真正使用 TLS(包括从证书颁发机构获取证书);不要走捷径。

    TLS 的好处是您无需将共享机密(例如密钥)嵌入到您的 jar 中。因此,您无需担心隐藏。

于 2013-08-21T18:32:24.533 回答
1

如果他入侵你的服务器你的意思是他的意思是弄清楚进入数据包的协议和内容,然后发送时髦的数据包让你的服务器在意想不到的时间做意想不到的事情,解决方案似乎不是加密而是强大验证。也就是说,您的服务器应该在协议的每个步骤中只期望传入数据包中的一组有限值,并且如果某些传入数据包不符合此/尝试做一些意想不到的事情,它们应该被丢弃。

于 2013-08-21T18:37:43.827 回答
1

您的加密不允许您隐藏协议/API/等。客户端和服务器用来相互通信的。通过对客户端和服务器之间流动的数据进行加密,您可以防止有人在通过网络(可能是互联网)时观察该流量的人窥探数据。

要记住的一个问题是 AES 需要客户端和服务器都知道的密码。如果您的密码被硬编码在 jar 中,那么任何拥有该 jar 的人都可以窥探您的服务器与连接到它的任何客户端之间的任何流量。因此,您需要一种安全的方式让客户端和服务器就用于给定连接的密码达成一致。

我建议使用基于 SSL 的技术来加密在线传输的数据(例如,也许您可​​以简单地使用 HTTPS 作为您的协议)。或者也许使用公钥加密。

鉴于缺乏有关客户端和服务器之间通信模式的信息,很难做出具体的建议。

于 2013-08-21T18:39:22.663 回答