海绵函数应该能够产生任意长度的输出。然而,SHA3 (Bouncy城堡)限制我选择224、256、384和512之间的输出长度。显然,这些都不是任意的长度。那么SHA3是如何成为海绵函数的呢?
是否有一种特定的方式来生成“任意长度”使用bouncy城堡实现?
这是我的代码:
SHA3.DigestSHA3 digestSHA3 = new SHA3.DigestSHA3(320);
byte[] digest = digestSHA3.digest(bip39Seed);我遗漏了什么?
我的猜测是,Keccak的标准化版本与提交给NIST的最初版本不同。如果是这样的话,我如何才能获得允许我指定任意长度的版本?
发布于 2018-03-11 14:29:25
…SHA3 (邦西城堡)约束我…
邦西城堡提供NIST批准,固定和标准化输出长度的凯卡克海绵功能。
你看,在谈论SHA-3的时候,你是在谈论那些NIST标准。这是建立在提议和接受的keccak海绵功能的基础上。
NIST将SHA-3标准化为那些长度( libs像Bouncy城堡封面)以与SHA-2输出标准完美匹配,这样SHA-3可以作为一个即时下降的替代物,以防SHA-2 (让我们说)有一天“下降”。
然而…仅仅因为NIST创建/修正了这些标准输出长度,这并不意味着底层的海绵函数不能用于创建其他输出长度。
最后,您所缺少的唯一的事实是,许多编程库(包括Bouncy城堡)都专注于提供符合标准的功能,而不是自定义功能。
…是否有一种特定的方法可以使用…生成“任意长度”?
是的,如果您查看BC轻量级API,您将发现使用SHAKE128和SHAKE256的选项--这正是这样做的。(提示:SHAKEDigest班级)
如果您认为where 128/256函数不适合您的需要(它们实际上应该满足您的需要),那么编程就是其中之一。如果你想要一些特别的东西(阅读:非标准),你将不得不抓住核心海绵功能,并创建你自己认为你需要的相应功能。像庞西城堡这样的图书馆在这里几乎没有什么用处。
但这并不是说,在网络上没有项目和源代码片段已经提供了你想要的东西。只需使用你最喜欢的搜索引擎,为任何你认为合适和适合你需要的编程语言找到它们。
…Keccak的标准化版本不同于提交给NIST…的原始版本。
是的,你也是正确的,因为SHA-3和Keccak不同.它们都是海绵函数…但是SHA-3是建立在Keccak上的,NIST引入了一个小的微调.SHA-3和Keccak海绵功能之间的这种微小差异使得它们在相同的输出长度下产生不同的输出。
实际上,两者都被认为是加密安全的。因此,当需要任意长度的输出时,您必须决定要使用哪种海绵函数。看看Gimli,我想指出的是,还有其他一些海绵函数也适用于密码学。取决于你到底需要什么或期望什么,你有不同的选择。
https://crypto.stackexchange.com/questions/56346
复制相似问题