8.2. Errors (错误)
8.2. 错误
本文档中指定的高级公共 HPKE API 都是可能失败的。这包括 Setup 函数和所有加密上下文函数。例如, 如果封装密钥 enc 无效, Decap() 可能会失败, 如果密文解密失败, Open() 可能会失败。本规范中生成的显式错误以及导致每个错误的条件如下:
-
ValidationError: KEM 输入或输出验证失败; 第 4.1 节。
-
DeserializeError: 公钥或私钥反序列化失败; 第 4 节。
-
EncapError: Encap() 失败; 第 4 节。
-
DecapError: Decap() 失败; 第 4 节。
-
OpenError: Context AEAD Open() 失败; 第 4 节和第 5.2 节。
-
MessageLimitReachedError: Context AEAD 序列号溢出; 第 4 节和第 5.2 节。
-
DeriveKeyPairError: 密钥对派生失败; 第 7.1.3 节。
隐式错误也可能发生。例如, 某些类别的失败, 如格式错误的接收方公钥, 可能不会产生显式错误。例如, 对于本规范中描述的 DHKEM 变体, 当给定无效的接收方公钥时, Encap() 算法会失败。然而, 其他 KEM 算法可能没有用于验证公钥有效性的高效算法。因此, 等效的错误可能要到接收方的 AEAD 解密时才会显现。另一个例子是, 如果给定错误的发送方公钥, DHKEM 的 AuthDecap() 函数将产生无效输出。这个错误在后续 AEAD 解密之前无法检测到。
本文档中的错误旨在作为实现者的指南。它们不是实现可能发出的所有错误的详尽列表。例如, 未来的 KEM 可能具有内部失败情况, 或者实现可能会耗尽内存。
这些错误在 API 中如何表达或由应用程序如何处理是特定于实现的细节。例如, 某些实现可能会在 DeriveKeyPairError 失败时中止或恐慌, 因为它只会以可忽略的概率发生, 而其他实现可能会重试失败的 DeriveKeyPair 操作。有关更多信息, 请参阅第 7.1.3 节。另一个例子是, 本文档中指定的 DHKEM 的某些实现可能选择将来自 DH() 的 ValidationError 转换为来自 Encap() 或 Decap() 的 EncapError 或 DecapError, 而其他实现可能选择未修改地引发 ValidationError。
使用 HPKE API 的应用程序不应该假设这里的错误是完整的, 也不应该假设某些类别的错误在所有密码套件中总是以相同的方式表现。例如, 本文档中指定的 DHKEM 将在 KEM 公钥无效时发出 DeserializationError 或 ValidationError。然而, 新的 KEM 可能没有用于确定公钥是否有效的高效算法。在这种情况下, 无效的公钥可能会在尝试解密密文时产生 OpenError。