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

从Java程序存储/读取敏感数据,java,database,security,encryption,storage,Java,Database,Security,Encryption,Storage,我正在编写一个程序,该程序需要将数据持久地存储在机器上的某个位置,这样当我关闭程序时,数据不会消失。 数据是我不能散列的,因为程序需要检索它的值 这个数据库需要超级安全,这样只有程序本身才能访问这个存储,而其他什么都不能访问 现在,SQL对我来说似乎非常不安全,如果您可以访问SQL,您可以访问其中包含的每个数据库,唯一的方法是加密我插入的一些数据,但这将导致存储另一个密钥 这是我需要存储的内容的结构: FileName | Key | GroupOwner --

我正在编写一个程序,该程序需要将数据持久地存储在机器上的某个位置,这样当我关闭程序时,数据不会消失。 数据是我不能散列的,因为程序需要检索它的值

这个数据库需要超级安全,这样只有程序本身才能访问这个存储,而其他什么都不能访问

现在,SQL对我来说似乎非常不安全,如果您可以访问SQL,您可以访问其中包含的每个数据库,唯一的方法是加密我插入的一些数据,但这将导致存储另一个密钥

这是我需要存储的内容的结构:

FileName  |         Key         | GroupOwner
----------|---------------------|-----------
foo.txt   | $iv44dsfggsdvav523v | adminGroup
----------|---------------------|-----------
bar.txt   | %iihg9v8326h5798v93 | adminGroup
基本上,文件存储在服务器上并用密钥加密,如果有人闯入服务器,他们不应该能够读取密钥,从而解密文件,但只有程序能够做到这一点


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

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

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

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

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

换句话说:在某个时刻,你需要信任。如果“攻击者”能够访问运行软件的系统,则所有赌注都将取消。因为这样他就可以使用调试器进行攻击;或者甚至通过撕开驱动器;并在不同的系统中进行分析


意思是:你不能保护自己免受一切伤害。当您的程序在您控制的硬件上运行时;那么,你是“受保护的”。但如果不是;那么你就不能在这个系统上存储敏感信息了

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

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

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

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

换句话说:在某个时刻,你需要信任。如果“攻击者”能够访问运行软件的系统,则所有赌注都将取消。因为这样他就可以使用调试器进行攻击;或者甚至通过撕开驱动器;并在不同的系统中进行分析


意思是:你不能保护自己免受一切伤害。当您的程序在您控制的硬件上运行时;那么,你是“受保护的”。但如果不是;那么你就不能在这个系统上存储敏感信息了

关于SO-有几个类似的问题,这是一个很好的概述(即使它适用于web应用程序)


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

有一些类似的问题,这是一个很好的概述(即使它适用于web应用程序)

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