我有一个实现AES GCM算法的库。然而,正如您所知道的,即使是一次性重用也会带来灾难性的后果。
因为我们不能保证每次都有一个唯一的IV,所以我想每次都在nonce上运行SIV (合成初始化向量)。
我想在AES GCM之外实现SIV。因为我不是数学迷,我真的很难理解AES-GCM-SIV规范。
但是,我在任何地方都找不到SIV的任何示例实现。你能帮我理解和实施SIV吗?
发布于 2021-01-30 19:21:30
听起来你觉得AES-GCM-SIV是"AES-GCM,上面有SIV层。“事实并非如此。相反,AES-GCM是一种独立的加密模式,它由与AES-GCM相似(但不完全相同)的组件构建,并且组件以不同的方式组合在一起。虽然AES-GCM-SIV在某些方面类似于AES-GCM,但实际上不能在实现AES-GCM的现有库的基础上实现AES-GCM-SIV。
让事情有点混乱的是,还有一种叫做泛型加密(Generic“SIV建设”)的东西,它允许从任何传统的(未经认证的)加密模式中构造出一种防止误用的认证加密模式,这种加密模式可以满足某些技术标准和明文空间上任何pseurodandom函数 (C2)的要求。例如,AES-SIV (RFC 5297)是以AES-CTR为加密模式,CMAC* (CMAC的多输入变体)为伪随机函数的SIV构造实例,而AES-GCM本质上是以AES-CTR为加密模式,POLYVAL (AES-GCM伪随机函数GHASH)为PRF的SIV构造实例。
但这并不意味着您可以只使用一个AES-GCM实现,并使用它来实现AES-GCM-SIV,至少不首先将其分解到其组件中。即使如此,这两种方案的组件(在各自的RFCs中标准化)在一些细节(如字节顺序;请参见RFC 8452附录A)上有所不同,因此您也不能不修改就重用这些部件。
从技术上讲,我相信你可以在GHASH和AES-CTR之上实现AES-GCM-SIV,如果你的密码库直接公开这两种情况的话。但是,这需要在GHASH之上实现POLYVAL,这在技术上是可行的,但由于两个散列使用的字节顺序不同,所以有些尴尬和效率低下。
https://crypto.stackexchange.com/questions/87895
复制相似问题