Режим ECB (Electronic Codebook) в блочных шифрах представляет собой самый простой способ применения алгоритма шифрования к данным. Суть заключается в том, что исходное сообщение разбивается на блоки фиксированного размера, и каждый блок шифруется независимо от других с использованием одного и того же ключа.
C_i = E_K(P_i)
где
Отсутствие дополнительных параметров, таких как вектор инициализации, делает ECB предельно прямолинейным, но одновременно и криптографически слабым режимом.
В библиотеке CryptoJS режим ECB доступен через конфигурацию алгоритмов блочного шифрования, например AES. При использовании режима ECB каждый блок обрабатывается независимо, что отражается в коде:
import CryptoJS from "crypto-js";
const key = CryptoJS.enc.Utf8.parse("1234567890123456");
const encrypted = CryptoJS.AES.encrypt("Secret message", key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log(decrypted.toString(CryptoJS.enc.Utf8));
В этом примере отсутствует IV (initialization vector), поскольку ECB его не использует. Это ключевая особенность режима.
Главный недостаток ECB заключается в том, что одинаковые блоки открытого текста всегда превращаются в одинаковые блоки шифротекста. Это создаёт детерминированную структуру, которая сохраняет паттерны исходных данных.
Если входные данные имеют повторяющиеся структуры (например, изображения, JSON с повторяющимися полями, HTML-шаблоны), результат шифрования также будет содержать повторяющиеся блоки.
Это приводит к утечке информации даже без расшифровки данных.
При шифровании изображения, разбитого на блоки, ECB сохраняет визуальные паттерны. Даже после шифрования можно восстановить форму исходного изображения по повторяющимся фрагментам.
Причина этого поведения:
C_i = E_K(P_i), C_j = E_K(P_j), P_i = P_j C_i = C_j
Следствие из этого равенства:
В отличие от режимов CBC, CFB или GCM, ECB не использует вектор инициализации. Это означает:
В современных криптографических системах IV считается обязательным элементом для обеспечения семантической безопасности. ECB этому требованию не соответствует.
CBC (Cipher Block Chaining) вводит зависимость между блоками:
C_i = E_K(P_i C_{i-1})
GCM (Galois/Counter Mode) дополнительно обеспечивает аутентификацию и потоковую природу шифрования, что делает его устойчивым к подмене данных и анализу структуры.
ECB в этом сравнении:
Несмотря на известную небезопасность, ECB иногда встречается в легаси-коде или некорректных реализациях:
CryptoJS.AES.encrypt(data, key, {
mode: CryptoJS.mode.ECB
});
Типичные причины появления:
В большинстве случаев такая реализация считается криптографически некорректной.
ECB не обеспечивает семантическую безопасность, поскольку:
Для любого современного применения (веб, API, хранение данных) использование ECB считается недопустимым.
Вместо ECB в CryptoJS используются режимы:
Наиболее универсальным вариантом считается AES-GCM, поскольку он объединяет конфиденциальность и целостность данных в одной конструкции.