IKE(互联网密钥交换)协议的文档中提到了 PRF 一词。
什么是 PRF?
PRF 和散列函数有什么区别?
IKE 协议中使用了哪些 PRF?
IKE(互联网密钥交换)协议的文档中提到了 PRF 一词。
什么是 PRF?
PRF 和散列函数有什么区别?
IKE 协议中使用了哪些 PRF?
PRF 代表PseudoRandom Function。PRF 将以确定性的方式将输入映射到输出(对于相同的 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
是一个普通的散列函数,并且K1
andK2
是两个键,它们被定义为使用K1 = K XOR 0x5c5c...5c
and派生自同一个键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) ++ ...
(其中++
表示连接)。