如何正確計算從 384 位到 15360 位或超過 15360 位的 RSA 密鑰大小
大家好,這裡的專家,我是密碼學的新手。
最近我研究了 RSA Key Size (Microsoft RSA library),它實際上描述了所需的最小密鑰長度為 384 位,接受的最大密鑰長度為 15360 位。
我真的有一個問題是,我怎樣才能正確地計算 384 位到 15360 位範圍之間的密鑰大小而不會出錯?
例如,目前據我所知,384 位和 15360 位之間的可能密鑰長度包含 1024、2048、3072 位的通用密鑰長度。
是否有其他人用來知道這些密鑰長度的公式或計算?如果是,是否可以應用此特定公式來計算最小密鑰長度和最大密鑰長度之間的所有可能密鑰長度?
哦,那很簡單:任何密鑰大小都是可能的。RSA 的密鑰大小設置為模數的大小。反過來,模數是兩個(或更多)大素數的乘積。當然,乘法意味著所有素數大小相加(給或取一點)。
但是,並非每個實現都允許任何密鑰大小。由於電腦是面向字節的,因此密鑰大小通常需要是 8 的倍數。對於初學者來說,這使得對密鑰值進行編碼更容易。很多時候,數字是用字計算的,所以 32 位的 64 位增量也並不少見。最後,如果只是為了避免過度廣泛的測試,實現也可能決定只允許某些特定的密鑰大小。
通常也有一些下限,如果只是為了避免完全不安全的選擇,如 128 或 256 位 RSA。創建一個上限也很有意義,因為生成 16Kib RSA 密鑰或更高的密鑰對沒什麼好打噴嚏的(而且,不計量子密碼學,無論如何它提供了 256 位的安全餘量)。
如果我沒記錯的話,微軟的原生 RSA 實現使用 32 位增量作為密鑰大小,儘管當然有多個 API 和這些 API 的實現(託管和非託管)。但最終您必須查找它,即使這樣也可能發生變化(例如提高最小界限或允許更多密鑰大小)。
對於常見的密鑰大小,請嘗試 2048(較小的一側)、3072(2048 + 1024)和 4096 位。幾乎所有實現都將支持這些密鑰大小,並且實際上沒有太多需要選擇中間值,除了小眾用途(智能卡)。不再推薦位大小為 1024 的 RSA,並且可能會被某些實現禁止。