java – 关于密钥库使用的基本问题

我有一个生成SecretKeys的应用程序,每个客户端一个.这些需要保存在我们的数据库中.我真的不熟悉常见的安全模式或实现,我正在寻求建议.

KeyStore类似乎被广泛使用,尤其是保护SecretKeys.但是,我看到很少提及将KeyStore与数据库一起使用,我试图弄清楚它是否是因为它是基本用法(因此没有提及),或者是因为这是一个糟糕或冗余的方法,我应该真的使用不同的技术.

基本设计是每个用户都有自己的密钥库,通过转换为字节(使用load()和store(),可以保存/加载到数据库中).

到目前为止,这个设计有什么问题?我也想知道如何处理KeyStore的密码.我们只考虑对所有KeyStore使用单个密码,但是如何在没有密钥库的情况下安全地存储这个密码?

这意味着要在后端应用程序中使用,客户端永远不会向我们传输密码,服务器端也没有人工运算符提供密码.

解决方法:

在现实世界中,秘密密钥在HSM中被安全地存储(强调我的),如果它们意图被安全地存储,则在很长一段时间内(从几小时到几年). PKCS#11标准旨在帮助与这些系统连接,但我会说最少 – 大多数HSM都有自己的首选机制来连接HSM,而PKCS#11接口通常证明是残缺的一.

密钥也可以安全地存储在智能卡和USB令牌等其他设备中,但这意味着大众之间的密钥分配,而不是后端系统的密钥存储.

然而,并非每个人都获得HSM的预算,并且使用了许多其他不太安全(并且明显更便宜)的替代方案.某些系统(我将以Glassfish应用程序服务器为例)存储主密码,用于保护其他密码.这同样适用于密钥 – 会有一个主密钥用于保护其他密钥(在某种程度上,这类似于HSM在内部的工作方式).当然,您仍然坚持使用主密钥.在某些环境中,这很容易,因为您可以将密钥放在仅限于系统管理员和应用程序的文件中,而不是其他任何人.

免责声明:这些都不应被视为盲目摄取的建议:-).如果需要不惜一切代价保护您的钥匙,请投资HSM.

上一篇:Android Java更新证书和Android KeyStore中的私钥


下一篇:uni-app 云打包证书生成笔记