Google представил криптографическую библиотеку Tink
30 августа 2018 года
Компания 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, предоставляющий две операции - шифрование и расшифровка, и не требующий от разработчика выбора конкретных алгоритмов шифрования и определения их параметров (например, векторов инициализации (nonce)). Перед использованием примитива выполняется его регистрация, после чего генерируется или загружается необходимый для операции набор ключей и привязывается к примитиву.
В настоящее время предлагаются следующие примитивы:
- 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.
Библиотека имеет модульную архитектуру и позволяет подключать свои реализации примитивов и заменять существующие примитивы и компоненты управления ключами, не меняя программный код конечных приложений. Например, в случае выявления уязвимости в каком-то алгоритме шифрования достаточно будет заменить примитив в самой библиотеке и перегенерировать ключи, при этом не трогая код приложений. В текущем виде предлагаемые примитивы базируются на использовании библиотек BoringSSL и Java Cryptography Architecture, которые выступают низкоуровневой основой.
Tink также позволяет исключать из сборки излишнюю функциональность. Например, если в программе используется только проверка цифровой подписи, то разработчик для сокращения размера кода приложения может удалить компоненты симметричного шифрования.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.