Алгоритмы, считающиеся устаревшими

В экосистеме криптографических библиотек JavaScript, включая jsrsasign, значительная часть алгоритмов существует исключительно для обратной совместимости и работы с устаревшими протоколами. Их присутствие не означает допустимость использования в современных системах, особенно в контексте подписи, аутентификации и хранения секретов.

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


MD5 долгое время использовался как стандартная хеш-функция для контрольных сумм и цифровых подписей. В jsrsasign он доступен для совместимости, например через KJUR.crypto.Util.md5.

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

const hash = KJUR.crypto.Util.md5("message");
console.log(hash);

С точки зрения криптостойкости MD5 полностью дискредитирован. Он не подходит для:

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

Даже модифицированные атаки позволяют создавать поддельные сертификаты в устаревших инфраструктурах, использующих MD5 в X.509.


SHA-1

SHA-1 стал следующим широко используемым алгоритмом после MD5 и долго считался стандартом для TLS и цифровых подписей. В jsrsasign он реализован как часть набора SHA функций:

const digest = KJUR.crypto.Util.sha1("message");
console.log(digest);

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

Основные проблемы:

  • коллизии с вычислительной сложностью ниже теоретической
  • возможность подделки сертификатов
  • компрометация цепочек доверия в PKI

SHA-1 до сих пор может встречаться в старых цифровых подписях, но его использование в новых системах считается недопустимым.


DES и 3DES

DES (Data Encryption Standard) исторически был одним из первых симметричных алгоритмов, реализованных в jsrsasign через криптографические модули. Его ключ длиной 56 бит стал критическим ограничением.

const encrypted = KJUR.crypto.Cipher.encrypt("DES", key, "plaintext");

Проблемы DES:

  • слишком короткий ключ
  • полная перебираемость на современном оборудовании
  • устаревший блок 64 бита, уязвимый к атаке Sweet32

3DES был введён как временное решение, увеличивающее стойкость за счёт тройного применения DES. Однако он также имеет серьёзные недостатки:

  • медленная производительность
  • эффективная длина ключа около 112 бит (в некоторых конфигурациях ниже)
  • уязвимость к meet-in-the-middle атакам

Современные криптосистемы полностью перешли на AES, и использование DES/3DES рассматривается как наследие.


RC4

RC4 ранее активно использовался в TLS и потоковом шифровании. В jsrsasign он может встречаться в legacy-реализациях.

Основные проблемы RC4:

  • статистические смещения в выходном потоке
  • предсказуемость начальных байтов
  • практические атаки на TLS-реализации (например, атаки типа Bar Mitzvah)

Несмотря на простоту и высокую скорость, RC4 полностью исключён из современных криптографических стандартов.


RSA с малыми ключами

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

Пример генерации ключа:

const rsa = new RSAKey();
rsa.generate(512, "10001");

Ключи 512 и 1024 бит:

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

Современный минимум — 2048 бит, а для критических систем — 3072 и выше.

Проблемы RSA-legacy:

  • использование PKCS#1 v1.5 padding, уязвимого к оракульным атакам
  • недостаточная энтропия генерации ключей в старых реализациях
  • возможность атак на реализацию, а не на математику алгоритма

PKCS#1 v1.5 padding

Хотя это не отдельный алгоритм шифрования, он тесно связан с RSA в jsrsasign и исторически широко использовался.

Уязвимости:

  • Bleichenbacher oracle attack
  • утечка информации через различие ошибок дешифрования
  • возможность постепенного восстановления открытого текста

Современная альтернатива — OAEP (Optimal Asymmetric Encryption Padding), обеспечивающий формальную стойкость при корректной реализации.


MD2 и MD4

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

MD4:

  • крайне быстрый, но небезопасный
  • полностью уязвим к коллизиям

MD2:

  • устаревший стандарт для 8-битных систем
  • зависимость от устаревших представлений о безопасности

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


HMAC на базе слабых хешей

Сам HMAC как конструкция остаётся безопасным при использовании устойчивых хеш-функций. Однако в сочетании с MD5 или SHA-1 он наследует их слабости.

const hmac = KJUR.crypto.Mac.hmac("md5", key, "message");

Проблема заключается в том, что безопасность HMAC не может компенсировать криптографическую слабость базового алгоритма. В случае MD5 или SHA-1 возможны сценарии, где теоретическая стойкость конструкции снижается из-за коллизий.


Blowfish в устаревших конфигурациях

Blowfish как симметричный алгоритм ранее считался безопасным, но в современных реализациях его использование ограничено рядом факторов:

  • 64-битный блок
  • медленная инициализация ключа
  • уязвимость к атаке Sweet32 при больших объёмах данных

В jsrsasign Blowfish может встречаться в старых схемах шифрования, но не рекомендован для новых систем.


PBKDF1

PBKDF1 использовался для деривации ключей из паролей до появления PBKDF2.

Основные ограничения:

  • ограниченная длина выходного ключа
  • зависимость от устаревших хеш-функций (MD5, SHA-1)
  • низкая устойчивость к перебору

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


Криптографические причины устаревания алгоритмов

Устаревание алгоритмов в jsrsasign связано не с реализацией, а с фундаментальными свойствами криптографических примитивов:

  • рост вычислительных мощностей
  • появление специализированных атак (differential, linear cryptanalysis)
  • снижение стоимости перебора ключей
  • математические прорывы в факторизации и поиске коллизий

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


Роль legacy-алгоритмов в jsrsasign

Наличие устаревших алгоритмов в библиотеке обусловлено необходимостью:

  • поддержки старых X.509 сертификатов
  • работы с историческими TLS-конфигурациями
  • анализа и проверки подписей в архивных системах
  • миграции с устаревших криптосистем

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