在不受信任的客户端上保护Java运行时数据

时间:2009-04-09 16:09:55

标签: java security encryption

我甚至不确定这是否可行,但在不受控制的客户端上保护端到端运行时数据是否可行?

具体来说,Java中是否有任何功能可以接收加密数据,处理加密数据并将其发送回加密,所有这些功能都不会将明文数据暴露给可以完全访问客户端的好奇第三方?

此外,我知道代码混淆仅仅是对具有反编译器的专用人员的烦恼,因此我假设攻击方具有完整的源/操作知识。

我对答案感兴趣。如果没有现有的功能,给定Java的架构是否可行?如果Java无法做到,那还有其他语言/平台吗?我担心这可能需要特殊的硬件。

3 个答案:

答案 0 :(得分:1)

如果客户端没有被锁定,基本上不可能完全安全。在某些时候,字节将存在于内存中,并且该内存可以被恶意应用程序读取。

如果您的目标不是让它完全安全,而只是为了随便让人感到好奇,那么请确保不要将数据写入临时文件或其他任何可以轻易检查的地方。

答案 1 :(得分:1)

为了有机会做你正在谈论的事情,你需要特殊的硬件。您不能在不安全的图层“顶部”安装一个安全层。例如,如果攻击者完全控制硬件,他总是可以破坏在该主机上运行的操作系统。

特殊硬件称为“可信平台模块”或TPM。这支持远程证明,这将允许您验证客户端是否未被篡改。 TPM的某些部分可在许多计算机上使用(例如,我的戴尔笔记本电脑)。事实上,我认为美国联邦政府购买的所有计算机都必须拥有TPM。但是,大多数消费者都没有启用TPM,而且隐私权倡导者对TPM存在很多敌意。我也不确定有多少台TPM机器都包含远程证明功能。

无论如何,最重要的是,你不能给某人一个秘密,以及这个秘密的关键,并期望它仍然是一个秘密。你必须保持对整个堆栈的控制,从上到下。 Trusted Treacherous Computing允许您这样做,即使您没有合法拥有相关硬件。

答案 2 :(得分:1)

不仅“不能做”,而且“容易妥协”。

查看'面向方面的编程'和字节编译器类。这通常用于插入数据库事务,性能日志记录,日志记录语句(因此您可以从源代码中删除调用并使其更清晰),访问控制(因此您将实现和授权分开)等等。如果你可以安静地将一个课程包装在另一个课程中,你可以做很多非常有用的事情。

但这也意味着将你的类包装起来捕获你的应用程序中的所有未加密的消息,加密密钥等是微不足道的。我想即使你在一个长程序中做所有事情我也可以进入,尽管它可能需要多一点努力。