簡體   English   中英

RSA密鑰專用指數大小

[英]RSA key private exponent size

我需要解析一個ASN.1 DER編碼的RSA 2048私鑰,以獲取不同的組件,例如模數,指數等。當我瀏覽密鑰時,發現某些組件的前導零。 這些零應該被跳過嗎? 如果是,我如何才能將組成部分的零與這些前導零區分開。 對於我的特定情況,私有指數字段的長度為256,第一個字節為0。這部分是指數的還是應該跳過的。 對於RSA 2048密鑰,私有指數是否始終為256個字節?

[更新]似乎ASN.1 DER編碼的值按大端順序排列。 因此,要求前導零作為組件的一部分是沒有意義的,應該跳過它。 因此,問題僅限於私有指數的大小。 我有一個RSA 2048密鑰,私有指數大小為255個字節。 我已經解析了不同的私鑰組件,並將其填充在'RSAParameters'對象中。 嘗試使用RSACryptoServiceProvider.ImportParameters()導入它會引發CryptographicException ,錯誤消息為“ Bad Data”。 ImportParameters()是否期望指數大小也為256字節? 有什么工具可以用來驗證不同的關鍵組件是否正確?

在BER和DER中,整數被編碼為2s補碼。 這意味着正數的第一位必須為零。 有時這需要在開頭增加一個零字節。 請注意,將整數值的前9位編碼為全零是BER / DER無效。 添加額外的零字節只是為了防止將非零的第一位解釋為負數。

PKCS#1密鑰組件的編碼與ASN.1有​​符號整數一樣(ASN.1不知道無符號整數是數據類型)。

因此,如果正數是密鑰大小(以字節為單位),則第一位需要以無符號表示法為1。 因此,帶符號的注釋需要將一個額外的字節設置為00h才能使其成為正的帶符號的數字。 請注意,私有指數僅限於模數的值,但有時可能比模數幾個字節。

由於模數必須是確切的密鑰大小,並且由於密鑰大小幾乎始終是8的倍數,因此將始終需要00h填充。


如果數字是密鑰大小(以位為單位),那么根據定義,第一位必須打開。 例如,如果您有8位數字,則必須將其表示為1XXX XXXX 這意味着該數字的范圍是2 ^ 7到2 ^ 8(不包括)。 現在請記住,RSA密鑰大小通常可以除以8(您知道得分是512、1024、2048)。 這意味着與鍵大小相同的數字將始終設置其第一位。 作為帶符號的數字,因此它將需要有一個填充字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM