是否建议我使用 初始化向量 加密/解密我的数据?它会让事情变得更安全吗?这是需要根据具体情况进行评估的事情之一吗?

为了将其放入实际上下文中,Win32 加密函数, 加密设置密钥参数 允许在加密/解密之前在密钥上设置初始化向量。其他 API 也允许这样做。

一般推荐什么以及为什么?

有帮助吗?

解决方案

当同一个密钥可能用于加密多个消息时,IV 就至关重要。

原因是,在大多数加密模式下,使用同一密钥加密的两条消息可以一起分析。例如,在简单的流密码中,对使用相同密钥加密的两个密文进行异或运算会得到两条消息的异或结果,使用传统的密码分析技术可以轻松地从中提取明文。

弱 IV 是 WEP 难以破解的部分原因。

IV 基本上将一些独特的非秘密数据混合到密钥中,以防止同一密钥被使用两次。

其他提示

在大多数情况下,您应该使用 IV。由于 IV 每次都是随机生成的,如果对相同的数据加密两次,加密的消息将会不同,观察者将无法判断这两个消息是否相同。

仔细看看 CBC 模式的图片(见下图)。你很快就会意识到,攻击者知道 IV 就像攻击者知道前一个块一样 密文 (是的,他们已经知道很多了)。

我是这样说的:大多数 IV=0 的“问题”都是块加密模式的一般问题,当您 确保数据完整性。您确实必须确保诚信。

这就是我所做的:使用强校验和(加密哈希或 HMAC)并在加密之前将其添加到明文中。这是您已知的第一块密文:它是同一事物的 IV,没有校验和,而您出于一百万个其他原因需要校验和。

最后:恕我直言,CBC 和流密码之间的任何类比都不是很有洞察力。

只要看看CBC模式的图片,我想你就会感到惊喜。

这是一张图片:

http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

链接文本

我找到了 HTTP Digest Auth 的文章(RFC 2617)对于理解 IV/nonce 的使用和需求非常有帮助。

如果同一密钥多次用于多个不同的秘密模式,则加密结果中可能会出现模式。IV 应该是伪随机的,并且每个密钥仅使用一次,它是为了混淆结果。你不应该两次使用同一个 IV 和同一个密钥,这会违背它的目的。

为了不必费心跟踪 IV,最简单的方法是将其添加到生成的加密秘密中。这样你就不用考虑太多了。然后您将始终知道前 N 位或后 N 位是 IV。

解密秘密时,您只需将 IV 拆分出来,然后将其与密钥一起使用即可解密秘密。

是需要根据情况进行评估的事情之一吗?

是的。请务必仔细阅读您正在使用的密码以及它期望输入的外观。有些密码不使用 IV,但确实需要盐来保证安全。IV 可以有不同的长度。密码的模式可以改变 IV 的用途(如果确实使用的话),从而改变它需要安全的属性(随机、唯一、增量?)。

通常建议这样做,因为大多数人习惯于在称为“密码块链接”的模式下使用 AES-256 或类似的块密码。对于许多工程用途来说,这是一个很好、合理的默认选择,并且它需要您有一个适当的(非重复的)IV。在这种情况下,它不是可选的。

IV 允许对明文进行加密,以便攻击者更难解密加密的文本。您使用的 IV 的每一位都会使给定纯文本加密文本的可能性加倍。

例如,让我们使用一个字符长的 IV 来加密“hello world”。IV 被随机选择为“x”。然后加密的文本是“xhello world”,它会产生“asdfghjkl”。如果我们再次加密它,首先生成一个新的 IV——假设这次我们得到“b”——然后像平常一样加密(从而加密“bhello world”)。这次我们得到“qwertyuio”。

关键是攻击者不知道 IV 是什么,因此必须计算给定纯文本的每个可能的 IV 以找到匹配的密文。通过这种方式,IV 的作用就像一个 密码盐. 。最常见的是,IV 与链接密码(流密码或分组密码)一起使用。在链接分组密码中,每个纯文本块的结果被馈送到密码算法以查找下一个块的密文。通过这种方式,每个块都链接在一起。

那么,如果你有一个随机 IV 用于加密纯文本,你如何解密它呢?简单的。将 IV(纯文本)与加密文本一起传递。使用上面的第一个示例,最终的密文将是“xasdfghjkl”(IV + 密文)。

是的,您应该使用静脉注射,但一定要正确选择。使用好的随机数源来制作它。切勿使用同一个静脉注射两次。和 绝不 使用常数 IV。

维基百科上的文章 初始化向量 提供总体概述。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top