披露 N 位私鑰的 M 位前綴對安全性有多大危害?
我對密碼學一無所知深表歉意,請放輕鬆!
我正在做一個項目,我有一個 2048 位 RSA 私鑰和一個從私鑰生成的公共證書。我使用證書在一個端點加密秘密,並使用私鑰在另一個端點解密它們。
在解密器應用程序啟動時,如果私鑰不可解析,解析私鑰的程式碼將引發異常。現在異常消息公開了密鑰的前 21 位。我的問題是,如果異常消息進入日誌文件並被惡意攻擊者竊取,這是否以及在多大程度上會損害我的機密安全。
公開 21 位前綴是否有效地將我的 2048 位私鑰減少為 2027 位私鑰?還是它實際上讓事情變得更糟?或者,它不會從本質上改變猜測完整 2048 位密鑰的難度嗎?
編輯:我的私鑰需要以 PKCS#8 格式進行 DER 編碼,因此我們可能談論的是 DER 編碼、PKCS#8 格式的私鑰的前 21 位。
我進一步假設您的意思是 DER 編碼的未加密PKCS#8 RSA 密鑰,因為您不關心公開加密密鑰,它是具有相同大小因子(每個 1024 位)和無處不在的傳統雙素數密鑰=65537 使用標準 PKCS#1 CRT 形式表示。
我還注意到 21 位是一個非常奇怪的數量:不是 2 個八位位組,甚至不是 2 個半個八位位組,而是 2 個和 5/8 個八位位組?反正 …
它幾乎沒有妥協。
未加密的 PKCS#8 是包含版本 INTEGER、AlgorithmIdentifier 和包含密鑰編碼的 OCTETSTRING 的 SEQUENCE,對於 PKCS#1,它是包含另一個版本 INTEGER、然後是模數、然後是公共指數的 SEQUENCE,然後才私有指數和其他私有值。對於 RSA,AlgorithmIdentifier 是兩個固定值之一,具體取決於不適用的參數是編碼為 NULL 還是被省略。
因此,至少 PKCS#8 編碼的前 20 個八位字節是與您的密鑰無關的固定值,除非外部序列的長度欄位反映內部序列的長度,而內部序列的長度又會略有不同(最多 4 個八位字節),具體取決於關於私有指數 d 是否恰好 >= 2^2047 並且三個 CRT 值(dP、dQ、qInv)恰好 >= 2^1024,因此需要“額外”符號八位字節。如果攻擊者知道 PKCS#1 長度(因此 PKCS#8 長度)處於其最小值或最大值,則它給出的關於 d 的資訊少於 1 位。在最小值和最大值之間我不認為dP dQ qInv 和 d 之間有任何可用的關係,但我不能排除它,所以最壞的情況也有 1 位。然而,長度範圍為 0x04BC 到 0x4C0 或 0x04BA 到 0x04BE 並且在第三和第四個八位字節中,所以如果您的 21 位是大端(即所有前兩個八位位組和第三個八位位組的前 5 位),那麼它不包含有關可能有用的長度部分的資訊。