Web Crypto API
Стабильность: 2 — Стабильный
Node.js предоставляет реализацию стандарта Web Crypto API.
Для доступа к этому модулю используйте globalThis.crypto или require('node:crypto').webcrypto.
const { subtle } = globalThis.crypto;
(async function() {
const key = await subtle.generateKey({
name: 'HMAC',
hash: 'SHA-256',
length: 256,
}, true, ['sign', 'verify']);
const enc = new TextEncoder();
const message = enc.encode('I love cupcakes');
const digest = await subtle.sign({
name: 'HMAC',
}, key, message);
})();
jscopyСовременные алгоритмы в Web Cryptography API
Стабильность: 1.1 — Активная разработка
Node.js реализует следующие возможности из предложения WICG Modern Algorithms in the Web Cryptography API:
Алгоритмы:
-
'AES-OCB'1 -
'Argon2d'2 -
'Argon2i'2 -
'Argon2id'2 'ChaCha20-Poly1305''cSHAKE128''cSHAKE256'-
'KMAC128'1 -
'KMAC256'1 'KT128''KT256'-
'ML-DSA-44'3 -
'ML-DSA-65'3 -
'ML-DSA-87'3 -
'ML-KEM-512'3 -
'ML-KEM-768'3 -
'ML-KEM-1024'3 'SHA3-256''SHA3-384''SHA3-512''TurboSHAKE128''TurboSHAKE256'
Форматы ключей:
'raw-public''raw-secret''raw-seed'
Методы:
Безопасные кривые в Web Cryptography API
Стабильность: 1.1 — Активная разработка
Node.js реализует следующие возможности из предложения WICG Secure Curves in the Web Cryptography API:
Алгоритмы:
'Ed448''X448'
Примеры
Генерация ключей
Класс <SubtleCrypto> можно использовать для генерации симметричных (секретных) ключей или пар асимметричных ключей (открытого и закрытого).
Ключи AES
const { subtle } = globalThis.crypto;
async function generateAesKey(length = 256) {
const key = await subtle.generateKey({
name: 'AES-CBC',
length,
}, true, ['encrypt', 'decrypt']);
return key;
}
jscopyПары ключей ECDSA
const { subtle } = globalThis.crypto;
async function generateEcKey(namedCurve = 'P-521') {
const {
publicKey,
privateKey,
} = await subtle.generateKey({
name: 'ECDSA',
namedCurve,
}, true, ['sign', 'verify']);
return { publicKey, privateKey };
}
jscopyПары ключей Ed25519/X25519
const { subtle } = globalThis.crypto;
async function generateEd25519Key() {
return subtle.generateKey({
name: 'Ed25519',
}, true, ['sign', 'verify']);
}
async function generateX25519Key() {
return subtle.generateKey({
name: 'X25519',
}, true, ['deriveKey']);
}
jscopyКлючи HMAC
const { subtle } = globalThis.crypto;
async function generateHmacKey(hash = 'SHA-256') {
const key = await subtle.generateKey({
name: 'HMAC',
hash,
}, true, ['sign', 'verify']);
return key;
}
jscopyПары ключей RSA
const { subtle } = globalThis.crypto;
const publicExponent = new Uint8Array([1, 0, 1]);
async function generateRsaKey(modulusLength = 2048, hash = 'SHA-256') {
const {
publicKey,
privateKey,
} = await subtle.generateKey({
name: 'RSASSA-PKCS1-v1_5',
modulusLength,
publicExponent,
hash,
}, true, ['sign', 'verify']);
return { publicKey, privateKey };
}
jscopyШифрование и расшифрование
const crypto = globalThis.crypto;
async function aesEncrypt(plaintext) {
const ec = new TextEncoder();
const key = await generateAesKey();
const iv = crypto.getRandomValues(new Uint8Array(16));
const ciphertext = await crypto.subtle.encrypt({
name: 'AES-CBC',
iv,
}, key, ec.encode(plaintext));
return {
key,
iv,
ciphertext,
};
}
async function aesDecrypt(ciphertext, key, iv) {
const dec = new TextDecoder();
const plaintext = await crypto.subtle.decrypt({
name: 'AES-CBC',
iv,
}, key, ciphertext);
return dec.decode(plaintext);
}
jscopyЭкспорт и импорт ключей
const { subtle } = globalThis.crypto;
async function generateAndExportHmacKey(format = 'jwk', hash = 'SHA-512') {
const key = await subtle.generateKey({
name: 'HMAC',
hash,
}, true, ['sign', 'verify']);
return subtle.exportKey(format, key);
}
async function importHmacKey(keyData, format = 'jwk', hash = 'SHA-512') {
const key = await subtle.importKey(format, keyData, {
name: 'HMAC',
hash,
}, true, ['sign', 'verify']);
return key;
}
jscopyУпаковка и распаковка ключей
const { subtle } = globalThis.crypto;
async function generateAndWrapHmacKey(format = 'jwk', hash = 'SHA-512') {
const [
key,
wrappingKey,
] = await Promise.all([
subtle.generateKey({
name: 'HMAC', hash,
}, true, ['sign', 'verify']),
subtle.generateKey({
name: 'AES-KW',
length: 256,
}, true, ['wrapKey', 'unwrapKey']),
]);
const wrappedKey = await subtle.wrapKey(format, key, wrappingKey, 'AES-KW');
return { wrappedKey, wrappingKey };
}
async function unwrapHmacKey(
wrappedKey,
wrappingKey,
format = 'jwk',
hash = 'SHA-512') {
const key = await subtle.unwrapKey(
format,
wrappedKey,
wrappingKey,
'AES-KW',
{ name: 'HMAC', hash },
true,
['sign', 'verify']);
return key;
}
jscopyПодпись и проверка
const { subtle } = globalThis.crypto;
async function sign(key, data) {
const ec = new TextEncoder();
const signature =
await subtle.sign('RSASSA-PKCS1-v1_5', key, ec.encode(data));
return signature;
}
async function verify(key, signature, data) {
const ec = new TextEncoder();
const verified =
await subtle.verify(
'RSASSA-PKCS1-v1_5',
key,
signature,
ec.encode(data));
return verified;
}
jscopyПолучение битов и ключей
const { subtle } = globalThis.crypto;
async function pbkdf2(pass, salt, iterations = 1000, length = 256) {
const ec = new TextEncoder();
const key = await subtle.importKey(
'raw',
ec.encode(pass),
'PBKDF2',
false,
['deriveBits']);
const bits = await subtle.deriveBits({
name: 'PBKDF2',
hash: 'SHA-512',
salt: ec.encode(salt),
iterations,
}, key, length);
return bits;
}
async function pbkdf2Key(pass, salt, iterations = 1000, length = 256) {
const ec = new TextEncoder();
const keyMaterial = await subtle.importKey(
'raw',
ec.encode(pass),
'PBKDF2',
false,
['deriveKey']);
const key = await subtle.deriveKey({
name: 'PBKDF2',
hash: 'SHA-512',
salt: ec.encode(salt),
iterations,
}, keyMaterial, {
name: 'AES-GCM',
length,
}, true, ['encrypt', 'decrypt']);
return key;
}
jscopyХеширование
const { subtle } = globalThis.crypto;
async function digest(data, algorithm = 'SHA-512') {
const ec = new TextEncoder();
const digest = await subtle.digest(algorithm, ec.encode(data));
return digest;
}
jscopyПроверка поддержки алгоритмов во время выполнения
SubtleCrypto.supports() позволяет обнаруживать доступные функции в Web Crypto API и проверять, поддерживается ли заданный идентификатор алгоритма (включая его параметры) для указанной операции.
В этом примере ключ на основе пароля создаётся с помощью Argon2, если этот алгоритм доступен, или PBKDF2 в противном случае; затем с его помощью текст шифруется и расшифровывается с использованием AES-OCB, если он доступен, или AES-GCM в противном случае.
const { SubtleCrypto, crypto } = globalThis;
const password = 'correct horse battery staple';
const derivationAlg =
SubtleCrypto.supports?.('importKey', 'Argon2id') ?
'Argon2id' :
'PBKDF2';
const encryptionAlg =
SubtleCrypto.supports?.('importKey', 'AES-OCB') ?
'AES-OCB' :
'AES-GCM';
const passwordKey = await crypto.subtle.importKey(
derivationAlg === 'Argon2id' ? 'raw-secret' : 'raw',
new TextEncoder().encode(password),
derivationAlg,
false,
['deriveKey'],
);
const nonce = crypto.getRandomValues(new Uint8Array(16));
const derivationParams =
derivationAlg === 'Argon2id' ?
{
nonce,
parallelism: 4,
memory: 2 ** 21,
passes: 1,
} :
{
salt: nonce,
iterations: 100_000,
hash: 'SHA-256',
};
const key = await crypto.subtle.deriveKey(
{
name: derivationAlg,
...derivationParams,
},
passwordKey,
{
name: encryptionAlg,
length: 256,
},
false,
['encrypt', 'decrypt'],
);
const plaintext = 'Hello, world!';
const iv = crypto.getRandomValues(new Uint8Array(16));
const encrypted = await crypto.subtle.encrypt(
{ name: encryptionAlg, iv },
key,
new TextEncoder().encode(plaintext),
);
const decrypted = new TextDecoder().decode(await crypto.subtle.decrypt(
{ name: encryptionAlg, iv },
key,
encrypted,
));
mjscopyМатрица алгоритмов
В следующих таблицах подробно описаны алгоритмы, поддерживаемые реализацией Web Crypto API в Node.js, и доступные для каждого из них API:
API управления ключами
| Алгоритм | subtle.generateKey() | subtle.exportKey() | subtle.importKey() | subtle.getPublicKey() |
|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ✔ | |
'AES-CTR' | ✔ | ✔ | ✔ | |
'AES-GCM' | ✔ | ✔ | ✔ | |
'AES-KW' | ✔ | ✔ | ✔ | |
'AES-OCB' | ✔ | ✔ | ✔ | |
'Argon2d' | ✔ | |||
'Argon2i' | ✔ | |||
'Argon2id' | ✔ | |||
'ChaCha20-Poly1305'4
| ✔ | ✔ | ✔ | |
'ECDH' | ✔ | ✔ | ✔ | ✔ |
'ECDSA' | ✔ | ✔ | ✔ | ✔ |
'Ed25519' | ✔ | ✔ | ✔ | ✔ |
'Ed448'5
| ✔ | ✔ | ✔ | ✔ |
'HKDF' | ✔ | |||
'HMAC' | ✔ | ✔ | ✔ | |
'KMAC128'4
| ✔ | ✔ | ✔ | |
'KMAC256'4
| ✔ | ✔ | ✔ | |
'ML-DSA-44'4
| ✔ | ✔ | ✔ | ✔ |
'ML-DSA-65'4
| ✔ | ✔ | ✔ | ✔ |
'ML-DSA-87'4
| ✔ | ✔ | ✔ | ✔ |
'ML-KEM-512'4
| ✔ | ✔ | ✔ | ✔ |
'ML-KEM-768'4
| ✔ | ✔ | ✔ | ✔ |
'ML-KEM-1024'4
| ✔ | ✔ | ✔ | ✔ |
'PBKDF2' | ✔ | |||
'RSA-OAEP' | ✔ | ✔ | ✔ | ✔ |
'RSA-PSS' | ✔ | ✔ | ✔ | ✔ |
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ | ✔ |
'X25519' | ✔ | ✔ | ✔ | ✔ |
'X448'5
| ✔ | ✔ | ✔ | ✔ |
API криптографических операций
Обозначения столбцов:
-
Шифрование:
subtle.encrypt()/subtle.decrypt() -
Подписи и MAC:
subtle.sign()/subtle.verify() -
Получение ключей или битов:
subtle.deriveBits()/subtle.deriveKey() -
Обёртывание ключей:
subtle.wrapKey()/subtle.unwrapKey() -
Инкапсуляция ключей:
subtle.encapsulateBits()/subtle.decapsulateBits()/subtle.encapsulateKey()/subtle.decapsulateKey() -
Хеширование:
subtle.digest()
| Алгоритм | Шифрование | Подписи и MAC | Получение ключей или битов | Обёртывание ключей | Инкапсуляция ключей | Хеширование |
|---|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ||||
'AES-CTR' | ✔ | ✔ | ||||
'AES-GCM' | ✔ | ✔ | ||||
'AES-KW' | ✔ | |||||
'AES-OCB' | ✔ | ✔ | ||||
'Argon2d' | ✔ | |||||
'Argon2i' | ✔ | |||||
'Argon2id' | ✔ | |||||
'ChaCha20-Poly1305'4
| ✔ | ✔ | ||||
'cSHAKE128'4
| ✔ | |||||
'cSHAKE256'4
| ✔ | |||||
'ECDH' | ✔ | |||||
'ECDSA' | ✔ | |||||
'Ed25519' | ✔ | |||||
'Ed448'5
| ✔ | |||||
'HKDF' | ✔ | |||||
'HMAC' | ✔ | |||||
'KMAC128'4
| ✔ | |||||
'KMAC256'4
| ✔ | |||||
'KT128'4
| ✔ | |||||
'KT256'4
| ✔ | |||||
'ML-DSA-44'4
| ✔ | |||||
'ML-DSA-65'4
| ✔ | |||||
'ML-DSA-87'4
| ✔ | |||||
'ML-KEM-512'4
| ✔ | |||||
'ML-KEM-768'4
| ✔ | |||||
'ML-KEM-1024'4
| ✔ | |||||
'PBKDF2' | ✔ | |||||
'RSA-OAEP' | ✔ | ✔ | ||||
'RSA-PSS' | ✔ | |||||
'RSASSA-PKCS1-v1_5' | ✔ | |||||
'SHA-1' | ✔ | |||||
'SHA-256' | ✔ | |||||
'SHA-384' | ✔ | |||||
'SHA-512' | ✔ | |||||
'SHA3-256'4
| ✔ | |||||
'SHA3-384'4
| ✔ | |||||
'SHA3-512'4
| ✔ | |||||
'TurboSHAKE128'4
| ✔ | |||||
'TurboSHAKE256'4
| ✔ | |||||
'X25519' | ✔ | |||||
'X448'5
| ✔ |
Класс: Crypto
globalThis.crypto является экземпляром класса Crypto. Crypto — это синглтон, предоставляющий доступ к остальной части криптографического API.
crypto.subtle
- Тип:
<SubtleCrypto>
Предоставляет доступ к API SubtleCrypto.
crypto.getRandomValues(typedArray)
-
typedArray<Buffer>|<TypedArray> - Возвращает:
<Buffer>|<TypedArray>
Генерирует криптографически стойкие случайные значения. Указанный typedArray заполняется случайными значениями, после чего возвращается ссылка на typedArray.
Указанный typedArray должен быть экземпляром <TypedArray> с целочисленными элементами, то есть Float32Array и Float64Array не допускаются.
Если размер указанного typedArray превышает 65 536 байт, будет вызвана ошибка.
crypto.randomUUID()
- Возвращает:
<string>
Генерирует случайный UUID версии 4 в соответствии с RFC 4122. UUID создаётся с помощью криптографического генератора псевдослучайных чисел.
Класс: CryptoKey
cryptoKey.algorithm
- Тип:
<KeyAlgorithm>|<RsaHashedKeyAlgorithm>|<EcKeyAlgorithm>|<AesKeyAlgorithm>|<HmacKeyAlgorithm>
Объект, содержащий сведения об алгоритме, для которого можно использовать ключ, а также дополнительные параметры, специфичные для этого алгоритма.
Только для чтения.
cryptoKey.extractable
- Тип:
<boolean>
Если значение равно true, <CryptoKey> можно извлечь с помощью subtle.exportKey() или subtle.wrapKey().
Только для чтения.
cryptoKey.type
- Тип:
<string>Одно из значений:'secret','private'или'public'.
Строка, указывающая, является ли ключ симметричным ('secret') или асимметричным ('private' или 'public').
cryptoKey.usages
- Тип:
<string[]>
Массив строк, определяющих операции, для которых можно использовать ключ.
Возможные варианты использования:
-
'encrypt'— разрешить использование ключа сsubtle.encrypt() -
'decrypt'— разрешить использование ключа сsubtle.decrypt() -
'sign'— разрешить использование ключа сsubtle.sign() -
'verify'— разрешить использование ключа сsubtle.verify() -
'deriveKey'— разрешить использование ключа сsubtle.deriveKey() -
'deriveBits'— разрешить использование ключа сsubtle.deriveBits() -
'encapsulateBits'— разрешить использование ключа сsubtle.encapsulateBits() -
'decapsulateBits'— разрешить использование ключа сsubtle.decapsulateBits() -
'encapsulateKey'— разрешить использование ключа сsubtle.encapsulateKey() -
'decapsulateKey'— разрешить использование ключа сsubtle.decapsulateKey() -
'wrapKey'— разрешить использование ключа сsubtle.wrapKey() -
'unwrapKey'— разрешить использование ключа сsubtle.unwrapKey()
Допустимые варианты использования ключа зависят от алгоритма ключа (определяемого с помощью cryptokey.algorithm.name).
Обозначения столбцов:
-
Шифрование:
subtle.encrypt()/subtle.decrypt() -
Подписи и MAC:
subtle.sign()/subtle.verify() -
Вывод ключа или битов:
subtle.deriveBits()/subtle.deriveKey() -
Обёртывание ключа:
subtle.wrapKey()/subtle.unwrapKey() -
Инкапсуляция ключа:
subtle.encapsulateBits()/subtle.decapsulateBits()/subtle.encapsulateKey()/subtle.decapsulateKey()
| Поддерживаемый алгоритм ключа | Шифрование | Подписи и MAC | Вывод ключа или битов | Обёртывание ключа | Инкапсуляция ключа |
|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | |||
'AES-CTR' | ✔ | ✔ | |||
'AES-GCM' | ✔ | ✔ | |||
'AES-KW' | ✔ | ||||
'AES-OCB' | ✔ | ✔ | |||
'Argon2d' | ✔ | ||||
'Argon2i' | ✔ | ||||
'Argon2id' | ✔ | ||||
'ChaCha20-Poly1305'4
| ✔ | ✔ | |||
'ECDH' | ✔ | ||||
'ECDSA' | ✔ | ||||
'Ed25519' | ✔ | ||||
'Ed448'5
| ✔ | ||||
'HKDF' | ✔ | ||||
'HMAC' | ✔ | ||||
'KMAC128'4
| ✔ | ||||
'KMAC256'4
| ✔ | ||||
'ML-DSA-44'4
| ✔ | ||||
'ML-DSA-65'4
| ✔ | ||||
'ML-DSA-87'4
| ✔ | ||||
'ML-KEM-512'4
| ✔ | ||||
'ML-KEM-768'4
| ✔ | ||||
'ML-KEM-1024'4
| ✔ | ||||
'PBKDF2' | ✔ | ||||
'RSA-OAEP' | ✔ | ✔ | |||
'RSA-PSS' | ✔ | ||||
'RSASSA-PKCS1-v1_5' | ✔ | ||||
'X25519' | ✔ | ||||
'X448'5
| ✔ |
Класс: CryptoKeyPair
CryptoKeyPair — это простой объект-словарь со свойствами publicKey и privateKey, представляющий пару асимметричных ключей.
cryptoKeyPair.privateKey
- Тип:
<CryptoKey>Объект<CryptoKey>, у которогоtypeбудет'private'.
cryptoKeyPair.publicKey
- Тип:
<CryptoKey>Объект<CryptoKey>, у которогоtypeбудет'public'.
Класс: SubtleCrypto
Статический метод: SubtleCrypto.supports(operation, algorithm[, lengthOrAdditionalAlgorithm])
Стабильность: 1.1 — активная разработка
-
operation<string>"encrypt", "decrypt", "sign", "verify", "digest", "generateKey", "deriveKey", "deriveBits", "importKey", "exportKey", "getPublicKey", "wrapKey", "unwrapKey", "encapsulateBits", "encapsulateKey", "decapsulateBits" или "decapsulateKey" -
algorithm<string>|<Algorithm> -
lengthOrAdditionalAlgorithm<null>|<number>|<string>|<Algorithm>|<undefined>В зависимости от операции это значение игнорируется, является значением аргумента length для операции "deriveBits", алгоритмом выводимого ключа для операции "deriveKey", алгоритмом экспортируемого перед обёртыванием ключа для операции "wrapKey", алгоритмом импортируемого после снятия обёртки ключа для операции "unwrapKey" либо алгоритмом импортируемого ключа после инкапсуляции или декапсуляции для операций "encapsulateKey" или "decapsulateKey". По умолчанию:nullдля операции "deriveBits", в противном случае —undefined. - Возвращает:
<boolean>Указывает, поддерживает ли реализация указанную операцию
Позволяет определять поддержку функций Web Crypto API, в частности проверять, поддерживается ли заданный идентификатор алгоритма (включая его параметры) для указанной операции.
Пример использования этого метода см. в разделе Проверка поддержки алгоритмов во время выполнения.
subtle.decapsulateBits(decapsulationAlgorithm, decapsulationKey, ciphertext)
Стабильность: 1.1 — активная разработка
-
decapsulationAlgorithm<string>|<Algorithm> -
decapsulationKey<CryptoKey> -
ciphertext<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> - Возвращает:
<Promise>При успешном выполнении возвращает<ArrayBuffer>.
Получатель сообщения использует свой асимметричный закрытый ключ, чтобы расшифровать «инкапсулированный ключ» (шифротекст) и восстановить временный симметричный ключ (представленный как <ArrayBuffer>), который затем используется для расшифровки сообщения.
Сейчас поддерживаются следующие алгоритмы:
subtle.decapsulateKey(decapsulationAlgorithm, decapsulationKey, ciphertext, sharedKeyAlgorithm, extractable, keyUsages)
Стабильность: 1.1 — активная разработка
-
decapsulationAlgorithm<string>|<Algorithm> -
decapsulationKey<CryptoKey> -
ciphertext<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> -
sharedKeyAlgorithm<string>|<Algorithm>|<HmacImportParams>|<AesDerivedKeyParams> -
extractable<boolean> -
keyUsages<string[]>См. раздел Назначения ключей. - Возвращает:
<Promise>При успешном выполнении разрешается объектом<CryptoKey>.
Получатель сообщения использует свой асимметричный закрытый ключ для расшифрования «инкапсулированного ключа» (шифротекста), восстанавливая временный симметричный ключ (представленный как <CryptoKey>), который затем используется для расшифрования сообщения.
В настоящее время поддерживаются следующие алгоритмы:
subtle.decrypt(algorithm, key, data)
-
algorithm<RsaOaepParams>|<AesCtrParams>|<AesCbcParams> -
key<CryptoKey> -
data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> - Возвращает:
<Promise>При успешном выполнении разрешается объектом<ArrayBuffer>.
Используя метод и параметры, указанные в algorithm, а также ключевой материал, предоставленный key, этот метод пытается расшифровать предоставленные данные data. В случае успеха возвращенный промис будет разрешен объектом <ArrayBuffer>, содержащим результат в открытом виде.
В настоящее время поддерживаются следующие алгоритмы:
subtle.deriveBits(algorithm, baseKey[, length])
-
algorithm<EcdhKeyDeriveParams>|<HkdfParams>|<Pbkdf2Params> -
baseKey<CryptoKey> -
length<number>|<null>По умолчанию:null - Возвращает:
<Promise>При успешном выполнении разрешается объектом<ArrayBuffer>.
Используя метод и параметры, указанные в algorithm, а также ключевой материал, предоставленный baseKey, этот метод пытается сгенерировать length бит.
Если length не задан или равно null, генерируется максимально возможное количество бит для данного алгоритма. Это допускается для алгоритмов 'ECDH', 'X25519' и 'X448'5; для других алгоритмов значение length должно быть числом.
В случае успеха возвращенный промис будет разрешен объектом <ArrayBuffer>, содержащим сгенерированные данные.
В настоящее время поддерживаются следующие алгоритмы:
subtle.deriveKey(algorithm, baseKey, derivedKeyType, extractable, keyUsages)
-
algorithm<EcdhKeyDeriveParams>|<HkdfParams>|<Pbkdf2Params> -
baseKey<CryptoKey> -
derivedKeyType<string>|<Algorithm>|<HmacImportParams>|<AesDerivedKeyParams> -
extractable<boolean> -
keyUsages<string[]>См. раздел Назначения ключей. - Возвращает:
<Promise>При успешном выполнении разрешается объектом<CryptoKey>.
Используя метод и параметры, указанные в algorithm, а также ключевой материал, предоставленный baseKey, этот метод пытается создать новый объект <CryptoKey> на основе метода и параметров, указанных в derivedKeyType.
Вызов этого метода эквивалентен вызову subtle.deriveBits() для генерации необработанного ключевого материала с последующей передачей результата в метод subtle.importKey() в качестве входных данных с параметрами derivedKeyType, extractable и keyUsages.
В настоящее время поддерживаются следующие алгоритмы:
subtle.digest(algorithm, data)
-
algorithm<string>|<Algorithm> -
data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> - Возвращает:
<Promise>При успешном выполнении разрешается объектом<ArrayBuffer>.
Используя метод, указанный в algorithm, этот метод пытается вычислить дайджест для data. В случае успеха возвращённый промис разрешается объектом <ArrayBuffer>, содержащим вычисленный дайджест.
Если algorithm передан как <string>, он должен иметь одно из следующих значений:
-
'cSHAKE128'4 -
'cSHAKE256'4 -
'KT128'4 -
'KT256'4 'SHA-1''SHA-256''SHA-384''SHA-512'-
'SHA3-256'4 -
'SHA3-384'4 -
'SHA3-512'4 -
'TurboSHAKE128'4 -
'TurboSHAKE256'4
Если algorithm передан как <Object>, он должен иметь свойство name, значение которого должно совпадать с одним из указанных выше.
subtle.encapsulateBits(encapsulationAlgorithm, encapsulationKey)
Стабильность: 1.1 — Активная разработка
-
encapsulationAlgorithm<string>|<Algorithm> -
encapsulationKey<CryptoKey> - Возвращает:
<Promise>При успешном выполнении разрешается объектом {EncapsulatedBits}.
Использует асимметричный открытый ключ получателя сообщения для шифрования временного симметричного ключа. Этот зашифрованный ключ — «инкапсулированный ключ», представленный в виде {EncapsulatedBits}.
В настоящее время поддерживаются следующие алгоритмы:
subtle.encapsulateKey(encapsulationAlgorithm, encapsulationKey, sharedKeyAlgorithm, extractable, keyUsages)
Стабильность: 1.1 — Активная разработка
-
encapsulationAlgorithm<string>|<Algorithm> -
encapsulationKey<CryptoKey> -
sharedKeyAlgorithm<string>|<Algorithm>|<HmacImportParams>|<AesDerivedKeyParams> -
extractable<boolean> -
keyUsages<string[]>См. раздел Использование ключей. - Возвращает:
<Promise>При успешном выполнении разрешается объектом {EncapsulatedKey}.
Использует асимметричный открытый ключ получателя сообщения для шифрования временного симметричного ключа. Этот зашифрованный ключ — «инкапсулированный ключ», представленный в виде {EncapsulatedKey}.
В настоящее время поддерживаются следующие алгоритмы:
subtle.encrypt(algorithm, key, data)
-
algorithm<RsaOaepParams>|<AesCtrParams>|<AesCbcParams> -
key<CryptoKey> -
data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> - Возвращает:
<Promise>При успешном выполнении разрешается объектом<ArrayBuffer>.
Используя метод и параметры, заданные в algorithm, а также ключевой материал, предоставленный в key, этот метод пытается зашифровать data. В случае успеха возвращённый промис разрешается объектом <ArrayBuffer>, содержащим результат шифрования.
В настоящее время поддерживаются следующие алгоритмы:
subtle.exportKey(format, key)
-
format<string>Должно быть одним из'raw','pkcs8','spki','jwk','raw-secret'4,'raw-public'4 или'raw-seed'4. -
key<CryptoKey> - Возвращает:
<Promise>При успешном выполнении возвращает<ArrayBuffer>|<Object>.
Экспортирует указанный ключ в заданном формате, если он поддерживается.
Если ключ <CryptoKey> нельзя извлечь, возвращенный промис будет отклонен.
Если format равен 'pkcs8' или 'spki' и экспорт выполнен успешно, возвращенный промис будет разрешен объектом <ArrayBuffer>, содержащим экспортированные данные ключа.
Если format равен 'jwk' и экспорт выполнен успешно, возвращенный промис будет разрешен объектом JavaScript, соответствующим спецификации JSON Web Key.
| Поддерживаемый алгоритм ключа | 'spki' | 'pkcs8' | 'jwk' | 'raw' | 'raw-secret' | 'raw-public' | 'raw-seed' |
|---|---|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ✔ | ||||
'AES-CTR' | ✔ | ✔ | ✔ | ||||
'AES-GCM' | ✔ | ✔ | ✔ | ||||
'AES-KW' | ✔ | ✔ | ✔ | ||||
'AES-OCB'4
| ✔ | ✔ | |||||
'ChaCha20-Poly1305'4
| ✔ | ✔ | |||||
'ECDH' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ECDSA' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed25519' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed448'5
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'HMAC' | ✔ | ✔ | ✔ | ||||
'KMAC128'4
| ✔ | ✔ | |||||
'KMAC256'4
| ✔ | ✔ | |||||
'ML-DSA-44'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-65'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-87'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-512'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-768'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-1024'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'RSA-OAEP' | ✔ | ✔ | ✔ | ||||
'RSA-PSS' | ✔ | ✔ | ✔ | ||||
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ |
subtle.getPublicKey(key, keyUsages)
Стабильность: 1.1 — активная разработка
-
key<CryptoKey>Закрытый ключ, из которого выводится соответствующий открытый ключ. -
keyUsages<string[]>См. раздел Использование ключей. - Возвращает:
<Promise>При успешном выполнении возвращает<CryptoKey>.
Выводит открытый ключ из заданного закрытого ключа.
subtle.generateKey(algorithm, extractable, keyUsages)
-
algorithm<string>|<Algorithm>|<RsaHashedKeyGenParams>|<EcKeyGenParams>|<HmacKeyGenParams>|<AesKeyGenParams>
-
extractable<boolean> -
keyUsages<string[]>См. раздел Использование ключей. - Возвращает:
<Promise>При успешном выполнении возвращает<CryptoKey>|<CryptoKeyPair>.
Используя параметры, переданные в algorithm, этот метод пытается создать новые ключевые данные. В зависимости от используемого алгоритма создается либо один <CryptoKey>, либо <CryptoKeyPair>.
Поддерживаемые алгоритмы генерации <CryptoKeyPair> (открытого и закрытого ключей) включают:
'ECDH''ECDSA''Ed25519'-
'Ed448'5 -
'ML-DSA-44'4 -
'ML-DSA-65'4 -
'ML-DSA-87'4 -
'ML-KEM-512'4 -
'ML-KEM-768'4 -
'ML-KEM-1024'4 'RSA-OAEP''RSA-PSS''RSASSA-PKCS1-v1_5''X25519'-
'X448'5
Поддерживаемые алгоритмы генерации <CryptoKey> (секретного ключа) включают:
subtle.importKey(format, keyData, algorithm, extractable, keyUsages)
-
format<string>Должно быть одним из значений'raw','pkcs8','spki','jwk','raw-secret'4,'raw-public'4 или'raw-seed'4. -
keyData<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>|<Object>
-
algorithm<string>|<Algorithm>|<RsaHashedImportParams>|<EcKeyImportParams>|<HmacImportParams>
-
extractable<boolean> -
keyUsages<string[]>См. раздел Использование ключа. - Возвращает:
<Promise>При успешном выполнении разрешается с объектом<CryptoKey>.
Этот метод пытается интерпретировать предоставленное значение keyData как указанный format, чтобы создать экземпляр <CryptoKey> с использованием аргументов algorithm, extractable и keyUsages. Если импорт выполнен успешно, возвращенный промис будет разрешен с представлением <CryptoKey> ключевого материала.
При импорте ключей алгоритмов KDF значение extractable должно быть false.
В настоящее время поддерживаются следующие алгоритмы:
| Поддерживаемый алгоритм ключа | 'spki' | 'pkcs8' | 'jwk' | 'raw' | 'raw-secret' | 'raw-public' | 'raw-seed' |
|---|---|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ✔ | ||||
'AES-CTR' | ✔ | ✔ | ✔ | ||||
'AES-GCM' | ✔ | ✔ | ✔ | ||||
'AES-KW' | ✔ | ✔ | ✔ | ||||
'AES-OCB'4
| ✔ | ✔ | |||||
'Argon2d'4
| ✔ | ||||||
'Argon2i'4
| ✔ | ||||||
'Argon2id'4
| ✔ | ||||||
'ChaCha20-Poly1305'4
| ✔ | ✔ | |||||
'ECDH' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ECDSA' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed25519' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed448'5
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'HKDF' | ✔ | ✔ | |||||
'HMAC' | ✔ | ✔ | ✔ | ||||
'KMAC128'4
| ✔ | ✔ | |||||
'KMAC256'4
| ✔ | ✔ | |||||
'ML-DSA-44'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-65'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-87'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-512'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-768'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-1024'4
| ✔ | ✔ | ✔ | ✔ | ✔ | ||
'PBKDF2' | ✔ | ✔ | |||||
'RSA-OAEP' | ✔ | ✔ | ✔ | ||||
'RSA-PSS' | ✔ | ✔ | ✔ | ||||
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ | ||||
'X25519' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'X448'5
| ✔ | ✔ | ✔ | ✔ | ✔ |
subtle.sign(algorithm, key, data)
-
algorithm<string>|<Algorithm>|<RsaPssParams>|<EcdsaParams> -
key<CryptoKey> -
data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> - Возвращает:
<Promise>При успешном выполнении разрешается с объектом<ArrayBuffer>.
Используя метод и параметры, заданные algorithm, а также ключевой материал, предоставленный key, этот метод пытается создать криптографическую подпись для data. В случае успеха возвращенный промис разрешается объектом <ArrayBuffer>, содержащим созданную подпись.
В настоящее время поддерживаются следующие алгоритмы:
subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable, keyUsages)
-
format<string>Должно быть одним из значений'raw','pkcs8','spki','jwk','raw-secret'4,'raw-public'4 или'raw-seed'4. -
wrappedKey<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> -
unwrappingKey<CryptoKey>
-
unwrapAlgorithm<string>|<Algorithm>|<RsaOaepParams>|<AesCtrParams>|<AesCbcParams> -
unwrappedKeyAlgorithm<string>|<Algorithm>|<RsaHashedImportParams>|<EcKeyImportParams>|<HmacImportParams>
-
extractable<boolean> -
keyUsages<string[]>См. Назначения ключа. - Возвращает:
<Promise>При успешном выполнении возвращает<CryptoKey>.
В криптографии «упаковка ключа» означает экспорт материала ключа с последующим его шифрованием. Этот метод пытается расшифровать упакованный ключ и создать экземпляр <CryptoKey>. Он эквивалентен вызову subtle.decrypt() для зашифрованных данных ключа (с использованием аргументов wrappedKey, unwrapAlgorithm и unwrappingKey в качестве входных данных), а затем передаче результата методу subtle.importKey() с аргументами unwrappedKeyAlgorithm, extractable и keyUsages в качестве входных данных. При успешном выполнении возвращённый промис разрешается объектом <CryptoKey>.
В настоящее время поддерживаются следующие алгоритмы упаковки:
Поддерживаются следующие алгоритмы распакованного ключа:
subtle.verify(algorithm, key, signature, data)
-
algorithm<string>|<Algorithm>|<RsaPssParams>|<EcdsaParams> -
key<CryptoKey> -
signature<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> -
data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer> - Возвращает:
<Promise>При успешном выполнении возвращает<boolean>.
Используя метод и параметры, заданные в algorithm, а также материал ключа, предоставленный key, этот метод пытается проверить, является ли signature допустимой криптографической подписью data. Возвращённый промис разрешается значением true или false.
В настоящее время поддерживаются следующие алгоритмы:
subtle.wrapKey(format, key, wrappingKey, wrapAlgorithm)
-
format<string>Должно быть одним из значений'raw','pkcs8','spki','jwk','raw-secret'4,'raw-public'4 или'raw-seed'4. -
key<CryptoKey> -
wrappingKey<CryptoKey> -
wrapAlgorithm<string>|<Algorithm>|<RsaOaepParams>|<AesCtrParams>|<AesCbcParams> - Возвращает:
<Promise>При успешном выполнении возвращает<ArrayBuffer>.
В криптографии «упаковка ключа» означает экспорт материала ключа с последующим его шифрованием. Этот метод экспортирует материал ключа в формат, указанный в format, а затем шифрует его методом и параметрами, заданными в wrapAlgorithm, и материалом ключа, предоставленным wrappingKey. Это эквивалентно вызову subtle.exportKey() с использованием format и key в качестве аргументов, а затем передаче результата методу subtle.encrypt() с использованием wrappingKey и wrapAlgorithm в качестве входных данных. При успешном выполнении возвращённый промис разрешается объектом <ArrayBuffer>, содержащим зашифрованные данные ключа.
В настоящее время поддерживаются следующие алгоритмы упаковки:
Параметры алгоритмов
Объекты параметров алгоритмов определяют методы и параметры, используемые различными методами <SubtleCrypto>. Хотя здесь они описаны как «классы», на самом деле это простые объекты-словари JavaScript.
Класс: Algorithm
Algorithm.name
- Тип:
<string>
Класс: AeadParams
aeadParams.additionalData
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>|<undefined>
Дополнительные входные данные, которые не шифруются, но включаются в проверку подлинности данных. Использование additionalData необязательно.
aeadParams.iv
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Вектор инициализации должен быть уникальным для каждой операции шифрования с использованием данного ключа.
aeadParams.name
- Тип:
<string>Должно быть'AES-GCM','AES-OCB'или'ChaCha20-Poly1305'.
aeadParams.tagLength
- Тип:
<number>Размер создаваемого тега аутентификации в битах.
Класс: AesDerivedKeyParams
aesDerivedKeyParams.name
- Тип:
<string>Должно быть одним из значений:'AES-CBC','AES-CTR','AES-GCM','AES-OCB'или'AES-KW'
aesDerivedKeyParams.length
- Тип:
<number>
Длина создаваемого ключа AES. Она должна составлять 128, 192 или 256.
Класс: AesCbcParams
aesCbcParams.iv
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Задает вектор инициализации. Его длина должна составлять ровно 16 байт; он должен быть непредсказуемым и криптографически случайным.
aesCbcParams.name
- Тип:
<string>Должно быть'AES-CBC'.
Класс: AesCtrParams
aesCtrParams.counter
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Начальное значение блока счетчика. Его длина должна составлять ровно 16 байт.
Метод AES-CTR использует крайние правые length бит блока в качестве счетчика, а оставшиеся биты — в качестве одноразового номера.
aesCtrParams.length
- Тип:
<number>Количество бит вaesCtrParams.counter, используемых в качестве счетчика.
aesCtrParams.name
- Тип:
<string>Должно быть'AES-CTR'.
Класс: AesKeyAlgorithm
aesKeyAlgorithm.length
- Тип:
<number>
Длина ключа AES в битах.
aesKeyAlgorithm.name
- Тип:
<string>
Класс: AesKeyGenParams
aesKeyGenParams.length
- Тип:
<number>
Длина создаваемого ключа AES. Она должна составлять 128, 192 или 256.
aesKeyGenParams.name
- Тип:
<string>Должно быть одним из значений:'AES-CBC','AES-CTR','AES-GCM'или'AES-KW'
Класс: Argon2Params
argon2Params.associatedData
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Представляет необязательные ассоциированные данные.
argon2Params.memory
- Тип:
<number>
Представляет объем памяти в кибибайтах. Он должен быть не менее чем в 8 раз больше степени параллелизма.
argon2Params.name
- Тип:
<string>Должно быть одним из значений:'Argon2d','Argon2i'или'Argon2id'.
argon2Params.nonce
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Представляет одноразовый номер, используемый в качестве соли при хешировании паролей.
argon2Params.parallelism
- Тип:
<number>
Представляет степень параллелизма.
argon2Params.passes
- Тип:
<number>
Представляет количество проходов.
argon2Params.secretValue
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Представляет необязательное секретное значение.
argon2Params.version
- Тип:
<number>
Представляет номер версии Argon2. Версия по умолчанию и единственная определенная на данный момент — 19 (0x13).
Класс: ContextParams
contextParams.name
contextParams.context
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>|<undefined>
Свойство context представляет необязательные контекстные данные, связываемые с сообщением.
Класс: CShakeParams
cShakeParams.name
cShakeParams.outputLength
- Тип:
<number>обозначает запрошенную длину выходных данных в битах.
cShakeParams.functionName
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>|<undefined>
Член functionName обозначает имя функции, используемое NIST для определения функций на основе cSHAKE. Реализация Node.js Web Crypto API поддерживает только имя functionName нулевой длины, что эквивалентно полному отсутствию параметра functionName.
cShakeParams.customization
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>|<undefined>
Член customization обозначает строку настройки. Реализация Node.js Web Crypto API поддерживает только настройку нулевой длины, что эквивалентно полному отсутствию настройки.
Класс: EcdhKeyDeriveParams
ecdhKeyDeriveParams.name
ecdhKeyDeriveParams.public
- Тип:
<CryptoKey>
Вывод ключа ECDH выполняется путем использования закрытого ключа одной стороны и открытого ключа другой стороны в качестве входных данных, чтобы сгенерировать общий секретный ключ. Свойству ecdhKeyDeriveParams.public присваивается открытый ключ другой стороны.
Класс: EcdsaParams
ecdsaParams.hash
- Тип:
<string>|<Algorithm>
Если значение представлено в виде <string>, оно должно быть одним из следующих:
Если значение представлено в виде <Algorithm>, свойство объекта name должно содержать одно из перечисленных выше значений.
ecdsaParams.name
- Тип:
<string>Должно быть'ECDSA'.
Класс: EcKeyAlgorithm
ecKeyAlgorithm.name
- Тип:
<string>
ecKeyAlgorithm.namedCurve
- Тип:
<string>
Класс: EcKeyGenParams
ecKeyGenParams.name
- Тип:
<string>Должно быть'ECDSA'или'ECDH'.
ecKeyGenParams.namedCurve
- Тип:
<string>Должно быть одним из следующих значений:'P-256','P-384','P-521'.
Класс: EcKeyImportParams
ecKeyImportParams.name
- Тип:
<string>Должно быть'ECDSA'или'ECDH'.
ecKeyImportParams.namedCurve
- Тип:
<string>Должно быть одним из следующих значений:'P-256','P-384','P-521'.
Класс: EncapsulatedBits
Временный симметричный секретный ключ (представленный в виде <ArrayBuffer>) для шифрования сообщения и зашифрованный этим общим ключом шифротекст (который можно передать получателю вместе с сообщением). Получатель использует свой закрытый ключ, чтобы определить общий ключ, а затем расшифровать сообщение.
encapsulatedBits.ciphertext
- Тип:
<ArrayBuffer>
encapsulatedBits.sharedKey
- Тип:
<ArrayBuffer>
Класс: EncapsulatedKey
Временный симметричный секретный ключ (представленный в виде <CryptoKey>) для шифрования сообщения и зашифрованный этим общим ключом шифротекст (который можно передать получателю вместе с сообщением). Получатель использует свой закрытый ключ, чтобы определить общий ключ, а затем расшифровать сообщение.
encapsulatedKey.ciphertext
- Тип:
<ArrayBuffer>
encapsulatedKey.sharedKey
- Тип:
<CryptoKey>
Класс: HkdfParams
hkdfParams.hash
- Тип:
<string>|<Algorithm>
Если значение представлено в виде <string>, оно должно быть одним из следующих:
Если значение представлено в виде <Algorithm>, свойство объекта name должно содержать одно из перечисленных выше значений.
hkdfParams.info
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Предоставляет алгоритму HKDF контекстные входные данные, специфичные для приложения. Они могут иметь нулевую длину, но должны быть указаны.
hkdfParams.name
- Тип:
<string>Должно быть'HKDF'.
hkdfParams.salt
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Значение соли значительно повышает стойкость алгоритма HKDF. Оно должно быть случайным или псевдослучайным и иметь ту же длину, что и выходные данные функции дайджеста (например, если в качестве дайджеста используется 'SHA-256', соль должна представлять собой 256 бит случайных данных).
Класс: HmacImportParams
hmacImportParams.hash
- Тип:
<string>|<Algorithm>
Если значение представлено в виде <string>, оно должно быть одним из следующих:
Если значение представлено в виде <Algorithm>, свойство name объекта должно иметь одно из перечисленных выше значений.
hmacImportParams.length
- Тип:
<number>
Необязательное количество битов в ключе HMAC. Этот параметр необязателен, и в большинстве случаев его следует опускать.
hmacImportParams.name
- Тип:
<string>Должно быть'HMAC'.
Класс: HmacKeyAlgorithm
hmacKeyAlgorithm.hash
- Тип:
<Algorithm>
hmacKeyAlgorithm.length
- Тип:
<number>
Длина ключа HMAC в битах.
hmacKeyAlgorithm.name
- Тип:
<string>
Класс: HmacKeyGenParams
hmacKeyGenParams.hash
- Тип:
<string>|<Algorithm>
Если значение представлено в виде <string>, оно должно быть одним из следующих:
Если значение представлено в виде <Algorithm>, свойство name объекта должно иметь одно из перечисленных выше значений.
hmacKeyGenParams.length
- Тип:
<number>
Количество битов, генерируемых для ключа HMAC. Если параметр не указан, длина определяется используемым алгоритмом хеширования. Этот параметр необязателен, и в большинстве случаев его следует опускать.
hmacKeyGenParams.name
- Тип:
<string>Должно быть'HMAC'.
Класс: KeyAlgorithm
keyAlgorithm.name
- Тип:
<string>
Класс: KangarooTwelveParams
kangarooTwelveParams.customization
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>|<undefined>
Необязательная строка настройки для KangarooTwelve.
kangarooTwelveParams.name
kangarooTwelveParams.outputLength
- Тип:
<number>задает требуемую длину выходных данных в битах.
Класс: KmacImportParams
kmacImportParams.length
- Тип:
<number>
Необязательное количество битов в ключе KMAC. Этот параметр необязателен, и в большинстве случаев его следует опускать.
kmacImportParams.name
- Тип:
<string>Должно быть'KMAC128'или'KMAC256'.
Класс: KmacKeyAlgorithm
kmacKeyAlgorithm.length
- Тип:
<number>
Длина ключа KMAC в битах.
kmacKeyAlgorithm.name
- Тип:
<string>
Класс: KmacKeyGenParams
kmacKeyGenParams.length
- Тип:
<number>
Количество битов, генерируемых для ключа KMAC. Если параметр не указан, длина определяется используемым алгоритмом KMAC. Этот параметр необязателен, и в большинстве случаев его следует опускать.
kmacKeyGenParams.name
- Тип:
<string>Должно быть'KMAC128'или'KMAC256'.
Класс: KmacParams
kmacParams.algorithm
- Тип:
<string>Должно быть'KMAC128'или'KMAC256'.
kmacParams.outputLength
- Тип:
<number>
Длина выходных данных в байтах. Значение должно быть положительным целым числом.
kmacParams.customization
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>|<undefined>
Элемент customization задает необязательную строку настройки.
Класс: Pbkdf2Params
pbkdf2Params.hash
- Тип:
<string>|<Algorithm>
Если значение представлено в виде <string>, оно должно быть одним из следующих:
Если значение представлено в виде <Algorithm>, свойство name объекта должно иметь одно из перечисленных выше значений.
pbkdf2Params.iterations
- Тип:
<number>
Количество итераций, выполняемых алгоритмом PBKDF2 при получении битов.
pbkdf2Params.name
- Тип:
<string>Должно быть'PBKDF2'.
pbkdf2Params.salt
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Должно содержать не менее 16 случайных или псевдослучайных байтов.
Класс: RsaHashedImportParams
rsaHashedImportParams.hash
- Тип:
<string>|<Algorithm>
Если значение представлено в виде <string>, оно должно быть одним из следующих:
Если значение представлено в виде <Algorithm>, свойство name объекта должно содержать одно из перечисленных выше значений.
rsaHashedImportParams.name
- Тип:
<string>Должно быть одним из'RSASSA-PKCS1-v1_5','RSA-PSS'или'RSA-OAEP'.
Класс: RsaHashedKeyAlgorithm
rsaHashedKeyAlgorithm.hash
- Тип:
<Algorithm>
rsaHashedKeyAlgorithm.modulusLength
- Тип:
<number>
Длина модуля RSA в битах.
rsaHashedKeyAlgorithm.name
- Тип:
<string>
rsaHashedKeyAlgorithm.publicExponent
- Тип:
<Uint8Array>
Открытая экспонента RSA.
Класс: RsaHashedKeyGenParams
rsaHashedKeyGenParams.hash
- Тип:
<string>|<Algorithm>
Если значение представлено в виде <string>, оно должно быть одним из следующих:
Если значение представлено в виде <Algorithm>, свойство name объекта должно содержать одно из перечисленных выше значений.
rsaHashedKeyGenParams.modulusLength
- Тип:
<number>
Длина модуля RSA в битах. Согласно рекомендациям, она должна составлять не менее 2048.
rsaHashedKeyGenParams.name
- Тип:
<string>Должно быть одним из'RSASSA-PKCS1-v1_5','RSA-PSS'или'RSA-OAEP'.
rsaHashedKeyGenParams.publicExponent
- Тип:
<Uint8Array>
Открытая экспонента RSA. Это значение должно быть экземпляром <Uint8Array>, содержащим беззнаковое целое число в порядке от старшего байта к младшему, которое должно помещаться в 32 бита. <Uint8Array> может содержать произвольное количество ведущих нулевых битов. Значение должно быть простым числом. Если нет причин использовать другое значение, в качестве открытой экспоненты используйте new Uint8Array([1, 0, 1]) (65537).
Класс: RsaOaepParams
rsaOaepParams.label
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Дополнительный набор байтов, который не будет зашифрован, но будет связан с созданным шифротекстом.
Параметр rsaOaepParams.label является необязательным.
rsaOaepParams.name
- Тип:
<string>должно быть'RSA-OAEP'.
Класс: RsaPssParams
rsaPssParams.name
- Тип:
<string>Должно быть'RSA-PSS'.
rsaPssParams.saltLength
- Тип:
<number>
Длина (в байтах) используемой случайной соли.
Класс: TurboShakeParams
turboShakeParams.domainSeparation
- Тип:
<number>|<undefined>
Необязательный байт разделения доменов (0x01–0x7f). По умолчанию используется 0x1f.
turboShakeParams.name
turboShakeParams.outputLength
- Тип:
<number>задаёт требуемую длину выходных данных в битах.
Сноски
-
См. Современные алгоритмы в API веб-криптографии ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 ↩22 ↩23 ↩24 ↩25 ↩26 ↩27 ↩28 ↩29 ↩30 ↩31 ↩32 ↩33 ↩34 ↩35 ↩36 ↩37 ↩38 ↩39 ↩40 ↩41 ↩42 ↩43 ↩44 ↩45 ↩46 ↩47 ↩48 ↩49 ↩50 ↩51 ↩52 ↩53 ↩54 ↩55 ↩56 ↩57 ↩58 ↩59 ↩60 ↩61 ↩62 ↩63 ↩64 ↩65 ↩66 ↩67 ↩68 ↩69 ↩70 ↩71 ↩72 ↩73 ↩74 ↩75 ↩76 ↩77 ↩78 ↩79 ↩80 ↩81 ↩82 ↩83 ↩84 ↩85 ↩86 ↩87 ↩88 ↩89 ↩90 ↩91 ↩92 ↩93 ↩94 ↩95 ↩96 ↩97 ↩98 ↩99 ↩100 ↩101
↩102 ↩103 ↩104 ↩105 ↩106 ↩107 ↩108 ↩109 ↩110 ↩111 ↩112 ↩113 ↩114 ↩115 ↩116 ↩117 ↩118 ↩119 ↩120 ↩121 ↩122 ↩123 ↩124 ↩125 ↩126 ↩127 ↩128 ↩129 ↩130 ↩131 ↩132 ↩133 ↩134 ↩135 ↩136 ↩137 ↩138 ↩139 ↩140 ↩141 ↩142 ↩143 ↩144 ↩145 ↩146 ↩147 ↩148 ↩149 ↩150 ↩151 ↩152 ↩153 ↩154 ↩155 ↩156 ↩157 ↩158 ↩159 ↩160 ↩161 ↩162 ↩163 ↩164 ↩165 ↩166
-
См. Безопасные кривые в Web Cryptography API ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/api/webcrypto.html