Rsa

兩個模數的 RSA 冪總是將 MSB 設置為 1,因此當 DER 編碼時有 0x00 前綴?

  • May 15, 2022

查看https://crypto.stackexchange.com/a/30616/16548以及我生成 RSA 密鑰(程式碼、SSL)的所有方式,MSB 始終為 1,因此當 DER 編碼時具有0x00前綴。

我認為當 RSA 密鑰長度是 2 的冪(例如 2048 或 4096)時總是如此。

但是我現在睡前想知道的問題是:是這樣嗎?

從連結引用

我們通常選擇 RSA 模數大小,它是 2 的冪或它的小倍數(1024、1536、2048、3072 等),因此這通常發生在那裡。

因為我現在想知道如何證明或以某種方式確實如此。

在我看來,模數長度是這樣設置的,而 MSB 是由於模數構造而設置的,這些都是無符號整數。所以 0x00 將永遠存在,無需檢查是否設置了 MSB。

所以這個問題的答案很簡單:yesno。我也在考慮一個我目前無法提出的令人信服的論點,但如果有人在手邊當然會非常有趣。

是的,總是如此,如果只是因為密鑰大小實際上是 RSA 的模數大小。應選擇產生模數的素數的大小,以使密鑰大小介於 $ [2^{len-1}, 2^{len}) $ . 如果是這樣,那麼如果 $ len $ *是 8 的倍數,*那麼它將具有每個字節集的 MSB。

這意味著零字節前綴也將存在於例如 1792 位或 1920 位的密鑰大小。這種大小有時用於嵌入式系統/智能卡,因為總響應數據大小為 256 字節,因此簽名或密文不會為其他數據或安全消息傳遞留下任何空間。

請注意 RSA 可以具有任何密鑰大小,因此如果不檢查良好的防禦性程式實踐,我不會考慮跳過字節,通常您會使用庫函式來執行到字節的轉換 - 即大多數時候您會使用 ASN .1 組件。

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