DES (Data Encryption Standard) представляет собой блочный симметричный алгоритм шифрования с фиксированным размером блока 64 бита и длиной ключа 56 бит (формально 64 бита, из которых 8 используются для проверки чётности). Несмотря на историческую значимость, в современных системах DES считается криптографически небезопасным из-за малой длины ключа и уязвимости к перебору.
В контексте Jsrsasign DES реализован как часть набора симметричных
алгоритмов в пространстве имён KJUR.crypto. Основное
использование сосредоточено вокруг шифрования и дешифрования строковых
данных с применением стандартных режимов блочного шифрования и схем
дополнения (padding).
DES основан на сети Фейстеля и выполняет 16 раундов преобразований над 64-битным блоком данных. Каждый раунд включает:
Ключевая особенность — симметричность: один и тот же ключ используется как для шифрования, так и для расшифрования.
В Jsrsasign работа с DES обычно осуществляется через универсальный
интерфейс KJUR.crypto.Cipher.
Пример шифрования:
var cipherText = KJUR.crypto.Cipher.encrypt(
"DES",
"0123456789abcdef",
"Hello world"
);
Пример расшифрования:
var plainText = KJUR.crypto.Cipher.decrypt(
"DES",
"0123456789abcdef",
cipherText
);
Ключ DES в Jsrsasign задаётся в шестнадцатеричном формате. При этом:
Пример корректного ключа:
"133457799BBCDFF1"
DES как блочный алгоритм требует выбора режима работы. В Jsrsasign чаще всего используются:
Для CBC необходимо указание вектора инициализации (IV).
Пример CBC-режима:
var cipherText = KJUR.crypto.Cipher.encrypt(
"DES-CBC",
"0123456789abcdef",
"Hello world",
{ iv: "12345678" }
);
Padding по умолчанию обычно реализуется как PKCS#5/PKCS#7, где недостающие байты заполняются значением их количества.
Triple DES (3DES, TDEA — Triple Data Encryption Algorithm) был создан как временное решение для усиления DES без полной замены алгоритма. Он применяет DES трижды к каждому блоку данных, увеличивая эффективную длину ключа до 112 или 168 бит в зависимости от конфигурации.
Существует две основные схемы:
На практике почти всегда применяется EDE:
[ C = E_{K3}(D_{K2}(E_{K1}(P)))]
где:
Если все три ключа равны, 3DES эквивалентен DES.
В Jsrsasign 3DES доступен через тот же интерфейс
KJUR.crypto.Cipher, но с указанием алгоритма
"DESede" или "TripleDES" (в зависимости от
версии библиотеки).
Пример шифрования:
var cipherText = KJUR.crypto.Cipher.encrypt(
"DESede",
"0123456789abcdef0123456789abcdef0123456789abcdef",
"Sensitive data"
);
Пример расшифрования:
var plainText = KJUR.crypto.Cipher.decrypt(
"DESede",
"0123456789abcdef0123456789abcdef0123456789abcdef",
cipherText
);
Для 3DES используются ключи следующих типов:
В hex-формате:
Пример 3-key ключа:
"0123456789abcdef0123456789abcdef0123456789abcdef"
Наиболее распространённый режим использования 3DES — CBC (Cipher Block Chaining), поскольку он устраняет детерминированность ECB.
Пример:
var cipherText = KJUR.crypto.Cipher.encrypt(
"DESede-CBC",
"0123456789abcdef0123456789abcdef0123456789abcdef",
"Top secret message",
{ iv: "abcdef12" }
);
IV (инициализационный вектор) должен быть:
Jsrsasign использует единый API для симметричных алгоритмов:
"DES""DES-CBC""DESede""DESede-CBC"Это позволяет переключать алгоритмы без изменения логики приложения.
Все входные данные интерпретируются как строки UTF-8, а выход шифрования обычно представлен в hex или Base64 (в зависимости от конфигурации).
Пример Base64-режима:
var cipherText = KJUR.crypto.Cipher.encrypt(
"DESede",
key,
"message",
{ output: "base64" }
);
Несмотря на усиление, 3DES имеет ряд проблем:
В современных системах DES и 3DES используются:
DES и 3DES в Jsrsasign часто применяются совместно с:
KEYUTIL — для управления ключамиKJUR.crypto.Cipher — универсальный шифраторKJUR.crypto.Mac — для HMAC-подобных задач (в связке с
CBC)Пример генерации ключа:
var key = KEYUTIL.getRandomHexOfNbytes(24);
Если ключ не соответствует требуемому размеру, возникает ошибка инициализации алгоритма.
CBC-режим требует строго 8-байтового IV для DES/3DES.
Несоответствие UTF-8 и ASCII может приводить к различию шифротекста при одинаковом входе.