Rsa
兩個模數的 RSA 冪總是將 MSB 設置為 1,因此當 DER 編碼時有 0x00 前綴?
查看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。
所以這個問題的答案很簡單:
yes
或no
。我也在考慮一個我目前無法提出的令人信服的論點,但如果有人在手邊當然會非常有趣。
是的,總是如此,如果只是因為密鑰大小實際上是 RSA 的模數大小。應選擇產生模數的素數的大小,以使密鑰大小介於 $ [2^{len-1}, 2^{len}) $ . 如果是這樣,那麼如果 $ len $ *是 8 的倍數,*那麼它將具有每個字節集的 MSB。
這意味著零字節前綴也將存在於例如 1792 位或 1920 位的密鑰大小。這種大小有時用於嵌入式系統/智能卡,因為總響應數據大小為 256 字節,因此簽名或密文不會為其他數據或安全消息傳遞留下任何空間。
請注意 RSA 可以具有任何密鑰大小,因此如果不檢查良好的防禦性程式實踐,我不會考慮跳過字節,通常您會使用庫函式來執行到字節的轉換 - 即大多數時候您會使用 ASN .1 組件。