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

时间:2017-03-03 15:51:17

标签: java database security encryption storage

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

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

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

这是我需要存储的结构:

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

基本上文件存储在服务器上并使用密钥加密,如果有人在服务器中断,他们应该无法读取密钥,从而解密文件,但只有程序应该能够这样做。 / p>

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

含义:无论您将哪种代码放入程序中;最后,它是关于一系列行动。从这个意义上讲:另一个完全不同的程序总是有可能做同样的事情。

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

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

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

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