Spec-Zone.ru › Node.js 24 LTS

Web Crypto API

История
Версия Изменения
v24.8.0

Теперь поддерживаются алгоритмы KMAC.

v24.8.0

Теперь поддерживаются алгоритмы Argon2.

v24.7.0

Теперь поддерживается алгоритм AES-OCB.

v24.7.0

Теперь поддерживаются алгоритмы ML-KEM.

v24.7.0

Теперь поддерживается алгоритм ChaCha20-Poly1305.

v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v24.7.0

Теперь поддерживаются алгоритмы SHAKE.

v24.7.0

Теперь поддерживаются алгоритмы ML-DSA.

v23.5.0, v22.13.0

Алгоритмы Ed25519 и X25519 теперь считаются стабильными.

v19.0.0

Больше не являются экспериментальными, за исключением алгоритмов Ed25519, Ed448, X25519 и X448.

v20.0.0, v18.17.0

Аргументы теперь приводятся к нужному типу и проверяются согласно их определениям WebIDL, как и в других реализациях Web Crypto API.

v18.4.0, v16.17.0

Удален проприетарный формат импорта/экспорта 'node.keyObject'.

v18.4.0, v16.17.0

Удалены проприетарные алгоритмы 'NODE-DSA', 'NODE-DH' и 'NODE-SCRYPT'.

v18.4.0, v16.17.0

Добавлены алгоритмы 'Ed25519', 'Ed448', 'X25519' и 'X448'.

v18.4.0, v16.17.0

Удалены проприетарные алгоритмы 'NODE-ED25519' и 'NODE-ED448'.

v18.4.0, v16.17.0

Из алгоритма 'ECDH' удалены проприетарные именованные эллиптические кривые 'NODE-X25519' и 'NODE-X448'.

Стабильность: 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);

})(); copy

Современные алгоритмы в Web Cryptography API

Стабильность: 1.1 — Активная разработка

Node.js реализует следующие возможности из предложения WICG «Современные алгоритмы в Web Cryptography API»:

Алгоритмы:

  • 'AES-OCB'1
  • 'Argon2d'2
  • 'Argon2i'2
  • 'Argon2id'2
  • 'ChaCha20-Poly1305'
  • 'cSHAKE128'
  • 'cSHAKE256'
  • 'KMAC128'1
  • 'KMAC256'1
  • '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'

Форматы ключей:

  • 'raw-public'
  • 'raw-secret'
  • 'raw-seed'

Методы:

  • subtle.decapsulateBits()
  • subtle.decapsulateKey()
  • subtle.encapsulateBits()
  • subtle.encapsulateKey()
  • subtle.getPublicKey()
  • SubtleCrypto.supports()

Надежные эллиптические кривые в Web Cryptography API

Стабильность: 1.1 — Активная разработка

Node.js реализует следующие возможности из предложения WICG «Надежные эллиптические кривые в 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;
} copy
Пары ключей 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 };
} copy
Пары ключей 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']);
} copy
Ключи HMAC
const { subtle } = globalThis.crypto;

async function generateHmacKey(hash = 'SHA-256') {
  const key = await subtle.generateKey({
    name: 'HMAC',
    hash,
  }, true, ['sign', 'verify']);

  return key;
} copy
Пары ключей 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 };
} copy

Шифрование и расшифрование

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);
} copy

Экспорт и импорт ключей

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;
} copy

Упаковка и распаковка ключей

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;
} copy

Подписание и проверка подписи

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;
} copy

Получение битов и ключей

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;
} copy

Хеширование

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;
} copy

Проверка поддержки алгоритмов во время выполнения

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,
)); copy

Матрица алгоритмов

В таблицах перечислены алгоритмы, поддерживаемые реализацией 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 ✔
'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 ✔
'X25519' ✔
'X448'5 ✔

Класс: Crypto

Добавлено в: v15.0.0

globalThis.crypto — это экземпляр класса Crypto. Crypto — это синглтон, предоставляющий доступ к остальной части API криптографии.

crypto.subtle

Добавлено в: v15.0.0
  • Тип: <SubtleCrypto>

Предоставляет доступ к API SubtleCrypto.

crypto.getRandomValues(typedArray)

Добавлено в: v15.0.0
  • typedArray <Buffer> | <TypedArray>
  • Возвращает: <Buffer> | <TypedArray>

Генерирует криптографически стойкие случайные значения. Указанный typedArray заполняется случайными значениями, после чего возвращается ссылка на typedArray.

Указанный typedArray должен быть экземпляром целочисленного типа <TypedArray>, то есть Float32Array и Float64Array не принимаются.

Если размер указанного typedArray превышает 65 536 байт, будет вызвана ошибка.

crypto.randomUUID()

Добавлено в: v16.7.0
  • Возвращает: <string>

Генерирует случайный UUID версии 4 согласно RFC 4122. UUID генерируется с помощью криптографического генератора псевдослучайных чисел.

Класс: CryptoKey

Добавлено в: v15.0.0

cryptoKey.algorithm

Добавлено в: v15.0.0
  • Тип: <KeyAlgorithm> | <RsaHashedKeyAlgorithm> | <EcKeyAlgorithm> | <AesKeyAlgorithm> | <HmacKeyAlgorithm> | <KmacKeyAlgorithm>

Объект с описанием алгоритма, для которого можно использовать ключ, а также дополнительных параметров, специфичных для алгоритма.

Только для чтения.

cryptoKey.extractable

Добавлено в: v15.0.0
  • Тип: <boolean>

Если значение равно true, <CryptoKey> можно извлечь с помощью subtle.exportKey() или subtle.wrapKey().

Только для чтения.

cryptoKey.type

Добавлено в: v15.0.0
  • Тип: <string> Одно из значений: 'secret', 'private' или 'public'.

Строка, указывающая, является ли ключ симметричным ('secret') или асимметричным ('private' или 'public').

cryptoKey.usages

Добавлено в: v15.0.0
  • Тип: <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 ✔
'HDKF' ✔
'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

Добавлено в: v15.0.0

CryptoKeyPair — это простой объект-словарь со свойствами publicKey и privateKey, представляющий пару асимметричных ключей.

cryptoKeyPair.privateKey

Добавлено в: v15.0.0
  • Тип: <CryptoKey> <CryptoKey>, значение type которого будет 'private'.

cryptoKeyPair.publicKey

Добавлено в: v15.0.0
  • Тип: <CryptoKey> <CryptoKey>, значение type которого будет 'public'.

Class: SubtleCrypto

Добавлено в: v15.0.0

Статический метод: SubtleCrypto.supports(operation, algorithm[, lengthOrAdditionalAlgorithm])

Добавлено в: v24.7.0
Стабильность: 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)

Добавлено в: v24.7.0
Стабильность: 1.1 — Активная разработка
  • decapsulationAlgorithm <string> | <Algorithm>
  • decapsulationKey <CryptoKey>
  • ciphertext <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.

Получатель сообщения использует свой асимметричный закрытый ключ для расшифрования «инкапсулированного ключа» (шифротекста), восстанавливая временный симметричный ключ (представленный как <ArrayBuffer>), который затем используется для расшифрования сообщения.

В настоящее время поддерживаются следующие алгоритмы:

  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4

subtle.decapsulateKey(decapsulationAlgorithm, decapsulationKey, ciphertext, sharedKeyAlgorithm, extractable, usages)

Добавлено в: v24.7.0
Стабильность: 1.1 — Активная разработка
  • decapsulationAlgorithm <string> | <Algorithm>
  • decapsulationKey <CryptoKey>
  • ciphertext <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • sharedKeyAlgorithm <string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams> | <KmacImportParams>
  • extractable <boolean>
  • usages <string[]> См. Назначения ключа.
  • Возвращает: <Promise> В случае успеха выполняется с результатом <CryptoKey>.

Получатель сообщения использует свой асимметричный закрытый ключ для расшифрования «инкапсулированного ключа» (шифротекста), восстанавливая временный симметричный ключ (представленный как <CryptoKey>), который затем используется для расшифрования сообщения.

В настоящее время поддерживаются следующие алгоритмы:

  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4

subtle.decrypt(algorithm, key, data)

История
Версия Изменения
v24.7.0

Теперь поддерживается алгоритм AES-OCB.

v24.7.0

Теперь поддерживается алгоритм ChaCha20-Poly1305.

v15.0.0

Добавлено в: v15.0.0

  • algorithm <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AeadParams>
  • key <CryptoKey>
  • data <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.

Используя метод и параметры, заданные в algorithm, а также ключевой материал, предоставленный key, этот метод пытается расшифровать переданные данные data. В случае успеха возвращённый промис будет выполнен с объектом <ArrayBuffer>, содержащим результат в открытом виде.

В настоящее время поддерживаются следующие алгоритмы:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'RSA-OAEP'

subtle.deriveBits(algorithm, baseKey[, length])

История
Версия Изменения
v24.8.0

Теперь поддерживаются алгоритмы Argon2.

v22.5.0, v20.17.0, v18.20.5

Параметр length теперь необязателен для 'ECDH', 'X25519' и 'X448'.

v18.4.0, v16.17.0

Добавлены алгоритмы 'X25519' и 'X448'.

v15.0.0

Добавлено в: v15.0.0

  • algorithm <EcdhKeyDeriveParams> | <HkdfParams> | <Pbkdf2Params> | <Argon2Params>
  • baseKey <CryptoKey>
  • length <number> | <null> По умолчанию: null
  • Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.

Используя метод и параметры, указанные в algorithm, а также ключевой материал, предоставленный baseKey, этот метод пытается сгенерировать length бит.

Если length не указан или null, генерируется максимально возможное для данного алгоритма количество бит. Это допустимо для алгоритмов 'ECDH', 'X25519' и 'X448'5; для остальных алгоритмов length должен быть числом.

В случае успеха возвращённый промис будет выполнен с объектом <ArrayBuffer>, содержащим сгенерированные данные.

В настоящее время поддерживаются следующие алгоритмы:

  • 'Argon2d'4
  • 'Argon2i'4
  • 'Argon2id'4
  • 'ECDH'
  • 'HKDF'
  • 'PBKDF2'
  • 'X25519'
  • 'X448'5

subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)

История
Версия Изменения
v24.8.0

Теперь поддерживаются алгоритмы Argon2.

v18.4.0, v16.17.0

Добавлены алгоритмы 'X25519' и 'X448'.

v15.0.0

Добавлено в: v15.0.0

  • algorithm <EcdhKeyDeriveParams> | <HkdfParams> | <Pbkdf2Params> | <Argon2Params>
  • baseKey <CryptoKey>
  • derivedKeyAlgorithm <string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams> | <KmacImportParams>
  • extractable <boolean>
  • keyUsages <string[]> См. Назначения ключа.
  • Возвращает: <Promise> В случае успеха выполняется с результатом <CryptoKey>.

Используя метод и параметры, указанные в algorithm, а также ключевой материал, предоставленный baseKey, этот метод пытается создать новый <CryptoKey> на основе метода и параметров из derivedKeyAlgorithm.

Вызов этого метода эквивалентен вызову subtle.deriveBits() для генерации исходного ключевого материала с последующей передачей результата методу subtle.importKey() с использованием параметров deriveKeyAlgorithm, extractable и keyUsages.

В настоящее время поддерживаются следующие алгоритмы:

  • 'Argon2d'4
  • 'Argon2i'4
  • 'Argon2id'4
  • 'ECDH'
  • 'HKDF'
  • 'PBKDF2'
  • 'X25519'
  • 'X448'5

subtle.digest(algorithm, data)

История
Версия Изменения
v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v24.7.0

Теперь поддерживаются алгоритмы SHAKE.

v15.0.0

Добавлено в: v15.0.0

  • algorithm <string> | <Algorithm> | <CShakeParams>
  • data <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.

Используя метод, заданный в algorithm, этот метод пытается вычислить дайджест для data. В случае успеха возвращённый промис выполняется с объектом <ArrayBuffer>, содержащим вычисленный дайджест.

Если algorithm задан как <string>, он должен принимать одно из следующих значений:

  • 'cSHAKE128'4
  • 'cSHAKE256'4
  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

Если algorithm задан как <Object>, он должен иметь свойство name, значение которого должно быть одним из перечисленных выше.

subtle.encapsulateBits(encapsulationAlgorithm, encapsulationKey)

Добавлено в: v24.7.0
Стабильность: 1.1 — Активная разработка
  • encapsulationAlgorithm <string> | <Algorithm>
  • encapsulationKey <CryptoKey>
  • Возвращает: <Promise> В случае успеха выполняется с результатом <EncapsulatedBits>.

Использует асимметричный открытый ключ получателя сообщения для шифрования временного симметричного ключа. Этот зашифрованный ключ является «инкапсулированным ключом», представленным как <EncapsulatedBits>.

В настоящее время поддерживаются следующие алгоритмы:

  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4

subtle.encapsulateKey(encapsulationAlgorithm, encapsulationKey, sharedKeyAlgorithm, extractable, usages)

Добавлено в: v24.7.0
Стабильность: 1.1 — Активная разработка
  • encapsulationAlgorithm <string> | <Algorithm>
  • encapsulationKey <CryptoKey>
  • sharedKeyAlgorithm <string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams> | <KmacImportParams>
  • extractable <boolean>
  • usages <string[]> См. Назначения ключа.
  • Возвращает: <Promise> В случае успеха выполняется с результатом <EncapsulatedKey>.

Использует асимметричный открытый ключ получателя сообщения для шифрования временного симметричного ключа. Этот зашифрованный ключ является «инкапсулированным ключом», представленным как <EncapsulatedKey>.

В настоящее время поддерживаются следующие алгоритмы:

  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4

subtle.encrypt(algorithm, key, data)

История
Версия Изменения
v24.7.0

Теперь поддерживается алгоритм AES-OCB.

v24.7.0

Теперь поддерживается алгоритм ChaCha20-Poly1305.

v15.0.0

Добавлено в: v15.0.0

  • algorithm <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AeadParams>
  • key <CryptoKey>
  • data <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.

Используя метод и параметры, заданные в algorithm, а также ключевой материал, предоставленный key, этот метод пытается зашифровать data. В случае успеха возвращённый промис выполняется с объектом <ArrayBuffer>, содержащим результат шифрования.

В настоящее время поддерживаются следующие алгоритмы:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'RSA-OAEP'

subtle.exportKey(format, key)

История
Версия Изменения
v24.8.0

Теперь поддерживаются алгоритмы KMAC.

v24.7.0

Теперь поддерживаются алгоритмы ML-KEM.

v24.7.0

Теперь поддерживается алгоритм ChaCha20-Poly1305.

v24.7.0

Теперь поддерживаются алгоритмы ML-DSA.

v18.4.0, v16.17.0

Добавлены алгоритмы 'Ed25519', 'Ed448', 'X25519' и 'X448'.

v15.9.0

Удалён экспорт JWK для 'NODE-DSA'.

v15.0.0

Добавлено в: v15.0.0

  • 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)

Добавлено в: v24.7.0
Стабильность: 1.1 — Активная разработка
  • key <CryptoKey> Приватный ключ, из которого следует получить соответствующий открытый ключ.
  • keyUsages <string[]> См. Назначения ключей.
  • Возвращает: <Promise> В случае успеха выполняется с <CryptoKey>.

Получает открытый ключ из заданного приватного ключа.

subtle.generateKey(algorithm, extractable, keyUsages)

История
Версия Изменения
v24.8.0

Теперь поддерживаются алгоритмы KMAC.

v24.7.0

Теперь поддерживаются алгоритмы ML-KEM.

v24.7.0

Теперь поддерживается алгоритм ChaCha20-Poly1305.

v24.7.0

Теперь поддерживаются алгоритмы ML-DSA.

v15.0.0

Добавлено в: v15.0.0

  • algorithm <string> | <Algorithm> | <RsaHashedKeyGenParams> | <EcKeyGenParams> | <HmacKeyGenParams> | <AesKeyGenParams> | <KmacKeyGenParams>
  • 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> (секретного ключа):

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-KW'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'HMAC'
  • 'KMAC128'4
  • 'KMAC256'4

subtle.importKey(format, keyData, algorithm, extractable, keyUsages)

История
Версия Изменения
v24.8.0

Теперь поддерживаются алгоритмы KMAC.

v24.7.0

Теперь поддерживаются алгоритмы ML-KEM.

v24.7.0

Теперь поддерживается алгоритм ChaCha20-Poly1305.

v24.7.0

Теперь поддерживаются алгоритмы ML-DSA.

v18.4.0, v16.17.0

Добавлены алгоритмы 'Ed25519', 'Ed448', 'X25519' и 'X448'.

v15.9.0

Удалён импорт JWK для 'NODE-DSA'.

v15.0.0

Добавлено в: v15.0.0

  • 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> | <KmacImportParams>
  • 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 ✔ ✔ ✔ ✔ ✔
'HDKF' ✔ ✔
'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)

История
Версия Изменения
v24.8.0

Теперь поддерживаются алгоритмы KMAC.

v24.7.0

Теперь поддерживаются алгоритмы ML-DSA.

v18.4.0, v16.17.0

Добавлены алгоритмы 'Ed25519' и 'Ed448'.

v15.0.0

Добавлено в: v15.0.0

  • algorithm <string> | <Algorithm> | <RsaPssParams> | <EcdsaParams> | <ContextParams> | <KmacParams>
  • key <CryptoKey>
  • data <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • Возвращает: <Promise> В случае успеха выполняется с <ArrayBuffer>.

Используя метод и параметры, заданные в algorithm, а также ключевой материал, предоставленный в key, этот метод пытается создать криптографическую подпись для data. В случае успеха возвращённый промис выполняется с <ArrayBuffer>, содержащим созданную подпись.

В настоящее время поддерживаются следующие алгоритмы:

  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'5
  • 'HMAC'
  • 'KMAC128'4
  • 'KMAC256'4
  • 'ML-DSA-44'4
  • 'ML-DSA-65'4
  • 'ML-DSA-87'4
  • 'RSA-PSS'
  • 'RSASSA-PKCS1-v1_5'

subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)

История
Версия Изменения
v24.7.0

Теперь поддерживается алгоритм AES-OCB.

v24.7.0

Теперь поддерживается алгоритм ChaCha20-Poly1305.

v15.0.0

Добавлено в версии: v15.0.0

  • format <string> Должно быть одним из значений 'raw', 'pkcs8', 'spki', 'jwk', 'raw-secret'4, 'raw-public'4 или 'raw-seed'4.
  • wrappedKey <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • unwrappingKey <CryptoKey>
  • unwrapAlgo <string> | <Algorithm> | <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AeadParams>
  • unwrappedKeyAlgo <string> | <Algorithm> | <RsaHashedImportParams> | <EcKeyImportParams> | <HmacImportParams> | <KmacImportParams>
  • extractable <boolean>
  • keyUsages <string[]> См. раздел Назначение ключа.
  • Возвращает: <Promise> При успешном выполнении возвращается объект <CryptoKey>.

В криптографии «упаковка ключа» означает экспорт и последующее шифрование ключевого материала. Этот метод пытается расшифровать упакованный ключ и создать экземпляр <CryptoKey>. Он эквивалентен сначала вызову метода subtle.decrypt() для зашифрованных данных ключа (с использованием аргументов wrappedKey, unwrapAlgo и unwrappingKey в качестве входных данных), а затем передаче результата методу subtle.importKey() с использованием аргументов unwrappedKeyAlgo, extractable и keyUsages в качестве входных данных. В случае успеха возвращённое обещание выполняется с объектом <CryptoKey>.

В настоящее время поддерживаются следующие алгоритмы упаковки:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-KW'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'RSA-OAEP'

Поддерживаются следующие алгоритмы распакованного ключа:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-KW'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'ECDH'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'5
  • 'HMAC'
  • 'KMAC128'5
  • 'KMAC256'5
  • 'ML-DSA-44'4
  • 'ML-DSA-65'4
  • 'ML-DSA-87'4
  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4v
  • 'RSA-OAEP'
  • 'RSA-PSS'
  • 'RSASSA-PKCS1-v1_5'
  • 'X25519'
  • 'X448'5

subtle.verify(algorithm, key, signature, data)

История
Версия Изменения
v24.8.0

Теперь поддерживаются алгоритмы KMAC.

v24.7.0

Теперь поддерживаются алгоритмы ML-DSA.

v18.4.0, v16.17.0

Добавлены алгоритмы 'Ed25519' и 'Ed448'.

v15.0.0

Добавлено в версии: v15.0.0

  • algorithm <string> | <Algorithm> | <RsaPssParams> | <EcdsaParams> | <ContextParams> | <KmacParams>
  • key <CryptoKey>
  • signature <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • data <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • Возвращает: <Promise> При успешном выполнении возвращается значение <boolean>.

Используя метод и параметры, заданные в algorithm, а также ключевой материал, предоставленный key, этот метод пытается проверить, является ли signature допустимой криптографической подписью data. Возвращённое обещание выполняется со значением true или false.

В настоящее время поддерживаются следующие алгоритмы:

  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'5
  • 'HMAC'
  • 'KMAC128'5
  • 'KMAC256'5
  • 'ML-DSA-44'4
  • 'ML-DSA-65'4
  • 'ML-DSA-87'4
  • 'RSA-PSS'
  • 'RSASSA-PKCS1-v1_5'

subtle.wrapKey(format, key, wrappingKey, wrapAlgo)

История
Версия Изменения
v24.7.0

Теперь поддерживается алгоритм AES-OCB.

v24.7.0

Теперь поддерживается алгоритм ChaCha20-Poly1305.

v15.0.0

Добавлено в версии: v15.0.0

  • format <string> Должно быть одним из значений 'raw', 'pkcs8', 'spki', 'jwk', 'raw-secret'4, 'raw-public'4 или 'raw-seed'4.
  • key <CryptoKey>
  • wrappingKey <CryptoKey>
  • wrapAlgo <string> | <Algorithm> | <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AeadParams>
  • Возвращает: <Promise> При успешном выполнении возвращается объект <ArrayBuffer>.

В криптографии «упаковка ключа» означает экспорт и последующее шифрование ключевого материала. Этот метод экспортирует ключевой материал в формате, определённом параметром format, а затем шифрует его с использованием метода и параметров, заданных в wrapAlgo, и ключевого материала, предоставленного wrappingKey. Он эквивалентен вызову метода subtle.exportKey() с использованием format и key в качестве аргументов, а затем передаче результата методу subtle.encrypt() с использованием wrappingKey и wrapAlgo в качестве входных данных. В случае успеха возвращённое обещание будет выполнено с объектом <ArrayBuffer>, содержащим зашифрованные данные ключа.

В настоящее время поддерживаются следующие алгоритмы упаковки:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-KW'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'RSA-OAEP'

Параметры алгоритмов

Объекты параметров алгоритмов определяют методы и параметры, используемые различными методами <SubtleCrypto>. Хотя здесь они описаны как «классы», на самом деле это простые объекты-словари JavaScript.

Класс: Algorithm

Добавлено в: v15.0.0
Algorithm.name
Добавлено в: v15.0.0
  • Тип: <string>

Класс: AeadParams

Добавлено в: v15.0.0
aeadParams.additionalData
Добавлено в: v15.0.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>

Дополнительные входные данные, которые не шифруются, но участвуют в аутентификации данных. Использование additionalData необязательно.

aeadParams.iv
Добавлено в: v15.0.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Вектор инициализации должен быть уникальным для каждой операции шифрования с данным ключом.

aeadParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'AES-GCM', 'AES-OCB' или 'ChaCha20-Poly1305'.
aeadParams.tagLength
Добавлено в: v15.0.0
  • Тип: <number> Размер сгенерированного тега аутентификации в битах.

Класс: AesDerivedKeyParams

Добавлено в: v15.0.0
aesDerivedKeyParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть одним из значений 'AES-CBC', 'AES-CTR', 'AES-GCM', 'AES-OCB' или 'AES-KW'
aesDerivedKeyParams.length
Добавлено в: v15.0.0
  • Тип: <number>

Длина создаваемого ключа AES. Она должна составлять 128, 192 или 256.

Класс: AesCbcParams

Добавлено в: v15.0.0
aesCbcParams.iv
Добавлено в: v15.0.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Задает вектор инициализации. Его длина должна составлять ровно 16 байт; он должен быть непредсказуемым и криптографически случайным.

aesCbcParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'AES-CBC'.

Класс: AesCtrParams

Добавлено в: v15.0.0
aesCtrParams.counter
Добавлено в: v15.0.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Начальное значение блока счетчика. Его длина должна составлять ровно 16 байт.

Метод AES-CTR использует крайние правые length бит блока в качестве счетчика, а оставшиеся биты — в качестве nonce.

aesCtrParams.length
Добавлено в: v15.0.0
  • Тип: <number> Количество битов в aesCtrParams.counter, используемых в качестве счетчика.
aesCtrParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'AES-CTR'.

Класс: AesKeyAlgorithm

Добавлено в: v15.0.0
aesKeyAlgorithm.length
Добавлено в: v15.0.0
  • Тип: <number>

Длина ключа AES в битах.

aesKeyAlgorithm.name
Добавлено в: v15.0.0
  • Тип: <string>

Класс: AesKeyGenParams

Добавлено в: v15.0.0
aesKeyGenParams.length
Добавлено в: v15.0.0
  • Тип: <number>

Длина создаваемого ключа AES. Она должна составлять 128, 192 или 256.

aesKeyGenParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть одним из значений 'AES-CBC', 'AES-CTR', 'AES-GCM' или 'AES-KW'

Класс: Argon2Params

Добавлено в: v24.8.0
argon2Params.associatedData
Добавлено в: v24.8.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Представляет необязательные связанные данные.

argon2Params.memory
Добавлено в: v24.8.0
  • Тип: <number>

Представляет объем памяти в кибибайтах. Он должен быть как минимум в 8 раз больше степени параллелизма.

argon2Params.name
Добавлено в: v24.8.0
  • Тип: <string> Должно быть одним из значений 'Argon2d', 'Argon2i' или 'Argon2id'.
argon2Params.nonce
Добавлено в: v24.8.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Представляет nonce — соль для приложений хеширования паролей.

argon2Params.parallelism
Добавлено в: v24.8.0
  • Тип: <number>

Представляет степень параллелизма.

argon2Params.passes
Добавлено в: v24.8.0
  • Тип: <number>

Представляет количество проходов.

argon2Params.secretValue
Добавлено в: v24.8.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Представляет необязательное секретное значение.

argon2Params.version
Добавлено в: v24.8.0
  • Тип: <number>

Представляет номер версии Argon2. Версия по умолчанию и единственная определенная на данный момент — 19 (0x13).

Класс: ContextParams

Добавлено в: v24.7.0
contextParams.name
Добавлено в: v24.7.0
  • Тип: <string> Должно быть Ed4485, 'ML-DSA-44'4, 'ML-DSA-65'4 или 'ML-DSA-87'4.
contextParams.context
История
Версия Изменения
v24.8.0

Теперь поддерживается непустой контекст.

v24.7.0

Добавлено в: v24.7.0

  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>

Свойство context представляет необязательные контекстные данные, связываемые с сообщением.

Класс: CShakeParams

Добавлено в: v24.7.0
cShakeParams.customization
Добавлено в: v24.7.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>

Свойство customization представляет строку настройки. Реализация Web Crypto API в Node.js поддерживает только строку настройки нулевой длины, что равнозначно ее отсутствию.

cShakeParams.functionName
Добавлено в: v24.7.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>

Свойство functionName представляет имя функции, используемое NIST для определения функций на основе cSHAKE. Реализация Web Crypto API в Node.js поддерживает только имя функции нулевой длины, что равнозначно отсутствию functionName.

cShakeParams.length
Добавлено в: v24.7.0
  • Тип: <number> задает запрошенную длину выходных данных в битах.
cShakeParams.name
Добавлено в: v24.7.0
  • Тип: <string> Должно быть 'cSHAKE128'4 или 'cSHAKE256'4

Класс: EcdhKeyDeriveParams

Добавлено в: v15.0.0
ecdhKeyDeriveParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'ECDH', 'X25519' или 'X448'5.
ecdhKeyDeriveParams.public
Добавлено в: v15.0.0
  • Тип: <CryptoKey>

Вывод ключа ECDH выполняется путем получения в качестве входных данных закрытого ключа одной стороны и открытого ключа другой стороны, которые используются для создания общего секрета. Свойству ecdhKeyDeriveParams.public присваивается открытый ключ другой стороны.

Класс: EcdsaParams

Добавлено в: v15.0.0
ecdsaParams.hash
История
Версия Изменения
v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v15.0.0

Добавлено в: v15.0.0

  • Тип: <string> | <Algorithm>

Если значение представлено как <string>, оно должно быть одним из следующих:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

Если значение представлено как <Algorithm>, свойство name объекта должно иметь одно из перечисленных выше значений.

ecdsaParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'ECDSA'.

Класс: EcKeyAlgorithm

Добавлено в: v15.0.0
ecKeyAlgorithm.name
Добавлено в: v15.0.0
  • Тип: <string>
ecKeyAlgorithm.namedCurve
Добавлено в: v15.0.0
  • Тип: <string>

Класс: EcKeyGenParams

Добавлено в: v15.0.0
ecKeyGenParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть одним из значений 'ECDSA' или 'ECDH'.
ecKeyGenParams.namedCurve
Добавлено в: v15.0.0
  • Тип: <string> Должно быть одним из значений 'P-256', 'P-384', 'P-521'.

Класс: EcKeyImportParams

Добавлено в: v15.0.0
ecKeyImportParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть одним из значений 'ECDSA' или 'ECDH'.
ecKeyImportParams.namedCurve
Добавлено в: v15.0.0
  • Тип: <string> Должно быть одним из значений 'P-256', 'P-384', 'P-521'.

Класс: EncapsulatedBits

Добавлено в: v24.7.0

Временный симметричный секретный ключ (представленный как <ArrayBuffer>) для шифрования сообщения, а также шифротекст, зашифрованный этим общим ключом (его можно передать получателю вместе с сообщением). Получатель использует свой закрытый ключ, чтобы определить общий ключ и затем расшифровать сообщение.

encapsulatedBits.ciphertext
Добавлено в: v24.7.0
  • Тип: <ArrayBuffer>
encapsulatedBits.sharedKey
Добавлено в: v24.7.0
  • Тип: <ArrayBuffer>

Класс: EncapsulatedKey

Добавлено в: v24.7.0

Временный симметричный секретный ключ (представленный как <CryptoKey>) для шифрования сообщения, а также шифротекст, зашифрованный этим общим ключом (его можно передать получателю вместе с сообщением). Получатель использует свой закрытый ключ, чтобы определить общий ключ и затем расшифровать сообщение.

encapsulatedKey.ciphertext
Добавлено в: v24.7.0
  • Тип: <ArrayBuffer>
encapsulatedKey.sharedKey
Добавлено в: v24.7.0
  • Тип: <CryptoKey>

Класс: HkdfParams

Добавлено в: v15.0.0
hkdfParams.hash
История
Версия Изменения
v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v15.0.0

Добавлено в: v15.0.0

  • Тип: <string> | <Algorithm>

Если значение представлено как <string>, оно должно быть одним из следующих:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

Если значение представлено как <Algorithm>, свойство name объекта должно иметь одно из перечисленных выше значений.

hkdfParams.info
Добавлено в: v15.0.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Предоставляет контекстные входные данные, специфичные для приложения, алгоритму HKDF. Они могут иметь нулевую длину, но их необходимо указать.

hkdfParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'HKDF'.
hkdfParams.salt
Добавлено в: v15.0.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Значение соли значительно повышает стойкость алгоритма HKDF. Оно должно быть случайным или псевдослучайным и иметь ту же длину, что и результат хеш-функции (например, если в качестве хеш-функции используется 'SHA-256', соль должна состоять из 256 бит случайных данных).

Класс: HmacImportParams

Добавлено в: v15.0.0
hmacImportParams.hash
История
Версия Изменения
v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v15.0.0

Добавлено в: v15.0.0

  • Тип: <string> | <Algorithm>

Если значение представлено как <string>, оно должно быть одним из следующих:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.

hmacImportParams.length
Добавлено в: v15.0.0
  • Тип: <number>

Необязательное количество битов в ключе HMAC. Этот параметр необязателен и в большинстве случаев его следует опускать.

hmacImportParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'HMAC'.

Класс: HmacKeyAlgorithm

Добавлено в: v15.0.0
hmacKeyAlgorithm.hash
Добавлено в: v15.0.0
  • Тип: <Algorithm>
hmacKeyAlgorithm.length
Добавлено в: v15.0.0
  • Тип: <number>

Длина ключа HMAC в битах.

hmacKeyAlgorithm.name
Добавлено в: v15.0.0
  • Тип: <string>

Класс: HmacKeyGenParams

Добавлено в: v15.0.0
hmacKeyGenParams.hash
История
Версия Изменения
v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v15.0.0

Добавлено в: v15.0.0

  • Тип: <string> | <Algorithm>

Если значение представлено как <string>, оно должно быть одним из следующих:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.

hmacKeyGenParams.length
Добавлено в: v15.0.0
  • Тип: <number>

Количество битов для генерации ключа HMAC. Если этот параметр опущен, длина определяется используемым алгоритмом хеширования. Параметр необязателен, и в большинстве случаев его следует опускать.

hmacKeyGenParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'HMAC'.

Класс: KeyAlgorithm

Добавлено в: v15.0.0
keyAlgorithm.name
Добавлено в: v15.0.0
  • Тип: <string>

Класс: KmacImportParams

Добавлено в: v24.8.0
kmacImportParams.length
Добавлено в: v24.8.0
  • Тип: <number>

Необязательное количество битов в ключе KMAC. Этот параметр необязателен и в большинстве случаев его следует опускать.

kmacImportParams.name
Добавлено в: v24.8.0
  • Тип: <string> Должно быть 'KMAC128' или 'KMAC256'.

Класс: KmacKeyAlgorithm

Добавлено в: v24.8.0
kmacKeyAlgorithm.length
Добавлено в: v24.8.0
  • Тип: <number>

Длина ключа KMAC в битах.

kmacKeyAlgorithm.name
Добавлено в: v24.8.0
  • Тип: <string>

Класс: KmacKeyGenParams

Добавлено в: v24.8.0
kmacKeyGenParams.length
Добавлено в: v24.8.0
  • Тип: <number>

Количество битов для генерации ключа KMAC. Если этот параметр опущен, длина определяется используемым алгоритмом KMAC. Параметр необязателен, и в большинстве случаев его следует опускать.

kmacKeyGenParams.name
Добавлено в: v24.8.0
  • Тип: <string> Должно быть 'KMAC128' или 'KMAC256'.

Класс: KmacParams

Добавлено в: v24.8.0
kmacParams.algorithm
Добавлено в: v24.8.0
  • Тип: <string> Должно быть 'KMAC128' или 'KMAC256'.
kmacParams.customization
Добавлено в: v24.8.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>

Элемент customization представляет необязательную строку настройки.

kmacParams.length
Добавлено в: v24.8.0
  • Тип: <number>

Длина выходных данных в байтах. Должна быть положительным целым числом.

Класс: Pbkdf2Params

Добавлено в: v15.0.0
pbkdf2Params.hash
История
Версия Изменения
v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v15.0.0

Добавлено в: v15.0.0

  • Тип: <string> | <Algorithm>

Если значение представлено как <string>, оно должно быть одним из следующих:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.

pbkdf2Params.iterations
Добавлено в: v15.0.0
  • Тип: <number>

Количество итераций, выполняемых алгоритмом PBKDF2 при получении битов.

pbkdf2Params.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'PBKDF2'.
pbkdf2Params.salt
Добавлено в: v15.0.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Должно содержать не менее 16 случайных или псевдослучайных байтов.

Класс: RsaHashedImportParams

Добавлено в: v15.0.0
rsaHashedImportParams.hash
История
Версия Изменения
v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v15.0.0

Добавлено в: v15.0.0

  • Тип: <string> | <Algorithm>

Если значение представлено как <string>, оно должно быть одним из следующих:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.

rsaHashedImportParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть одним из 'RSASSA-PKCS1-v1_5', 'RSA-PSS' или 'RSA-OAEP'.

Класс: RsaHashedKeyAlgorithm

Добавлено в: v15.0.0
rsaHashedKeyAlgorithm.hash
Добавлено в: v15.0.0
  • Тип: <Algorithm>
rsaHashedKeyAlgorithm.modulusLength
Добавлено в: v15.0.0
  • Тип: <number>

Длина модуля RSA в битах.

rsaHashedKeyAlgorithm.name
Добавлено в: v15.0.0
  • Тип: <string>
rsaHashedKeyAlgorithm.publicExponent
Добавлено в: v15.0.0
  • Тип: <Uint8Array>

Открытая экспонента RSA.

Класс: RsaHashedKeyGenParams

Добавлено в: v15.0.0
rsaHashedKeyGenParams.hash
История
Версия Изменения
v24.7.0

Теперь поддерживаются алгоритмы SHA-3.

v15.0.0

Добавлено в: v15.0.0

  • Тип: <string> | <Algorithm>

Если значение представлено как <string>, оно должно быть одним из следующих:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.

rsaHashedKeyGenParams.modulusLength
Добавлено в: v15.0.0
  • Тип: <number>

Длина модуля RSA в битах. В соответствии с рекомендациями, она должна быть не менее 2048.

rsaHashedKeyGenParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть одним из 'RSASSA-PKCS1-v1_5', 'RSA-PSS' или 'RSA-OAEP'.
rsaHashedKeyGenParams.publicExponent
Добавлено в: v15.0.0
  • Тип: <Uint8Array>

Открытая экспонента RSA. Это должен быть <Uint8Array>, содержащий беззнаковое целое число в порядке от старшего байта к младшему, которое должно умещаться в 32 бита. <Uint8Array> может содержать произвольное количество ведущих нулевых битов. Значение должно быть простым числом. Если нет причин использовать другое значение, используйте new Uint8Array([1, 0, 1]) (65537) в качестве открытой экспоненты.

Класс: RsaOaepParams

Добавлено в: v15.0.0
rsaOaepParams.label
Добавлено в: v15.0.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>

Дополнительный набор байтов, который не будет зашифрован, но будет связан с созданным шифротекстом.

Параметр rsaOaepParams.label является необязательным.

rsaOaepParams.name
Добавлено в: v15.0.0
  • Тип: <string> должно быть 'RSA-OAEP'.

Класс: RsaPssParams

Добавлено в: v15.0.0
rsaPssParams.name
Добавлено в: v15.0.0
  • Тип: <string> Должно быть 'RSA-PSS'.
rsaPssParams.saltLength
Добавлено в: v15.0.0
  • Тип: <number>

Длина (в байтах) используемой случайной соли.

Сноски

  1. Требуется OpenSSL >= 3.0 ↩ ↩2 ↩3

  2. Требуется OpenSSL >= 3.2 ↩ ↩2 ↩3

  3. Требуется OpenSSL >= 3.5 ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  4. См. раздел Современные алгоритмы в Web Cryptography 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

  5. См. раздел Защищённые эллиптические кривые в Web Cryptography API ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 ↩22 ↩23 ↩24

© 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/dist/latest-v24.x/docs/api/webcrypto.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API