Когда вы впервые начинаете работать с Tink, вам следует понять некоторые ключевые понятия, прежде чем начать свое путешествие; они описаны в следующих разделах.
Примитивы
Tink использует примитивы в качестве криптографических строительных блоков, которые управляют базовым алгоритмом, чтобы пользователи могли безопасно выполнять криптографические задачи. Примитив определяет детали криптографического алгоритма и тип ключа.
Примитивы, поддерживаемые Tink:
- Аутентифицированное шифрование со связанными данными (AEAD) : наиболее распространенный примитив шифрования данных; подходит для большинства задач шифрования. AEAD обеспечивает конфиденциальность открытого текста и позволяет проверять его целостность и подлинность. См. «Аутентифицированное шифрование со связанными данными» (AEAD) .
- Детерминированное шифрование: примитив, который всегда создает один и тот же зашифрованный текст для данного открытого текста и ключа. Это может быть рискованно, поскольку злоумышленнику нужно только выяснить, какой зашифрованный текст соответствует данному входному открытому тексту, чтобы идентифицировать его. См. Детерминированный AEAD .
- Цифровая подпись : асимметричный (см. Шифрование с асимметричным ключом ) примитив для подтверждения подлинности и целостности подписанных данных. См. Цифровая подпись .
- Гибридное шифрование : примитив, сочетающий в себе шифрование с асимметричным ключом и шифрование с симметричным ключом (см. Шифрование с асимметричным ключом и Шифрование с симметричным ключом ). Гибридное шифрование сочетает в себе эффективность симметричного шифрования с удобством шифрования с открытым ключом. Чтобы зашифровать сообщение, генерируется новый симметричный ключ, который используется для шифрования данных открытого текста, тогда как открытый ключ получателя используется только для шифрования симметричного ключа. Окончательный зашифрованный текст состоит из симметричного зашифрованного текста и зашифрованного симметричного ключа. См. Гибридное шифрование .
- Код аутентификации сообщения (MAC) : симметричный (см. Шифрование с симметричным ключом ) примитив для подтверждения подлинности и целостности данных. См. Код аутентификации сообщения (MAC) .
- Потоковая передача AEAD : примитив, обеспечивающий аутентифицированное шифрование для потоковой передачи данных; полезно, когда данные, подлежащие шифрованию, слишком велики, чтобы их можно было обработать за один шаг. См. Потоковое AEAD .
Информацию о совместимости см. в разделе Поддерживаемые примитивы по языкам .
Для получения дополнительной информации см. примитивный дизайн .
Типы ключей
Тип ключа реализует определенный примитив. Большинство примитивов имеют несколько типов ключей на выбор в зависимости от ваших требований к безопасности, времени выполнения и пространству. Например, AES128_GCM — это AEAD , быстрый и эффективный для большинства нужд. Дополнительную информацию см. в разделе «Поддерживаемые типы ключей по языкам» .
Наборы ключей и ручки набора ключей
Tink использует наборы ключей для управления ключами. Набор ключей — это, по сути, набор ключей, которые облегчают вращение клавиш. Примечательными свойствами набора ключей являются:
- Каждый ключ в наборе ключей имеет уникальный идентификатор, который уникален внутри набора ключей. Этот идентификатор обычно добавляется в качестве префикса к каждому произведенному зашифрованному тексту, подписи или тегу, чтобы указать, какой ключ был использован (дополнительную информацию см. в разделе, как Tink помечает зашифрованные тексты ).
- Только один ключ в наборе ключей является первичным . Первичный ключ в наборе ключей — это ключ, «используемый» в данный момент.
- Все ключи в наборе ключей должны быть реализациями одного и того же примитива (например, AEAD), но могут иметь разные типы ключей (например, ключ AES-GCM и XCHACHA20-POLY1305).
Каждая реализация Tink предоставляет API для создания или редактирования наборов ключей. Однако мы рекомендуем использовать Tinkey, наш инструмент CLI.
Пользователи работают с набором ключей, используя дескрипторы набора ключей . Ручка набора ключей ограничивает раскрытие фактического секретного материала ключа. Он также абстрагирует набор ключей, позволяя пользователям получить примитив, который «обертывает» весь набор ключей. Например, вы можете получить примитив AEAD набора ключей с N
клавишами; шифрование и дешифрование с помощью полученного примитива затем используют первичный ключ в наборе ключей.
Дополнительную информацию см. в разделе «Дизайн набора клавиш» .