2012-09-16 31 views
0

你如何使用CBC和HMAC?如何使用CBC和HMac? Mcrypt PHP

我無法在互聯網上找到足夠的信息。

你如何得到IV?當你需要稍後解密時,你怎麼知道它是什麼? (不會把它放在數據庫中打敗目的?)

什麼是HMAC,它是否受到黑客攻擊?

加密文本保留在數據庫中。如果有人侵入數據庫,他們可能也會訪問文件管理器,除非他們找到了執行SQL注入的方法。腳本如何知道使用哪個IV和密鑰,黑客不知道?

加密多個段落的文本時,最好使用哪種方法,只有在編寫它的用戶才能在網站中看到這些段落? (用戶始終將其視爲純文本。)

我現在使用ECB(該網站尚未發佈用於測試版),但我聽說CBC更安全。

回答

3

IV的主要目的是每個加密都不同。這不是祕密。爲每個加密創建一個隨機IV是標準的,並將其作爲密文的前綴存儲。

HMAC是一個MAC,它確保只有知道該密鑰的人創建的消息被接受爲有效。在加密後應用MAC幷包含IV是很重要的。即HMAC(IV+Encrypt(...)),並且因此在解密之前對其進行驗證。這可以避免某些攻擊,例如填充神諭。

使用經過驗證的加密模式(如AES-GCM)也是值得考慮的,AES-GCM以安全的方式結合了驗證和加密。只是讓該死的確保你永遠不會重複使用IV。


在哪裏存儲密鑰是一個困難的問題,並且非常依賴於應用程序。正如你注意到的那樣,將密鑰存儲在與數據庫相同的系統上並不會帶來太多收益。

有時從用戶的密碼中派生密鑰是一個好主意,使用帶鹽的緩慢KDF(例如PBKDF2)。有時你可以將它存儲在客戶端上。有時您可以將其存儲在具有較小攻擊面的不同服務器上。

要找出存儲位置,您需要明確的要求和威脅模型。