Rsa

RSA 消息完整性

  • December 9, 2015

我希望發送一些僅 RSA 可以加密的小數據,並且我還發送了一個共享密鑰。

A --> B ; RSA(data||shared_secret)  // B will verify the shared_secred and authenticate A;

對比

A --> B ; RSA(data||shared_secret) || SHA-256(data||shared_secret)

RSA 是 RSA-OEAP,而不是自產的東西。

驗證共享秘密是否足以保證消息的完整性和真實性?或者,我還應該發送消息的雜湊嗎?我想問一下,因為如果我不需要雜湊,發送兩倍的數據似乎是多餘的。

如果是我們被告知shared_secret 的純文字密碼,那麼發送的第二種方法 是不安全的。

  RSA-OAEP(data||shared_secret) || SHA-256(data||shared_secret)

這是因為猜測data允許通過與已知的SHA-256(data||shared_secret). 這是密碼破解的理想選擇。如果我們更改SHA-256(data)HMAC-SHA-256(shared_secret, data),這也適用,這是一種從帶有安全證明/參數的雜湊構造 MAC 的方法。

出於同樣的原因,這種結構也會損害data.


仍有待確定 A 發送

  RSA-OAEP(data||shared_secret)

給 B(使用 B 的公鑰計算),並讓 B 解密(使用 B 的私鑰)並驗證shared_secret是否足以確保data; 當然,假設沒有對手可以學到shared_secret

我的回答是:**不,**至少對於某些可能的建立或使用shared_secret. 尤其是:

  • 如果shared_secret知道它的任何一方事先使用了它,這涉及發送

  RSA-OAEP(something||shared_secret)

每個 B 的公鑰,那麼 pof 會達到所需的完整性和真實性data,因為對手可以重用該密碼來濫用 B 以相信它data是不相關something的。

  • 這包括 ifshared_secret僅用於涉及不同值的協議的多次迭代data
  • 獨立地,很有可能 B 對該消息所做的檢查可以用作測試的預言機shared_secret;如果這是一個密碼(我們被告知),這很糟糕(儘管沒有其他協議那麼糟糕,因為這是一種線上攻擊)。那麼,在shared_secret洩露之後,天空才是極限。

另一方面,如果shared_secret是由經過身份驗證的各方選擇的秘密的 XOR 建立的固定長度的廣泛秘密,並且RSA-OAEP(data||shared_secret)是唯一一次shared_secret使用而不是作為對稱算法的密鑰,那麼我認為沒有理由不使用目標得到滿足。這不是保險。

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