В экосистеме криптографических библиотек JavaScript, включая jsrsasign, значительная часть алгоритмов существует исключительно для обратной совместимости и работы с устаревшими протоколами. Их присутствие не означает допустимость использования в современных системах, особенно в контексте подписи, аутентификации и хранения секретов.
Современная криптография опирается на строгие требования к устойчивости алгоритмов к коллизиям, предобразам и перебору ключей. Алгоритмы, которые не удовлетворяют этим требованиям, считаются устаревшими и потенциально опасными. В jsrsasign такие алгоритмы по-прежнему реализованы, однако их использование требует чёткого понимания рисков.
MD5 долгое время использовался как стандартная хеш-функция для
контрольных сумм и цифровых подписей. В jsrsasign он доступен для
совместимости, например через KJUR.crypto.Util.md5.
Основная проблема MD5 заключается в наличии эффективных методов генерации коллизий. Это означает, что два разных входных сообщения могут давать одинаковый хеш.
const hash = KJUR.crypto.Util.md5("message");
console.log(hash);
С точки зрения криптостойкости MD5 полностью дискредитирован. Он не подходит для:
Даже модифицированные атаки позволяют создавать поддельные сертификаты в устаревших инфраструктурах, использующих MD5 в X.509.
SHA-1 стал следующим широко используемым алгоритмом после MD5 и долго считался стандартом для TLS и цифровых подписей. В jsrsasign он реализован как часть набора SHA функций:
const digest = KJUR.crypto.Util.sha1("message");
console.log(digest);
Серьёзные криптографические атаки на SHA-1 были продемонстрированы с практической генерацией коллизий, включая сценарии с предсказуемым изменением документов.
Основные проблемы:
SHA-1 до сих пор может встречаться в старых цифровых подписях, но его использование в новых системах считается недопустимым.
DES (Data Encryption Standard) исторически был одним из первых симметричных алгоритмов, реализованных в jsrsasign через криптографические модули. Его ключ длиной 56 бит стал критическим ограничением.
const encrypted = KJUR.crypto.Cipher.encrypt("DES", key, "plaintext");
Проблемы DES:
3DES был введён как временное решение, увеличивающее стойкость за счёт тройного применения DES. Однако он также имеет серьёзные недостатки:
Современные криптосистемы полностью перешли на AES, и использование DES/3DES рассматривается как наследие.
RC4 ранее активно использовался в TLS и потоковом шифровании. В jsrsasign он может встречаться в legacy-реализациях.
Основные проблемы RC4:
Несмотря на простоту и высокую скорость, RC4 полностью исключён из современных криптографических стандартов.
RSA остаётся фундаментальным алгоритмом в jsrsasign, однако устаревшие конфигурации с малыми ключами представляют серьёзную угрозу.
Пример генерации ключа:
const rsa = new RSAKey();
rsa.generate(512, "10001");
Ключи 512 и 1024 бит:
Современный минимум — 2048 бит, а для критических систем — 3072 и выше.
Проблемы RSA-legacy:
Хотя это не отдельный алгоритм шифрования, он тесно связан с RSA в jsrsasign и исторически широко использовался.
Уязвимости:
Современная альтернатива — OAEP (Optimal Asymmetric Encryption Padding), обеспечивающий формальную стойкость при корректной реализации.
Эти хеш-функции встречаются в старых криптографических системах и иногда доступны в legacy-частях библиотек.
MD4:
MD2:
Обе функции не используются в современных протоколах и сохраняются только для совместимости с архивными системами.
Сам HMAC как конструкция остаётся безопасным при использовании устойчивых хеш-функций. Однако в сочетании с MD5 или SHA-1 он наследует их слабости.
const hmac = KJUR.crypto.Mac.hmac("md5", key, "message");
Проблема заключается в том, что безопасность HMAC не может компенсировать криптографическую слабость базового алгоритма. В случае MD5 или SHA-1 возможны сценарии, где теоретическая стойкость конструкции снижается из-за коллизий.
Blowfish как симметричный алгоритм ранее считался безопасным, но в современных реализациях его использование ограничено рядом факторов:
В jsrsasign Blowfish может встречаться в старых схемах шифрования, но не рекомендован для новых систем.
PBKDF1 использовался для деривации ключей из паролей до появления PBKDF2.
Основные ограничения:
В отличие от PBKDF2, он не поддерживает гибкую настройку количества итераций и современных механизмов усиления стойкости.
Устаревание алгоритмов в jsrsasign связано не с реализацией, а с фундаментальными свойствами криптографических примитивов:
Алгоритм, считающийся безопасным в момент стандартизации, может становиться небезопасным через десятилетия без изменения реализации.
Наличие устаревших алгоритмов в библиотеке обусловлено необходимостью:
При этом использование этих алгоритмов в новых разработках создаёт системные уязвимости, так как безопасность всей цепочки криптографических операций определяется самым слабым звеном.