Hash

帶有 SHA-1 和 RSA 的證書籤名:1888 位從何而來?

  • November 14, 2019

許多 X.509 證書使用“PKCS#1 SHA1 with RSA 加密”作為生成 2048 位簽名的證書籤名算法。SHA-1 散列函式生成 160 位的散列值,但 2048 位輸出中的其他 1888 位從何而來?

它們是另一個雜湊值還是只是填充?

有人可以簡要回答這個問題。如果您也可以為我提供資源或網站以閱讀更多相關資訊,因為我一直在嘗試找到這個問題的答案,但我還沒有很好的資源來解釋這個問題。

我認為您不太了解 RSA 簽名的工作原理(以及為什麼它們的大小如此之大)。

在生成 RSA 簽名時,我們遵循兩個步驟:

  • 我們獲取我們正在簽名的消息的雜湊值,並將其轉換(並填充)為整數 $ M $ 介於 0 和 $ N $ (在哪裡 $ N $ 是一個由 RSA 密鑰指定的大整數)
  • 我們使用 RSA 私鑰,並轉換 $ M $ 簽名 $ S $ ,它也是一個介於 0 和 $ N $

結果整數值 $ S $ 是簽名。

從這個描述中,應該很明顯 $ S $ 基本上與 $ N $ . 那麼,到底有多大 $ N $ ?

好吧,對於您使用的 RSA 密鑰,它是 2048 位長(在 RSA 的上下文中,這意味著它是介於 $ 2^{2047} $ 和 $ 2^{2048}-1 $ ).

因此,您看到的 RSA 簽名是 2048 位長,這並不是因為有人決定將散列填充額外的 1888 位,而是在他們生成 RSA 密鑰時,他們決定將該密鑰設為 2048 位長。他們沒有在雜湊中添加 1888 位,因為他們認為 1888 是一個不錯的數字;相反,他們將散列擴展到 2048 位,因為生成 RSA 密鑰的人認為 2048 是一個不錯的數字。

現在,你可能會問:他們為什麼選擇這麼大的鑰匙?嗯,最重要的是,因為這是一個整數。您可以生成幾乎任何大小的 RSA 密鑰(但是,太小的密鑰可能會被破壞,而太大的密鑰只會浪費時間),實際上,2048 位的 RSA 密鑰和 2000 位的密鑰之間幾乎沒有區別。但是,現在每個人都期望 2048 位,所以這就是每個人都使用的。

您要求提供有關 RSA 填充過程如何工作的參考;立即想到的是PKCS #1,它準確地解釋瞭如何生成 RSA 簽名(使用幾種不同的填充方法)。

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