Симметрические алгоритмы (например, AES, реализованный в SJCL) обеспечивают высокую скорость и эффективность при работе с большими объёмами данных. Однако они требуют безопасной передачи секретного ключа между сторонами. Сам факт передачи ключа становится уязвимым местом: если злоумышленник перехватит его, вся последующая защита теряет смысл.
Асимметрические алгоритмы (например, схемы на основе эллиптических кривых, поддерживаемые в SJCL) решают проблему передачи ключей: публичный ключ можно распространять свободно, а приватный остаётся только у владельца. Но у них есть серьёзный недостаток — низкая производительность при шифровании больших данных.
Гибридное шифрование объединяет преимущества обоих подходов:
Таким образом:
1. Производительность
Асимметрические алгоритмы в десятки и сотни раз медленнее симметрических. Использование их для больших объёмов данных нецелесообразно. Гибридная схема позволяет:
2. Безопасная передача ключей
Передача симметрического ключа напрямую небезопасна. Гибридный подход решает это через:
3. Масштабируемость
При работе с несколькими получателями:
Это значительно эффективнее, чем шифровать данные заново.
Библиотека SJCL предоставляет инструменты для обеих частей гибридной схемы:
sjcl.cipher.aes — симметричное шифрованиеsjcl.ecc.elGamal — асимметричное шифрование (на
эллиптических кривых)sjcl.random — генерация криптографически стойких
случайных чиселconst key = sjcl.random.randomWords(8, 0); // 256 бит
const aes = new sjcl.cipher.aes(key);
const encryptedData = sjcl.mode.ccm.encrypt(aes, dataBits, iv);
const publicKey = sjcl.ecc.elGamal.publicKey(...);
const encryptedKey = publicKey.kem();
Метод kem() (Key Encapsulation Mechanism) — важный
элемент гибридного шифрования. Он:
Получатель:
const secret = privateKey.unkem(encapsulation);
const aes = new sjcl.cipher.aes(secret);
const decryptedData = sjcl.mode.ccm.decrypt(aes, encryptedData, iv);
Гибридное шифрование в SJCL реализуется через классическую модель:
Преимущества такой архитектуры:
Криптографически стойкая генерация ключей
Использование sjcl.random требует достаточной энтропии.
В браузере важно:
Уникальные IV (инициализационные векторы)
Для режимов вроде CCM:
Аутентификация данных
Режим CCM в SJCL обеспечивает:
Это критично для гибридных схем.
Шифрование данных напрямую асимметрическим алгоритмом
Приводит к:
Повторное использование симметрического ключа
Увеличивает риск атак, особенно при слабых IV.
Игнорирование проверки целостности
Даже если данные расшифровались, без проверки MAC они могут быть изменены.
Гибридное шифрование используется в:
В контексте браузера и SJCL оно особенно полезно для:
Гибридное шифрование является фундаментом современной криптографии, а в SJCL реализуется в компактной, но достаточно мощной форме, позволяющей строить защищённые приложения без необходимости использовать тяжёлые криптографические фреймворки.