当前位置: 首页 > 知识库问答 >
问题:

SHA3状态和PBKDF2-HMAC-SHA3测试载体

微生毅
2023-03-14
  1. NIST网站说,由于政府资金不足,NIST已经关闭。SHA-3是否有可能最终被接受?
  2. BouncyCastle库有一个SHA-3的实现,其摘要结果与wikipedia文章中发布的示例相同(我对此进行了测试)。既然最终的标准没有得到认可,这还能信任吗?维基百科说这可能会被改变,但怎么改变呢?因为最终的算法似乎不会被改变(否则就是另一种算法)。
  3. 这里有人指出,应该避免将PBKDF2与SHA-3一起用于密钥加强和密码哈希。但我不明白为什么?(如果算法不快,如何给攻击者带来优势?)
  4. 我在任何地方都找不到测试向量来测试我基于BouncyCastle java API在scala中实现的PBKDF2-HMAC-SHA3。我可以发布我的测试规范和一些结果。但首先,有人能发布任何/规范测试向量吗?

下面是我在Scala中的实现:

package my.crypto

import org.bouncycastle.crypto.digests.SHA3Digest
import org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator
import org.bouncycastle.crypto.PBEParametersGenerator
import org.bouncycastle.crypto.params.KeyParameter

object PBKDF2WithHmacSHA3 {

  def apply(password: String, salt: Array[Byte], iterations: Int = 65536, keyLen: Int = 256): Array[Byte] = {
    val generator = new PKCS5S2ParametersGenerator(new SHA3Digest(256))
    generator.init(
      PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(password.toCharArray),
      salt,
      iterations
    )
    val key = generator.generateDerivedMacParameters(keyLen).asInstanceOf[KeyParameter]
    key.getKey
  }
}

对于我来说,一个值得怀疑的事情是new SHA3Digest(256),构造函数中的256位长度,它应该与提供的密钥长度相同还是与我所做的某个固定的长度相同?我决定使用固定长度,因为只能使用一些固定值,并且object API用户可以提供任何值作为键长参数,但大多数不常见的值会导致从sha3digest构造函数内部引发异常。此外,默认值似乎是288(当没有提供密钥长度时),这看起来很奇怪。

提前道谢!

共有1个答案

慕容康安
2023-03-14

>

  • 关机是暂时的。SHA-3很可能在2014年的某个时候实现标准化。
  • 不,这些值可能是最后一轮Keccak的值,而不是SHA-3的值。目前还没有SHA-3规范,很有可能在标准化之前对SHA-3进行修改。

    =>现在不可能实现SHA-3,只能实现Keccak。

    密码哈希对攻击者来说应该尽可能地昂贵。攻击者使用与防御者不同的硬件,至少是GPU,但可能甚至是定制芯片。

  •  类似资料:
    • web3.sha3(string, options) 参数: String - 传入的需要使用Keccak-256 SHA3算法进行哈希运算的字符串。 Object - 可选项设置。如果要解析的是hex格式的十六进制字符串。需要设置encoding为hex。因为JS中会默认忽略0x。 返回值: String - 使用Keccak-256 SHA3算法哈希过的结果。 示例: //省略初始化过程 va

    • 使用web3.utils.sha3()方法计算给定字符串的sha3哈希值。 注意,如果要模拟solidity中的sha3,请使用soliditySha3函数。 调用: web3.utils.sha3(string) web3.utils.keccak256(string) // ALIAS 参数: string - String: 要计算sha3哈希值的字符串 返回值: String: 计算结果

    • 我正在进行一个Java项目,我必须确保用户密码保存在明文文件中的保密性和完整性。 为此,我将只在文件中写入密码的散列。更具体地说,我的意图是编写密码和随机salt的散列,再加上随机salt本身,以避免使用rainbow和lookup表。我还想使用PBKDF2进行键拉伸,以使散列的计算变得昂贵。最后,我想使用键控哈希算法HMAC作为最后一层保护。 我试图在Java代码中实现我的想法,我找到了上面介绍

    • 采用和solidity同样的方式计算给定参数的sha3哈希值,也就是说, 在计算哈希之前,需要首先对参数进行ABI编码,并进行字节紧凑化处理。 调用: web3.utils.soliditySha3(param1 [, param2, ...]) 参数: paramX - Mixed: 任意类型,或是一个具有如下结构的对象:{type: 'uint', value: '123456'} 或 {t

    • 问题内容: 2019年更新:自Bouncycastle 1.60起,Bouncycastle现在支持PBKDF2-HMAC- SHA256 JAVA是否有PBKDF2-HMAC-SHA256的可靠实现? 我曾经使用bouncycastle进行加密,但是它不提供PBKDF2WithHmacSHA256’。 我不想自己写加密模块。 您能推荐任何其他库或算法吗(如果我可以坚持使用bouncycastle

    • 使用Express.js框架和密码与pbkdf2散列密码我读到默认算法是HMAC-SHA1,但我不明白为什么它没有升级到其他家族或SHA之一。 我们提供的keylen是我们想要的SHA的变体吗?像SHA-256,512等等? HMAC如何改变输出? 最后,当SHA1断开时,它是否足够坚固? 抱歉,如果我把事情搞混了。