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 的这些字段的最大允许长度, 以字节为单位的包含边界:
| Input | HKDF-SHA256 | HKDF-SHA384 | HKDF-SHA512 |
|---|---|---|---|
| psk | 2^61 - 88 | 2^125 - 152 | 2^125 - 152 |
| psk_id | 2^61 - 93 | 2^125 - 157 | 2^125 - 157 |
| info | 2^61 - 91 | 2^125 - 155 | 2^125 - 155 |
| exporter_context | 2^61 - 120 | 2^125 - 200 | 2^125 - 216 |
| ikm (DeriveKeyPair) | 2^61 - 84 | 2^125 - 148 | 2^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。