Encryption

使用 RSA 加密加密大文件

  • April 28, 2020

以下文章討論了使用 RSA 進行文件加密:

https://medium.com/@ismailakkila/black-hat-python-encrypt-and-decrypt-with-rsa-cryptography-bd6df84d65bc

加密的文件是 JPEG 圖像。我的問題是:如果我們以類似的方式加密更大的文件,比如 10 MB,並且能夠使用現代 i7 處理器達到可接受的加密速度,該怎麼辦?

  1. 在沒有私鑰的情況下,生成的密文實際上是否可以解密?
  2. 在這種情況下,哪些因素會影響加密速度?RSA 密鑰大小?塊大小?填充類型?

注意:我確實意識到 RSA 並不意味著以這種方式加密文件,並且混合加密方案更合適(使用會話密鑰加密數據,然後使用 RSA 密鑰加密會話密鑰)。請耐心等待,假設我們必須使用 RSA 加密一個大文件。我只是想了解這樣做的實際影響和限制,我意識到混合加密在這裡更合適。

  1. 在沒有私鑰的情況下,生成的密文實際上是否可以解密?

不,你需要私鑰。您可以使用公鑰加密的次數沒有實際限制。我會確保填充內的隨機性至少為 128 位。另請注意,使用私鑰多次解密會使算法更容易受到側通道攻擊(通常依賴於統計數據)。此外,它不允許您在每次解密時使用 PIN 或密碼來保護私鑰。

  1. 在這種情況下,哪些因素會影響加密速度?RSA 密鑰大小?塊大小?填充類型?

是的,是的,是的。

RSA 密鑰大小至關重要,因為較大的密鑰大小會極大地影響性能。此外,如果您需要更多密鑰強度,RSA 密鑰大小會增長得非常快。RSA-3072 提供大約 128 位的安全性,但您需要超過 16Kbit 的密鑰大小才能達到 256 位。而且這些操作肯定非常慢,特別是在涉及私鑰操作時。

由於填充要求,用於明文的塊大小不同於用於密文的塊大小(即輸入總是小於輸出)。明文的塊大小通常比安全性較低的 PKCS#1 v1.5 填充的密鑰大小小 11,並且與 OAEP 的雜湊值不同。密文的塊大小與以字節為單位的模數大小相同。

就加密速度而言,填充類型通常不是什麼大問題。RSA 私鑰操作相當慢,與它們相比,取消填充不會花費太多時間。然而,填充的生成依賴於安全的隨機數生成器。隨機數生成可能很快,但它也可能通過其他方式阻塞或減慢系統。


請注意,性能只是應避免使用 RSA 直接加密的原因之一。與明文相比,密文的擴展是另一個重要原因。如前所述,要求私鑰可用於批量操作可能會使其面臨風險。

正如您所指出的,您應該僅使用目標收件人的 RSA 公鑰來加密可用於更快的流式分組密碼(如 AES)的輔助密鑰。接收者使用相應的私鑰來派生輔助密鑰,並繼續將文件解密為 AES 中的明文。

我們嘗試使用 BLOWFISH 和 TWOFISH 加密非常大的文件,但速度也慢得讓人無法接受。問題始終是使用者群體的管理。例如,要處理健康資訊隱私,您還必須使用可以審計的技術。我們嘗試了一種新穎的方法,將解密程式碼與密碼一起發布,並依靠客戶端瀏覽器來完成繁重的工作。這樣做的好處是您不必分發支持軟體。Google RedTitan REDWRAP。大文件展示將讓您了解速度。

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