SIV 和 GCM-SIV 模式


🌐 SIV and GCM-SIV modes

SIV2 和 GCM-SIV3 在 OpenSSL 支持时也支持 AEAD 算法。使用这些模式的应用在使用加密 API 时必须遵守某些限制:

  • 认证标签长度固定为16字节。
  • AES-SIV 密钥是命名 AES 密钥大小的两倍:aes-128-siv 需要 32 字节的密钥,aes-192-siv 需要 48 字节的密钥,aes-256-siv 需要 64 字节的密钥。
  • AES-SIV 加密算法不使用初始化向量。将 null 或长度为零的 iv 传递给 crypto.createCipheriv() 或 crypto.createDecipheriv()。
  • AES-SIV 和 AES-GCM-SIV 仅在 OpenSSL 3.5 或更高版本支持零长度明文。
  • AES-SIV 没有单独的随机数或初始化向量参数。RFC 5297 定义了 AES-SIV 在一个有序关联数据输入列表上的使用。每次 setAAD() 调用都会提供列表中的一个输入。如果协议使用 AES-SIV 的随机数,应该在其他关联数据输入之后、update() 之前调用 setAAD(nonce)。最多可以提供 126 个关联数据输入。
  • AES-GCM-SIV 加密需要一个 12 字节的初始化向量。
  • 在解密时,必须通过 setAuthTag() 设置认证标签,然后才能调用 update()。
  • 使用像 write(data)、end(data) 或 pipe() 这样的流方法可能会失败,因为这些模式每个实例不能处理多于一块的数据。
  • 由于这些模式会一次处理整个消息,所以 update() 必须且只能调用一次。
  • 虽然调用 update() 已经足够加密/解密信息,但应用 必须 调用 final() 来计算或验证认证标签。