好的,我现在已经加密了我的数据,那么我应该把密钥藏在哪里呢?

9

我有一个包含敏感信息的数据库。在读写操作时,我可以对数据进行加密/解密。问题是我需要在应用程序中存储密钥。如果有人已经黑入了数据库并能够访问它,那么他们也可以获取应用程序(Java),反编译它并提取密钥。

这似乎只是一个小障碍。还有哪些其他解决方案可用?

7个回答

5
你唯一能做的就是让从你的应用程序中提取密钥变得困难。你不能让它变成不可能。如果你给别人一个装着你想保护的东西的盒子,你必须给他们钥匙,如果你想让他们能够访问内容。一旦你给了他们钥匙,他们可以做任何他们想做的事情......只要他们费力找到钥匙。
这是Bob和Eve是同一个人的情况,你希望给Bob访问权限,但防止Eve查看。
这就是数字版权管理,它行不通。

3
我假设您有一种验证用户凭据的方法,然后才允许他们访问数据库?
通常这类事情的架构如下:
- 数据库 - 服务器 - 客户端
客户端连接到服务器,服务器再连接到数据库。在允许客户访问敏感信息之前,服务器会确保客户端正确进行身份验证。解密密钥仅存储在服务器上。没有人应该能够访问服务器,特别是包含密钥的文件。这样,客户端就不需要进行任何加密/解密操作,并且也不需要存储任何密钥。

1
是的,但OP最初的问题是“如果服务器被攻击了,我该如何防止他们找到密钥”,这是一个完全不同的问题。我喜欢肯特的想法,使用操作系统内置的密钥管理。 - Coderer

3

了解密钥库。


请查看Java的keytool。http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html - Bill the Lizard

2

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


2

将密钥存储在CSP容器中。可以考虑使用Java CSP。这是我个人认为最安全的方法。但是您也可以考虑将密钥存储在文件中,并使用某种ACL来保护操作系统。


如果用户重新安装操作系统,那么密钥会丢失吗? - Hemanshu Bhojak

1

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

在应用程序运行时将数据库密钥保存在安全内存中(如果有这个选项)


-1

对密钥进行加密(使用DPAPI),将其放入文件中,对该文件设置ACL等...


它也是机器特定的,因此如果您将数据库迁移到新服务器,则无法解密密钥。 - Russ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接