java 存储AES加密密钥的最佳方式是什么?

ua4mk5z4  于 2023-06-28  发布在  Java
关注(0)|答案(4)|浏览(246)

我们使用Tomcat作为我们的Java Web应用程序。WEB-INF文件夹下有一个属性文件。
AES加密将用于生成密钥和加密密码。加密的密码将存储在属性文件中。加密密钥应存储在何处?将密钥和加密的密码放在同一个属性文件中是个好主意吗?还是应该将密钥存储在“webapps”目录之外?

xu3bshqb

xu3bshqb1#

在Windows上,您可以使用注册表和DPAPI。使用注册表确实很糟糕,但如果你想获得绝对的安全性,并利用操作系统来存储有价值的数据,这是一个必要的痛苦。
在其他OS X上,您可以使用Keychain。
在linux上,我会使用文件权限来保护文件。
你的建议是:
将密钥和加密的密码放在同一个属性文件中是个好主意吗?
就像把你的钱存在保险箱里,然后把保险箱的密码写在便签纸上,再把便签纸贴在保险箱上。你所做的只是让小偷感到不方便,但没有增加任何有意义的安全级别。
如果属性文件足够安全,可以存放加密密钥,则可以在其中以纯文本形式存储密码。

hmae6n7t

hmae6n7t2#

您是否考虑过Java API中的KeyStore类。它是Sun的Java Cryptography Architecture的一部分。

oyt4ldly

oyt4ldly3#

我有以下建议,
1.不要将密钥存储在WAR中。我们将确保每个安装的密钥安全的责任。在生产中,我们实际上可以通过将密钥文件存储在智能卡上来保护它。
1.请确保您的关键点是版本,以便您可以定期旋转它。
1.存储密码短语以生成密钥,而不是原始密钥材料。这使得添加新键变得更容易(你不必担心算法或键大小等)。这也增加了一些模糊性。

z4bn682m

z4bn682m4#

我将遵循这个article并将SecretKey转换为Base64编码字符串。然后,该密钥沿着初始化向量可以被保存到与活动事务数据库不同的任何数据库,并且稍后在其他服务中获取以用于解密。将为生成的每个密钥使用别名,以便可以正确标记它们。

相关问题