我想使用Java加密某些数据(一些简单的文本):
换句话说,我希望我的应用程序能够自己加密某些数据,而不必每次都需要密钥,并且我希望此密钥本身可以加密(而不是以纯文本形式存储),这样攻击者就无法获得它。
我可以使用哪些工具/技术来实现这一目标?
将获得对服务器访问权限的攻击者将无法获取存储的密钥
这通常是一个问题,主要是在数据旁边有加密密钥时。一旦密钥泄露,攻击者就无法阻止解密数据。您的主要任务是防止攻击者首先获得对密钥的访问权(我知道,这很容易说)。
似乎您只想将密钥保留在内存中,在许多情况下,这可能是个好主意。解密时,最后无论如何都需要将密钥存储在内存中。
我希望此密钥本身被加密(不存储为纯文本)
然后,您需要存储和维护加密密钥以对第一个密钥进行加密。而且您有保护两个密钥的相同问题。
建议:
我经常看到使用外部服务来管理密钥或执行加密操作(密钥库,密钥管理服务,HSM,TPM等)的解决方案。但是,如果攻击者获得了完整的应用程序级别访问权限,则他可能会使用相同的服务来解密数据。
但是至少如果数据泄漏(以我的经验,经常备份或旧副本泄漏),这些服务将有助于使数据不可访问。