跳到主要内容

5.2. Stronger Mixing Functions (更强的混合函数)

5.2. Stronger Mixing Functions (更强的混合函数)

美国政府高级加密标准 [AES] 是多比特数量的强混合函数的一个例子。它接受最多384比特的输入 (128比特的"数据"和256比特的"密钥") 并产生128比特的输出, 其中每一个都依赖于所有输入比特的复杂非线性函数。具有此特征的其他加密函数, 例如 [DES], 也可以通过考虑它们混合所有密钥和数据输入比特来使用。

另一个好的混合函数族是"消息摘要"或哈希函数, 例如美国政府安全哈希标准 [SHA*] 和MD4、MD5 [MD4, MD5] 系列。这些函数都接受实际上无限量的输入并产生相对较短的固定长度输出, 混合所有输入比特。MD*系列产生128比特的输出, SHA-1产生160比特, 其他SHA函数产生最多512比特。

尽管消息摘要函数是为可变数量的输入设计的, 但AES和其他加密函数也可用于组合任意数量的输入。如果128比特的输出足够, 可以将输入打包成128比特的数据量和连续的AES"密钥", 如果需要用零填充; 然后使用电子密码本模式下的AES通过"密钥"连续加密该量。或者, 可以将输入打包成一个128比特密钥和多个数据块, 并计算CBC-MAC [MODES]。

如果需要超过128比特的输出并且想要使用AES, 则应使用更复杂的混合 (但请注意, 绝对不可能输出比输入更多比特的"随机性")。例如, 假设输入被打包成三个量A、B和C。可以使用AES以B加密A, 然后以C作为密钥来产生输出的第一部分, 然后用C加密B, 然后用A来产生更多输出, 如果需要, 用A加密C, 然后用B来产生更多输出。通过颠倒上面给出的密钥顺序可以产生更多输出。对于哈希函数也可以做同样的事情, 哈希输入数据的各种子集或带有不同前缀和/或后缀的输入数据的不同副本以产生多个输出。

作为使用强混合函数的示例, 重新考虑308比特字符串的情况, 其中每一个都有99%的偏向零。第4.1节中给出的奇偶校验技术将其减少到一比特, 偏向为98%。相反, 使用强混合函数, 可以从这308比特中提取超过30比特的随机性, 每个比特的偏向不到十亿分之一。