Rsa

RSA 密鑰差異(OpenSSL CLI 與 OpenSSL/ssl.h C 函式)

  • December 21, 2017

所以,我坐在這裡試圖弄清楚發生了什麼,以及為什麼兩個鍵的差異如此之大。我創建了兩個密鑰對,一個密鑰對使用 Ubuntu 16.04 機器上的 OpenSSL CLI 命令,另一個密鑰對使用庫中駐留的 RSA_generate_key 函式的 C 程序。然而,即使兩個密鑰都是用相同的參數製作的,公鑰和私鑰之間的差異也非常大。公鑰的區別是 25 個字節,而且它的格式似乎也不相同。

OpenSSL 命令行:

openssl genrsa -des3 -out private.pem 4096
openssl rsa -in private.pem -outform PEM -pubout -out public.pem

OpenSSL CLI 密鑰: 在此處輸入圖像描述

OpenSSL CLI ASN1Parse: 在此處輸入圖像描述

OpenSSL CLI 密鑰轉儲(Base64 -d): 在此處輸入圖像描述

——————————————————————————————————

C程序:

C 程序密鑰: C 程序 ASN1Parse:****C 程序密鑰轉儲(Base64 -d):在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

試圖深入研究 RSA_generate_key 函式是什麼,我發現了這個:但是,這並不能告訴我它是否在 ASN1 中(它看起來來自標題)。或者,如果應用了不同的格式,我需要複製以創建類似於從 C 程序創建的密鑰。本質上,我必須使用 CLI 工具複製 C 密鑰生成的確切功能。

它們都是 ASN.1 (DER) 格式,但是它們有不同的內容。

OpenSSL 版本的外部格式有效地表明“這是一個 RSA 公鑰”,然後是實際的原始公鑰密鑰(在 ASN.1 解析中列為“位串”)。如果您將位串解析為 ASN.1,您會看到公鑰,表示為兩個整數的序列。

相比之下,C 程序只有 ASN.1 原始公鑰,也就是說,它只是兩個整數的序列,其值為 $ n $ 和 $ d $ .

OpenSSL 版本中包含的額外外部格式佔額外的 25 個字節。

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