我有一个包含敏感信息的数据库。我可以在读写操作上加密/解密数据。问题是我需要将密钥存储在应用程序中。如果某人已经破解了他们的方式,他们可以访问数据库,那么他们也可以抓住应用程序(java)将其解压缩并拉出密钥。
这似乎是最好的减速带。还有哪些其他解决方案?
答案 0 :(得分:5)
您唯一能做的就是难以从应用程序中提取密钥。你不能让它变得不可能。如果你给某人一个包含你想要保护的内容的盒子,你必须给他们钥匙,如果你希望他们能够访问这些内容。一旦你给他们钥匙,他们就可以做任何他们想做的事......如果他们不厌其烦地找到钥匙。
这是鲍勃和夏娃是同一个人的情况,你想让鲍勃访问,但阻止夏娃看到它。
这是DRM,它不起作用。
答案 1 :(得分:3)
我假设您有一些方法可以在允许用户访问数据库之前验证用户的凭据吗?
通常这些事物的架构如下:
客户端连接到服务器,然后服务器连接到数据库。 在允许客户端访问敏感信息之前,服务器会确保客户端正确进行身份验证。解密密钥仅存储在服务器上。没有人应该有权访问服务器,尤其是包含密钥的文件。这样客户端就不需要进行任何加密/解密,也不必存储任何密钥。
答案 2 :(得分:3)
阅读密钥库。
答案 3 :(得分:2)
要求用户输入密码才能访问其数据。埋没代码中的密钥是默默无闻的安全性。
答案 4 :(得分:2)
将密钥存储在CSP容器中。考虑Java CSP here。
这是IMO最安全的方式。但您也可以考虑将密钥存储在受操作系统保护的文件中,使用某种ACL。
答案 5 :(得分:1)
要求用户使用强密码登录;使用密码作为对称加密算法的密钥来解密非对称数据库密钥
在应用程序运行时将db密钥保存在安全内存中(如果这是一个选项)
答案 6 :(得分:-1)
加密密钥(使用DPAPI),将其放在文件中,在该文件上放置ACL等...