Ключи

Во многих криптографических библиотеках ключи часто идентифицируются только некоторыми последовательностями байтов. Рассмотрим, например, функции OpenSSL, такие как EVP_EncryptInit_ex , которым помимо байтов ключа также требуется IV для вычисления; или метод javax.crypto Cipher.init , который принимает как последовательность ключей, так и AlgorithmParameterSpec . Такие функции часто трудно использовать правильно, а передача неправильных параметров может иметь серьезные последствия.

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

Полный ключ AEAD, например, точно определяет, как работает шифрование и дешифрование — он определяет две функции \(\mathrm{Enc}\) и\(\mathrm{Dec}\)и способ кодирования зашифрованного текста (например, вектор инициализации, за которым следует шифрование, за которым следует тег) .

Ключ AES в Tink представляет собой не только последовательность байтов длиной 128, 192 или 256 бит, но также хранит соответствующие спецификации алгоритма, необходимые для вычисления ключа, в виде объекта параметров . Следовательно, полный ключ AES-EAX и полный ключ AES-GCM — это разные объекты в Tink.