Поддерживаемые алгоритмы и стандарты

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

SHA-1

Алгоритм исторически применялся в X.509 сертификатах и ранних версиях TLS. Несмотря на известные криптографические слабости (коллизии), он до сих пор встречается в совместимых системах.

SHA-2 семейство

Основной современный стандарт:

  • SHA-224
  • SHA-256
  • SHA-384
  • SHA-512

На практике наиболее распространён SHA-256, особенно в JWT, TLS и PKI-инфраструктуре.

В контексте Jsrsasign хеши используются в:

  • формировании цифровых подписей (RSA/ECDSA)
  • вычислении отпечатков сертификатов
  • HMAC-подписях

SHA-3 (ограниченная поддержка)

В некоторых конфигурациях доступна поддержка SHA-3 (Keccak), однако в большинстве сценариев библиотека ориентируется на SHA-2 как индустриальный стандарт.

MD5

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


Алгоритмы симметричного HMAC

HMAC используется для аутентификации сообщений и проверки целостности данных.

Поддерживаемые варианты:

  • HMAC-SHA1
  • HMAC-SHA256
  • HMAC-SHA384
  • HMAC-SHA512

Особенности реализации

HMAC в Jsrsasign опирается на стандарт RFC 2104 и применяется в:

  • JWT (подпись HS256, HS384, HS512)
  • API-аутентификации
  • проверке целостности сообщений

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


Ассиметричные алгоритмы RSA

RSA является одним из базовых алгоритмов библиотеки и реализован в полном соответствии с PKCS#1.

Поддерживаемые режимы RSA:

  • RSASSA-PKCS1-v1_5 (классический режим подписи)
  • RSA-PSS (современный рекомендованный стандарт)
  • RSA-OAEP (шифрование)

Размеры ключей

Поддерживаются ключи:

  • 1024 бит (устаревший минимум)
  • 2048 бит (стандарт де-факто)
  • 3072 и 4096 бит (повышенная стойкость)

Хеш-функции в RSA

RSA подписи комбинируются с SHA-256 и выше, формируя схемы:

  • RS256 (RSA + SHA-256)
  • RS384
  • RS512

Криптография на эллиптических кривых (ECC)

ECC является более современным и эффективным подходом по сравнению с RSA при меньшей длине ключа.

Основные кривые:

  • P-256 (secp256r1)
  • P-384
  • P-521

Алгоритмы ECDSA

ECDSA используется для цифровых подписей:

  • ES256 (ECDSA + SHA-256)
  • ES384
  • ES512

Особенности ECC в Jsrsasign

  • компактные ключи
  • высокая производительность
  • широкое использование в JWT и мобильных системах

DSA (Digital Signature Algorithm)

Поддержка DSA присутствует в целях совместимости с устаревшими системами.

Характеристики:

  • основан на дискретном логарифме
  • требует фиксированных параметров p, q, g
  • используется реже из-за ограничений безопасности и гибкости

JWT и JOSE стандарты

Библиотека реализует полный стек работы с JSON Web Token и связанными стандартами JOSE.

Поддерживаемые алгоритмы JWT:

HMAC

  • HS256
  • HS384
  • HS512

RSA

  • RS256
  • RS384
  • RS512

ECDSA

  • ES256
  • ES384
  • ES512

Структура JWT

JWT состоит из трёх частей:

  • Header
  • Payload
  • Signature

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


PKI и X.509 сертификаты

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

Поддерживаемые стандарты:

  • X.509 v1/v3 сертификаты
  • CRL (Certificate Revocation List)
  • CSR (Certificate Signing Request)

Форматы представления:

  • PEM (Base64 с заголовками)
  • DER (бинарный формат)

Основные операции:

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

PKCS стандарты

Поддержка семейства PKCS обеспечивает совместимость с промышленными криптосистемами.

PKCS#1

Определяет RSA криптографию:

  • формат ключей
  • схемы подписи
  • шифрование RSA-OAEP

PKCS#5

Используется для:

  • деривации ключей (PBKDF2)
  • шифрования приватных ключей паролем

PKCS#8

Стандарт для хранения приватных ключей:

  • унифицированный формат
  • поддержка RSA и EC ключей

PKCS#10

CSR формат для запроса сертификата.


ASN.1 и DER кодирование

Jsrsasign активно использует ASN.1 для работы с криптографическими структурами.

ASN.1

Абстрактное описание структур данных:

  • последовательности (SEQUENCE)
  • целые числа (INTEGER)
  • битовые строки (BIT STRING)

DER (Distinguished Encoding Rules)

Строго бинарная сериализация ASN.1:

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

Алгоритмы шифрования

Хотя библиотека ориентирована на подписи и PKI, присутствует поддержка шифрования.

RSA-OAEP

Современный стандарт RSA-шифрования:

  • использует SHA-1 или SHA-2 в маскировании
  • устойчив к атакам на старые схемы PKCS#1 v1.5

AES (в ограниченных сценариях)

Используется в связке с PKCS#5:

  • AES-128
  • AES-192
  • AES-256

Поддержка Web Crypto совместимости

Jsrsasign частично совместим с Web Cryptography API:

  • импорт ключей
  • экспорт ключей
  • использование внешних ключевых материалов

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


Форматы ключей и их совместимость

PEM

Текстовый формат:

  • —–BEGIN PUBLIC KEY—–
  • —–BEGIN PRIVATE KEY—–

Используется для обмена между системами.

DER

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

JWK (JSON Web Key)

JSON-формат ключей:

  • применяется в современных API
  • используется в OAuth2 и OpenID Connect

Криптографические подписи и их комбинации

Подпись в Jsrsasign всегда определяется комбинацией:

  • алгоритма (RSA, ECDSA, HMAC)
  • хеш-функции (SHA-256 и выше)
  • формата данных (JWT, PKCS#7, raw message)

Типовые комбинации:

  • RS256 = RSA + SHA-256
  • ES256 = ECDSA + SHA-256
  • HS256 = HMAC + SHA-256

Совместимость с индустриальными стандартами

Библиотека ориентируется на RFC и стандарты:

  • RFC 7515 (JWS)
  • RFC 7519 (JWT)
  • RFC 3447 (PKCS#1)
  • RFC 5208 (PKCS#8)
  • RFC 2986 (PKCS#10)
  • RFC 5280 (X.509)

Эта совместимость позволяет использовать Jsrsasign в:

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