如何隐藏Flash或Java中的盐码?

问题描述:

我需要能够将数据从Flash浏览器应用程序传输到Web服务器上的PHP文件,同时保护和验证数据,同时尝试阻止未经授权的消息创建。 (我想尝试确保消息来自应用程序,而不是通过其他方式发送消息的用户)。如何隐藏Flash或Java中的盐码?

在C++应用程序中,我将Salt数据与数据一起发送,然后根据数据验证哈希以确保完整性和源数据。

但是,在Flash(& Java)中,可以反编译应用程序,以便可以查看源代码。因此,如果我使用这种方法,有人可以(相对)轻松地找到盐,然后创建自己的“有效”消息以在应用程序之外发送。

有什么办法可以'隐藏'这个盐码来帮助确保传输?是的,我知道有代码混淆器,但它们不会完全隐藏代码,只需添加另一个图层即可。

或者是否有另一种方法完全可以用来在PHP端传输数据并验证源代码的内容&?

+0

C++二进制文件也可以被反编译。你不能在二进制文件中“隐藏”某些东西。对于这种方式使用SSL,并确保服务器证书有效。 – halfdan 2011-04-08 12:07:22

+0

我同意上述内容,但即使如此,SSL也只能保护客户端与服务器之间的通信。即使使用SLL,客户创建的流量也可以由用户修改。 – 2011-04-08 12:08:37

+0

如果你有一个中间人操纵第一次握手,那么他可以查看和操纵发送的任何数据,所以SSL不是100%安全的。但时机必须正确。 – ITroubs 2011-04-08 12:17:36

无论你做什么,代码都会在客户端执行,而你所能做的只是混淆。正如Tomasz所说,如果您要让客户端与服务器进行身份验证,然后接收盐(或非对称密钥对中的密钥),则仍然需要具有连接到客户端中该服务器所需的所有代码。所以设计上,不管你做什么,所有要做的事情都必须在客户端,因此在你的“黑客”电脑上。这只是黑客要了解它的一个更难的问题。

对于所有类型的客户端都是如此,无论他们使用什么语言编写。如果DVD播放器可以在电视上显示解密的DVD光盘,则必须有密钥在内存中解密,你可以找到。这就是为什么没有人做出完美的版权保护:)

编辑: 正如所有其他人所说。现成的混淆器可能是最好的选择,你可以让客户首先跳过一些额外的箍。

编辑2: 原来我没有正确理解Tomasz。如果用户自己拥有向服务器进行身份验证以获取哈希的密钥,那么确实会验证该消息是从用户发送的,但仍不是来自应用程序。如果这是避免作弊的问题,那么黑客可能已经是客户(购买产品或开立账户)。如果你想要认证用户,那么这是一个完全不同的问题,这是很有可能的。 (当然有它自己的问题)

+0

我的意思是让屏幕前面的用户进行身份验证,以便在应用程序本身中没有键。如果钥匙在应用程序中,那么实际上你可以做的事情不多。 – 2011-04-08 12:24:19

没有真正安全的方法来保护在客户端上运行的程序。 (C++也可以通过这种方式进行反编译。)用户总是可以运行被黑客入侵的客户端,并且任何加密密钥都必须以某种形式出现在代码中。对于偶然的黑客来说,您可能会使其更加困难,但就是这样。无论你实施什么,都会成为另一种混淆形式;你可以看看现成的混淆器。

也许首先通过服务器进行身份验证,从服务器获取一个salt key,然后使用它?这样,即使能够反编译应用程序,用户也想伪造消息也必须进行身份验证。

除此之外 - 在某些时候,您总是需要应用程序可用的密码,哈希,密钥(或任何需要加密或验证数据的密钥),或者先从服务器获取它或嵌入应用程序,这可以通过反编译来识别。

编辑

正如其他人所指出的,没有100%的安全,一切都可以被黑客入侵,关键是要使其不太容易,以防止随意黑客,仅此而已。正如Jim所说的那样,一个脱壳的混淆器可能是最好的折衷方案。