GCM被设计为使用96位的nonce,它可以随机地或确定性地生成.如果您使用的不是96位的nonce,那么它将被填充并使用GHASH进行散列,从而创建一个伪随机位(和块计数器)。例如,假设您生成了一致随机128位的非128,这些将使用GHASH进行散列,并转换为96位的nonce和32位的随机块计数器。考虑到GHASH不具有抗碰撞能力,这是否比直接生成一个随机的96位nonce更有可能导致现在的重用?
发布于 2020-05-01 18:51:29
如果您坚持使用随机非are,128位随机非are比96位随机无are更安全(但不如96位基于计数器的非are-我认为这在您的场景中是不可行的)。
将128位随机值(通过GHash)转换为有效的96位当前值和32位计数器;在96位情况下,直接使用96位当前值,我们使用固定的32位计数器值1。如果这个(96,32)位值是(X, Y),那么N块消息的加密通过(X, Y+N+1)使用值(X, Y) (并且添加是模块化2^{32})。
现在,如果使用的范围包含值(0, 0) ( 96位非can不能发生),或者两个单独的加密(以及它们的非can)使用共同的值,GCM就会遇到麻烦。
至于第一种可能的情况(在范围内的某个地方使用一个值(0, 0) ),这发生在N块消息的概率2^{-128}(N+2)中--显然,96位的非case更好。
至于第二种可能的情况(使用两个感兴趣的范围),128位的非case显然更好。毕竟,为了让两个范围感兴趣,它们必须共享相同的X组件;对于96位的非less,这就足够了;对于128位的非less,Y组件也需要相交,除非N接近最大值,否则概率小于1。
如果我们将对(0, 0)值的禁止建模为恰好使用该单个值的单个消息,那么这与“没有两条消息可以使用相交范围”是一致的。然后,可以很容易地看到,使用128位随机无see加密M消息必须至少与96位随机无see的加密M+1消息一样安全,实际上,由于观察到两个碰巧映射到相同96位空间的128位非see通常不会相交,所以实际上要好得多。
此外,你还声称GHASH不具有抗碰撞能力,Woodstock声称GHASH产量很可能不均匀。实际上,如果是H \ne 0,那么在128位输入时,GHASH是一个排列,因此它具有抗碰撞能力,并且输出是一致的。
https://crypto.stackexchange.com/questions/80386
复制相似问题