Google Tink: безопасная высокоуровневая криптография
Используйте API Tink на основе наборов ключей для выполнения распространенных криптографических операций без глубоких знаний криптографии.
«Google Tink: безопасная высокоуровневая криптография» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Обзор и мотивация Tink
Tink — криптографическая библиотека с открытым исходным кодом, разработанная криптографической командой Google для безопасной и простой работы с криптографией. Основная цель — предотвратить распространенные ошибки использования криптографии, которые допускают даже опытные разработчики при работе с низкоуровневыми библиотеками. Программный интерфейс Tink устроен так, чтобы правильный вариант использования был самым простым, а случайное создание небезопасных конфигураций — затрудненным.
Абстракция на основе наборов ключей
Tink объединяет ключи в наборы, а не предоставляет отдельные объекты ключей. Приложения работают с дескрипторами наборов ключей, а не с необработанными байтами ключей. Такая абстракция предотвращает случайное раскрытие ключей, обеспечивает плавную ротацию ключей и позволяет хранить ключи в удаленных системах управления ключами, при этом приложение никогда не видит ключевой материал напрямую. Концепция набора ключей лежит в основе безопасной архитектуры Tink.
Интерфейс AEAD
Интерфейс AEAD (аутентифицированное шифрование с дополнительными данными) в Tink предоставляет операции шифрования и расшифрования. AeadFactory.getPrimitive(keyset) возвращает объект Aead; вызов aead.encrypt(plaintext, associatedData) возвращает шифртекст. Tink автоматически выбирает алгоритм шифрования на основе набора ключей (например, AES-256-GCM) и генерирует случайное одноразовое число. Интерфейс скрывает все детали алгоритма, управление одноразовыми числами и кодирование формата.
Интерфейс MAC
Интерфейс MAC в Tink предоставляет операции вычисления и проверки кодов аутентификации сообщений. MacFactory.getPrimitive(keyset) возвращает объект MAC. mac.computeMac(data) возвращает тег аутентификации; mac.verifyMac(tag, data) проверяет его и выбрасывает исключение безопасности, если проверка не пройдена. Алгоритм по умолчанию — HMAC-SHA256. Интерфейс предотвращает распространённые ошибки, например сравнение MAC с помощью обычного сравнения строк вместо сравнения за постоянное время.
Интерфейс цифровой подписи
Tink предоставляет отдельные интерфейсы PublicKeySign и PublicKeyVerify для цифровых подписей. Объекты для подписания и проверки создаются на основе разных дескрипторов наборов ключей — закрытого и открытого соответственно, — что предотвращает случайное использование закрытого ключа для проверки или наоборот. Реализации Ed25519 и ECDSA P-256 в Tink используются по умолчанию; также доступна детерминированная ECDSA, позволяющая избежать уязвимостей, связанных со случайностью.
Интерфейс гибридного шифрования
Интерфейсы HybridEncrypt и HybridDecrypt в Tink реализуют ECIES (схему интегрированного шифрования на эллиптических кривых). Гибридное шифрование сочетает обмен асимметричными ключами с симметричным шифрованием: отправитель создаёт эфемерный ключ, выполняет ECDH с открытым ключом получателя, получает симметричный ключ и шифрует данные с помощью AEAD. Это позволяет шифровать большие сообщения асимметричными ключами без накладных расходов, характерных для полностью асимметричного шифрования.
Процесс ротации набора ключей
Ротация ключей в Tink безопасна и обратно совместима. Для ротации необходимо создать новый ключ и добавить его в набор ключей, назначить новый ключ основным — будущие операции шифрования будут использовать его, — а старые ключи оставить в наборе для расшифрования уже существующего шифротекста. Старый шифротекст продолжит расшифровываться, поскольку неосновные ключи остаются доступными для расшифрования. После того как весь старый шифротекст будет повторно зашифрован или срок его действия истечёт, удалите старые ключи из набора.
Сериализация набора ключей
Наборы ключей Tink сериализуются в формате JSON или в двоичном формате Protocol Buffer. Формат JSON удобен для чтения человеком и отладки. Двоичный формат компактнее и лучше подходит для эксплуатации. Сериализованные наборы ключей, содержащие закрытые ключи, необходимо зашифровать перед хранением. Tink поддерживает хранение зашифрованных наборов ключей с использованием стандартного симметричного шифрования AEAD или передачу хранения в KMS.
Интеграция с KMS для шифрования набора ключей
Tink интегрируется с основными поставщиками KMS: AWS KMS, Google Cloud KMS и HashiCorp Vault. Вместо шифрования наборов ключей локальным ключом AEAD Tink оборачивает ключ шифрования набора ключей с помощью KMS. Для фактического шифрования набора ключей используется локально созданный ключ шифрования данных (DEK), а DEK шифруется ключом шифрования ключей (KEK) в KMS. Это соответствует схеме конвертного шифрования, которую используют облачные поставщики.
Потоковый AEAD для больших файлов
Для стандартного AEAD требуется загружать всё сообщение в память при шифровании и расшифровании. Интерфейс потокового AEAD в Tink шифрует большие файлы по сегментам, позволяя выполнять потоковое шифрование и расшифрование без буферизации всего открытого текста. Каждый сегмент аутентифицируется независимо, а порядок и полнота сегментов проверяются во время расшифрования. Это необходимо для шифрования резервных копий, видео и других больших файлов.
Поддержка языков и экосистема
Tink доступен для Java, Python, Go и C++ и предоставляет идиоматичные API для каждого языка. Межъязыковая совместимость гарантирована: файл, зашифрованный с помощью Tink в Python, можно расшифровать с помощью Tink в Java. Благодаря этому Tink подходит для систем с несколькими службами на разных языках, которым необходимо обмениваться зашифрованными данными. Tink также интегрируется с буферами протоколов для типобезопасной настройки наборов ключей.
Ротация ключей Tink
Во время ротации ключей Tink что происходит с шифротекстом, зашифрованным старым неосновным ключом?
Итоги Google Tink
Итоги по Tink: абстракция на основе набора ключей предотвращает раскрытие необработанных ключей, интерфейс AEAD скрывает управление одноразовыми номерами и выбор алгоритма, интерфейс MAC внутренне использует проверку за постоянное время, интерфейсы цифровой подписи и гибридного шифрования предотвращают неправильное использование интерфейса, ротация ключей обратно совместима — старые ключи расшифровывают данные, пока их не удалят, — интеграция с KMS следует схеме конвертного шифрования, потоковый AEAD обрабатывает большие файлы, а межъязыковая совместимость гарантирована.
Изучай Cryptology Academy с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 67
- Уроки
- 261
Часто задаваемые вопросы
Урок «Google Tink: безопасная высокоуровневая криптография» бесплатный?
Да — полный текст урока «Google Tink: безопасная высокоуровневая криптография» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «Google Tink: безопасная высокоуровневая криптография»?
Используйте API Tink на основе наборов ключей для выполнения распространенных криптографических операций без глубоких знаний криптографии. Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Google Tink: безопасная высокоуровневая криптография»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- libsodium: криптографическая библиотека, устойчивая к ошибкам использования
- API OpenSSL: основные структуры и подводные камни
- Google Tink: безопасная высокоуровневая криптография
- Аудит и выбор криптографических зависимостей