Encryption

RSA按部分解密大文件

  • June 17, 2014

我需要解密一個我自己以前用 RSA 公鑰編碼的巨大文件(這一步可以使用對稱算法密鑰)。問題是由於特定的嵌入式架構原因,我無法將它載入到我的一次性記憶體中。

我需要使用與該架構的身份相關聯的私鑰解密它(或者如果選擇了算法,則使用共享對稱情況)。**我想知道是否有可能解密將文件分部分載入到記憶體中並解密它們中的每一個,而不會失去對暴力攻擊的安全性。**據我所知,在典型的 RSA 編碼過程中,首先將作為文件的整個 char 字元串轉換為要加密的數字,所以我的假設是在典型的 RSA 編碼 - 解碼過程中是不可能的。但是,由於我有文件,因此我可以逐行或逐字元對其進行加密,而不是對整個文件進行編碼,以便稍後再逐片解密。我假設加密後的行或字元將具有相同的字節長度,這可能是一個錯誤的假設。

編輯:讓我們稍微複雜一點:通過 RSA 或對稱密鑰解密後,我將不得不再次加密我的大文件的切片,這次使用 RSA 公鑰。所以,首先:在自定義的基礎上加密大文件,使其可以部分解密;第二:取出每一部分並用RSA加密。

這是一個可行的解決方案嗎?我是否會失去效率並且會更容易受到暴力攻擊?

EDIT2:密鑰大小將是開源實現的典型:至少 256 位。我要調查混合加密,還不能說。當我說一行時,我的意思是數據塊,比如說 50-60 個字元。我假裝加密-解密二進製文件,所以字元長度無關緊要(如果有幫助,可以考慮它們 1 字節 ASCII)

據我所知,在典型的 RSA 編碼過程中,首先將作為文件的整個 char 字元串轉換為要加密的數字,所以我的假設是在典型的 RSA 編碼 - 解碼過程中是不可能的。

這不典型。典型的現實世界 RSA 加密過程使用混合加密,使用一次性對稱密鑰加密數據,然後使用實際的 RSA 算法進行加密。

根據對稱加密是什麼,您可以在加密文件中“尋找”而不解密其他部分。在大多數情況下,您至少可以從一開始就讀取它並隨手扔掉解密的部分,從而避免過多的記憶體使用。

但是,由於我有文件,因此我可以逐行或逐字元對其進行加密,而不是對整個文件進行編碼,以便稍後再逐片解密。我假設加密後的行或字元將具有相同的字節長度,這可能是一個錯誤的假設。

這是一個可行的解決方案嗎?我是否會失去效率並且會更容易受到暴力攻擊?

使用上下文相關(例如行)阻塞可能會洩漏明文上的數據,所以我不推薦它。

如果您需要能夠在編碼文件中快速跳轉,您應該使用對稱加密算法(如果需要,可以在 RSA 下),這很容易。例如,CTR 或 CBC 模式下的 AES。您將無法安全地修改文件的一小部分,但對於只讀訪問,這很好。

編輯:讓我們稍微複雜一點:通過 RSA 或對稱密鑰解密後,我將不得不再次加密我的大文件的切片,這次使用 RSA 私鑰。所以,首先:在自定義的基礎上加密大文件,使其可以部分解密;第二:取出每一部分並用RSA加密。

即文件是可讀寫的?

在這種情況下,我會將文件分成大小恆定的塊,這些塊使用任何接受大隨機數的對稱加密算法獨立加密(24+ 字節會很好,但至少 16 字節)。生成一個對稱加密密鑰,您使用 RSA 對其進行加密。對於每個塊,生成一個隨機數/IV,該隨機數/IV 被添加到密文中。當某些東西被修改時,重寫整個塊,生成新的隨機數。

應該選擇塊大小來平衡由隨機數引起的記憶體擴展和由重寫塊引起的寫入放大。我想,像 4KiB 塊這樣的東西可能沒問題。

可以使用遞增計數器代替隨機隨機數,但在這種情況下,可能需要額外的保護措施來防止攻擊者向您提供舊版本的文件,因此隨機隨機數更簡單。

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