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()来计算或验证认证标签。