Hash

雜湊然後加密還是加密雜湊?

  • August 11, 2020

我的問題是,如果我對一個數據塊進行雜湊處理然後使用 RSA 對其進行加密最安全的反向操作,這會有什麼不同嗎?

問題是關於站點到站點的傳輸,接收者需要解密傳入的數據。

哪種方法更安全且更難解密:Hash-Then-Encrypt 還是 Encrypt-the-Hash?

雜湊然後加密還是加密雜湊?

傳統上,這意味著在(a)對稱加密中是以下之一:

$$ C=E_K(M\parallel H(M)) $$ $$ C’=E_K(M)\parallel H(C’) $$ $$ C’’=E_K(M)\parallel H(M) $$ 從這個答案中可以看出,第一個方案有點不安全。

第二種方案明目張膽地沒有提供額外的身份驗證,因為攻擊者可以繼續更改密文,並且由於散列函式是公開的,因此重新計算散列值。

第三種方案也是不安全的,因為它洩露了關於 $ M $ ,特別是如果您猜測什麼 $ M $ 可能是,你只是計算 $ H(M) $ 並檢查它是否與提供的值匹配。

從您的評論看來,您的意思是以下兩種方案:

$$ C=E_K(H(M)) $$ $$ C’=H(E_K(M)) $$ 但請注意,這兩種方案作為加密方案實際上在功能上都不正確,因為給定 $ H(M) $ 通常很難恢復並且需要很多猜測 $ M $ 因此,即使使用密鑰,預期的收件人也無法真正解密消息。

問題是關於接收方需要解密傳入數據的 Sit-To-Site 傳輸。

正如 otus 在評論中正確注意到的那樣,在這種情況下,您想要的實際上是經過身份驗證的加密,您,發送者,加密一些數據,例如使用 AES-GCM,然後接收者使用您用來解密數據的相同密鑰的知識. 您可能還需要注意,您實際上可能不想自己處理 AES-GCM 本身,但您可能希望在您的站點之間“簡單地”擁有一個安全的傳輸通道,這正是傳輸層安全性(TLS ) 是設計來做的。如果您在兩個站點有一個共享密鑰,您可以輕鬆地使用其中一個PSK用於 TLS 的密碼套件,如果沒有並且您只有另一個站點的(真實)公鑰,您可以使用更標準的基於簽名的密鑰交換.

引用自:https://crypto.stackexchange.com/questions/62163