Google представила открытую криптографическую библиотеку Tink с поддержкой языков Java, C++ и Objective-C, а также экспериментальной поддержкой Go и JavaScript. Примитивы продукта используют форк BoringSSL и фреймворк Java Cryptography Architecture.
Tink
Даже небольшие ошибки при использовании криптографических методов могут иметь серьезные последствия, а их тщательное изучение занимает десятилетия, пишет компания в своем блоге. Многие разработчики не имеют столько времени, поэтому при создании нового инструмента корпорация старалась сократить количество потенциальных ошибок работы с криптографическими API. Компания уже использует Tink в проектах AdMob, Google Pay, Google Assistant, Firebase и Android Search App.
Примитивы
В основе программного интерфейса лежат следующие примитивы:
- AEAD (Authenticated Encryption with Associated Data) для симметричного шифрования блоков и потоков данных по фиксированному ключу. Инструмент не требует определения конкретных алгоритмов и их параметров. С его помощью можно быстро выполнить операции шифрования и дешифрования:
import com.google.crypto.tink.Aead; import com.google.crypto.tink.KeysetHandle; import com.google.crypto.tink.aead.AeadFactory; import com.google.crypto.tink.aead.AeadKeyTemplates; // 1. Generate the key material. KeysetHandle keysetHandle = KeysetHandle.generateNew( AeadKeyTemplates.AES256_EAX); // 2. Get the primitive. Aead aead = AeadFactory.getPrimitive(keysetHandle); // 3. Use the primitive. byte[] plaintext = ...; byte[] additionalData = ...; byte[] ciphertext = aead.(plaintext, additionalData);
- MAC (Message Authentication Codes) предоставляет коды аутентификации сообщений.
В Tink есть функции создания цифровой подписи и ее проверки, а также функции быстрого гибридного шифрования.
Особенности работы
Каждый примитив поддерживает работу в stateless-режиме, безопасные операции копирования и использование ключей длиной от 128 бит. Библиотека автоматически блокирует потенциально небезопасные операции, например, загрузку ключей из незашифрованных файлов на диске. Tink предоставляет API для ротации ключей и взаимодействия с внешними системами управления ключами: Google Cloud KMS, Amazon KMS, Android Keystore и Apple iOS KeyChain.
Библиотека имеет модульную архитектуру, позволяет подключать кастомные примитивы и заменять ими существующие без изменения программного кода конечных приложений. Из Tink можно исключать часть инструментов. Например, если в программе используется только проверка цифровой подписи, то для уменьшения размера кода приложения можно удалить компоненты симметричного шифрования.
В августе 2018 года создатели VPN-протокола WireGuard объявили о создании криптографической библиотеки Zinc, которая после внедрения в основное ядро Linux ускорит процесс шифрования данных благодаря упрощенному набору криптоалгоритмов.
via OpenNET Source: блог Google Online Security