借助伪随机函数 (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 基元,因为它支持验证,避免了验证期间经常发生的安全问题,并且自动支持密钥轮替。它还允许使用非确定性算法。