Skip to content

Web Crypto API

[Historia]

VersiónCambios
v23.5.0Los algoritmos Ed25519 y X25519 ahora son estables.
v19.0.0Ya no es experimental excepto por los algoritmos Ed25519, Ed448, X25519 y X448.
v20.0.0, v18.17.0Los argumentos ahora se coaccionan y validan según sus definiciones WebIDL como en otras implementaciones de Web Crypto API.
v18.4.0, v16.17.0Se eliminó el formato de importación/exportación propietario 'node.keyObject'.
v18.4.0, v16.17.0Se eliminaron los algoritmos propietarios 'NODE-DSA', 'NODE-DH' y 'NODE-SCRYPT'.
v18.4.0, v16.17.0Se agregaron los algoritmos 'Ed25519', 'Ed448', 'X25519' y 'X448'.
v18.4.0, v16.17.0Se eliminaron los algoritmos propietarios 'NODE-ED25519' y 'NODE-ED448'.
v18.4.0, v16.17.0Se eliminaron las curvas con nombre propietarias 'NODE-X25519' y 'NODE-X448' del algoritmo 'ECDH'.

[Estable: 2 - Estable]

Estable: 2 Estabilidad: 2 - Estable

Node.js proporciona una implementación de la Web Crypto API estándar.

Use globalThis.crypto o require('node:crypto').webcrypto para acceder a este módulo.

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

})();

Ejemplos

Generando claves

La clase <SubtleCrypto> se puede usar para generar claves simétricas (secretas) o pares de claves asimétricas (clave pública y clave privada).

Claves AES

js
const { subtle } = globalThis.crypto;

async function generateAesKey(length = 256) {
  const key = await subtle.generateKey({
    name: 'AES-CBC',
    length,
  }, true, ['encrypt', 'decrypt']);

  return key;
}

Pares de claves ECDSA

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

Pares de claves Ed25519/X25519

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

Claves HMAC

js
const { subtle } = globalThis.crypto;

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

  return key;
}

Pares de claves RSA

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

Cifrado y descifrado

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

Exportación e importación de claves

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

Envolver y desenvolver claves

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

Firmar y verificar

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

Derivar bits y claves

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

Digest

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

Matriz de algoritmos

La tabla detalla los algoritmos compatibles con la implementación de la API de Crypto Web de Node.js y las API compatibles para cada uno:

AlgoritmogenerateKeyexportKeyimportKeyencryptdecryptwrapKeyunwrapKeyderiveBitsderiveKeysignverifydigest
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'RSA-OAEP'
'ECDSA'
'Ed25519'
'Ed448'
'ECDH'
'X25519'
'X448'
'AES-CTR'
'AES-CBC'
'AES-GCM'
'AES-KW'
'HMAC'
'HKDF'
'PBKDF2'
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'

Clase: Crypto

Agregado en: v15.0.0

globalThis.crypto es una instancia de la clase Crypto. Crypto es un singleton que proporciona acceso al resto de la API de crypto.

crypto.subtle

Agregado en: v15.0.0

Proporciona acceso a la API SubtleCrypto.

crypto.getRandomValues(typedArray)

Agregado en: v15.0.0

Genera valores aleatorios criptográficamente seguros. El typedArray dado se llena con valores aleatorios, y se devuelve una referencia a typedArray.

El typedArray dado debe ser una instancia basada en enteros de <TypedArray>, es decir, Float32Array y Float64Array no se aceptan.

Se lanzará un error si el typedArray dado es mayor que 65,536 bytes.

crypto.randomUUID()

Añadido en: v16.7.0

Genera un UUID aleatorio versión 4 RFC 4122. El UUID se genera utilizando un generador de números pseudoaleatorios criptográfico.

Clase: CryptoKey

Añadido en: v15.0.0

cryptoKey.algorithm

Añadido en: v15.0.0

Un objeto que detalla el algoritmo para el cual se puede utilizar la clave junto con parámetros adicionales específicos del algoritmo.

De solo lectura.

cryptoKey.extractable

Añadido en: v15.0.0

Cuando es true, la <CryptoKey> puede extraerse usando subtleCrypto.exportKey() o subtleCrypto.wrapKey().

De solo lectura.

cryptoKey.type

Añadido en: v15.0.0

  • Tipo: <string> Uno de 'secret', 'private' o 'public'.

Una cadena que identifica si la clave es simétrica ('secret') o asimétrica ('private' o 'public').

cryptoKey.usages

Añadido en: v15.0.0

Una matriz de cadenas que identifican las operaciones para las que se puede utilizar la clave.

Los posibles usos son:

  • 'encrypt' - La clave se puede utilizar para cifrar datos.
  • 'decrypt' - La clave se puede utilizar para descifrar datos.
  • 'sign' - La clave se puede utilizar para generar firmas digitales.
  • 'verify' - La clave se puede utilizar para verificar firmas digitales.
  • 'deriveKey' - La clave se puede utilizar para derivar una nueva clave.
  • 'deriveBits' - La clave se puede utilizar para derivar bits.
  • 'wrapKey' - La clave se puede utilizar para envolver otra clave.
  • 'unwrapKey' - La clave se puede utilizar para desenvolver otra clave.

Los usos válidos de la clave dependen del algoritmo de la clave (identificado por cryptokey.algorithm.name).

Tipo de Clave'encrypt''decrypt''sign''verify''deriveKey''deriveBits''wrapKey''unwrapKey'
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'ECDH'
'X25519'
'X448'
'ECDSA'
'Ed25519'
'Ed448'
'HDKF'
'HMAC'
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'

Clase: CryptoKeyPair

Agregada en: v15.0.0

CryptoKeyPair es un objeto de diccionario simple con propiedades publicKey y privateKey, que representa un par de claves asimétricas.

cryptoKeyPair.privateKey

Agregada en: v15.0.0

cryptoKeyPair.publicKey

Agregada en: v15.0.0

Clase: SubtleCrypto

Agregada en: v15.0.0

subtle.decrypt(algorithm, key, data)

Agregada en: v15.0.0

Usando el método y los parámetros especificados en algorithm y el material de clave proporcionado por key, subtle.decrypt() intenta descifrar los data proporcionados. Si tiene éxito, la promesa devuelta se resolverá con un <ArrayBuffer> que contiene el resultado del texto plano.

Los algoritmos actualmente admitidos incluyen:

  • 'RSA-OAEP'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'

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

[Historial]

VersiónCambios
v22.5.0, v20.17.0El parámetro length ahora es opcional para 'ECDH', 'X25519' y 'X448'.
v18.4.0, v16.17.0Se agregaron los algoritmos 'X25519' y 'X448'.
v15.0.0Agregado en: v15.0.0

Usando el método y los parámetros especificados en algorithm y el material de clave proporcionado por baseKey, subtle.deriveBits() intenta generar length bits.

Cuando length no se proporciona o es null, se genera el número máximo de bits para un algoritmo dado. Esto está permitido para los algoritmos 'ECDH', 'X25519' y 'X448', para otros algoritmos se requiere que length sea un número.

Si tiene éxito, la promesa devuelta se resolverá con un <ArrayBuffer> que contiene los datos generados.

Los algoritmos actualmente admitidos incluyen:

  • 'ECDH'
  • 'X25519'
  • 'X448'
  • 'HKDF'
  • 'PBKDF2'

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

[Historial]

VersiónCambios
v18.4.0, v16.17.0Se agregaron los algoritmos 'X25519' y 'X448'.
v15.0.0Agregado en: v15.0.0

Usando el método y los parámetros especificados en algorithm, y el material de clave proporcionado por baseKey, subtle.deriveKey() intenta generar una nueva <CryptoKey> basada en el método y los parámetros en derivedKeyAlgorithm.

Llamar a subtle.deriveKey() es equivalente a llamar a subtle.deriveBits() para generar material de clave sin procesar, luego pasar el resultado al método subtle.importKey() usando los parámetros deriveKeyAlgorithm, extractable y keyUsages como entrada.

Los algoritmos actualmente admitidos incluyen:

  • 'ECDH'
  • 'X25519'
  • 'X448'
  • 'HKDF'
  • 'PBKDF2'

subtle.digest(algorithm, data)

Añadido en: v15.0.0

Usando el método identificado por algorithm, subtle.digest() intenta generar un resumen de data. Si tiene éxito, la promesa devuelta se resuelve con un <ArrayBuffer> que contiene el resumen calculado.

Si algorithm se proporciona como un <string>, debe ser uno de:

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

Si algorithm se proporciona como un <Object>, debe tener una propiedad name cuyo valor sea uno de los anteriores.

subtle.encrypt(algorithm, key, data)

Añadido en: v15.0.0

Usando el método y los parámetros especificados por algorithm y el material de clave proporcionado por key, subtle.encrypt() intenta cifrar data. Si tiene éxito, la promesa devuelta se resuelve con un <ArrayBuffer> que contiene el resultado cifrado.

Los algoritmos actualmente compatibles incluyen:

  • 'RSA-OAEP'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'

subtle.exportKey(format, key)

[Historial]

VersiónCambios
v18.4.0, v16.17.0Se agregaron los algoritmos 'Ed25519', 'Ed448', 'X25519' y 'X448'.
v15.9.0Se eliminó la exportación JWK 'NODE-DSA'.
v15.0.0Agregado en: v15.0.0

Exporta la clave dada al formato especificado, si es compatible.

Si el <CryptoKey> no es extraíble, la promesa devuelta se rechazará.

Cuando format es 'pkcs8' o 'spki' y la exportación es exitosa, la promesa devuelta se resolverá con un <ArrayBuffer> que contiene los datos de la clave exportada.

Cuando format es 'jwk' y la exportación es exitosa, la promesa devuelta se resolverá con un objeto JavaScript que cumple con la especificación JSON Web Key.

Tipo de clave'spki''pkcs8''jwk''raw'
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'ECDH'
'ECDSA'
'Ed25519'
'Ed448'
'HDKF'
'HMAC'
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'

subtle.generateKey(algorithm, extractable, keyUsages)

Agregado en: v15.0.0

Usando el método y los parámetros proporcionados en algorithm, subtle.generateKey() intenta generar nuevo material de claves. Dependiendo del método utilizado, el método puede generar un solo <CryptoKey> o un <CryptoKeyPair>.

Los algoritmos de generación de <CryptoKeyPair> (clave pública y privada) admitidos incluyen:

  • 'RSASSA-PKCS1-v1_5'
  • 'RSA-PSS'
  • 'RSA-OAEP'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'
  • 'ECDH'
  • 'X25519'
  • 'X448'

Los algoritmos de generación de <CryptoKey> (clave secreta) admitidos incluyen:

  • 'HMAC'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'
  • 'AES-KW'

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

[Historial]

VersiónCambios
v18.4.0, v16.17.0Se agregaron los algoritmos 'Ed25519', 'Ed448', 'X25519' y 'X448'.
v15.9.0Se eliminó la importación JWK 'NODE-DSA'.
v15.0.0Agregado en: v15.0.0

El método subtle.importKey() intenta interpretar los keyData proporcionados como el format dado para crear una instancia <CryptoKey> utilizando los argumentos algorithm, extractable y keyUsages proporcionados. Si la importación es exitosa, la promesa devuelta se resolverá con el <CryptoKey> creado.

Si se importa una clave 'PBKDF2', extractable debe ser false.

Los algoritmos admitidos actualmente incluyen:

Tipo de clave'spki''pkcs8''jwk''raw'
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'ECDH'
'X25519'
'X448'
'ECDSA'
'Ed25519'
'Ed448'
'HDKF'
'HMAC'
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'

subtle.sign(algorithm, key, data)

[Historial]

VersiónCambios
v18.4.0, v16.17.0Se agregaron los algoritmos 'Ed25519' y 'Ed448'.
v15.0.0Agregado en: v15.0.0

Usando el método y los parámetros dados por algorithm y el material de clave provisto por key, subtle.sign() intenta generar una firma criptográfica de data. Si tiene éxito, la promesa devuelta se resuelve con un <ArrayBuffer> que contiene la firma generada.

Los algoritmos actualmente admitidos incluyen:

  • 'RSASSA-PKCS1-v1_5'
  • 'RSA-PSS'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'
  • 'HMAC'

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

Agregado en: v15.0.0

En criptografía, "envolver una clave" se refiere a exportar y luego cifrar el material de la clave. El método subtle.unwrapKey() intenta descifrar una clave envuelta y crear una instancia de <CryptoKey>. Es equivalente a llamar primero a subtle.decrypt() en los datos de la clave cifrada (usando los argumentos wrappedKey, unwrapAlgo y unwrappingKey como entrada) y luego pasar los resultados al método subtle.importKey() usando los argumentos unwrappedKeyAlgo, extractable y keyUsages como entradas. Si tiene éxito, la promesa devuelta se resuelve con un objeto <CryptoKey>.

Los algoritmos de envoltura actualmente admitidos incluyen:

  • 'RSA-OAEP'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'
  • 'AES-KW'

Los algoritmos de clave desenvuelta admitidos incluyen:

  • 'RSASSA-PKCS1-v1_5'
  • 'RSA-PSS'
  • 'RSA-OAEP'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'
  • 'ECDH'
  • 'X25519'
  • 'X448'
  • 'HMAC'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'
  • 'AES-KW'

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

[Historia]

VersiónCambios
v18.4.0, v16.17.0Se agregaron los algoritmos 'Ed25519' y 'Ed448'.
v15.0.0Agregado en: v15.0.0

Usando el método y los parámetros dados en algorithm y el material de claves proporcionado por key, subtle.verify() intenta verificar que signature sea una firma criptográfica válida de data. La promesa devuelta se resuelve con true o false.

Los algoritmos actualmente admitidos incluyen:

  • 'RSASSA-PKCS1-v1_5'
  • 'RSA-PSS'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'
  • 'HMAC'

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

Agregado en: v15.0.0

En criptografía, "envolver una clave" se refiere a exportar y luego cifrar el material de la clave. El método subtle.wrapKey() exporta el material de la clave al formato identificado por format, luego lo cifra utilizando el método y los parámetros especificados por wrapAlgo y el material de la clave proporcionado por wrappingKey. Es equivalente a llamar a subtle.exportKey() usando format y key como argumentos, luego pasar el resultado al método subtle.encrypt() usando wrappingKey y wrapAlgo como entradas. Si tiene éxito, la promesa devuelta se resolverá con un <ArrayBuffer> que contiene los datos de clave cifrados.

Los algoritmos de envoltura actualmente admitidos incluyen:

  • 'RSA-OAEP'
  • 'AES-CTR'
  • 'AES-CBC'
  • 'AES-GCM'
  • 'AES-KW'

Parámetros del algoritmo

Los objetos de parámetros del algoritmo definen los métodos y parámetros utilizados por los diversos métodos <SubtleCrypto>. Si bien aquí se describen como "clases", son simples objetos de diccionario de JavaScript.

Clase: AlgorithmIdentifier

Agregado en: v18.4.0, v16.17.0

algorithmIdentifier.name

Agregado en: v18.4.0, v16.17.0

Clase: AesCbcParams

Agregado en: v15.0.0

aesCbcParams.iv

Agregado en: v15.0.0

Proporciona el vector de inicialización. Debe tener exactamente 16 bytes de longitud y debe ser impredecible y criptográficamente aleatorio.

aesCbcParams.name

Agregado en: v15.0.0

Clase: AesCtrParams

Agregado en: v15.0.0

aesCtrParams.counter

Agregado en: v15.0.0

El valor inicial del bloque contador. Esto debe tener exactamente 16 bytes de longitud.

El método AES-CTR utiliza los length bits más a la derecha del bloque como contador y los bits restantes como nonce.

aesCtrParams.length

Agregado en: v15.0.0

  • Tipo: <number> El número de bits en aesCtrParams.counter que se utilizarán como contador.

aesCtrParams.name

Agregado en: v15.0.0

Clase: AesGcmParams

Agregado en: v15.0.0

aesGcmParams.additionalData

Agregado en: v15.0.0

Con el método AES-GCM, additionalData es una entrada extra que no se cifra, pero se incluye en la autenticación de los datos. El uso de additionalData es opcional.

aesGcmParams.iv

Agregado en: v15.0.0

El vector de inicialización debe ser único para cada operación de cifrado que utilice una clave determinada.

Idealmente, este es un valor determinista de 12 bytes que se calcula de tal manera que se garantice que sea único en todas las invocaciones que utilizan la misma clave. Alternativamente, el vector de inicialización puede consistir en al menos 12 bytes criptográficamente aleatorios. Para obtener más información sobre la construcción de vectores de inicialización para AES-GCM, consulte la Sección 8 de NIST SP 800-38D.

aesGcmParams.name

Agregado en: v15.0.0

aesGcmParams.tagLength

Agregado en: v15.0.0

  • Tipo: <number> El tamaño en bits de la etiqueta de autenticación generada. Estos valores deben ser uno de 32, 64, 96, 104, 112, 120, o 128. Predeterminado: 128.

Clase: AesKeyGenParams

Agregado en: v15.0.0

aesKeyGenParams.length

Agregado en: v15.0.0

La longitud de la clave AES que se generará. Debe ser 128, 192 o 256.

aesKeyGenParams.name

Agregado en: v15.0.0

  • Tipo: <string> Debe ser uno de 'AES-CBC', 'AES-CTR', 'AES-GCM' o 'AES-KW'

Clase: EcdhKeyDeriveParams

Agregado en: v15.0.0

ecdhKeyDeriveParams.name

Agregado en: v15.0.0

  • Tipo: <string> Debe ser 'ECDH', 'X25519' o 'X448'.

ecdhKeyDeriveParams.public

Agregado en: v15.0.0

La derivación de claves ECDH opera tomando como entrada la clave privada de una de las partes y la clave pública de la otra parte, utilizando ambas para generar un secreto compartido común. La propiedad ecdhKeyDeriveParams.public se establece en la clave pública de la otra parte.

Clase: EcdsaParams

Agregado en: v15.0.0

ecdsaParams.hash

Agregado en: v15.0.0

Si se representa como un <string>, el valor debe ser uno de:

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

Si se representa como un <Object>, el objeto debe tener una propiedad name cuyo valor sea uno de los valores enumerados anteriormente.

ecdsaParams.name

Agregado en: v15.0.0

Clase: EcKeyGenParams

Agregado en: v15.0.0

ecKeyGenParams.name

Agregado en: v15.0.0

  • Tipo: <string> Debe ser uno de 'ECDSA' o 'ECDH'.

ecKeyGenParams.namedCurve

Agregado en: v15.0.0

  • Tipo: <string> Debe ser uno de 'P-256', 'P-384', 'P-521'.

Clase: EcKeyImportParams

Agregado en: v15.0.0

ecKeyImportParams.name

Agregado en: v15.0.0

  • Tipo: <string> Debe ser uno de 'ECDSA' o 'ECDH'.

ecKeyImportParams.namedCurve

Agregado en: v15.0.0

  • Tipo: <string> Debe ser uno de 'P-256', 'P-384', 'P-521'.

Clase: Ed448Params

Agregado en: v15.0.0

ed448Params.name

Agregado en: v18.4.0, v16.17.0

ed448Params.context

Agregado en: v18.4.0, v16.17.0

El miembro context representa los datos de contexto opcionales que se asociarán con el mensaje. La implementación de la API Web Crypto de Node.js solo admite un contexto de longitud cero, que es equivalente a no proporcionar ningún contexto.

Clase: HkdfParams

Agregado en: v15.0.0

hkdfParams.hash

Agregado en: v15.0.0

Si se representa como <string>, el valor debe ser uno de:

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

Si se representa como <Object>, el objeto debe tener una propiedad name cuyo valor sea uno de los valores enumerados anteriormente.

hkdfParams.info

Agregado en: v15.0.0

Proporciona una entrada contextual específica de la aplicación al algoritmo HKDF. Esto puede tener longitud cero, pero debe proporcionarse.

hkdfParams.name

Agregado en: v15.0.0

hkdfParams.salt

Agregado en: v15.0.0

El valor de salt mejora significativamente la solidez del algoritmo HKDF. Debe ser aleatorio o pseudoaleatorio y debe tener la misma longitud que la salida de la función de resumen (por ejemplo, si se usa 'SHA-256' como resumen, el salt debe tener 256 bits de datos aleatorios).

Clase: HmacImportParams

Agregado en: v15.0.0

hmacImportParams.hash

Agregado en: v15.0.0

Si se representa como un <string>, el valor debe ser uno de los siguientes:

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

Si se representa como un <Object>, el objeto debe tener una propiedad name cuyo valor sea uno de los valores enumerados anteriormente.

hmacImportParams.length

Agregado en: v15.0.0

El número opcional de bits en la clave HMAC. Esto es opcional y debe omitirse en la mayoría de los casos.

hmacImportParams.name

Agregado en: v15.0.0

Clase: HmacKeyGenParams

Agregado en: v15.0.0

hmacKeyGenParams.hash

Agregado en: v15.0.0

Si se representa como un <string>, el valor debe ser uno de los siguientes:

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

Si se representa como un <Object>, el objeto debe tener una propiedad name cuyo valor sea uno de los valores enumerados anteriormente.

hmacKeyGenParams.length

Agregado en: v15.0.0

El número de bits para generar para la clave HMAC. Si se omite, la longitud estará determinada por el algoritmo hash utilizado. Esto es opcional y debe omitirse en la mayoría de los casos.

hmacKeyGenParams.name

Agregado en: v15.0.0

Clase: Pbkdf2Params

Agregado en: v15.0.0

pbkdb2Params.hash

Agregado en: v15.0.0

Si se representa como <string>, el valor debe ser uno de:

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

Si se representa como <Object>, el objeto debe tener una propiedad name cuyo valor sea uno de los valores enumerados anteriormente.

pbkdf2Params.iterations

Agregado en: v15.0.0

El número de iteraciones que el algoritmo PBKDF2 debe realizar al derivar bits.

pbkdf2Params.name

Agregado en: v15.0.0

pbkdf2Params.salt

Agregado en: v15.0.0

Debe tener al menos 16 bytes aleatorios o pseudoaleatorios.

Clase: RsaHashedImportParams

Agregado en: v15.0.0

rsaHashedImportParams.hash

Agregado en: v15.0.0

Si se representa como <string>, el valor debe ser uno de:

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

Si se representa como <Object>, el objeto debe tener una propiedad name cuyo valor sea uno de los valores enumerados anteriormente.

rsaHashedImportParams.name

Agregado en: v15.0.0

  • Tipo: <string> Debe ser uno de 'RSASSA-PKCS1-v1_5', 'RSA-PSS' o 'RSA-OAEP'.

Clase: RsaHashedKeyGenParams

Agregado en: v15.0.0

rsaHashedKeyGenParams.hash

Agregado en: v15.0.0

Si se representa como un <string>, el valor debe ser uno de:

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

Si se representa como un <Object>, el objeto debe tener una propiedad name cuyo valor sea uno de los valores enumerados anteriormente.

rsaHashedKeyGenParams.modulusLength

Agregado en: v15.0.0

La longitud en bits del módulo RSA. Como mejor práctica, esto debería ser al menos 2048.

rsaHashedKeyGenParams.name

Agregado en: v15.0.0

  • Tipo: <string> Debe ser uno de 'RSASSA-PKCS1-v1_5', 'RSA-PSS' o 'RSA-OAEP'.

rsaHashedKeyGenParams.publicExponent

Agregado en: v15.0.0

El exponente público RSA. Esto debe ser un <Uint8Array> que contenga un entero sin signo big-endian que debe caber dentro de 32 bits. El <Uint8Array> puede contener un número arbitrario de bits cero iniciales. El valor debe ser un número primo. A menos que haya una razón para usar un valor diferente, use new Uint8Array([1, 0, 1]) (65537) como exponente público.

Clase: RsaOaepParams

Agregado en: v15.0.0

rsaOaepParams.label

Agregado en: v15.0.0

Una colección adicional de bytes que no se cifrará, pero se vinculará al texto cifrado generado.

El parámetro rsaOaepParams.label es opcional.

rsaOaepParams.name

Agregado en: v15.0.0

Clase: RsaPssParams

Agregado en: v15.0.0

rsaPssParams.name

Agregado en: v15.0.0

rsaPssParams.saltLength

Agregado en: v15.0.0

La longitud (en bytes) de la sal aleatoria a utilizar.

Notas al pie