从Java程序中存储/读取敏感数据

我正在研究一个程序,它需要持久地在机器的某个地方存储数据,这样当我关闭程序时,数据不会消失。 数据是我不能散列的东西,因为程序需要检索它的值。

这个数据库需要超级安全,所以只有程序本身才能访问这个存储,而没有别的。

现在,对于我来说SQL似乎很不安全,如果你有权访问SQL,就可以访问其中包含的每个数据库,唯一的办法就是加密我插入的一些数据,但这会导致存储另一个密钥为了那个原因。

这是我需要存储的结构:

FileName  |         Key         | GroupOwner
----------|---------------------|-----------
foo.txt   | $iv44dsfggsdvav523v | adminGroup
----------|---------------------|-----------
bar.txt   | %iihg9v8326h5798v93 | adminGroup

基本上,文件存储在服务器上并用密钥加密,如果有人打破了服务器,他们不应该读密钥,从而解密文件,但只有程序应该能够做到这一点。

有什么方法可以存储只有我的程序可以读取和修改的数据吗?


这里有几个类似的问题 - 这是一个很好的概述(即使它适用于Web应用程序)。

总之 - 你不能解决这个问题,因为你有鸡与鸡蛋的问题。 常见的解决方案是将密钥存储在文件系统中,并使用操作系统的安全性来确保只有授权用户才能读取它。


最后,一个程序只不过是一个写下来的算法; 或者换句话说是一个协议。

含义:不管你把什么样的代码放到你的程序中, 最终它是关于一系列行动的。 从这个意义上说:另一个完全不同的程序总是有机会做同样的事情。

所以最终,“仅软件”解决方案总是会暴露一定的风险。

这就是为什么“高端”解决方案总是结合多个“层”。 提供不同的保护手段。

换句话说:在某些时候你需要信任 。 如果“黑客”在您的软件上运行的访问系统,那么所有的赌注都关闭反正。 因为那时他可以使用调试器进行攻击; 或者甚至通过拆除驱动器; 并在不同的系统中进行分析。

含义:你无法保护自己免受一切侵害。 当你的程序在你控制的硬件上运行时; 那么好吧,你是“受保护的”。 但是,如果没有; 那么你根本无法在该系统上存储敏感信息!

链接地址: http://www.djcxy.com/p/67701.html

上一篇: Storing/Reading sensitive data from Java program

下一篇: What is the best way to encrypt data in an application