首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最短SHA-3输出

最短SHA-3输出
EN

Security用户
提问于 2015-08-16 10:06:38
回答 3查看 3.9K关注 0票数 8

我在新的SHA-3标准中注意到它有一个可变的输出大小。知道较长的输出明显更好(更高的熵),理论上输出大小的下限是什么?我的散列输出可以是8位长吗?我知道在大多数情况下,这是不安全的。

EN

回答 3

Security用户

发布于 2015-08-16 15:28:05

SHA-3标准既旧又新.

这是“老”,因为选择SHA-3哈希函数的竞争始于2009年,我们知道自2012年以来,Keccak就赢了。

另一方面,考虑到FIPS-202是在2015年8月标准化的,SHA-3的标准化是相当新的。

如果要使用SHA-3,最短输出长度为224位(SHA3-224),SHA-3的最长输出长度为512位(SHA3-512)。

但是,FIPS-202: SHA-3标准:基于置换的散列和可扩展输出函数还定义了两个可扩展的输出函数(XOFs):SHAKE128和SHAKE256,它们都具有可变的输出长度。注意,由于填充的不同,SHA3 128-256与SHA3-256不一样。

抖动函数允许任意输出长度,只要Keccak支持它。由于Keccak是建立在海绵结构的基础上的,所以双长输出是没有问题的,但是通过简单的截断就可以得到任意的短输出。抖动函数接受以位为单位的摘要长度,不执行任何下限检查,这意味着1位是这些函数的最短输出。

票数 3
EN

Security用户

发布于 2016-12-29 23:08:50

如果您查看FIPS 202 ( SHA-3标准文档),就会定义抖动可扩展输出函数(XOFs)如下(第20-21页):

代码语言:javascript
复制
SHAKE128(M, d) = KECCAK[256](M || 1111, d),
SHAKE256(M, d) = KECCAK[512](M || 1111, d).

...where M是要散列的消息,d是所需的输出长度。KECCAK函数在第20页中定义:

代码语言:javascript
复制
KECCAK[c](N, d) = SPONGE[KECCAK-p[1600, 24], pad10*1, 1600–c](N, d).

SPONGE算法在第18页中定义,它们指定d的值可以是任何非负整数。

因此,抖动函数允许的最短输出大小实际上是0位。

本文件第23页中的表4概述了各种SHA功能的安全级别。对于抖动,以输出大小d作为参数的公式给出了安全性级别。例如,对于SHAKE128:

  • 碰撞阻力为min(d/2, 128)位;
  • 预图像电阻是min(d, 128)位。
  • 第二,预图像电阻也是min(d, 128)比特。

应用这些公式,当d = 0获得这些安全级别时(对于SHAKE128和SHAKE256):

  • 0位的抗碰撞能力;
  • 0位预成像电阻;
  • 0位的第二预图像电阻。

n-bit安全级别意味着攻击者只能在2^n尝试中获得成功。因此,0位安全级别意味着攻击者成功的次数不超过2^0。为了证明这一点,下面是对0位输出长度SHAKE256的成功碰撞攻击:

代码语言:javascript
复制
SHAKE256(0x00, 0) = SHAKE256(0xff, 0)

所以数学计算得很好,零长度的抖动输出和听起来一样安全。

知道更长的输出明显更好(高熵) ...

正如其他答案所指出的那样,更长的时间并不一定意味着更好。我上面提到的公式( FIPS 202第23页)给出了一个精确的答案:

  • SHAKE128和SHAKE256作为散列函数的安全级别不能分别超过128位和256位;
  • 如果输出足够短,则安全性级别将低于这些值。
票数 0
EN

Security用户

发布于 2015-12-06 13:40:41

Keccak函数的内部状态为1600位,一度高达4800位。不管输出大小如何,内部状态是决定安全性的因素,而不是压缩到的长度。

票数 -4
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/96946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档