我有一个包含敏感信息的数据库。我可以在读写操作上加密/解密数据。问题是我需要将密钥存储在应用程序中。如果有人黑了他们的方式,他们可以访问数据库,然后他们也可以抓住应用程序(java)来解压缩它并拉出密钥。好的,所以我现在加密了我的数据,我在哪里隐藏密钥?
这看起来好像是一个减速带。还有哪些其他解决方案?
我有一个包含敏感信息的数据库。我可以在读写操作上加密/解密数据。问题是我需要将密钥存储在应用程序中。如果有人黑了他们的方式,他们可以访问数据库,然后他们也可以抓住应用程序(java)来解压缩它并拉出密钥。好的,所以我现在加密了我的数据,我在哪里隐藏密钥?
这看起来好像是一个减速带。还有哪些其他解决方案?
要求用户输入密码才能访问其数据。在代码中隐藏密钥就是默默无闻的安全性。
加密密钥(使用DPAPI),把它放在一个文件,把一个ACL对文件等等
我假设你有办法让他们之前验证用户的凭据访问数据库?
通常对于这类事情的体系结构如下:
客户端连接到服务器,然后将其连接到数据库。 服务器确保客户端在允许其访问敏感信息之前进行正确的身份验证。解密密钥仅存储在服务器上。没有人应该有权访问服务器,特别是包含密钥的文件。这样客户端就不必进行任何加密/解密操作,也不必存储任何密钥。
是的,但OP的原始问题是“如果服务器受到威胁,我如何阻止他们发现密钥”,这是一个完全不同的问题。我喜欢Kent使用操作系统内置密钥管理的想法 – Coderer 2009-01-22 14:51:46
您唯一能做的就是难以从应用程序中提取密钥。你不能让它变得不可能。如果您向某人提供了一盒包含您想保护的内容的盒子,则必须为他们提供密钥才能让他们访问这些内容。一旦你给他们钥匙,他们可以做任何他们想做的事......如果他们不费力地找到钥匙。
这是一个鲍勃和夏娃是同一个人的情况下,你想让鲍伯访问但停止伊娃看到它。
这是DRM,它不起作用。
将密钥存储在CSP容器中。考虑Java CSP here。
这是IMO最安全的方式。但是您也可以考虑将密钥存储在受操作系统使用某种ACL保护的文件中。
要求用户使用强密码登录;使用密码作为密钥的对称加密算法来解密不对称数据库关键
保持在安全存储器中的DB键的应用程序运行时(如果这是一个选项)
DPAPI只适用于Windows相关的,但这是一个合理的建议... – 2009-01-22 14:19:13
它也是机器特有的,所以如果你将你的数据库迁移到新的服务器上,你的密钥将不可解密。 – Russ 2009-01-22 14:59:28