伪随机函数 (PRF)

借助伪随机函数 (PRF) 基元,您可以为给定输入生成稳定、任意长度的伪随机输出。

由于 Tink 是在密钥集上运行,因此该基元会公开一组相应的 PRF,而不是单个 PRF。PRF 按 32 位密钥 ID 编入索引。这可用于轮替用于隐去一条信息的密钥,同时不会丢失先前的关联。

PRF 具有以下属性:

  • 确定性:为指定输入计算 PRF 将始终生成相同的输出。
  • 随机性:PRF 的输出与随机字节无法区分。

选择密钥类型

我们建议在大多数情况下使用 HMAC_SHA256_PRF,但也有其他选项。

一般来说,以下情况是正确的:

  • HMAC_SHA512_PRF 速度不一定快,具体取决于您的输入大小以及您所用硬件的具体情况。
  • HMAC_SHA512_PRF 是最保守的模式,可用于几乎不限数量的消息。
  • 在支持 AES-NI 硬件加速的系统上,AES_CMAC_PRF 的运行速度最快。

最低限度的安全保证

  • 在不知道密钥的情况下,PRF 与随机函数无法区分
  • 至少 128 位的安全性,同样适用于多用户场景(攻击者的目标不是特定密钥,而是最多 232 个密钥中的任意密钥)
  • 至少 16 个字节的可用输出

用例示例

PRF 的使用场景包括确定性隐去个人身份信息 (PII)、键控哈希函数,以及创建在不知道键的情况下不允许与原始数据集联接的子 ID。

虽然可以使用 PRF 来证明消息的真实性,但建议针对该用例使用 MAC 基元,因为它支持验证,避免了验证期间经常发生的安全问题,并且自动支持密钥轮替。它还允许使用非确定性算法。