2009-01-22 24 views
9

我有一个包含敏感信息的数据库。我可以在读写操作上加密/解密数据。问题是我需要将密钥存储在应用程序中。如果有人黑了他们的方式,他们可以访问数据库,然后他们也可以抓住应用程序(java)来解压缩它并拉出密钥。好的,所以我现在加密了我的数据,我在哪里隐藏密钥?

这看起来好像是一个减速带。还有哪些其他解决方案?

回答

2

要求用户输入密码才能访问其数据。在代码中隐藏密钥就是默默无闻的安全性。

-1

加密密钥(使用DPAPI),把它放在一个文件,把一个ACL对文件等等

+0

DPAPI只适用于Windows相关的,但这是一个合理的建议... – 2009-01-22 14:19:13

+0

它也是机器特有的,所以如果你将你的数据库迁移到新的服务器上,你的密钥将不可解密。 – Russ 2009-01-22 14:59:28

3

我假设你有办法让他们之前验证用户的凭据访问数据库?

通常对于这类事情的体系结构如下:

  • 数据库
  • 服务器
  • 客户

客户端连接到服务器,然后将其连接到数据库。 服务器确保客户端在允许其访问敏感信息之前进行正确的身份验证。解密密钥仅存储在服务器上。没有人应该有权访问服务器,特别是包含密钥的文件。这样客户端就不必进行任何加密/解密操作,也不必存储任何密钥。

+1

是的,但OP的原始问题是“如果服务器受到威胁,我如何阻止他们发现密钥”,这是一个完全不同的问题。我喜欢Kent使用操作系统内置密钥管理的想法 – Coderer 2009-01-22 14:51:46

3

阅读密钥库。

+0

他们是否使用Java?我所知道的所有密钥库都是特定于操作系统的 – TToni 2009-01-22 14:25:45

5

您唯一能做的就是难以从应用程序中提取密钥。你不能让它变得不可能。如果您向某人提供了一盒包含您想保护的内容的盒子,则必须为他们提供密钥才能让他们访问这些内容。一旦你给他们钥匙,他们可以做任何他们想做的事......如果他们不费力地找到钥匙。

这是一个鲍勃和夏娃是同一个人的情况下,你想让鲍伯访问但停止伊娃看到它。

这是DRM,它不起作用。

2

将密钥存储在CSP容器中。考虑Java CSP here

这是IMO最安全的方式。但是您也可以考虑将密钥存储在受操作系统使用某种ACL保护的文件中。

1

要求用户使用强密码登录;使用密码作为密钥的对称加密算法来解密不对称数据库关键

保持在安全存储器中的DB键的应用程序运行时(如果这是一个选项)

相关问题