1

我想存储一个 keyset,并希望使用用户提供的“主密码”生成的密钥对文件进行加密。当然,稍后我想,给定相同的主密码,能够通过解密文件来加载该密钥集。

看来我需要一个Aead,我可以从一个KeysetHandlewith生成它AeadFactory.getPrimitive(keysetHandle)。但是我怎样才能KeysetHandle从“主密码”中产生一个?

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

4

1 回答 1

0

AnAead可以按如下方式创建(这里从 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)
}

几点评论:

  • 我希望密钥基于 32 位摘要,但在这种情况下,Tink 选择的密码在提供 32 位密钥时会引发异常,因此缩短为 16 位密钥。
  • 从哈希弱点的角度来看,以这种方式缩短密钥似乎是可以的。
于 2019-02-25T19:05:58.710 回答