过去几天我一直在研究敏感数据的存储。如果我将这些数据存储在数据库中,我相信普遍接受的做法是存储敏感数据加密,出于各种原因超出了这个问题的范围。
然而,加密数据意味着我必须管理这些数据的“秘密”。我已经看到了 2 条主要路径(在 Java 世界中),KeyStores 或 HSM。我的第一个问题是,还有其他有效的替代方案(在 Java 世界中)吗?
我可以在 java 中使用多种密钥库格式,仅举几例:
- jks
- 杰克斯
- pkcs12
- bks
- 超级
我很少看到有关密钥库安全性的信息。我一直在想,如果我访问密钥库,并且当我查看 java API 时,因为所有密钥库都受密码保护,我可以简单地暴力破解密钥库,无论它有多安全。然后第二个问题变成了,由于密钥库与加密数据位于不同的系统上并且由于它们受密码保护,因此这是普遍接受的做法,那么这对于现实生活条件来说“足够安全”了吗?将密码存储到密钥库怎么办?那里有任何公认的做法吗?例如,将其存储在另一个系统中?在应用程序启动时手动输入?将它放在一个受操作系统保护的文件中,只有应用程序可以读取它?
下一个问题是关于 HSM。既然我可以暴力破解密钥库,那么是什么阻止我对 HSM 做同样的事情呢?时间?由于没有文件可供我远程复制和使用,因此必须登录到远程系统?
最后一个问题是,是否有人知道在秘密管理方面什么是足够安全的?我认为它会根据使用秘密加密的信息类型而有所不同。从我在其他地方读到的内容来看,对于大多数典型场景来说,密钥库似乎已经足够好了,而在非常小众的场景中,对于 CA、政府等来说,HSM 是必要的。
任何见解表示赞赏。