Spec-Zone.ru › Node.js

Web Crypto API

История
Версия Изменения
v25.9.0

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

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, v20.19.3

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

v20.0.0, v18.17.0

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

v19.0.0

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

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

})();
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'

Методы:

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

Безопасные кривые в 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

Добавлено в: 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>

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

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

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 ✔
'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

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

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

cryptoKeyPair.privateKey

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

cryptoKeyPair.publicKey

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

Класс: 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, keyUsages)

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

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

  • decapsulationAlgorithm <string> | <Algorithm>
  • decapsulationKey <CryptoKey>
  • ciphertext <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
  • sharedKeyAlgorithm <string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams>
  • extractable <boolean>
  • keyUsages <string[]> См. раздел Назначения ключей.
  • Возвращает: <Promise> При успешном выполнении разрешается объектом <CryptoKey>.

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

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

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

subtle.decrypt(algorithm, key, data)

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

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

v24.7.0

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

  • algorithm <RsaOaepParams> | <AesCtrParams> | <AesCbcParams>
  • 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])

Добавлено в: v15.0.0
История
Версия Изменения
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'.

  • algorithm <EcdhKeyDeriveParams> | <HkdfParams> | <Pbkdf2Params>
  • 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, derivedKeyType, extractable, keyUsages)

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

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

v18.4.0, v16.17.0

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

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

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

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

subtle.digest(algorithm, data)

Добавлено в: v15.0.0
История
Версия Изменения
v25.9.0

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

v24.7.0

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

v24.7.0

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

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

Добавлено в: 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, keyUsages)

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

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

  • encapsulationAlgorithm <string> | <Algorithm>
  • encapsulationKey <CryptoKey>
  • sharedKeyAlgorithm <string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams>
  • extractable <boolean>
  • keyUsages <string[]> См. раздел Использование ключей.
  • Возвращает: <Promise> При успешном выполнении разрешается объектом {EncapsulatedKey}.

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

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

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

subtle.encrypt(algorithm, key, data)

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

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

v24.7.0

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

  • algorithm <RsaOaepParams> | <AesCtrParams> | <AesCbcParams>
  • 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)

Добавлено в: v15.0.0
История
Версия Изменения
v26.1.0

Добавлена поддержка формата JWK для типов ключей ML-KEM.

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'.

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

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

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

v24.7.0

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

v24.7.0

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

v24.7.0

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

  • 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> (секретного ключа) включают:

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

Добавлено в: v15.0.0
История
Версия Изменения
v26.1.0

Добавлена поддержка формата JWK для типов ключей ML-KEM.

v25.9.0

Импорт ключей ML-DSA и ML-KEM PKCS#8 без начального значения больше не поддерживается.

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'.

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

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

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

v24.7.0

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

v18.4.0, v16.17.0

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

  • algorithm <string> | <Algorithm> | <RsaPssParams> | <EcdsaParams>
  • 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, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable, keyUsages)

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

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

v24.7.0

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

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

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

  • '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'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'
  • 'X25519'
  • 'X448'5

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

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

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

v24.7.0

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

v18.4.0, v16.17.0

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

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

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

  • '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.wrapKey(format, key, wrappingKey, wrapAlgorithm)

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

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

v24.7.0

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

  • 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>, содержащим зашифрованные данные ключа.

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

  • '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 бит блока в качестве счетчика, а оставшиеся биты — в качестве одноразового номера.

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>

Представляет одноразовый номер, используемый в качестве соли при хешировании паролей.

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> Должно быть 'Ed448'5, 'ML-DSA-44'4, 'ML-DSA-65'4 или 'ML-DSA-87'4.
contextParams.context
Добавлено в: v24.7.0
История
Версия Изменения
v24.8.0

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

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

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

Класс: CShakeParams

Добавлено в: v24.7.0
История
Версия Изменения
v25.9.0

cShakeParams.length переименовано в cShakeParams.outputLength.

cShakeParams.name
Добавлено в: v24.7.0
  • Тип: <string> Должно быть 'cSHAKE128'4 или 'cSHAKE256'4.
cShakeParams.outputLength
Добавлено в: v25.9.0
  • Тип: <number> обозначает запрошенную длину выходных данных в битах.
cShakeParams.functionName
Добавлено в: v24.7.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>

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

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

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

Класс: 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
Добавлено в: v15.0.0
История
Версия Изменения
v24.7.0

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

  • Тип: <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
Добавлено в: v15.0.0
История
Версия Изменения
v24.7.0

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

  • Тип: <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
Добавлено в: v15.0.0
История
Версия Изменения
v24.7.0

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

  • Тип: <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
Добавлено в: v15.0.0
История
Версия Изменения
v24.7.0

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

  • Тип: <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>

Класс: KangarooTwelveParams

Добавлено в: v25.9.0
kangarooTwelveParams.customization
Добавлено в: v25.9.0
  • Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>

Необязательная строка настройки для KangarooTwelve.

kangarooTwelveParams.name
Добавлено в: v25.9.0
  • Тип: <string> Должно быть 'KT128'4 или 'KT256'4.
kangarooTwelveParams.outputLength
Добавлено в: v25.9.0
  • Тип: <number> задает требуемую длину выходных данных в битах.

Класс: 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
История
Версия Изменения
v25.9.0

Переименовано из kmacParams.length в kmacParams.outputLength.

kmacParams.algorithm
Добавлено в: v24.8.0
  • Тип: <string> Должно быть 'KMAC128' или 'KMAC256'.
kmacParams.outputLength
Добавлено в: v25.9.0
  • Тип: <number>

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

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

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

Класс: Pbkdf2Params

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

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

  • Тип: <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
Добавлено в: v15.0.0
История
Версия Изменения
v24.7.0

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

  • Тип: <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
Добавлено в: v15.0.0
История
Версия Изменения
v24.7.0

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

  • Тип: <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>

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

Класс: TurboShakeParams

Добавлено в: v25.9.0
turboShakeParams.domainSeparation
Добавлено в: v25.9.0
  • Тип: <number> | <undefined>

Необязательный байт разделения доменов (0x01–0x7f). По умолчанию используется 0x1f.

turboShakeParams.name
Добавлено в: v25.9.0
  • Тип: <string> Должно быть 'TurboSHAKE128'4 или 'TurboSHAKE256'4.
turboShakeParams.outputLength
Добавлено в: v25.9.0
  • Тип: <number> задаёт требуемую длину выходных данных в битах.

Сноски

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

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

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

  1. См. Современные алгоритмы в 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

  1. ↩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

  2. См. Безопасные кривые в 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

Spec-Zone.ru

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