В Web Crypto API симметричное шифрование чаще всего реализуется через
алгоритм AES (Advanced Encryption Standard). Он используется в режимах
AES-GCM, AES-CBC, AES-CTR и
AES-KW. Ключевой параметр безопасности — длина ключа,
измеряемая в битах: 128, 192 или 256.
128 ,; 192 ,; 256
Длина ключа определяет криптографическую стойкость системы, а также влияет на производительность и совместимость.
В Web Crypto API генерация ключей AES осуществляется через
SubtleCrypto.generateKey() с указанием длины:
AES-GCMAES-CBCAES-CTRAES-KWВо всех этих алгоритмах стандарт допускает 128, 192 и 256 бит.
Однако практическая поддержка зависит от платформы:
Это приводит к тому, что 192-битные ключи используются значительно реже.
128 бит означает пространство ключей:
2^{128}
Это число настолько велико, что перебор даже теоретически выходит за пределы достижимого вычислительного ресурса.
Чаще всего применяется в AES-GCM, поскольку обеспечивает
баланс:
2^{192}
Увеличение пространства ключей по сравнению с 128 битами колоссально, но на практике это редко даёт прикладное преимущество.
2^{256}
Это пространство ключей считается практически недостижимым для перебора даже при гипотетическом развитии классических вычислений.
По сравнению с 128 битами:
С точки зрения теоретической стойкости:
| Длина ключа | Безопасность | Скорость | Совместимость | Использование |
|---|---|---|---|---|
| 128 | высокая | максимальная | максимальная | стандарт веба |
| 192 | очень высокая | средняя | ограниченная | редкое |
| 256 | максимальная | ниже | высокая | критические системы |
AES реализован как блочный шифр с размером блока:
128
Длина ключа влияет на:
число раундов шифрования:
Это напрямую отражается на времени выполнения операций в
SubtleCrypto.encrypt() и decrypt().
При интенсивной обработке данных (например, потоковое шифрование) предпочтителен 128-битный ключ.
Для кросс-браузерных решений используется 128 или 256 бит.
256 бит используется при необходимости дополнительного запаса устойчивости к долгосрочным угрозам, включая гипотетические сценарии развития вычислительных мощностей.
В контексте Jav * aScript:
crypto.subtle.generateKey(
{
name: "AES-GCM",
length: 256
},
true,
["encrypt", "decrypt"]
);
Выбор длины ключа не влияет на интерфейс API, но влияет на:
Использование 256 бит там, где достаточно 128, приводит к:
192-битные ключи могут приводить к ошибкам при импорте или генерации ключей в некоторых окружениях.
Длина ключа не компенсирует слабые режимы работы (например, неправильное использование CBC без IV или GCM без уникального nonce).
Рост длины ключа не линейный по безопасности, а экспоненциальный:
2^{n}
где n — длина ключа в битах.
Это означает, что переход от 128 к 256 бит не удваивает безопасность, а возводит её в квадрат по экспоненте пространства ключей.
В WebCrypto выбор длины ключа определяется не только криптографией, но и инженерными ограничениями: