【问题标题】:It's safer to store data in clear or to encrypt it and store the decryption key?以明文形式存储数据或对其进行加密并存储解密密钥更安全?
【发布时间】:2014-06-05 21:56:50
【问题描述】:

我正在编写一个需要处理重要数据的应用程序。我想知道将这些重要数据以明文形式存储到程序的变量中,还是将数据的加密版本存储到一个变量中并将解密密钥存储到另一个变量中是否更安全。

在我看来,这里的问题是,如果有人以明文形式访问数据或加密数据以及解密密钥,它基本上仍然可以访问数据。

那么,哪一个最安全,为什么?

将解密密钥存储到操作系统内置密钥环中而不是将其存储到变量中更安全?

有没有更安全的方法来做到这一点?

【问题讨论】:

  • 在某些时候,为了处理数据,需要明确。那你将如何存储它?否则,如果您不需要使用清晰的数据,那么您可能根本不需要密钥。
  • @deanosaur 是的,在某些时候,无论如何我都需要将它们以清晰的形式呈现,否则它们将毫无用处。顺便说一句,我想让整个过程尽可能安全。
  • 那么您想要的是确保将清除的数据和密钥存储在内存中,当您完成后可以擦除这些数据和密钥。例如,在java中,最好使用char[]而不是String来存储敏感信息,因为char[]可以在使用后被覆盖,而字符串是不可变的。
  • @deanosaur 感谢您的有益建议,我以后肯定需要实现这个(程序是用python编写的)。
  • 你想向谁隐藏数据?是否是用户的数据,而您试图保护它不被其他人看到?

标签: security encryption language-agnostic


【解决方案1】:

长期存储的敏感数据应始终加密。单独保管密钥,以免与数据一起被盗。您可以将其保存在 U 盘上的保险箱中(并在异地保存一份安全的备份副本)并定期更换。

实际正在处理的数据需要解密并以明文形式保存。确保在释放内存之前明确覆盖任何此类数据和密钥。您的操作系统可能会限制您可以执行的操作。例如,安全操作系统会擦除任何交换到磁盘的内存映像,而普通操作系统不会。

一些语言提供安全的存储类来保存诸如密钥之类的东西。阅读文档以了解已有的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 2015-07-04
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多