是否可以僅解密 gpg 加密文件的一部分?
我有非常大的加密文件,需要以高度並行的方式處理(這些文件由不同的數據記錄組成)。目前,該過程首先解密數據,然後開始並行工作,每個工作人員都在尋找分配給它的文件偏移量。我已經有一種對齊記錄邊界的方法,所以不用擔心。
我對 GnuPG 加密文件的(有限)理解是,數據是使用對稱算法加密的,然後使用接收者的公鑰加密密鑰。由於我是收件人,我知道我的公鑰可以列出我支持的算法。
我可以利用它,以便在文件被加密時,我能夠以類似塊的方式解釋它嗎?例如,我可以通過讀取文件的一定數量的字節前導碼然後尋找可計算的有效偏移量並繼續讀取並以可計算的有效偏移量結束來拼湊一個有效的可解密塊?
謝謝!
是的,假設順序解密所需的(私有或對稱)密鑰可用,以及準備加密的實體,應該可以解密一個大型RFC 4880 / OpenPGP文件的一部分(無需解密之前的大部分內容) file 這樣做沒有使用文件格式的壓縮功能(即使使用它是預設和最常見的)。公鑰格式中有一個屬性允許接收者要求不使用壓縮(參見RFC 4880 第 13.3.1 節),因此所要求的應該是可能的。
然而
- 無法確定單獨解密的塊的完整性;似乎至少,在開始將其解密為塊之前,應該對文件進行一次完整性檢查(例如,驗證所謂發件人的簽名)。
- 存在一些未經測試的實現(或早於 OpenPGP 規範的實現)不能正確遵守“不壓縮”標誌的風險(即,即使預期接收者之一禁止壓縮)。在這種情況下,一個選項是順序解密然後重新加密文件而不壓縮以供將來直接訪問。
- 實現 OpenPGP 解密的常用庫在設計時並未考慮直接訪問,因此需要進行如下修改。
一般的想法是像往常一樣處理文件的開頭,直到知道用於加密大量數據的對稱密鑰和算法為止;然後(當要解密的塊不在文件開頭附近時)考慮塊大小(3DES 為 8 個八位字節,AES 為 16 個八位字節)尋找適當的位置。OpenPGP 在CFB 模式下使用分組密碼,在開始時稍作修改,因此我們必須跳過兩個八位字節和塊大小的適當倍數,然後像在普通 CFB 中一樣解密,使用緊接在包含的密文塊之前的密文塊作為 IV要破譯的塊的第一個八位字節。
注意:在上面,“塊”用於問題中,用於文件中的大部分有用數據。並且“塊”指定分組密碼的輸入和輸出處的數據量;對於 AES 的所有變體,這是 16 個八位字節(128 位)。RFC 4880 也使用“塊”來表示該含義,偶爾也會使用其他含義(例如,在“文本塊”中)。RFC 4880 一貫使用“數據包”來指定具有某種格式的文件的一部分;數據包的一般格式見第 4節,各種類型的見第 4.3節,詳細資訊見第 5 節。我使用的意義上的“塊”存在於Symmetrically Encrypted Data Packet中。