【问题标题】:How to generate a Tink key from a user-provided password如何从用户提供的密码生成 Tink 密钥
【发布时间】:2019-02-23 00:15:31
【问题描述】:

我想store a keyset,并希望使用用户提供的“主密码”生成的密钥对文件进行加密。当然,稍后我想,给定相同的主密码,能够通过解密文件来load that keyset

看来我需要一个Aead,我可以从KeysetHandleAeadFactory.getPrimitive(keysetHandle) 生成它。但是如何从“主密码”生成KeysetHandle

(对于这个问题的上下文,从密钥管理系统获取该密钥,而不是从主密码“凭空”产生它,不是一种选择。)

【问题讨论】:

    标签: tink


    【解决方案1】:

    Aead 可以按如下方式创建(这里从 Scala 完成):

    val password: String = "..."
    val aead = {
      val messageDigest = MessageDigest.getInstance("SHA-256")
      messageDigest.update(password.getBytes(CharsetNames.Utf8))
      val key256Bit = messageDigest.digest()
      val key128Bit = key256Bit.take(16)
      new AesGcmJce(key128Bit)
    }
    

    几个cmets:

    • 我希望密钥基于 32 位摘要,但在这种情况下,Tink 选择的密码在提供 32 位密钥时会引发异常,因此缩短为 16 位密钥。
    • 从哈希弱点的角度来看,似乎是 shortening the key this way is ok

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 2012-10-07
      • 2010-12-02
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多