Как создать симметричный ключ шифрования с помощью Google Tink?

У меня есть ключ (скажем) "thisist0psecret", который я хочу использовать в качестве симметричного ключа шифрования / дешифрования в библиотеке Google Tink. Я сбит с толку, что я не могу сделать эту простую вещь. Я могу генерировать новые ключи (используя различные шаблоны AES128_GCM и т. Д.), Сериализовать их и затем читать их обратно с помощью KeysetReader. Но я не могу понять, как создать симметричный ключ с конкретными байтами ключа, которые я укажу.

Я могу сделать следующее, например, с Tink:

KeysetHandle ksh = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);
Aead aead = AeadFactory.getPrimitive(ksh);
String pt = "hello, world!";
byte[] encbytes = aead.encrypt(pt.getBytes(), null);
byte[] decbytes = aead.decrypt(encbytes, null);
String orig = new String(decbytes);
assert(pt.equals(orig));

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

Любые эксперты Google Tink, которые могут пролить свет на это?

1 ответ

Я ведущий разработчик для Tink.

Если ваш ключ генерируется случайным образом, вы можете напрямую использовать тонкий API, см.: https://github.com/google/tink/blob/master/java/src/main/java/com/google/crypto/tink/subtle/AesGcmJce.java.

Это не рекомендуется, потому что тонкий слой может измениться без предупреждения (хотя он был относительно стабильным в истории Tink).

Если ваш ключ является паролем, вы хотите извлечь ключ из него, используя что-то вроде Scrypt или PBKDF2. Мы еще не поддерживаем встроенное шифрование на основе паролей в Tink, пожалуйста, отправьте запрос на функцию, и мы посмотрим, чем мы можем помочь.

Другие вопросы по тегам