安全存储AES密钥

时间:2011-07-27 13:19:26

标签: c encryption openssl aes

我在一个解密文本文件的程序中使用OpenSSL,然后在每次程序启动时使用新文本和新的加密密钥对其进行重新加密。我想在运行程序的实例之间安全地存储密钥。这样做是否有一种简单/体面安全的方式?

3 个答案:

答案 0 :(得分:3)

如果您不希望在安装了该应用程序的计算机上发生硬核攻击,您可以始终硬编码在您的应用程序中使用另一个加密密钥,以便安全地保存以前的关闭应用程序之前,文件系统中的会话AES键,并在您启动应用程序时将其检索回来。如果出现以下情况,您可以提高安全性:

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

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

  • 你使用了一个asimetric密钥算法(使得破解更难......但在这种情况下......只是一点点)

  • 你把其他东西(虚假)放在文件中而不仅仅是钥匙

答案 1 :(得分:1)

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

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

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

考虑到更复杂的解决方案需要更多地了解您的上下文(攻击来自何处,文件的生命周期等)。但在走向那么远之前......是否需要走那么远?我的意思是:你的程序是否有破解尝试的风险?如果它被破解,它是否具有批判性?如果不可破解或不严重,上面的第二个选项就足够了。

答案 2 :(得分:1)

如果目标主机有TPM芯片,您可以利用它。在trousers project

的帮助下,可以将OpenSSL配置为使用TPM