Алгоритмы Web Crypto API в браузере представлены не строками и не
«магическими именами», а структурированными объектами параметров,
которые передаются в методы SubtleCrypto:
generateKey, encrypt, decrypt,
sign, verify, digest,
deriveKey, importKey, exportKey.
Каждый алгоритм задаётся через поле name, а дополнительные
параметры зависят от конкретного криптопримитива.
Во всех операциях используется единая схема:
nameDataErrorПример общей формы:
{
name: "AES-GCM",
iv: Uint8Array(...),
additionalData: Uint8Array(...),
tagLength: 128
}
Именно сочетание name + параметры определяет поведение
криптографической операции.
Операция crypto.subtle.digest принимает только имя
алгоритма.
Поддерживаемые значения:
"SHA-1" (устаревший)"SHA-256""SHA-384""SHA-512"Формат:
crypto.subtle.digest("SHA-256", data)
Параметр — строка, а не объект. Это единственный класс алгоритмов в WebCrypto, где структура минимальна.
{
name: "AES-CTR",
counter: Uint8Array,
length: 64
}
Параметры:
Особенность: отсутствует аутентификация, используется только потоковое шифрование.
{
name: "AES-CBC",
iv: Uint8Array
}
Параметры:
Особенности:
{
name: "AES-GCM",
iv: Uint8Array,
additionalData?: Uint8Array,
tagLength?: 128
}
Параметры:
Ключевая особенность: режим AEAD (Authenticated Encryption with Associated Data).
Важно учитывать:
additionalData должна совпадать при шифровании и
расшифровке{
name: "HMAC",
hash: { name: "SHA-256" }
}
Параметры:
Поддерживаемые хэши:
HMAC не шифрует данные, а создаёт код аутентичности.
{
name: "RSA-OAEP",
hash: { name: "SHA-256" }
}
Параметры:
Используется в:
encryptdecryptwrapKey / unwrapKeyОсобенности:
{
name: "RSA-PSS",
saltLength: 32
}
Параметры:
Дополнительно используется:
{
name: "SHA-256"
}
(передаётся отдельно в sign / verify как
hash в ключе)
Особенности:
{
name: "ECDSA",
hash: { name: "SHA-256" }
}
Параметры:
Кривые определяются при генерации ключа:
Алгоритм не требует дополнительных параметров в sign,
кроме hash.
{
name: "ECDH"
}
Сам алгоритм не содержит параметров, но ключевая конфигурация задаётся при deriveKey:
{
name: "ECDH",
public: CryptoKey
}
Параметры:
Используется в:
deriveKeyderiveBits{
name: "PBKDF2",
salt: Uint8Array,
iterations: 100000,
hash: "SHA-256"
}
Параметры:
Особенности:
{
name: "HKDF",
salt: Uint8Array,
info: Uint8Array,
hash: "SHA-256"
}
Параметры:
Особенности:
{
name: "AES-GCM",
length: 256
}
{
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256"
}
Параметры:
{
name: "ECDSA",
namedCurve: "P-256"
}
Параметры:
namedCurve:
При importKey алгоритм может быть:
"raw""jwk""pkcs8""spki""wrapKey"Здесь algorithm часто равен null или
{ name: ... } в зависимости от контекста.
Особенность: импорт не всегда требует параметров алгоритма, но
требует согласования с extractable и
keyUsages.
{
name: "ECDH",
public: CryptoKey
}
{
name: "PBKDF2",
salt: Uint8Array,
iterations: 100000,
hash: "SHA-256"
}
{
name: "HKDF",
salt: Uint8Array,
info: Uint8Array,
hash: "SHA-256"
}
Общая особенность:
WebCrypto API не допускает «нестрогих» значений:
TypeErrorname приводит к
NotSupportedErrorТипичные правила:
{ name: "SHA-256" } или строка в
deriveKeyКаждый алгоритм поддерживает строго ограниченный набор операций:
Несовпадение алгоритма и операции приводит к
InvalidAccessError.
Алгоритмы WebCrypto не являются независимыми сущностями — они связаны через:
Любая ошибка в параметрах не компенсируется библиотекой, а приводит к немедленному исключению на уровне API, что делает корректное формирование алгоритм-объектов центральной частью работы с WebCrypto.