2011-03-11 69 views
5

最近我們一直在潛心使用OpenSSL來幫助加密/解密我們擁有的一些數據。每個「客戶」都有公鑰/私鑰對和由本地證書頒發機構給予的X509證書。我現在正在研究用該密鑰對加密/解密數據。爲RSA加密破解大數據

我看過的所有內容都使用方法RSA_public_encryptRSA_private_decrypt進行RSA加密。但是,對於填充類型RSA_PKCS1_OAEP_PADDING,我一次可以加密的數據量受限於RSA_size(rsa) - 41。所以我的問題是如何在堅持使用我們的RSA方案時加密大量數據(沒有靜態關鍵字等)。我正在考慮將數據分成塊,然後對其進行加密,但似乎它正在破壞填充點。

任何幫助,將不勝感激。

回答

6

即使你破壞了數據,你也會發現速度過於緩慢。正確的方法是

  1. 使用對稱算法和隨機密鑰
  2. 加密使用公鑰並將其存儲在接下來的加密形式的隨機密鑰生成對稱算法
  3. 對數據進行加密隨機密鑰(或之前)的數據。
+0

合理。在C中生成一個隨機密鑰的最好方法是什麼?使用arc4random()從UTF8中選擇隨機字符?在openssl或c的stdlib中是否有「安全隨機」類? – Staros 2011-03-11 19:50:56

+0

@Staros arc4random()看起來像一個不錯的選擇,因爲它聽起來像密碼強大的RC4生成器。然而,我也想看看erickson在這個問題上的回答,並檢查使用OpenPGP的可能性 - 它會爲您處理所有事情。 – 2011-03-11 19:53:31

+1

@Staros - 從'/ dev/random'讀取所需的位數。它們不需要是任何編碼中的字符。 – aaz 2011-03-11 20:03:13

1

您應該使用CMS(電子郵件客戶端中的S/MIME支持的基礎)或PGP等標準。幾乎每個平臺都有這些標準的庫。

您會發現它們在批量數據加密方法上非常相似,使用對稱密碼來加密數據並使用「消息」收件人的公鑰加密該密鑰。這種方法安全快速。

但是,這些標準更進一步,安全地處理您可能還沒有想過的事情,例如爲多個收件人加密數據,將元數據附加到加密內容等。您還可以獲得與其他軟件的互操作性。例如,如果您使用S/MIME,則可以使用任何平臺上的任何電子郵件客戶端解密。事實上,根據您的集成要求,您可能不需要自己編寫任何軟件。

使用其中一個成熟的協議並不能解決所有的安全問題,但它會讓做更麻煩的事情變得更加困難。

+0

CMS不在OS X上的當前版本的OpenSSL中。我認爲它在0.9.9或1.0中引入。 PKCS7是,但我猜這也適用。 – Staros 2011-03-11 19:56:47

+0

PKCS#7 *是* CMS。 – erickson 2011-03-11 20:01:25

+1

我的印象是,CMS是PKCS7更高級的實現。不知道如何或爲什麼。 – Staros 2011-03-11 20:26:46