我在解密文本文件的程序中使用OpenSSL,然后每次程序启动时都使用新文本和新加密密钥对其进行重新加密。我想在程序运行的实例之间安全地存储密钥。有没有一种简单/安全的方式来做到这一点?安全存储AES密钥
回答
如果你没有想到的是,应用程序安装在机器上的硬核攻击,你可以随时硬编码你的应用程序中,你会为了使用另一个加密密钥安全地保存在前一交易日AES
关键关闭应用程序之前的文件系统,并在启动应用程序时将其恢复。你可以提高一点安全,如果:
你不存储harcoded键成一个字符串,而是在几个字符串,然后你在一个函数
你保存文件拼接在一个相对“不知名的”/不受欢迎的位置,如孤立存储或Windows \ Temp而不是应用程序文件夹
您使用一个asimetric密钥算法(使裂纹更难..但在这种情况下..只是一点点)
你把其他的东西(假的)在文件中不只是关键
这就是我工作的公司(大银行)用于执行加密,使用每个应用程序发布的密钥加密密钥造成的严重混淆。这不像反思工程混淆的字节码那样容易。现在,我们使用PKI和HSM来存储密钥。 –
默默无闻的安全性并不安全。您必须假设攻击者可以访问除键之外的所有内容。 –
@JulieinAustin原则上同意;不要只依赖默默无闻。然而,默默无闻可以帮助很多,除非你保护的东西如此宝贵,以至于攻击者将毫不留情。另外,“误导”:如果你可以误导攻击者浪费大量时间来看待安全问题,那么你可能会阻止他们。这是“客厅背后隐藏的巨型保险箱,其中包含贵重物品,但不包含您的重要财务文件。” – ToolmakerSteve
如果你的程序是不是在安全区域(如果它的二进制代码进行检查,发现它会包含任何键或将它定义任何算法),有没有简单的方法:
你可以以编程方式混淆密钥并将其存储在文件中,但在这种情况下,打破混淆算法就足以找到密钥。实际上,这会降低加密算法的强度。不是一个好的方式去。
您也可以使用嵌入在程序中的静态密钥(称为B)来加密密钥(称为A here)本身,但在这种情况下,您将失去每次更改密钥A的兴趣。这是因为找到嵌入到程序中的密钥B足以找到保存在磁盘上的任何加密密钥A.这也不会令人满意。
考虑到更复杂的解决方案需要了解您的上下文多一点(攻击来自哪里,文件的生命周期是什么等)。但在这么远之前......是否需要走这么远?我的意思是:你的程序是否有破解企图的风险?如果它被破解,这是否是批评性的?如果不可破解或不重要,上面的第二个选项应该足够了。
如果目标主机有一个TPM芯片,你可以利用它的优势。 OpenSSL可以配置为使用TPM,借助trousers project
- 1. 存储AES密钥
- 2. 如何在C++中安全地存储AES加密密钥?
- 3. 何处存储AES密钥?
- 4. 安全地在Android设备中存储AES密钥
- 5. 如何在iPhone上安全地存储AES密钥
- 6. PHP中的AES-256和安全存储密钥?
- 7. 沿着加密的AES密钥存储密码哈希的安全隐患
- 8. AES加密和密钥存储?
- 9. 如何安全地存储密钥?
- 10. Android的安全存储密钥
- 11. 如何使用.Net(C#)在Windows中安全地存储AES密钥?
- 12. 私钥的安全存储
- 13. RSA加密 - 解密AES密钥并存储在文件
- 14. 用于AES加密的生成密钥的安全
- 15. 如何在Silverlight 4中安全地存储密钥或私钥?
- 16. 密钥容器,足够安全地存储私钥?
- 17. 加密AES密钥?
- 18. AES密钥,加密
- 19. 存储密钥和密码的安全方法,用于asp.net
- 20. 如何解密本地存储的密钥尽可能安全
- 21. 安全的地方存储API秘密密钥
- 22. 如何安全地在.Net中存储加密密钥?
- 23. 在DefaultConfiguration中存储加密密钥是否安全?
- 24. 如何在android中安全地存储加密密钥?
- 25. 在PHP文件中存储加密密钥的安全性
- 26. 如何在java中安全地存储加密密钥?
- 27. Java的AES 256安全密钥生成器 - 非法密钥大小
- 28. 什么是存储AES加密密钥的最佳方式?
- 29. 安全密码存储
- 30. iOS的钥匙串和加密密钥,如何保持安全,直到存储
您想要在两次独立执行之间存储密钥,还是希望在多个运行实例之间共享密钥? –
两次独立执行之间。 – HighLife
这是一个非常难以解决的问题,无需外部硬件,即使如此也需要很大的努力。 –