Симметричное шифрование в jsrsasign реализовано через модуль
KJUR.crypto.Cipher, который предоставляет унифицированный
интерфейс для работы с блочными алгоритмами, прежде всего AES и
DES/3DES. Основная идея заключается в использовании одного и того же
ключа для шифрования и расшифрования данных, что делает этот подход
быстрым и подходящим для обработки больших объёмов информации.
Внутренняя криптографическая подсистема библиотеки построена вокруг
абстракции Cipher, которая инкапсулирует:
Ключевым элементом является строковое описание алгоритма, например:
AESAES-CBCDES-CBC3DES-ECBВ зависимости от выбранной конфигурации библиотека автоматически подбирает соответствующую реализацию.
Общий цикл симметричного шифрования в jsrsasign выглядит следующим образом:
Важным моментом является то, что библиотека оперирует строками и байтовыми представлениями, скрывая низкоуровневую работу с блоками данных.
Наиболее часто используемый вариант — AES в режиме CBC (Cipher Block Chaining). Этот режим обеспечивает более высокий уровень безопасности по сравнению с ECB, поскольку каждый блок зависит от предыдущего.
Пример типового использования:
var cipher = new KJUR.crypto.Cipher({
alg: "AES",
mode: "CBC",
padding: "pkcs5"
});
var key = "00112233445566778899aabbccddeeff"; // 128-bit key (hex)
var iv = "0102030405060708"; // 64-bit IV (hex)
var encrypted = cipher.encrypt("Secret message", key, iv);
var decrypted = cipher.decrypt(encrypted, key, iv);
Здесь ключ и IV задаются явно в шестнадцатеричном формате. IV (инициализационный вектор) критически важен для CBC: он предотвращает детерминированность шифрования одинаковых блоков данных.
В jsrsasign симметричное шифрование ограничено классическими блочными алгоритмами:
Наиболее безопасный и рекомендуемый алгоритм. Поддерживает ключи:
Чаще всего используется AES-256-CBC как баланс между безопасностью и производительностью.
Устаревшие алгоритмы, используемые преимущественно в легаси-системах.
jsrsasign поддерживает несколько режимов, каждый из которых определяет способ обработки блоков:
Каждый блок XOR-ится с предыдущим зашифрованным блоком.
Преимущества:
Недостатки:
Каждый блок шифруется независимо.
Особенности:
Критический недостаток:
В реальных системах используется редко.
Так как блочные шифры работают с фиксированными размерами блоков, необходимо дополнение данных до кратного размера.
В jsrsasign применяется:
Принцип:
Библиотека поддерживает несколько форматов представления:
Пример явного указания формата результата:
cipher.encrypt("text", key, iv, { output: "hex" });
cipher.decrypt(data, key, iv, { input: "hex" });
jsrsasign не ограничивает способ генерации ключей, но предоставляет
вспомогательные инструменты через KJUR.crypto.Util и
KJUR.crypto.PBKDF2.
Используется для преобразования слабых паролей в криптографические ключи.
var salt = "a1b2c3d4";
var password = "myPassword";
var derivedKey = KJUR.crypto.PBKDF2.hashPassword(
password,
salt,
1000,
32
);
Параметры:
KJUR.crypto.Cipher работает как высокоуровневая оболочка
над реализациями AES/DES, реализованными в JavaScript. Внутри
происходит:
При расшифровке процесс полностью инвертируется, включая удаление padding.
IV играет ключевую роль в безопасности CBC. В jsrsasign он:
Типичная схема хранения:
IV + ciphertext
или
{ iv: "...", data: "..." }
При работе с jsrsasign важно учитывать несколько криптографических требований:
Расшифрование выполняется тем же объектом Cipher с идентичными параметрами:
var cipher = new KJUR.crypto.Cipher({
alg: "AES",
mode: "CBC",
padding: "pkcs5"
});
var decrypted = cipher.decrypt(encrypted, key, iv);
Несоответствие параметров приводит к невозможности восстановления данных, так как блочные шифры чувствительны к режиму и padding.
При использовании симметричного шифрования в jsrsasign часто возникают следующие ситуации:
Если ключ имеет неправильную длину:
В CBC режиме приводит к:
Частая проблема:
AES в jsrsasign реализован на чистом JavaScript, что делает его:
При обработке больших массивов данных предпочтение обычно отдают
window.crypto.subtle, однако jsrsasign остаётся удобным
для:
Симметричное шифрование часто используется совместно с:
Типичная гибридная схема:
Такой подход обеспечивает баланс между скоростью и безопасностью.
При построении защищённого канала с использованием jsrsasign симметричное шифрование занимает центральное место как механизм защиты данных, тогда как асимметричная криптография используется только для обмена ключами.
Внутри прикладных систем AES в jsrsasign применяется как основной инструмент защиты содержимого сообщений, файлов и пользовательских данных благодаря высокой скорости и предсказуемому поведению алгоритма при корректной настройке параметров.