PRF、IKE 和散列函数

信息安全 哈希 艾克
2021-08-21 20:44:27

IKE(互联网密钥交换)协议的文档中提到了 PRF 一词

  • 什么是 PRF?

  • PRF 和散列函数有什么区别?

  • IKE 协议中使用了哪些 PRF?

1个回答

PRF 代表PseudoRandom FunctionPRF 将以确定性的方式将输入映射到输出(对于相同的 PRF,相同的输入总是映射到相同的输出),对于不知道 PRF 内部的攻击者(并且还没有看到 PRF 已经处理完全相同的输入,即使他们已经看到 PRF 处理了许多类似的输入)。

通常,PRF 是从 PRF 系列中随机获取的。您可以将 PRF 系列视为一个接受额外输入(随机种子,有时也称为随机密钥)的函数,该函数选择特定的 PRF(将输入映射到输出)。因此,如果您的 PRF 系列中有 128 位种子,那么您可以从该系列中使用 2^128(340,282,366,920,938,463,463,374,607,431,768,211,456)个可能的 PRF。这与散列函数形成对比,散列函数只有几十个常用的散列函数(MD5、SHA-1、SHA-256、SHA-512 等)。

假设您知道"Hello"映射到8b1a9953c4611296a827abf8c47804d7(十六进制)。攻击者可以很快发现我正在使用 MD5,然后可以为他们想要的任何输入生成输出。

然而,HMAC - 基于散列的 MAC 是一个 PRF 家族。因此,如果您采用HMAC 构造: H(K1 ++ H(K2 ++ m)),其中++表示连接,H是一个普通的散列函数,并且K1andK2是两个键,它们被定义为使用K1 = K XOR 0x5c5c...5cand派生自同一个键K2 = K XOR 0x3636...36现在,如果我告诉您我的 PRF(使用特定密钥 K 的 HMAC)映射"Hello"53a7e60d93a6853780d622f3b5bd641f,那么攻击者(不知道 K,但可能知道我正在使用 HMAC-MD5)将无法生成输出对于他们从未见过的输入。

IKE 协议中使用的实际 PRF 是在客户端和服务器之间协商的。RFC 中为 IKEv2指定的是 HMAC_MD5、HMAC_SHA1、HMAC_TIGER(从不同散列函数生成的三个 HMAC)和AES128_XCBC在最初的 IKE RFC 中,没有定义要使用的 PRF:“目前没有定义伪随机函数。” .


请注意 PRF 和 PRF 系列之间的区别通常不会明确说明。在文献中,您通常会使用两个输入(一个密钥、一个明文)并生成一个输入。

在密码学中出现了两个相关的概念——PRP(伪随机排列)和 PRG(伪随机生成器)。

随机排列 (PRP)是一对一的 PRF - 这是一种特定类型的 PRF,其中 PRF 的每个输出(使用相同的密钥)只能从一个输入中生成。这允许反转函数并撤消其应用程序的应用效果——因此您可以将 PRP(需要知道密钥的知识)应用于明文以创建密文,然后将 PRP 的逆应用于密文(使用密钥)来解密它。例如,像 AES-128 这样的分组密码是 PRP——它接受一个 128 位和 128 位密钥的输入块,并将明文块映射到一个唯一的 128 位密文块。然后可以反转这些操作以将密文块映射到原始明文块(使用带有该密钥的 AES-128 的逆)。

随机生成器 (PRG)是一种函数,它根据一些初始种子(例如,随机密钥)发出看起来是随机的比特流。该比特流可以与长明文消息进行异或以对其进行加密(因此密文看起来是随机的),然后您可以通过将 PRG 的比特流与密文进行异或来解密它。生成 PRG 的一种方法是采用像 AES-128 这样的分组密码,并在 CTR 模式下使用它。也就是说,您使用相同的密钥加密连续加一的块,然后将输出连接在一起,例如PRG(K) = AES(K, 0) ++ AES(K, 1) ++ AES(K, 2) ++ AES(K, 3) ++ ...(其中++表示连接)。