【问题标题】:Safely storing AES key安全存储 AES 密钥
【发布时间】:2011-10-14 06:30:42
【问题描述】:

我在一个程序中使用 OpenSSL,该程序解密一个文本文件,然后在每次程序启动时用新文本和新加密密钥重新加密它。我想在运行的程序实例之间安全地存储密钥。有没有一种简单/相当安全的方法来做到这一点?

【问题讨论】:

  • 您想在两个单独的执行之间存储密钥,或者您想在多个运行实例之间共享密钥?
  • 两次单独执行之间。
  • 这是一个在没有外部硬件的情况下很难解决的问题,即便如此也需要付出很大的努力

标签: c encryption openssl aes


【解决方案1】:

如果您的目标主机有TPM 芯片,您可以利用它。 OpenSSL 可以配置为使用 TPM,在 trousers project 的帮助下

【讨论】:

    【解决方案2】:

    如果您的程序不在安全区域(如果可以检查其二进制代码以找到它所包含的任何密钥或它所定义的任何算法),那么没有简单的方法:

    • 您可以通过编程方式混淆您的密钥并将其存储在一个文件中,但在这种情况下,破坏您的混淆算法就足以找到密钥。所以这实际上会降低对该算法的加密强度。不是一个好方法。

    • 您也可以使用嵌入在程序中的静态密钥(称为 B)对密钥(此处称为 A)本身进行加密,但在这种情况下,您将失去每次更改密钥 A 的兴趣。这是因为找到嵌入在程序中的密钥 B 就足以找到保存到磁盘的任何加密密钥 A。这也不能令人满意。

    考虑更复杂的解决方案需要更多地了解您的上下文(攻击可能来自哪里,文件的生命周期是什么等)。但在走那么远之前……有必要走那么远吗?我的意思是:你的程序有被破解的风险吗?它应该被破解吗,它那么关键吗?如果不可破解或不重要,上面的第二个选项就足够了。

    【讨论】:

      【解决方案3】:

      如果您不希望安装应用程序的机器受到硬核攻击,您可以随时在应用程序中硬编码另一个加密密钥,您可以使用该密钥安全地保存之前的session AES 在关闭应用程序之前输入文件系统并在启动应用程序时将其取回。如果满足以下条件,您可以提高一点安全性:

      • 您不会将硬编码的密钥存储到单个字符串中,而是存储在几个字符串中,然后将它们连接到一个函数中

      • 您将文件保存在相对“未知”/不受欢迎的位置,例如独立存储或 Windows\Temp 而不是应用程序文件夹

      • 您使用非对称密钥算法(使破解更加困难......但在这种情况下......只是一点点)

      • 您将其他内容(伪造的)放入文件中,而不仅仅是密钥

      【讨论】:

      • 这就是我工作的公司(大型银行)过去使用加密、严重混淆每个应用程序发布的密钥加密密钥的方式。对混淆的字节码进行逆向工程并不像您想象的那么容易。现在我们使用 PKI 和 HSM 来存储密钥。
      • 通过默默无闻的安全性不是安全性。您必须假设攻击者可以访问除密钥之外的所有内容。
      • @JulieinAustin 原则上同意;不要只依赖默默无闻。但是,默默无闻可以提供很大帮助,除非您保护的东西非常有价值,以至于攻击者会无情地进行攻击。此外,“误导”:如果您可以误导攻击者将大量时间浪费在您的安全上,您可能会阻止他们。这是“隐藏在客厅画作后面的巨大保险箱,里面装的是贵重物品,但不是你重要的财务文件。”
      • @ToolmakerSteve - 默默无闻取决于人们永远不会得到代码,这意味着你的雇主永远不会解雇你(非常好的事情!)或者如果你辞职,你会被枪杀(非常糟糕的事情)。安全性仅依赖于安全性,而不依赖于晦涩或混淆。其他都是一厢情愿,也不是安全。
      猜你喜欢
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2015-11-24
      相关资源
      最近更新 更多