2010-09-03 132 views
8

在CBC模式下使用AES加密給定密鑰並使用IV(當然)時,是否存在任何安全缺陷?使用與密鑰相同的字符串加密字符串是否安全?

原則是尊重的:關鍵是祕密,第四是公開的(因爲這不影響加密的安全性)。

但是,潛在攻擊者將知道(因爲他可以訪問源代碼),該字符串使用自己作爲密鑰加密。

我的判斷沒有看到任何問題,但我試圖確定。

謝謝。

編輯 - 任務,我希望我能夠跨越明確通過他們,這還不是很清楚我自己的細節:

  1. 我的系統使用加密某些值存儲在MySQL表。加密是在PHP代碼上執行的(而不是MySQL內置的AES)。顯然,我需要一個祕密密鑰,系統設置時需要由系統管理員設置,只需一次。這是至關重要的,因爲在保存任何加密數據之後更改密鑰會使數據不可解密。

  2. 管理員可以通過簡單地通過FTP(或其他)編輯PHP腳本文件來設置密鑰。但那不是我想要的。

  3. 我想要的是有一個安裝腳本,在這個腳本期間,管理員選擇密鑰,該密鑰被自己加密並存儲到表中。誠然,下面提出的一個有效的觀點是,你需要密鑰來解密密鑰......我的推理沒有得到太多,我處於調查是否用自己加密密鑰的階段因爲關鍵仍然是一件安全的事情。

如果您對上述有任何想法,將非常感激。

謝謝。

+2

起初我與@Piskor達成一致,「有什麼意義?」但是我看到,如果您用自己加密了密碼,然後存儲了結果密碼,您可以通過嘗試使用提供的密碼解密密碼來驗證正確的密碼。這與您的用例類似嗎? – Greg 2010-09-03 18:00:52

+0

只是我還是你的頭銜和問題不同? :S – 2010-09-03 18:02:50

+6

@Greg如果他只是測試以查看密碼是否正確,那麼最好是存儲密碼的密碼散列。您散列用戶的輸入,如果散列匹配,則知道輸入密碼正確。 – JMarsch 2010-09-03 18:05:24

回答

11

問題是,有什麼意義?如果你想解密字符串,你必須知道字符串;如果你不知道它,你不應該能夠解密它。這是可能的,但毫無意義的恕我直言。

+2

它給你的唯一能力是能夠確認給定的字符串實際上是密碼。 (你可以自己加密它,看看字符串是否匹配,或者你解密存儲的字符串,看看字符串是否匹配。)有一種已知的安全方法來獲得這個功能 - 爲什麼要冒一個可能存在細微弱點的風險。 – 2011-09-24 22:09:02

1

首先:不是真的安全專家

因此,要獲得這個當前,要存儲一個祕密值,並且只能夠得到密值,但告訴它的祕密值? :)

但我可以看到你想要去的這一點,一個密碼系統(也許),然後你可以只驗證它們在一起。

一些缺點可能是,如果黑客獲得訪問所有用戶的密碼,黑客有他能記住密碼的帳戶,那麼他就可以很容易發現你的加密邏輯。在此之後,他可以進行字典攻擊,並獲得大量密碼。爲此,我至少會考慮爲每條記錄使用一個唯一的散列。然後,他仍然可以字典攻擊,但它會更長。然後還添加深層存儲在您的應用程序自定義的哈希值,所以他需要猜測是一樣好,甚至可以訪問應用程序代碼。

所以我至少會建議的關鍵是密碼的複合+ record_hash + shared_hash

更新:我可以看到,黑客將有機會獲得代碼,然後嘗試存儲shared_hash一個他無法訪問的地方。

+0

黑客可以訪問加密邏輯,無論如何他都能看到(開放)源代碼。所以它的優勢在於像往常一樣在加密密鑰中。 – webmaster 2010-09-03 18:11:10

+0

我可以在您的更新中看到它真的是您的案例中的一個關鍵場景,然後我無法看到您的解決方案存在問題。 :) – 2010-09-03 18:40:16

2

正如您在Jesper的回答中所提到的,「強度駐留在加密密鑰中」和加密算法中。如果兩者都強大,它應該是安全的。據我所知,強大的加密技術薄弱環節和關鍵在於實施,如果有的話。

有興趣知道你要使用這種方法的應用程序,如果你可以說的話。

編輯這是不完全應答在帖子標題中的問題,但我想這是有關你更新的帖子:

假設與CBC和IV強大的和正確實施AES,而攻擊者可以訪問存儲加密主密鑰的表格。

無論您是使用自己存儲加密的主密鑰,還是存儲主密鑰的加密哈希,應該沒有什麼安全差異。假設CBC模式下的密碼哈希和AES同樣安全,其強度在於主密鑰的強度。

如果主密鑰很弱,即使攻擊者無法從主密鑰的密碼哈希中獲得主密鑰,他也能夠通過「確定的密鑰」獲得主密鑰和「特定值」值「表。如果使用主密鑰加密自己,他可以通過「特定值」表或主密鑰表獲取主密鑰。

無論你選擇使用相同的密碼來加密和存儲主密鑰,還是密碼散列並存儲主密鑰,都要確保主密鑰是強大的。好像你在寫一些開源系統。我的建議是,你的系統根據正則表達式(或函數)檢查任何潛在的主密鑰,如果認爲密鑰不夠強,則拒絕該密鑰。

我希望我也正確理解你的帖子。

聲明:我不是安全專家,也不是安全行業。

+0

請參閱編輯我的原始問題。 – webmaster 2010-09-03 18:59:51

+0

@webmaster:我已更新我的帖子。 – blizpasta 2010-09-04 15:03:59

+0

閱讀它,謝謝! – webmaster 2010-09-04 17:06:27

5

用自己加密密鑰基本上是一個特設的散列函數。所以你可以使用一個真實的。