Симметричное и асимметричное шифрование: краткий обзор

Симметричное шифрование опирается на использование одного общего секретного ключа для обеих сторон взаимодействия. В экосистеме TweetNaCl.js этот подход реализован через nacl.secretbox, представляющий собой комбинацию потокового шифра XSalsa20 и аутентифицирующего кода Poly1305.

Основной характеристикой симметричного шифрования является необходимость заранее распределённого секрета. Без безопасного канала передачи ключа вся модель теряет смысл, поскольку компрометация ключа полностью раскрывает все зашифрованные данные.

Механизм работы secretbox

В TweetNaCl.js функция secretbox работает по следующей схеме:

  • входные данные шифруются поточным алгоритмом XSalsa20;
  • к зашифрованному сообщению добавляется MAC-метка Poly1305;
  • используется уникальный nonce для каждого сообщения.

Ключ имеет фиксированную длину 32 байта. Nonce — 24 байта и обязан быть уникальным для каждой операции шифрования с одним и тем же ключом. Нарушение уникальности nonce приводит к катастрофическим последствиям с точки зрения безопасности, включая возможность восстановления ключа или исходного текста.

Структура данных

Шифрование через secretbox формирует структуру:

  • nonce (отдельно от ciphertext);
  • ciphertext;
  • authentication tag.

Проверка целостности выполняется до расшифровки. Если тег не совпадает, операция немедленно прерывается.

Особенности симметричной модели

Симметричное шифрование в NaCl ориентировано на высокую производительность и минимальные накладные расходы. Алгоритмы XSalsa20 и Poly1305 оптимизированы для программной реализации, что делает их применимыми в браузерной среде без аппаратного ускорения.


Асимметричное шифрование и модель public-key в TweetNaCl.js

Асимметричная криптография в TweetNaCl.js реализуется через примитив nacl.box, основанный на комбинации:

  • алгоритма обмена ключами Curve25519;
  • потокового шифра XSalsa20;
  • аутентификации Poly1305.

В отличие от симметричной модели, здесь используются две пары ключей: публичный и приватный.

Генерация ключевых пар

Каждый участник генерирует пару ключей:

  • privateKey — секретный 32-байтовый ключ;
  • publicKey — производный 32-байтовый ключ.

Публичный ключ может свободно распространяться, в то время как приватный остаётся строго конфиденциальным.

Механизм box

Функция nacl.box реализует гибридную схему:

  1. На основе Curve25519 вычисляется общий секрет (shared secret).
  2. Из него выводится симметричный ключ.
  3. Далее применяется схема XSalsa20 + Poly1305.

Таким образом, асимметричная криптография используется только на этапе установления общего секрета, а основное шифрование выполняется симметричным алгоритмом.

Nonce и его роль

Как и в secretbox, nonce имеет длину 24 байта. Однако в box он дополняется контекстом публичных ключей отправителя и получателя. Это позволяет каждому сообщению быть криптографически уникальным даже при повторном использовании ключевых пар.

Аутентификация отправителя

Дополнительной особенностью модели является встроенная проверка подлинности отправителя. Поскольку shared secret зависит от пары ключей, подделка сообщения без знания приватного ключа становится невозможной.


Сравнение симметричной и асимметричной моделей в NaCl

Управление ключами

Симметричное шифрование требует единого секрета, что создаёт проблему распределения ключей. Асимметричная модель решает эту задачу за счёт публичных ключей, устраняя необходимость предварительного секретного канала.

Производительность

Симметричные алгоритмы значительно быстрее, так как не требуют сложных математических операций эллиптических кривых. Асимметричная часть используется только один раз — для установления общего секрета.

Безопасность

Симметричная схема зависит от безопасности ключа и уникальности nonce. Асимметричная схема добавляет защиту на уровне идентичности участников и устойчивость к перехвату сообщений без приватного ключа.


Использование моделей в архитектуре TweetNaCl.js

Библиотека NaCl следует гибридному подходу, в котором асимметричная криптография применяется исключительно для обмена ключами, а симметричная — для основного потока данных.

Такая архитектура обеспечивает:

  • минимальные вычислительные затраты;
  • устойчивость к перехвату трафика;
  • отсутствие необходимости в централизованной инфраструктуре распределения ключей.

Криптографические примитивы и их роль

XSalsa20

Потоковый шифр, обеспечивающий генерацию псевдослучайного потока байт, который XOR-ится с данными. Обладает высокой скоростью и устойчивостью к известным атакам при корректном использовании nonce.

Poly1305

Код аутентификации сообщений (MAC), проверяющий целостность данных. Используется вместе с XSalsa20 для формирования конструкции AEAD (Authenticated Encryption with Associated Data).

Curve25519

Эллиптическая кривая, используемая для безопасного обмена ключами. Обеспечивает стойкость к известным атакам на дискретный логарифм при высокой производительности в программной реализации.


Архитектурная логика выбора модели

Симметричная модель применяется там, где:

  • уже установлен общий секрет;
  • требуется высокая скорость обработки;
  • отсутствует необходимость в идентификации сторон.

Асимметричная модель применяется там, где:

  • отсутствует общий ключ;
  • требуется безопасный обмен секретом;
  • важна аутентификация участников.

Гибридная природа NaCl-подхода

TweetNaCl.js объединяет оба подхода в единую систему. Асимметричное шифрование служит инфраструктурным уровнем, а симметричное — транспортным.

Такое разделение позволяет достигать баланса между криптографической стойкостью и практической производительностью, что особенно критично в средах с ограниченными ресурсами, таких как браузеры и мобильные устройства.