代码之家  ›  专栏  ›  技术社区  ›  Mike Lewis

在不可信客户端上确保Java运行时数据

  •  0
  • Mike Lewis  · 技术社区  · 15 年前

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

    具体地说,Java中是否有任何功能在加密数据中进行处理,并将其加密返回,所有这些都不将明文中的数据暴露给拥有完全访问客户端的好奇的第三方?

    另外,我知道代码混淆对于一个有反编译器的专门人员来说只是一个麻烦,所以我假设在这种情况下,攻击方拥有完整的源代码/操作知识。

    不管怎样,我都对答案感兴趣。如果没有现有的功能,Java的体系结构是可行的吗?如果Java不能做到这一点,还有其他语言/平台可以吗?我担心这可能需要特殊的硬件。

    3 回复  |  直到 15 年前
        1
  •  1
  •   erickson    15 年前

    为了有机会做你所说的事情,你需要特殊的硬件。您不能在不安全层的“顶部”有安全层。例如,如果攻击者对硬件拥有完全控制权,他总是可以危害在该主机上运行的操作系统。

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

    总之,底线是你不能给别人一个秘密,和秘密的钥匙,并期望它仍然是一个秘密。您必须保持对整个堆栈的控制,从上到下。 可信的 危险的计算允许你这样做,即使你没有合法拥有相关的硬件。

        2
  •  1
  •   Sheldon    15 年前

    如果客户机没有被锁定,就根本不可能完全安全。在某个时刻,字节将存在于内存中,并且该内存可以被敌对的应用程序读取。

    如果您的目标不是使其完全安全,而只是不方便偶然好奇的人使用,那么请确保不要将数据写入临时文件或其他任何容易检查的地方。

        3
  •  1
  •   bgiles    15 年前

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

    看看“面向方面编程”和字节编译器类。这通常用于插入数据库事务、性能日志记录、日志记录语句(这样您就可以从源代码中删除调用并使其更干净)、访问控制(这样您就可以分离实现和授权)等。如果您可以悄悄地包装一个CLA,那么您可以做很多非常有用的事情。和另一个。

    但这也意味着封装类以捕获应用程序中的所有未加密消息、加密密钥等是很简单的。我认为即使您在一个长的过程中完成了所有操作,我也可以进入,尽管这可能需要付出更多的努力。