gpt4 book ai didi

encryption - AES 加密 - key 与 IV

转载 作者:行者123 更新时间:2023-12-02 02:37:42 27 4
gpt4 key购买 nike

我正在开发的应用程序允许用户加密文件。文件可以是任何格式(电子表格、文档、演示文稿等)。

对于指定的输入文件,我创建两个输出文件 - 一个加密的数据文件和一个 key 文件。您需要这两个文件才能获取原始数据。 key 文件必须仅对相应的数据文件起作用。它不应该对任何其他文件起作用,无论是来自同一用户还是来自任何其他用户。

AES 算法需要两个不同的加密参数: key 和初始化向量 (IV)。

我看到创建 key 文件的三种选择:

  1. 将硬编码 IV 嵌入应用程序中,并将 key 保存在 key 文件中。
  2. 在应用程序中嵌入硬编码 key 并将 IV 保存在 key 文件中。
  3. 将 key 和 IV 保存在 key 文件中。

请注意,不同客户使用的是同一个应用程序。

看来所有三种选择都会实现相同的最终目标。不过,我希望得到您的反馈,了解正确的方法应该是什么。

最佳答案

正如您从其他答案中看到的那样,每个加密文件拥有唯一的 IV 至关重要,但这是为什么呢?

首先 - 让我们回顾一下为什么每个加密文件的唯一 IV 很重要。 (Wikipedia on IV)。 IV 为加密过程的开始添加了随机性。当使用链式 block 加密模式(其中一个加密数据 block 包含前一个加密数据 block )时,我们会遇到有关第一个 block 的问题,这就是 IV 出现的地方。

如果您没有 IV,并且仅使用 key 使用链式 block 加密,则以相同文本开头的两个文件将产生相同的第一个 block 。如果输入文件中途发生更改,则两个加密文件从该点开始一直到加密文件结尾都会开始看起来不同。如果有人从一开始就注意到了相似性,并且知道其中一个文件以什么开头,他就可以推断出另一个文件以什么开头。知道明文文件以什么开头以及它对应的密文是什么可以让该人确定 key ,然后解密整个文件。

现在添加 IV - 如果每个文件使用随机 IV,它们的第一个 block 将会不同。上述情况已被阻止。

现在如果每个文件的 IV 都相同怎么办?好吧,我们又遇到了问题场景。每个文件的第一个 block 将加密为相同的结果。实际上,这与根本不使用 IV 没有什么不同。

现在让我们看看您建议的选项:

Option 1. Embed hard-coded IV within the application and save the key in the key file.

Option 2. Embed hard-coded key within the application and save the IV in the key file.

这些选项几乎相同。如果两个以相同文本开头的文件生成以相同密文开头的加密文件,那么您就完蛋了。这两种选择都会发生这种情况。 (假设有一个主 key 用于加密所有文件)。

Option 3. Save both the key and the IV in the key file.

如果您为每个 key 文件使用随机 IV,那就没问题了。没有两个 key 文件是相同的,并且每个加密文件都必须有它的 key 文件。不同的 key 文件将不起作用。

PS:一旦您选择了选项 3 和随机 IV,就开始研究如何确定解密是否成功。从一个文件中取出一个 key 文件,并尝试使用它来解密另一个加密文件。您可能会发现解密继续进行并产生垃圾结果。如果发生这种情况,请开始研究 authenticated encryption .

关于encryption - AES 加密 - key 与 IV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049789/

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