2017-03-03 36 views
1

我正在研究一個程序,該程序需要持久地在機器上某處存儲數據,以便在關閉程序時數據不會消失。 數據是我不能散列的東西,因爲程序需要檢索它的值。從Java程序存儲/讀取敏感數據

該數據庫需要超級安全,以便只有程序本身才能訪問此存儲,而不是其他任何東西。

現在,對於我來說SQL似乎很不安全,如果您有權訪問SQL,您可以訪問其中包含的每個數據庫,唯一的方法是加密我插入的一些數據,但這會導致爲此另存一把鑰匙。

這是我所需要存儲的結構:

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

基本上文件都存儲在服務器上,並用密鑰加密,如果有人是在服務器打破他們不應該能夠閱讀密鑰,從而解密文件,但只有程序應該能夠做到這一點。

有沒有什麼辦法可以存儲數據只有我的程序可以讀取和修改?

回答

3

在SO - this上有幾個類似的問題是一個很好的概述(即使它適用於Web應用程序)。

總之 - 你不能解決這個問題,因爲你有一個雞與雞蛋的問題。常見的解決方案是將密鑰存儲在文件系統中,並使用操作系統的安全性來確保只有授權用戶才能讀取它。

2

最後,一個程序不過是一個寫下來的算法;或換句話說協議

含義:無論您將什麼樣的代碼放入程序中,最終它是關於一系列行動的。從這個意義上說:另一個完全不同的程序總是有機會做同樣的事情。

因此,最終,「僅軟件」解決方案總是會暴露某些風險。

這就是爲什麼「高端」解決方案總是結合多個「層」;提供不同的保護手段。

換句話說:在某些時候您需要信任。如果一個「攻擊者」有訪問到您的軟件正在運行的系統,那麼無論如何所有投注都是off。因爲那時他可以使用調試器進行攻擊;或者甚至通過拆除驅動器;並在不同的系統中進行分析。

含義:你無法保護自己免受一切侵害。當你的程序在你控制的硬件上運行時;那麼好吧,你是「受保護的」。但是,如果沒有;那麼你根本無法在該系統上存儲敏感信息!