Ключи

Во многих криптографических библиотеках ключи часто идентифицируются лишь по некоторым последовательностям байтов. Рассмотрим, например, функции 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.