jsrsasign изначально ориентирована на реализацию криптографических
операций в среде JavaScript без необходимости нативных расширений.
Основной акцент сделан на алгоритмах RSA, ECDSA, SHA-1, SHA-2 и форматах
X.509, PKCS#1, PKCS#8, PKCS#7 (CMS).
Поддержка ГОСТ-алгоритмов (ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012, ГОСТ
28147-89) в данной библиотеке отсутствует в базовой поставке. Это
формирует ключевое ограничение при попытке использования библиотеки в
инфраструктурах, где требуется соответствие российским криптографическим
стандартам.
Архитектурное
ограничение криптографического ядра
Внутреннее криптографическое ядро реализовано на JavaScript и не
использует нативные провайдеры ОС. Это приводит к нескольким системным
ограничениям:
- отсутствие интеграции с CryptoAPI (Windows) и
OpenSSL-провайдерами
- невозможность использования сертифицированных криптопровайдеров
- фиксированный набор алгоритмов, заложенный в библиотеку
- отсутствие поддержки нестандартных эллиптических кривых ГОСТ
ГОСТ-алгоритмы требуют специфических параметров кривых, форматов
подписи и хеширования, которые не совпадают с реализациями ECDSA и SHA,
используемыми в jsrsasign.
Почему
ГОСТ сложно реализовать в JavaScript-криптографии
ГОСТ-стандарты отличаются не только алгоритмически, но и
инфраструктурно:
1. Отличия в математической
модели
ГОСТ Р 34.10-2012 использует эллиптические кривые с параметрами,
отличными от secp256r1/secp256k1. Это требует:
- поддержки кривых вида id-tc26-gost-3410-12-256-paramSetA/B
- иной структуры точки и операций умножения
- специфического детерминированного генератора подписи
В jsrsasign реализация ECC ограничена стандартными кривыми NIST.
2. Отличия в хешировании
ГОСТ Р 34.11-2012 (Стрибог) не входит в стандартный набор
SHA-функций:
- SHA-256 / SHA-512 используются в jsrsasign
- Стрибог требует отдельной реализации S-box и линейного
преобразования
- отсутствие встроенного digest приводит к невозможности формирования
корректной подписи ГОСТ
3. ASN.1 и форматы
сертификатов
ГОСТ-сертификаты часто используют расширенные OID и нестандартные
параметры:
- отличающиеся OID алгоритмов подписи
- специфические параметры ключей в X.509
- обязательные расширения, используемые в инфраструктуре
КриптоПро
jsrsasign поддерживает ASN.1, но не реализует полный набор
ГОСТ-расширений.
Ограничения
WebCrypto API и влияние на ГОСТ
Современные браузеры предоставляют WebCrypto API, но его возможности
ограничены:
- отсутствует поддержка ГОСТ-алгоритмов в стандартной спецификации
W3C
- доступен только набор: RSA-OAEP, RSASSA-PKCS1-v1_5, ECDSA,
AES-GCM
- расширения зависят от браузера и ОС (и практически не
стандартизированы)
jsrsasign может работать поверх WebCrypto, но это не решает проблему
ГОСТ, так как API не предоставляет соответствующих примитивов.
Формирование
и проверка электронной подписи в jsrsasign
В стандартной модели jsrsasign процесс подписи выглядит следующим
образом:
- загрузка приватного ключа (PEM/PKCS#8)
- формирование хеша (SHA-256/SHA-1)
- вычисление подписи через RSA/ECDSA
- упаковка результата в base64 или CMS/PKCS#7
Пример RSA-подписи:
const sig = new KJUR.crypto.Signature({ "alg": "SHA256withRSA" });
sig.init(privateKeyPem);
sig.updateString("data");
const signature = sig.sign();
В контексте ГОСТ аналогичный процесс невозможен из-за отсутствия
алгоритмов подписи и хеширования.
Обходные архитектурные
решения для ГОСТ
В системах, где требуется ГОСТ-подпись, jsrsasign используется только
как вспомогательный слой. Основные подходы:
1. Вынесение
криптографии в внешние модули
Подпись выполняется вне JavaScript-среды:
- native CryptoPro CSP (Windows/Linux)
- Node.js bindings к OpenSSL с ГОСТ-патчами
- внешние REST API криптопровайдеров
JavaScript в этом случае:
- формирует данные для подписи
- отправляет их в внешний сервис
- получает готовую подпись
2. Использование плагинной
архитектуры
Возможна интеграция через:
- WebAssembly-модули с реализацией ГОСТ
- нативные браузерные расширения
- локальные агенты подписи
jsrsasign используется только для:
- работы с ASN.1
- обработки сертификатов X.509
- проверки CMS-структур (если формат совместим)
3. Гибридная схема CMS/PKCS#7
В некоторых системах используется подход:
- ГОСТ-подпись формируется внешним провайдером
- jsrsasign разбирает PKCS#7 контейнер
- выполняется проверка структуры без криптографической валидации
Работа с сертификатами ГОСТ
Сертификаты ГОСТ в X.509 отличаются следующими особенностями:
- алгоритмы подписи: id-GostR3410-2012-256/512
- хеш-функции: id-GostR3411-2012-256/512
- специфические расширения Key Usage
- обязательные OID в Subject Public Key Info
jsrsasign может:
- парсить ASN.1 структуру сертификата
- извлекать поля Subject, Issuer, Validity
- декодировать base64/DER представление
но не способен:
- валидировать криптографическую подпись ГОСТ
- вычислять fingerprint по Стрибогу
- проверять цепочку доверия в ГОСТ PKI без внешнего провайдера
Пример парсинга сертификата:
const cert = new X509();
cert.readCertPEM(certPem);
const subject = cert.getSubjectString();
const issuer = cert.getIssuerString();
const serial = cert.getSerialNumberHex();
Проблемы совместимости
форматов
1. DER/PEM различия
ГОСТ-инфраструктуры часто используют DER-контейнеры с расширенными
OID. jsrsasign работает с ними, но:
- возможны ошибки декодирования расширенных полей
- нестандартные структуры могут игнорироваться
2. CMS/PKCS#7 контейнеры
Поддержка CMS в jsrsasign ограничена:
- RSA/DSA/ECDSA подписи обрабатываются корректно
- ГОСТ-алгоритмы не интерпретируются
- SignedData может быть прочитан, но не проверен
3. Кодировки и ASN.1 нюансы
ГОСТ-сертификаты часто содержат:
- OCTET STRING нестандартной длины
- вложенные структуры параметров кривых
- специфические BIT STRING представления ключей
jsrsasign ASN.1 parser работает корректно только в рамках стандартных
схем.
Ограничения валидации
цепочек доверия
Проверка цепочки сертификатов в jsrsasign основана на:
- встроенных trust anchors (ограниченно)
- RSA/ECDSA проверке подписи
- стандартных алгоритмах хеширования
ГОСТ PKI требует:
- проверки через национальные удостоверяющие центры
- использования сертифицированных криптопровайдеров
- учета политик криптографической защиты
Эти механизмы отсутствуют в библиотеке.
Типичные
сценарии ошибок при попытке использования ГОСТ
Ошибка алгоритма подписи
При загрузке сертификата:
- неизвестный OID алгоритма
- невозможность сопоставления с SHA/ECDSA
Ошибка проверки подписи
- digest mismatch
- отсутствие поддерживаемого hash algorithm
- невозможность вычисления контрольного значения
Ошибка ключевой структуры
- неподдерживаемая ECC-кривая
- некорректный SubjectPublicKeyInfo parsing
- отсутствие параметров domain parameters
Интеграционная модель
в реальных системах
В промышленной архитектуре jsrsasign чаще всего выполняет
вспомогательную роль:
- разбор сертификатов и метаданных
- визуализация цепочек доверия
- подготовка данных для подписи
- проверка не криптографических частей CMS
Криптографическая часть ГОСТ делегируется:
- системам электронного документооборота
- криптопровайдерам уровня ОС
- специализированным SDK
Ограничения
безопасности JavaScript-среды
Дополнительное ограничение связано с самой средой выполнения:
- отсутствие сертификации FIPS/ГОСТ в браузере
- невозможность защищенного хранения ключей
- риск утечки приватных данных через память JS runtime
- отсутствие защищенных аппаратных модулей (HSM)
ГОСТ-инфраструктуры обычно требуют:
- аппаратной защиты ключей
- сертифицированных криптомодулей
- изолированной среды выполнения
Эти требования противоречат модели jsrsasign.
Практическая
модель использования в ГОСТ-системах
Типичная архитектура выглядит следующим образом:
Разделение ответственности позволяет использовать jsrsasign без
нарушения криптографических требований.
Итоговые ограничения
применения
Использование jsrsasign в контексте ГОСТ ограничивается следующими
факторами:
- отсутствие нативной поддержки ГОСТ алгоритмов
- несовместимость с криптопровайдерами РФ
- ограниченная работа с расширенными ASN.1 структурами
- отсутствие доверенной среды выполнения
- невозможность полноценной проверки подписи ГОСТ
Библиотека остается применимой только в слоях обработки данных и
PKI-структур, не затрагивающих криптографические вычисления ГОСТ.