2010-06-20 73 views
8

在我們的項目中,有幾個地方可以通過散列獲得。例如,我們在許可證和數據庫中的許可對象之間存儲加密引用以及未加密的引用。這是爲了確保用戶不能通過使用數據庫來更改他們已獲得許可的實體。加密和散列之間的區別

我們在任何地方使用加密的主要原因是我們已經有一個很好的加密庫和一個系統密鑰。除此之外,開發哈希庫似乎並不值得。

我們使用加密而不是散列來創建安全風險嗎?

+7

*開發*哈希庫? :( – 2010-06-20 21:21:59

+1

哈哈,好,我的意思是整合一個哈希函數庫,它可能不到一天的工作量,但我認爲這是一個很好的機會來學習更多關於安全性的知識 – Pace 2010-06-21 01:22:45

回答

5

通過將純文本和密文一起存儲,您正在創建一個很好的測試字符串存儲庫,如果有人想要找出您的密鑰。由於你顯然使用說密鑰加密一切我會說它一個風險。

請記住,中央數據庫的好處是有一天有人會獲取數據。如果歷史至少是任何教訓。

+0

關於允許測試字符串的明文的好處我沒有 – Pace 2010-06-21 01:23:12

+0

因此,如果不是中央數據庫,你會提出什麼樣的解決方案? – 2016-05-04 09:45:55

+0

基本上他們已經問過:散列而不是將明文和密文存儲在同一個位置。他們已經注意到散列是可能的解決方案。 – Joey 2016-05-04 12:19:52

1

那麼,加密是一個雙向的過程。假設您正在使用基於密鑰的加密,只要加密密鑰是安全的並且您使用現代算法(如AES)就可以保證安全。相反,散列是一種單向過程,實際上不可能從散列值重構散列輸入。所以,沒有密鑰,散列可能被認爲是更安全的。它也可能不那麼計算飢餓。

1

任何可以加密的數據也可以解密。

散列是一種單向過程,特別是如果您使用新的SHA2方法。

0

你已經將密鑰的保密性作爲一個弱點介紹了,我認爲這是一種風險,雖然測量嚴重性需要更多的細節。

另一方面,散列將完全依賴於查找衝突的難度,這可能比保留關鍵祕密更安全。

1

根據我的理解,您希望實現數據的完整性(即您希望實現沒有人會改變數據的未被注意的數據)。這可以通過使用數字簽名(例如RSA,DSA)或MAC(消息認證碼)來實現。 mac是數字簽名的對稱等價物,通常是不對稱的方案。

所以在你的情況下,MAC(例如HMAC)應該是一個不錯的選擇!

4

如果它是一個對稱密碼,並且系統部署在「敵對」環境中,那麼在激勵的個人可以隔離密鑰並簽署他們自己的(或其他)許可證之前,這是一個時間問題。數據。

在這些情況下,您需要使用不對稱密碼來用您的私鑰「簽名」許可證,該密鑰可以安全地存儲在電腦中的保險庫中,並且與外界無關。好的,只是在一個安全的環境中進行了一些小改變。

在這種情況下,純哈希將無法幫助,因爲它們可用於簽署僞造的許可證。如果您想確保只有您可以批准許可證更改,那麼使用不對稱密碼來加密許可證(或許可證的散列)是最直接的方法。

+0

我會多看看這個,謝謝! – Pace 2010-06-21 01:23:30