Что CryptoJS не умеет: асимметричное шифрование, цифровые подписи

CryptoJS построен вокруг симметричной криптографии и функций хеширования. Его архитектура ориентирована на работу с секретами, которые известны обеим сторонам обмена: ключ шифрования должен быть заранее разделён и одинаково доступен для шифрования и расшифрования. Это фундаментальное ограничение определяет весь набор возможностей библиотеки и одновременно объясняет, почему ряд криптографических задач в ней принципиально отсутствует.

Асимметричное шифрование основано на паре ключей: открытом и закрытом. Один используется для шифрования, другой — для расшифрования. В CryptoJS такой модели нет.

В библиотеке отсутствуют реализации алгоритмов:

  • RSA (Rivest–Shamir–Adleman)
  • ECC (Elliptic Curve Cryptography)
  • ElGamal и другие асимметричные схемы

Это означает, что невозможны базовые сценарии публичного шифрования, такие как:

  • шифрование сообщения открытым ключом получателя
  • расшифрование только приватным ключом
  • обмен ключами через незащищённый канал без предварительного секрета

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

Отсутствие цифровых подписей

Цифровая подпись — это криптографический механизм, позволяющий подтвердить:

  • целостность данных
  • авторство
  • невозможность отказа от подписи (non-repudiation)

В типичной реализации используются алгоритмы:

  • RSA-PSS
  • ECDSA
  • EdDSA

CryptoJS не предоставляет ни одного из этих механизмов.

Хотя библиотека содержит хеш-функции (SHA-1, SHA-256, SHA-512), они сами по себе не образуют цифровую подпись. Хеширование — это односторонняя операция, которая не включает:

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

Даже комбинация HMAC и SHA не является цифровой подписью, поскольку HMAC основан на общем секретном ключе и не даёт свойства публичной проверяемости.

Отсутствие инфраструктуры PKI

Системы цифровых подписей обычно интегрированы в PKI (Public Key Infrastructure), которая включает:

  • сертификаты X.509
  • цепочки доверия
  • центры сертификации (CA)
  • проверку отзыва сертификатов

CryptoJS не содержит:

  • парсеров сертификатов
  • механизмов проверки цепочек доверия
  • поддержки форматов PEM / DER
  • инструментов для валидации подписей на основе инфраструктуры доверия

Это ещё раз подчёркивает, что библиотека не предназначена для задач аутентификации сторон через криптографические удостоверения.

Ограничения модели ключей

CryptoJS работает исключительно с симметричными ключами, которые:

  • задаются как строка или WordArray
  • используются напрямую в алгоритмах AES, DES, Rabbit и т.д.
  • требуют предварительного обмена между сторонами

Отсутствует:

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

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

Отсутствие поддержки современных криптографических протоколов

Современные протоколы, такие как TLS, SSH или JWE/JWS (JSON Web Encryption / Signature), строятся на комбинации:

  • асимметричной криптографии
  • симметричного шифрования
  • цифровых подписей
  • хеширования

CryptoJS охватывает только одну часть этой системы — симметрическое шифрование и хеширование. В результате отсутствует возможность реализовать полноценные протоколы защищённой связи.

Не поддерживаются:

  • TLS-рукопожатия
  • обмен ключами Diffie–Hellman / ECDH
  • JWT подписи (JWS)
  • JWE-шифрование с публичными ключами

Причины архитектурных ограничений

Ограниченность CryptoJS связана не с недоработкой, а с историческим и архитектурным контекстом:

  • библиотека создавалась для браузерного JavaScript до появления Web Crypto API
  • основной фокус — лёгкое симметричное шифрование и хеширование
  • отсутствие нативной поддержки больших чисел и криптографических примитивов низкого уровня
  • ориентация на прикладные задачи (шифрование строк, паролей, токенов)

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

Практические следствия ограничений

Использование CryptoJS вне симметричной модели приводит к архитектурным ограничениям:

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

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