#1 楼
在对称密码学中,密钥是您保密的。任何知道您的密钥(或可以猜到它的密钥)的人都可以解密您用它加密的任何数据(或伪造您用它计算出的任何身份验证码,等等)。密钥加密,其中密钥有效地包含两个部分:允许解密和/或签名的私钥,以及允许加密和/或签名验证的公钥(从相应的私钥派生)。从最广泛的意义上讲,IV或初始化向量只是用于启动某些迭代过程的初始值。该术语在几个不同的上下文中使用,并且在每个上下文中暗指不同的安全要求。例如,加密哈希函数通常具有固定的IV,它只是哈希函数规范中包含的任意常数,并在输入任何数据之前用作初始哈希值:
相反,大多数分组密码操作模式需要一个IV,该IV是随机且不可预测的,或者至少对于使用给定密钥加密的每个消息都是唯一的。 (当然,如果每个密钥仅曾用于加密一条消息,则可以使用固定的IV来避免。)此随机IV可确保每条消息的加密方式不同,这样就可以看到使用同一密钥加密的多条消息不会被使用。除了仅看到一条长消息,还可以向攻击者提供更多信息。特别是,它可以确保对同一条消息进行两次加密会产生两个完全不同的密文,这对于使加密方案在语义上是安全的是必不可少的。这样做,这将是关键,而不是IV。的确,在大多数情况下,即使您愿意,也要保留IV机密是不切实际的,因为收件人需要知道它以便解密数据(或验证哈希等)。从广义上讲,一个随机数只是“一个数字只能使用一次”。通常,对随机数的唯一要求是永远不要使用两次(在相关范围内,例如使用特定密钥进行加密)。
用于分组密码加密的唯一IV可以称为随机数,但其他各种密码方案也使用随机数。
“ IV”和“ nonce”这两个术语分别用于不同的分组密码操作模式,这存在一些差异:有些作者专门使用一种或另一种,而有些作者则使用一种或两种他们之间的区别。特别是对于CTR模式,有些作者将术语“ IV”保留为由随机数和初始计数器值(通常是全零位的块)的连接所形成的完整密码输入块,而另一些作者则不建议使用CTR模式的术语“ IV”。事实上,在CTR模式下随消息发送的随机数/ IV如何实际映射到初始块密码输入中,存在多种变体。
相反,对于CTR以外的模式(或相关模式) (例如EAX或GCM),术语“ IV”几乎普遍比“ nonce”更受青睐。对于CBC模式,尤其如此,因为它对IV的要求(特别是它们是不可预测的)超出了通常的随机数唯一性要求。
#2 楼
您提到的三个术语(键,IV,随机数)和另一个盐(salt)基本上描述了随机数,每个术语在另一种情况下使用。密钥用作密码基元的输入,并且应保密。随机数是一个随机数,仅使用一次并在短时间内用于替换或转换为更好的值。 。初始化向量还用作密码基元的输入,以实现通常确定性基元的随机化。流密码被称为有状态密码,其中相同的密钥用于许多状态,而随机数用于确保不同的密钥流。因此,我们将IV用于分组密码的操作模式,而将nonce用于流密码。当我们谈论AES-CTR时,这有点令人困惑,因为我们将术语IV用作分组密码,并将术语nonce + counter用作流密码的状态。
出于完整性考虑,salt也是单向函数的某种初始化矢量,但其目标是为低熵输入实现附加熵,例如密码哈希。
评论
$ \ begingroup $
通常不应该随机生成随机数,而应使用与随机数一样宽的计数器进行迭代。这样可以保证随机数不会被重用(在整个$ 2 ^ n $的计数器周期内)。从统计学上讲,合适的随机生成值可能不太可能产生重复的随机数,但计数器会完全消除这种可能性。立即重用通常对密码原语的安全性是致命的。干杯。
$ \ endgroup $
–康拉德·迈耶(Conrad Meyer)
18年8月25日在18:43
$ \ begingroup $
小心-a)随机数有时也需要不可预测,并且b)地球上的计算机在这里运行-破坏计数器唯一性的硬件缺陷,宇宙射线等远比生日问题碰撞更容易以192位随机数表示。不要依赖柜台的独特性。
$ \ endgroup $
–詹森
20-10-12在9:05
$ \ begingroup $
还值得注意的是-在分布式系统中,大的随机数比唯一计数器更不容易实现错误。即,它是一种设计,具有较少的“错误”不安全感。
$ \ endgroup $
–詹森
20-10-12在19:25
评论
$ \ begingroup $
因此,iv可以忽略吗?谢谢与问候,克拉拉
$ \ endgroup $
–杨千ara
19年1月30日,下午1:52
$ \ begingroup $
@ClaraYeung对于CTR,只要您不使用同一密钥加密多条消息,就可以使用null(全零)IV /一次。只需确保键:立即元组永不重复。
$ \ endgroup $
–森林
19年1月30日在5:57