Как сгенерировать ключ Tink из предоставленного пользователем пароля - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу сохранить набор ключей и хотел бы, чтобы файл был зашифрован ключом, созданным из предоставленного пользователем "мастер-пароля".И, конечно же, позже я хотел бы, имея тот же главный пароль, иметь возможность загрузить этот набор ключей путем расшифровки файла.

Кажется, мне нужен Aead, который я могу сгенерировать из KeysetHandle с AeadFactory.getPrimitive(keysetHandle).Но как я могу создать KeysetHandle из «мастер-пароля»?

(И в контексте этого вопроса, получить этот ключ из системы управления ключами вместо того, чтобы производить его «из воздуха»).из мастер-пароля, не вариант.)

1 Ответ

0 голосов
/ 25 февраля 2019

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)
}

Несколько комментариев:

  • Я бы предпочел, чтобы ключ был основанна 32-битном дайджесте, но шифр, выбранный Tink в этом случае, генерирует исключение, когда предоставляется 32-битный ключ, следовательно, сокращение до 16-битного ключа.
  • Кажется, сокращениеключ этот путь в порядке с точки зрения слабости хеша.
...