跳到主要内容

7.2.1. Input Length Restrictions (输入长度限制)

7.2.1. Input Length Restrictions (输入长度限制)

本文档基于上面列出的 KDF 定义了 LabeledExtract() 和 LabeledExpand()。这些函数在调用 KDF 的 Extract() 和 Expand() 函数之前, 会在其各自的输入 ikm 和 info 中添加前缀。这导致了输入 psk, psk_id, info, exporter_context, ikm (即 HPKE 应用程序提供的可变长度参数) 可用的最大输入长度的减少。下表列出了本文档中定义的 KDF 的这些字段的最大允许长度, 以字节为单位的包含边界:

InputHKDF-SHA256HKDF-SHA384HKDF-SHA512
psk2^61 - 882^125 - 1522^125 - 152
psk_id2^61 - 932^125 - 1572^125 - 157
info2^61 - 912^125 - 1552^125 - 155
exporter_context2^61 - 1202^125 - 2002^125 - 216
ikm (DeriveKeyPair)2^61 - 842^125 - 1482^125 - 148

表 4: 应用程序输入限制

这表明限制仅略小于底层哈希函数的最大输入长度; 这些限制很大, 在实际应用中不太可能达到。定义新 KDF 的未来规范必须为这些可变长度参数指定边界。

建议这些值的限制为 64 字节。这将使与静态分配内存以避免内存分配的实现实现互操作性。

psk, psk_id, info 和 ikm 的值 (它们是 LabeledExtract() 的输入) 使用以下表达式计算:

max_size_hash_input - Nb - size_version_label -
size_suite_id - size_input_label

exporter_context 的值 (它是 LabeledExpand() 的输入) 使用以下表达式计算:

max_size_hash_input - Nb - Nh - size_version_label -
size_suite_id - size_input_label - 2 - 1

在这些方程中, max_size_hash_input 是底层哈希函数的最大输入长度 (以字节为单位), Nb 是底层哈希函数的块大小 (以字节为单位), size_version_label 是 "HPKE-v1" 的大小 (以字节为单位), 等于 7, size_suite_id 是 suite_id 的大小 (以字节为单位), 对于 DHKEM 等于 5 (与 ikm 相关), 对于 HPKE 的其余部分等于 10 (与 psk, psk_id, info 和 exporter_context 相关), size_input_label 是作为 LabeledExtract() 或 LabeledExpand() 参数使用的标签的大小 (以字节为单位), 在本文档的所有标签中最大值为 13。