Encryption
流式傳輸 API 到 ChaCha20-Poly1305 是否可能或建議反對?
到目前為止,我看到的 ChaCha20-Poly1305 AEAD 方案的實現都沒有提供流式 API。相反,ChaCha20-Poly1305 被呈現為一個不可分割的組合,緊密遵循“IETF 協議的 ChaCha20 和 Poly1305”第 2.8 節中的虛擬碼,該虛擬碼要求將明文消息完全載入到記憶體中。如果輸入變得非常大(但仍然有限且大小已知),我寧願避免這種情況。(我知道我可以拆分消息,但我也想避免這種情況)
我開始懷疑是否有可能為該方案提供流 API?如果不是,為什麼?
這不是特定於這種結構的,但通常,您希望將流拆分為更小的塊,這些塊單獨加密和驗證。
如果加密流沒有有效的身份驗證標籤,那麼在解密數 TB 的數據後,您最終不想發現這一點。
將流拆分為塊時必須採取一些預防措施。也就是說,您需要確保塊沒有被重新排序、刪除、複製,並且您需要一種方法來驗證您讀取的最後一個塊是否是流的結尾。
libsodium 文件中的加密序列或一組相關消息頁面為此提供了一些指導,以及使用 Chacha20-Poly1305 的流式 API。