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

Источник: opennet.ru



Комментарии:

Добавить комментарий