Google представил криптографическую библиотеку Tink
Компания Google представила новую открытую криптографическую библиотеку Tink, нацеленную на предоставление простого для корректного применения криптографического API, при использовании которого трудно допустить ошибки, способные привести к снижению с безопасности. Предоставляется полноценная поддержка языков Java (в том числе для Android), C++ и Obj-C, а также экспериментальная поддержка Go и JavaScript. Код поставляется под лицензией Apache 2.0.
Библиотека подготовлена командой, занимавшейся разработкой инструментария Wycheproof и выявившей более 40 уязвимостей и слабых мест в различных популярных криптографических библиотеках и реализациях алгоритмов шифрования. В результате данной работы родилась идея создания предельно простого API, который не позволял бы совершать ошибки, вызванные недопониманием работы алгоритмов шифрования, и который без риска для безопасности смогли бы использовать разработчики не имеющие опыта в криптографии.
В итоге появился проект Tink, сконцентрированный на сокращении числа потенциальных ошибок, которые могут появиться в результате ненадлежащего применения API, спроектированный с учетом опыта анализа слабых мест в различных реализациях алгоритмов шифрования, написанный с оглядкой на безопасность, прошедший жесткое рецензирование кода и досконально протестированный. В Google Tink уже применяется во многих внутренних проектах, таких как AdMob, Google Pay, Google Assistant, Firebase и Android Search App.
Основу программного интерфейса Tink составляет набор криптографических примитивов, каждый из которых охватывает определенную область без углубления в детали, например, для симметричного шифрования по ключу предлагается примитив AEAD, предоставляющий две операции - шифрование и расшифровка, и не требующий от разработчика выбора конкретных алгоритмов шифрования и определения их параметров. Перед использованием примитива выполняется его регистрация, после чего генерируется или загружается необходимый для операции набор ключей и привязывается к примитиву.
В настоящее время предлагаются следующие примитивы:
- AEAD (Authenticated Encryption with Associated Data) - симметричное аутентифицированное шифрование по фиксированному ключу с опциональной возможностью прикрепления аутентифицированных, но не зашифрованных, связанных данных. Поддерживается как шифрование блоков, так и больших потоков данных;
- MAC (Message Authentication Codes) - коды аутентификации сообщений для обеспечения целостности и аутентификации источника данных;
- Функции для создания цифровой подписи и ее проверки (PublicKeySign и PublicKeyVerify);
- Функции гибридного шифрования, сочетающие скорость симметричного шифрования с удобством шифрования по открытым ключам;
Каждый примитив поддерживает опции для работы в stateless-режиме (безопасный для многопоточных программ), с использованием безопасных операций копирования (copy-safe) и для применения ключей, длиной как минимум 128 бит. Доступен API для взаимодействия со внешними системами управления ключами, такими как Google Cloud KMS, Amazon KMS, Android Keystore и Apple iOS KeyChain.