2014-01-22 45 views
1

我的Crypto++庫的使用已經非常好,但我有一個小問題...RSAES_OAEP_Encryptor產生的密文長度?

如果我使用RSAES_OAEP_Encryptor & RSAES_OAEP_Decryptor一切都很好。 (我使用OpenSSL生成的PEM文件中的2048位密鑰)。

我的問題是這樣的:ciphertext產生的長度總是等於decryptor.FixedCiphertextLength()還是可以小於那個?我只問,因爲這是在一個圖書館使用的一些應用程序,我需要健康檢查參數.....

順便說一句。使用RSA進行加密/解密的速度是否更快?它至少保持OAEP提供的安全級別?使用1024位密鑰,在一個示例測試框上,平均超過1000次迭代,我發現編碼一個短字符串需要大約80uS,解密需要大約1.03mS(長12倍)。用2048位密鑰加密需要190uS和解密,4.3ms(22倍)。我知道RSA解密速度很慢,但是......系統運行的是XP Pro SP3/Xeon E5520,並使用VS2008編譯而不是/ MT。我不能使用超過2048位合規的原因較短的鍵...

非常感謝

尼克

回答

1

通過RSAES_OAEP_Encryptor產生密文的長度是多少?

在RSA的情況下,我相信FixedPlaintextLength()FixedCiphertextLength()呼叫MaxPreImage()MaxImage()MaxPreImage()MaxImage(),然後返回n - 1


將密文通過encryptor.Encrypt(...)中產生的長度始終等於decryptor.FixedCiphertextLength(),或者可以是小於?

它取決於正在使用的密碼系統。通常,它的密鑰大小決定了FixedCiphertextLength()是否成立(而不是純文本的大小)。在RSA/OAEP和其他類似ElGamal的情況下,我相信它是成立的。

我認爲這裏感興趣的類是PK_CryptoSystem Class Reference。類似RSAES_OAEP_Encryptor的類繼承PK_CryptoSystem,這就是FixedCiphertextLength()和朋友的來源。


使用1024位的密鑰,在一個示例測試中,平均超過1000次迭代,我發現需要大約80uS編碼的短字符串1.03mS(12倍長)進行解密;有2048位密鑰加密需要190uS和解密,4.3mS(長22倍)

這是一個不同的問題,但是...

在加密或驗證,公開指數的情況下用來。公開指數默認爲65537(IIRC)。這是一個低的漢明重量(0的高密度),所以平方和乘冪運算相對較快。

另一方面,解密和簽名使用私有指數,它應該具有1和0的正態分佈。有很多正方形和乘法運算,並且需要額外的時間。

利用這些小小的時間差異就是您的旁邊頻道來自於如果你不小心的地方。如果你不小心,那麼NSA會感謝你。


我不能使用超過2048比特的較短的密鑰符合原因

2048位模量爲約10倍高於1024位模數慢。它爲什麼這麼多人不願意從1024位移動,爲什麼1024位仍然是首選。

彼得古特曼有這個在他的工程安全書(第229頁)說些什麼:

[破威脅模型另一個例子 證書與鍵發生,爲此,瀏覽器廠商(以響應NIST 要求)強制CA從1024位密鑰切換到2048位密鑰, ,仍然使用1024位密鑰的任何東西都被公開譴責爲 不安全。正如第1頁的「問題」中所討論的那樣,壞人並沒有注意到 甚至注意到他們的欺詐證書是否被簽名爲 ,或者是否包含2048位密鑰。