2017-03-03 39 views
1

我正在研究一个程序,该程序需要持久地在机器上某处存储数据,以便在关闭程序时数据不会消失。 数据是我不能散列的东西,因为程序需要检索它的值。从Java程序存储/读取敏感数据

该数据库需要超级安全,以便只有程序本身才能访问此存储,而不是其他任何东西。

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

这是我所需要存储的结构:

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

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

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

回答

3

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

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

2

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

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

因此,最终,“仅软件”解决方案总是会暴露某些风险。

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

换句话说:在某些时候您需要信任。如果一个“攻击者”有访问到您的软件正在运行的系统,那么无论如何所有投注都是off。因为那时他可以使用调试器进行攻击;或者甚至通过拆除驱动器;并在不同的系统中进行分析。

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