Encryption

公鑰加密和消息完整性

  • September 10, 2016

假設我想發送一封加密的電子郵件,因此我使用接收者的公鑰對其進行加密,以便接收者使用其私鑰對其進行解密。

如果有人在兩者之間篡改消息

  1. 可以執行什麼樣的篡改?
  2. 解密過程不會因為篡改而導致消息格式錯誤嗎?

像 RSA 這樣的非對稱加密是否可以確保消息的完整性,而無需使用 HMAC 對消息進行雜湊處理?或者只有在使用對稱加密時才需要散列?

例如,在 TLS 握手的初始時間,當客戶端使用伺服器的公鑰加密將用於其餘事務的對稱密鑰時,它是否也使用散列?

假設我想發送一封加密的電子郵件,因此我使用接收者的公鑰對其進行簽名

嗯?使用sign的標准定義,您使用私鑰進行簽名;使用公鑰簽名沒有意義,部分原因是任何有權訪問該公鑰的人都可以這樣做。

我認為您的意思是“我用接收者的公鑰對其進行加密”

如果有人. 可以進行什麼樣的回火

他們可以做的一件事是選擇一條消息,並用接收者的公鑰(大概是他們擁有的——它是公開的)對其進行加密,然後用他們的密文替換你的密文。然後,當接收者得到它時,它看起來很好,沒有錯誤的消息(因為消息被正確加密)。

像 RSA 這樣的非對稱加密是否可以確保消息的完整性,而無需使用 HMAC 對消息進行雜湊處理?

任何形式的公鑰加密本身都不能保證消息的完整性;如果你需要這樣的保證,你需要額外提供一些東西。

例如,在 TLS 握手的初始時間,當客戶端使用伺服器的公鑰加密將用於其餘事務的對稱密鑰時,它是否也使用散列?

實際上,它沒有(TLS 確實將散列作為 KDF 的一部分,但這不是您要問的)。

假設 TLS 不進行客戶端身份驗證(這是可選的),伺服器不會得到任何類型的完整性檢查;當客戶端 Alice 選擇一個 premaster secret,對其進行加密並將其發送給伺服器 Bob 時,Mallet 確實可以用他自己的 premaster secret 替換加密的 premaster secret,而 Bob 不會知道(或案例);就 Bob 而言,他只是與 Mallet 建立了安全連接。然而,Alice 不會與任何人建立安全連接(Bob 從未聽說過她加密的預主密鑰,而且 Mallet 無法解密它),因此就 Alice 而言,TLS 連接失敗(這是安全選項這個案例)。

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