gpt4 book ai didi

c - 对大文件使用 libsodium XChaCha20-Poly1305

转载 作者:行者123 更新时间:2023-12-04 12:18:27 24 4
gpt4 key购买 nike

我正在查看 libsodium,特别是对称加密选项 XChaCha20-Poly1305 .我无法理解的是,libsodium 似乎没有提供加密库中常见的“上下文/更新/最终确定”工作方式。

从 libsodium 中可以清楚地看出,XChaCha20-Poly1305 消息的大小“没有实际限制”。但是实际上,如果我要加密一个多 GB 的文件,我不太清楚您将如何使用 libsodium ?因为显然你只会传递 fread 的内容缓冲到 crypto_aead_xchacha20poly1305_ietf_encrypt ?

给那些认为这不是主题的人的重要提示

在屈服于同辈压力之后,我确实删除了这篇文章。但是,我应@MaartenBodewes 的要求重新打开了它,他强烈认为这是切入主题,并且非常强烈以至于他付出了一些努力来撰写答案。因此,出于对他努力的尊重,我取消了该帖子。请给我更多的“离题”评论,我已经阅读了足够多的评论!

最佳答案

在 libsodium 的介绍中,它写道:“它的目标是提供构建更高级别的加密工具所需的所有核心操作。”

因此,Libsodium 是一个相对高级的库,它提供对底层结构的有限访问。

也就是说,使用经过身份验证的密码加密此类大文件存在一些固有的困难。问题是要么需要先验证真伪再开始解密,要么需要先在线解密,然后再验证认证标签。这反过来意味着如果验证失败,您必须写入/销毁内容。

通常你可以通过加密来解决这个问题,例如16KiB 左右的块,然后为该块添加身份验证标签。当然,您需要确保增加随机数(确保流密码的计数器不重复)。这当然会增加一些开销,但没什么了不起的 - 无论如何你都会有一些开销。缺点是您不能再就地解密(因为这会留下间隙)。

如果您想制作一个非常高级的方案,您还可以在最后存储所有身份验证标签。或者将所有身份验证标签缓存在内存中,并在所有收集的标签上计算单个 (HMAC) 标签。

所以打电话crypto_aead_xchacha20poly1305_ietf_encrypt多次可被视为一种选择。如果你这样做,你可能想要计算一个文件特定的键,这样你就可以从零开始你的随机数。

如果您只想对存储的文件保密,您可以考虑省略身份验证标签。在这种情况下,您可以使用 int crypto_stream_xchacha20_xor_ic 手动影响用于创建 key 流的计数器。 :

This permits direct access to any block without having to compute the previous ones.



显然,您仍然可以使用 HMAC-SHA-2 添加身份验证标签,该标签也在 libsodium 中可用,但这会比使用 poly1305 慢。

最后,libsodium 是开源的。如果你非常勇敢,你可以进入血腥细节并构建你自己的上下文/更新/完成。该算法当然支持它(提示:如果您走这条路线,请不要在解密例程期间缓冲身份验证标签或随机数 - 直接解密)。

关于c - 对大文件使用 libsodium XChaCha20-Poly1305,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43743250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com