【问题标题】:How to encrypt data using a private key/password that is itself encrypted?如何使用本身加密的私钥/密码加密数据?
【发布时间】:2019-10-12 16:50:44
【问题描述】:

我想用 Java 加密一些数据(一些简单的文本):

  • 我必须一次向将运行应用程序的服务器提供编码密钥/密码。
  • 然后应用程序可以使用之前存储的密钥自行加密数据。
  • 获得服务器访问权限的攻击者将无法获取存储的密钥。

换句话说,我希望我的应用程序能够自己加密一些数据,而不需要每次都需要密钥,并且我希望这个密钥自己加密(不以纯文本形式存储),这样攻击者就无法得到它。

我可以使用哪些工具/技术来实现这一目标?

【问题讨论】:

    标签: java encryption encryption-symmetric


    【解决方案1】:

    获得服务器访问权限的攻击者将无法获取存储的密钥

    这通常是一个问题,主要是在您的数据旁边有一个加密密钥时。一旦密钥泄露,没有什么能阻止攻击者解密数据。您的主要任务是防止攻击者首先获得对密钥的访问权(我知道,这很容易说)。

    似乎您只想将密钥保留在内存中,这在许多情况下可能是个好主意。解密时,最后密钥无论如何都需要在内存中。

    我希望这个密钥本身被加密(不以纯文本形式存储)

    然后你需要存储和维护一个加密密钥来加密第一个密钥。你有同样的问题来保护这两个密钥。

    建议:

    我经常看到使用外部服务来管理密钥或执行加密操作(密钥库、密钥管理服务、HSM、TPM 等)的解决方案。但是 - 如果攻击者获得完全的应用程序级访问权限,他可能会使用相同的服务来解密数据。

    但至少如果数据泄露(根据我的经验,备份或旧副本经常泄露),这些服务将有助于使数据无法访问。

    【讨论】:

    • 感谢您的帮助。有一个加密的目录呢?一个目录,它会自动加密放入其中的文件。我发现了这个:unix.stackexchange.com/a/28621/343724你对这个解决方案有什么想法?
    • @electrotype 该解决方案加密底层存储(磁盘),但应用程序需要并获得对存储文件的明文访问。这可以防止访问退役/被盗的硬件,但不能访问服务器(这非常关键)。一旦你把钥匙放在某处,你就会面临这种威胁,你将不得不处理它
    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2019-06-30
    • 1970-01-01
    • 2015-03-13
    相关资源
    最近更新 更多