Skip to content

Web Crypto API

[Verlauf]

VersionÄnderungen
v23.5.0Die Algorithmen Ed25519 und X25519 sind nun stabil.
v19.0.0Nicht mehr experimentell, mit Ausnahme der Algorithmen Ed25519, Ed448, X25519 und X448.
v20.0.0, v18.17.0Argumente werden nun wie in anderen Web Crypto API-Implementierungen gemäß ihren WebIDL-Definitionen gezwungen und validiert.
v18.4.0, v16.17.0Proprietäres 'node.keyObject' Import-/Exportformat entfernt.
v18.4.0, v16.17.0Proprietäre Algorithmen 'NODE-DSA', 'NODE-DH' und 'NODE-SCRYPT' entfernt.
v18.4.0, v16.17.0Algorithmen 'Ed25519', 'Ed448', 'X25519' und 'X448' hinzugefügt.
v18.4.0, v16.17.0Proprietäre Algorithmen 'NODE-ED25519' und 'NODE-ED448' entfernt.
v18.4.0, v16.17.0Proprietäre benannte Kurven 'NODE-X25519' und 'NODE-X448' aus dem 'ECDH'-Algorithmus entfernt.

[Stabil: 2 - Stabil]

Stabil: 2 Stabilität: 2 - Stabil

Node.js bietet eine Implementierung der Standard Web Crypto API.

Verwenden Sie globalThis.crypto oder require('node:crypto').webcrypto, um auf dieses Modul zuzugreifen.

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('Ich liebe Cupcakes')

  const digest = await subtle.sign(
    {
      name: 'HMAC',
    },
    key,
    message
  )
})()

Beispiele

Schlüssel generieren

Die Klasse <SubtleCrypto> kann verwendet werden, um symmetrische (geheime) Schlüssel oder asymmetrische Schlüsselpaare (öffentlicher Schlüssel und privater Schlüssel) zu generieren.

AES-Schlüssel

js
const { subtle } = globalThis.crypto

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

  return key
}

ECDSA-Schlüsselpaare

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

Ed25519/X25519-Schlüsselpaare

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

HMAC-Schlüssel

js
const { subtle } = globalThis.crypto

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

  return key
}

RSA-Schlüsselpaare

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

Ver- und Entschlüsselung

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

Exportieren und Importieren von Schlüsseln

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
}

Schlüssel ein- und auspacken

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
}

Signieren und Verifizieren

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
}

Ableiten von Bits und Schlüsseln

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
}

Algorithmus-Matrix

Die Tabelle listet die von der Node.js Web Crypto API-Implementierung unterstützten Algorithmen und die für jeden unterstützten APIs auf:

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

Klasse: Crypto

Hinzugefügt in: v15.0.0

globalThis.crypto ist eine Instanz der Klasse Crypto. Crypto ist ein Singleton, das Zugriff auf den Rest der Crypto-API bietet.

crypto.subtle

Hinzugefügt in: v15.0.0

Bietet Zugriff auf die SubtleCrypto-API.

crypto.getRandomValues(typedArray)

Hinzugefügt in: v15.0.0

Generiert kryptografisch starke Zufallswerte. Das gegebene typedArray wird mit Zufallswerten gefüllt, und eine Referenz auf typedArray wird zurückgegeben.

Das gegebene typedArray muss eine Integer-basierte Instanz von <TypedArray> sein, d.h. Float32Array und Float64Array werden nicht akzeptiert.

Ein Fehler wird geworfen, wenn das gegebene typedArray größer als 65.536 Bytes ist.

crypto.randomUUID()

Hinzugefügt in: v16.7.0

Generiert eine zufällige RFC 4122 Version 4 UUID. Die UUID wird mit einem kryptografischen Pseudozufallszahlengenerator generiert.

Klasse: CryptoKey

Hinzugefügt in: v15.0.0

cryptoKey.algorithm

Hinzugefügt in: v15.0.0

Ein Objekt, das den Algorithmus detailliert beschreibt, für den der Schlüssel verwendet werden kann, zusammen mit zusätzlichen algorithmusspezifischen Parametern.

Schreibgeschützt.

cryptoKey.extractable

Hinzugefügt in: v15.0.0

Wenn true, kann der <CryptoKey> entweder mit subtleCrypto.exportKey() oder subtleCrypto.wrapKey() extrahiert werden.

Schreibgeschützt.

cryptoKey.type

Hinzugefügt in: v15.0.0

  • Typ: <string> Einer von 'secret', 'private' oder 'public'.

Eine Zeichenfolge, die angibt, ob der Schlüssel ein symmetrischer ('secret') oder asymmetrischer ('private' oder 'public') Schlüssel ist.

cryptoKey.usages

Hinzugefügt in: v15.0.0

Ein Array von Zeichenketten, die die Operationen identifizieren, für die der Schlüssel verwendet werden darf.

Die möglichen Verwendungszwecke sind:

  • 'encrypt' - Der Schlüssel kann zum Verschlüsseln von Daten verwendet werden.
  • 'decrypt' - Der Schlüssel kann zum Entschlüsseln von Daten verwendet werden.
  • 'sign' - Der Schlüssel kann zum Erzeugen digitaler Signaturen verwendet werden.
  • 'verify' - Der Schlüssel kann zum Verifizieren digitaler Signaturen verwendet werden.
  • 'deriveKey' - Der Schlüssel kann zum Ableiten eines neuen Schlüssels verwendet werden.
  • 'deriveBits' - Der Schlüssel kann zum Ableiten von Bits verwendet werden.
  • 'wrapKey' - Der Schlüssel kann zum Wrappen eines anderen Schlüssels verwendet werden.
  • 'unwrapKey' - Der Schlüssel kann zum Entwrappen eines anderen Schlüssels verwendet werden.

Gültige Schlüsselverwendungen hängen vom Schlüsselalgorithmus ab (identifiziert durch cryptokey.algorithm.name).

Schlüsseltyp'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'

Klasse: CryptoKeyPair

Hinzugefügt in: v15.0.0

Das CryptoKeyPair ist ein einfaches Dictionary-Objekt mit publicKey- und privateKey-Eigenschaften, das ein asymmetrisches Schlüsselpaar darstellt.

cryptoKeyPair.privateKey

Hinzugefügt in: v15.0.0

cryptoKeyPair.publicKey

Hinzugefügt in: v15.0.0

Klasse: SubtleCrypto

Hinzugefügt in: v15.0.0

subtle.decrypt(algorithm, key, data)

Hinzugefügt in: v15.0.0

Mit der in algorithm angegebenen Methode und Parametern sowie dem von key bereitgestellten Schlüsselmaterial versucht subtle.decrypt() die bereitgestellten data zu entschlüsseln. Wenn dies erfolgreich ist, wird das zurückgegebene Promise mit einem <ArrayBuffer> aufgelöst, das das Klartext-Ergebnis enthält.

Die aktuell unterstützten Algorithmen sind:

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

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

[Historie]

VersionÄnderungen
v22.5.0, v20.17.0Der Parameter length ist nun für 'ECDH', 'X25519' und 'X448' optional.
v18.4.0, v16.17.0Die Algorithmen 'X25519' und 'X448' wurden hinzugefügt.
v15.0.0Hinzugefügt in: v15.0.0

Unter Verwendung der in algorithm angegebenen Methode und Parameter und des von baseKey bereitgestellten Schlüsselmaterials versucht subtle.deriveBits() length Bits zu erzeugen.

Wenn length nicht angegeben wird oder null ist, wird die maximale Anzahl von Bits für einen bestimmten Algorithmus erzeugt. Dies ist für die Algorithmen 'ECDH', 'X25519' und 'X448' zulässig. Für andere Algorithmen muss length eine Zahl sein.

Bei Erfolg wird das zurückgegebene Promise mit einem <ArrayBuffer> aufgelöst, das die erzeugten Daten enthält.

Die derzeit unterstützten Algorithmen sind:

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

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

[Historie]

VersionÄnderungen
v18.4.0, v16.17.0Die Algorithmen 'X25519' und 'X448' wurden hinzugefügt.
v15.0.0Hinzugefügt in: v15.0.0

Unter Verwendung der in algorithm angegebenen Methode und Parameter und des von baseKey bereitgestellten Schlüsselmaterials versucht subtle.deriveKey() einen neuen <CryptoKey> basierend auf der Methode und den Parametern in derivedKeyAlgorithm zu erzeugen.

Der Aufruf von subtle.deriveKey() entspricht dem Aufruf von subtle.deriveBits(), um rohes Schlüsselmaterial zu erzeugen, und dem anschließenden Übergeben des Ergebnisses an die Methode subtle.importKey() unter Verwendung der Parameter deriveKeyAlgorithm, extractable und keyUsages als Eingabe.

Die derzeit unterstützten Algorithmen sind:

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

subtle.digest(algorithm, data)

Hinzugefügt in: v15.0.0

Mit der durch algorithm identifizierten Methode versucht subtle.digest() einen Digest von data zu generieren. Bei Erfolg wird das zurückgegebene Promise mit einem <ArrayBuffer> aufgelöst, das den berechneten Digest enthält.

Wenn algorithm als <string> bereitgestellt wird, muss es eines der folgenden sein:

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

Wenn algorithm als <Object> bereitgestellt wird, muss es eine name-Eigenschaft haben, deren Wert einer der obigen ist.

subtle.encrypt(algorithm, key, data)

Hinzugefügt in: v15.0.0

Mit der Methode und den Parametern, die von algorithm angegeben werden, und dem von key bereitgestellten Schlüsselmaterial versucht subtle.encrypt() data zu verschlüsseln. Bei Erfolg wird das zurückgegebene Promise mit einem <ArrayBuffer> aufgelöst, das das verschlüsselte Ergebnis enthält.

Die derzeit unterstützten Algorithmen sind:

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

subtle.exportKey(format, key)

[Verlauf]

VersionÄnderungen
v18.4.0, v16.17.0Die Algorithmen 'Ed25519', 'Ed448', 'X25519' und 'X448' wurden hinzugefügt.
v15.9.0Der JWK-Export 'NODE-DSA' wurde entfernt.
v15.0.0Hinzugefügt in: v15.0.0

Exportiert den gegebenen Schlüssel in das angegebene Format, falls unterstützt.

Wenn der <CryptoKey> nicht extrahierbar ist, wird das zurückgegebene Promise abgelehnt.

Wenn format entweder 'pkcs8' oder 'spki' ist und der Export erfolgreich ist, wird das zurückgegebene Promise mit einem <ArrayBuffer> aufgelöst, das die exportierten Schlüsseldaten enthält.

Wenn format 'jwk' ist und der Export erfolgreich ist, wird das zurückgegebene Promise mit einem JavaScript-Objekt aufgelöst, das der JSON Web Key-Spezifikation entspricht.

Schlüsseltyp'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)

Hinzugefügt in: v15.0.0

Unter Verwendung der in algorithm bereitgestellten Methode und Parameter versucht subtle.generateKey(), neues Schlüsselmaterial zu generieren. Abhängig von der verwendeten Methode kann die Methode entweder einen einzelnen <CryptoKey> oder ein <CryptoKeyPair> generieren.

Die unterstützten Algorithmen zur Generierung von <CryptoKeyPair> (öffentlicher und privater Schlüssel) umfassen:

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

Die unterstützten Algorithmen zur Generierung von <CryptoKey> (geheimer Schlüssel) umfassen:

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

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

[Historie]

VersionÄnderungen
v18.4.0, v16.17.0Algorithmen 'Ed25519', 'Ed448', 'X25519' und 'X448' hinzugefügt.
v15.9.0'NODE-DSA' JWK-Import entfernt.
v15.0.0Hinzugefügt in: v15.0.0

Die Methode subtle.importKey() versucht, die bereitgestellten keyData als das angegebene format zu interpretieren, um eine <CryptoKey>-Instanz unter Verwendung der bereitgestellten Argumente algorithm, extractable und keyUsages zu erstellen. Wenn der Import erfolgreich ist, wird das zurückgegebene Promise mit dem erstellten <CryptoKey> aufgelöst.

Beim Import eines 'PBKDF2'-Schlüssels muss extractable false sein.

Die derzeit unterstützten Algorithmen sind:

Schlüsseltyp'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)

[Verlauf]

VersionÄnderungen
v18.4.0, v16.17.0Algorithmen 'Ed25519' und 'Ed448' hinzugefügt.
v15.0.0Hinzugefügt in: v15.0.0

Mit der Methode und den Parametern, die durch algorithm angegeben sind, und dem Schlüsselmaterial, das durch key bereitgestellt wird, versucht subtle.sign() eine kryptografische Signatur von data zu generieren. Bei Erfolg wird das zurückgegebene Promise mit einem <ArrayBuffer> aufgelöst, das die generierte Signatur enthält.

Die derzeit unterstützten Algorithmen umfassen:

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

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

Hinzugefügt in: v15.0.0

In der Kryptographie bezieht sich "das Umhüllen eines Schlüssels" auf das Exportieren und anschließende Verschlüsseln des Schlüsselmaterials. Die Methode subtle.unwrapKey() versucht, einen umhüllten Schlüssel zu entschlüsseln und eine <CryptoKey>-Instanz zu erstellen. Es entspricht dem Aufruf von subtle.decrypt() zuerst auf den verschlüsselten Schlüsseldaten (unter Verwendung der Argumente wrappedKey, unwrapAlgo und unwrappingKey als Eingabe) und dann dem Übergeben der Ergebnisse an die Methode subtle.importKey() unter Verwendung der Argumente unwrappedKeyAlgo, extractable und keyUsages als Eingabe. Bei Erfolg wird das zurückgegebene Promise mit einem <CryptoKey>-Objekt aufgelöst.

Die derzeit unterstützten Umhüllungsalgorithmen umfassen:

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

Die unterstützten Algorithmen für nicht umhüllte Schlüssel umfassen:

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

[History]

VersionÄnderungen
v18.4.0, v16.17.0Algorithmen 'Ed25519' und 'Ed448' hinzugefügt.
v15.0.0Hinzugefügt in: v15.0.0

Unter Verwendung der in algorithm angegebenen Methode und Parameter sowie des von key bereitgestellten Schlüsselmaterials versucht subtle.verify(), zu überprüfen, ob signature eine gültige kryptografische Signatur von data ist. Die zurückgegebene Promise wird entweder mit true oder false aufgelöst.

Die aktuell unterstützten Algorithmen sind:

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

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

Hinzugefügt in: v15.0.0

In der Kryptographie bezieht sich "einen Schlüssel wrappen" auf das Exportieren und anschließende Verschlüsseln des Schlüsselmaterials. Die Methode subtle.wrapKey() exportiert das Schlüsselmaterial in das durch format identifizierte Format und verschlüsselt es dann unter Verwendung der durch wrapAlgo spezifizierten Methode und Parameter sowie des von wrappingKey bereitgestellten Schlüsselmaterials. Es ist das Äquivalent zum Aufrufen von subtle.exportKey() mit format und key als Argumente und anschließenden Übergeben des Ergebnisses an die Methode subtle.encrypt() mit wrappingKey und wrapAlgo als Eingaben. Im Erfolgsfall wird die zurückgegebene Promise mit einem <ArrayBuffer> aufgelöst, das die verschlüsselten Schlüsseldaten enthält.

Die aktuell unterstützten Wrapping-Algorithmen sind:

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

Algorithmusparameter

Die Algorithmusparameterobjekte definieren die Methoden und Parameter, die von den verschiedenen <SubtleCrypto>-Methoden verwendet werden. Obwohl sie hier als "Klassen" beschrieben werden, sind sie einfache JavaScript-Dictionary-Objekte.

Klasse: AlgorithmIdentifier

Hinzugefügt in: v18.4.0, v16.17.0

algorithmIdentifier.name

Hinzugefügt in: v18.4.0, v16.17.0

Klasse: AesCbcParams

Hinzugefügt in: v15.0.0

aesCbcParams.iv

Hinzugefügt in: v15.0.0

Gibt den Initialisierungsvektor an. Er muss genau 16 Byte lang sein und sollte unvorhersehbar und kryptografisch zufällig sein.

aesCbcParams.name

Hinzugefügt in: v15.0.0

Klasse: AesCtrParams

Hinzugefügt in: v15.0.0

aesCtrParams.counter

Hinzugefügt in: v15.0.0

Der Anfangswert des Zählerblocks. Dieser muss genau 16 Byte lang sein.

Die AES-CTR-Methode verwendet die rechtesten length-Bits des Blocks als Zähler und die verbleibenden Bits als Nonce.

aesCtrParams.length

Hinzugefügt in: v15.0.0

  • Typ: <number> Die Anzahl der Bits in aesCtrParams.counter, die als Zähler verwendet werden sollen.

aesCtrParams.name

Hinzugefügt in: v15.0.0

Klasse: AesGcmParams

Hinzugefügt in: v15.0.0

aesGcmParams.additionalData

Hinzugefügt in: v15.0.0

Bei der AES-GCM-Methode sind die additionalData zusätzliche Eingaben, die nicht verschlüsselt, sondern in die Authentifizierung der Daten einbezogen werden. Die Verwendung von additionalData ist optional.

aesGcmParams.iv

Hinzugefügt in: v15.0.0

Der Initialisierungsvektor muss für jeden Verschlüsselungsvorgang mit einem bestimmten Schlüssel eindeutig sein.

Idealerweise handelt es sich um einen deterministischen 12-Byte-Wert, der so berechnet wird, dass er garantiert eindeutig ist für alle Aufrufe, die denselben Schlüssel verwenden. Alternativ kann der Initialisierungsvektor aus mindestens 12 kryptographisch zufälligen Bytes bestehen. Weitere Informationen zum Erstellen von Initialisierungsvektoren für AES-GCM finden Sie in Abschnitt 8 von NIST SP 800-38D.

aesGcmParams.name

Hinzugefügt in: v15.0.0

aesGcmParams.tagLength

Hinzugefügt in: v15.0.0

  • Typ: <number> Die Größe des generierten Authentifizierungs-Tags in Bits. Diese Werte müssen entweder 32, 64, 96, 104, 112, 120 oder 128 sein. Standard: 128.

Klasse: AesKeyGenParams

Hinzugefügt in: v15.0.0

aesKeyGenParams.length

Hinzugefügt in: v15.0.0

Die Länge des zu generierenden AES-Schlüssels. Dies muss entweder 128, 192 oder 256 sein.

aesKeyGenParams.name

Hinzugefügt in: v15.0.0

  • Typ: <string> Muss einer von 'AES-CBC', 'AES-CTR', 'AES-GCM' oder 'AES-KW' sein.

Klasse: EcdhKeyDeriveParams

Hinzugefügt in: v15.0.0

ecdhKeyDeriveParams.name

Hinzugefügt in: v15.0.0

  • Typ: <string> Muss 'ECDH', 'X25519' oder 'X448' sein.

ecdhKeyDeriveParams.public

Hinzugefügt in: v15.0.0

Die ECDH-Schlüsselableitung funktioniert, indem sie den privaten Schlüssel einer Partei und den öffentlichen Schlüssel einer anderen Partei als Eingabe verwendet, um ein gemeinsames, geteiltes Geheimnis zu generieren. Die Eigenschaft ecdhKeyDeriveParams.public ist auf den öffentlichen Schlüssel der anderen Partei gesetzt.

Klasse: EcdsaParams

Hinzugefügt in: v15.0.0

ecdsaParams.hash

Hinzugefügt in: v15.0.0

Wenn als <string> dargestellt, muss der Wert einer der folgenden sein:

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

Wenn als <Object> dargestellt, muss das Objekt eine name-Eigenschaft haben, deren Wert einer der oben aufgeführten Werte ist.

ecdsaParams.name

Hinzugefügt in: v15.0.0

Klasse: EcKeyGenParams

Hinzugefügt in: v15.0.0

ecKeyGenParams.name

Hinzugefügt in: v15.0.0

  • Typ: <string> Muss entweder 'ECDSA' oder 'ECDH' sein.

ecKeyGenParams.namedCurve

Hinzugefügt in: v15.0.0

  • Typ: <string> Muss entweder 'P-256', 'P-384' oder 'P-521' sein.

Klasse: EcKeyImportParams

Hinzugefügt in: v15.0.0

ecKeyImportParams.name

Hinzugefügt in: v15.0.0

  • Typ: <string> Muss entweder 'ECDSA' oder 'ECDH' sein.

ecKeyImportParams.namedCurve

Hinzugefügt in: v15.0.0

  • Typ: <string> Muss entweder 'P-256', 'P-384' oder 'P-521' sein.

Klasse: Ed448Params

Hinzugefügt in: v15.0.0

ed448Params.name

Hinzugefügt in: v18.4.0, v16.17.0

ed448Params.context

Hinzugefügt in: v18.4.0, v16.17.0

Das context-Element repräsentiert die optionalen Kontextdaten, die mit der Nachricht verknüpft werden sollen. Die Node.js Web Crypto API-Implementierung unterstützt nur Kontext mit der Länge Null, was dem Nichtbereitstellen von Kontext entspricht.

Klasse: HkdfParams

Hinzugefügt in: v15.0.0

hkdfParams.hash

Hinzugefügt in: v15.0.0

Wenn als <string> dargestellt, muss der Wert einer der folgenden sein:

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

Wenn als <Object> dargestellt, muss das Objekt eine name-Eigenschaft haben, deren Wert einer der oben aufgeführten Werte ist.

hkdfParams.info

Hinzugefügt in: v15.0.0

Stellt anwendungsspezifische kontextbezogene Eingaben für den HKDF-Algorithmus bereit. Dies kann eine Länge von Null haben, muss aber bereitgestellt werden.

hkdfParams.name

Hinzugefügt in: v15.0.0

hkdfParams.salt

Hinzugefügt in: v15.0.0

Der Salt-Wert verbessert die Stärke des HKDF-Algorithmus erheblich. Er sollte zufällig oder pseudozufällig sein und die gleiche Länge wie die Ausgabe der Digest-Funktion haben (wenn beispielsweise 'SHA-256' als Digest verwendet wird, sollte der Salt 256 Bit an zufälligen Daten sein).

Klasse: HmacImportParams

Hinzugefügt in: v15.0.0

hmacImportParams.hash

Hinzugefügt in: v15.0.0

Wenn als <string> dargestellt, muss der Wert einer der folgenden sein:

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

Wenn als <Object> dargestellt, muss das Objekt eine name-Eigenschaft haben, deren Wert einer der oben aufgeführten Werte ist.

hmacImportParams.length

Hinzugefügt in: v15.0.0

Die optionale Anzahl von Bits im HMAC-Schlüssel. Dies ist optional und sollte in den meisten Fällen weggelassen werden.

hmacImportParams.name

Hinzugefügt in: v15.0.0

Klasse: HmacKeyGenParams

Hinzugefügt in: v15.0.0

hmacKeyGenParams.hash

Hinzugefügt in: v15.0.0

Wenn als <string> dargestellt, muss der Wert einer der folgenden sein:

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

Wenn als <Object> dargestellt, muss das Objekt eine name-Eigenschaft haben, deren Wert einer der oben aufgeführten Werte ist.

hmacKeyGenParams.length

Hinzugefügt in: v15.0.0

Die Anzahl der Bits, die für den HMAC-Schlüssel generiert werden sollen. Wenn weggelassen, wird die Länge durch den verwendeten Hash-Algorithmus bestimmt. Dies ist optional und sollte in den meisten Fällen weggelassen werden.

hmacKeyGenParams.name

Hinzugefügt in: v15.0.0

Klasse: Pbkdf2Params

Hinzugefügt in: v15.0.0

pbkdb2Params.hash

Hinzugefügt in: v15.0.0

Wenn als <string> dargestellt, muss der Wert einer der folgenden sein:

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

Wenn als <Object> dargestellt, muss das Objekt eine name-Eigenschaft haben, deren Wert einer der oben aufgeführten Werte ist.

pbkdf2Params.iterations

Hinzugefügt in: v15.0.0

Die Anzahl der Iterationen, die der PBKDF2-Algorithmus beim Ableiten von Bits durchführen soll.

pbkdf2Params.name

Hinzugefügt in: v15.0.0

pbkdf2Params.salt

Hinzugefügt in: v15.0.0

Sollte mindestens 16 zufällige oder pseudozufällige Bytes enthalten.

Klasse: RsaHashedImportParams

Hinzugefügt in: v15.0.0

rsaHashedImportParams.hash

Hinzugefügt in: v15.0.0

Wenn als <string> dargestellt, muss der Wert einer der folgenden sein:

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

Wenn als <Object> dargestellt, muss das Objekt eine name-Eigenschaft haben, deren Wert einer der oben aufgeführten Werte ist.

rsaHashedImportParams.name

Hinzugefügt in: v15.0.0

  • Typ: <string> Muss einer von 'RSASSA-PKCS1-v1_5', 'RSA-PSS' oder 'RSA-OAEP' sein.

Klasse: RsaHashedKeyGenParams

Hinzugefügt in: v15.0.0

rsaHashedKeyGenParams.hash

Hinzugefügt in: v15.0.0

Wenn als <string> dargestellt, muss der Wert einer der folgenden sein:

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

Wenn als <Object> dargestellt, muss das Objekt eine name-Eigenschaft haben, deren Wert einer der oben aufgeführten Werte ist.

rsaHashedKeyGenParams.modulusLength

Hinzugefügt in: v15.0.0

Die Länge des RSA-Moduls in Bit. Als bewährte Methode sollte dies mindestens 2048 sein.

rsaHashedKeyGenParams.name

Hinzugefügt in: v15.0.0

  • Typ: <string> Muss einer von 'RSASSA-PKCS1-v1_5', 'RSA-PSS' oder 'RSA-OAEP' sein.

rsaHashedKeyGenParams.publicExponent

Hinzugefügt in: v15.0.0

Der öffentliche RSA-Exponent. Dies muss ein <Uint8Array> sein, das eine Big-Endian-Ganzzahl ohne Vorzeichen enthält, die in 32 Bit passen muss. Das <Uint8Array> kann eine beliebige Anzahl führender Nullbits enthalten. Der Wert muss eine Primzahl sein. Sofern kein Grund besteht, einen anderen Wert zu verwenden, verwenden Sie new Uint8Array([1, 0, 1]) (65537) als öffentlichen Exponenten.

Klasse: RsaOaepParams

Hinzugefügt in: v15.0.0

rsaOaepParams.label

Hinzugefügt in: v15.0.0

Eine zusätzliche Sammlung von Bytes, die nicht verschlüsselt werden, sondern an den erzeugten Chiffretext gebunden werden.

Der Parameter rsaOaepParams.label ist optional.

rsaOaepParams.name

Hinzugefügt in: v15.0.0

Klasse: RsaPssParams

Hinzugefügt in: v15.0.0

rsaPssParams.name

Hinzugefügt in: v15.0.0

rsaPssParams.saltLength

Hinzugefügt in: v15.0.0

Die Länge (in Bytes) des zu verwendenden zufälligen Salzes.

Fußnoten