当密钥库密码与密钥本身一样容易受到攻击时,Java密钥库(JKS,JCEKS)的意义何在?



我有一些代码可以加密一些用户数据。目前,我将密钥存储在运行时加载的配置文件中。这很糟糕,原因有很多,即如果有人可以访问配置文件,他们可以访问密钥。所以我开始研究Java密钥库,但我似乎无法证明它们的合理性。密钥库需要密码,这与硬编码密钥一样容易受到攻击。我是否遗漏了某些内容,或者密钥存储是否遭受与硬编码密钥相同的弱点?

通过使用 JKS 或任何密钥库,您实际上是迈出了将密钥保护需求从应用程序或服务器卸载到密钥库或该密钥库的用户的第一步。 有很多保护密钥和密钥库的准则可能会变得非常花哨(HSM等),但利用JCE架构只是第一步。与此同时,不妨开始将安全性融入您的应用程序中。

https://security.stackexchange.com/questions/11517/storage-of-secrets-keystores-hsms-and-the-rest

我看到的一个常见架构是应用程序使用私钥加密数据,或者应用程序必须解密特定开发/测试/生产环境的数据库凭据。 开发人员将代码和配置提交到代码存储库。 但是,用于加密/解密的密钥由另一个团队创建并存储在其他地方。部署服务器或容器时,密钥库随之部署。 构建包含配置文件的代码库并将其部署到服务器上。 开发人员永远无法访问解密密钥,密钥永远不会在代码存储库中。

在具有抽象应用程序密钥的密钥库中,您可以访问多个物理资源密钥。

实际上,密钥库访问是一个关键的断点。但是,存储的密钥是集中存储的,并且再次受密码保护。此外,存储密钥的更新是集中完成的,而不是在应用程序中的某个点。

此外,更新密钥库的密码比更新存储的密码更容易,后者取决于使用情况,就像其他后端系统一样。

最新更新