Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

SubtleCrypto

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨September 2017⁩.

* Some parts of this feature may have varying levels of support.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die SubtleCrypto-Schnittstelle der Web Crypto API bietet eine Reihe von niedrigstufigen kryptografischen Funktionen.

Der Schnittstellenname enthält den Begriff „subtil“, um anzuzeigen, dass viele ihrer Algorithmen subtile Verwendungsanforderungen haben und daher sorgfältig verwendet werden müssen, um geeignete Sicherheitsgarantien zu bieten.

Eine Instanz von SubtleCrypto ist als die subtle-Eigenschaft der Crypto-Schnittstelle verfügbar, die ihrerseits in Fenstern über die Window.crypto-Eigenschaft und in Workern über die WorkerGlobalScope.crypto-Eigenschaft verfügbar ist.

Warnung: Diese API bietet eine Reihe von niedrigstufigen kryptografischen Primitiven. Es ist sehr einfach, sie falsch zu verwenden, und die damit verbundenen Fallstricke können sehr subtil sein.

Selbst wenn Sie die grundlegenden kryptografischen Funktionen korrekt verwenden, sind sicheres Schlüsselmanagement und das Gesamtdesign von Sicherheitssystemen extrem schwer richtig zu gestalten und liegen in der Regel im Bereich von Spezialisten für Sicherheit.

Fehler im Design und in der Implementierung von Sicherheitssystemen können die Sicherheit des Systems völlig unwirksam machen.

Bitte lernen und experimentieren Sie, aber garantieren oder implizieren Sie nicht die Sicherheit Ihrer Arbeit, bevor eine sachkundige Person in diesem Fachgebiet sie gründlich überprüft hat. Der Crypto 101-Kurs kann ein guter Ausgangspunkt sein, um über das Design und die Implementierung sicherer Systeme zu lernen.

Instanz-Eigenschaften

Diese Schnittstelle erbt keine Eigenschaften, da sie keine übergeordnete Schnittstelle hat.

Instanz-Methoden

Diese Schnittstelle erbt keine Methoden, da sie keine übergeordnete Schnittstelle hat.

SubtleCrypto.encrypt()

Gibt ein Promise zurück, das mit den verschlüsselten Daten erfüllt wird, die dem angegebenen Klartext, Algorithmus und Schlüssel entsprechen.

SubtleCrypto.decrypt()

Gibt ein Promise zurück, das mit den Klartextdaten erfüllt wird, die dem verschlüsselten Text, Algorithmus und Schlüssel entsprechen, die als Parameter angegeben sind.

SubtleCrypto.sign()

Gibt ein Promise zurück, das mit der Signatur erfüllt wird, die dem Text, Algorithmus und Schlüssel entspricht, die als Parameter angegeben sind.

SubtleCrypto.verify()

Gibt ein Promise zurück, das mit einem booleschen Wert erfüllt wird, der angibt, ob die als Parameter angegebene Signatur mit dem Text, Algorithmus und Schlüssel übereinstimmt, die ebenfalls als Parameter angegeben sind.

SubtleCrypto.digest()

Gibt ein Promise zurück, das mit einem Digest erfüllt wird, der aus dem angegebenen Algorithmus und Text generiert wurde.

SubtleCrypto.generateKey()

Gibt ein Promise zurück, das mit einem neu generierten CryptoKey für symmetrische Algorithmen oder einem CryptoKeyPair erfüllt wird, das zwei neu generierte Schlüssel für asymmetrische Algorithmen enthält, die dem Algorithmus, den Verwendungen und der Extraktionsfähigkeit entsprechen, die als Parameter angegeben wurden.

SubtleCrypto.deriveKey()

Gibt ein Promise zurück, das mit einem neu generierten CryptoKey erfüllt wird, der aus dem Master-Schlüssel und dem spezifischen Algorithmus abgeleitet wurde, die als Parameter angegeben sind.

SubtleCrypto.deriveBits()

Gibt ein Promise zurück, das mit einem neu generierten Puffer von pseudorandomisierten Bits erfüllt wird, die aus dem Master-Schlüssel und dem spezifischen Algorithmus abgeleitet wurden, die als Parameter angegeben sind.

SubtleCrypto.importKey()

Gibt ein Promise zurück, das mit einem CryptoKey erfüllt wird, der dem Format, dem Algorithmus, den rohen Schlüsseldaten, den Verwendungen und der Extraktionsfähigkeit entspricht, die als Parameter angegeben sind.

SubtleCrypto.exportKey()

Gibt ein Promise zurück, das mit den rohen Schlüsseldaten erfüllt wird, die den Schlüssel im angeforderten Format enthalten.

SubtleCrypto.wrapKey()

Gibt ein Promise zurück, das mit einem umschlossenen symmetrischen Schlüssel erfüllt wird, um ihn in unsicheren Umgebungen zu verwenden (Übertragung und Speicherung). Der umschlossene Schlüssel entspricht dem im gegebenen Parameter angegebenen Format, und das Umschließen wird durch den gegebenen Umschlüssel mit dem angegebenen Algorithmus durchgeführt.

SubtleCrypto.unwrapKey()

Gibt ein Promise zurück, das mit einem CryptoKey erfüllt wird, der dem im Parameter angegebenen umschlossenen Schlüssel entspricht.

Verwendung von SubtleCrypto

Wir können die von dieser API implementierten Funktionen in zwei Gruppen aufteilen: kryptografische Funktionen und Schlüsselmanagement-Funktionen.

Kryptografische Funktionen

Dies sind die Funktionen, die Sie verwenden können, um Sicherheitsmerkmale wie Vertraulichkeit und Authentifizierung in einem System zu implementieren. Die SubtleCrypto-API bietet die folgenden kryptografischen Funktionen:

  • sign() und verify(): Erstellen und Überprüfen digitaler Signaturen.
  • encrypt() und decrypt(): Verschlüsseln und Entschlüsseln von Daten.
  • digest(): Erstellen eines festgelegten, kollisionsresistenten Digests von Daten.

Schlüsselmanagement-Funktionen

Mit Ausnahme von digest() verwenden alle kryptografischen Funktionen in der API kryptografische Schlüssel. In der SubtleCrypto-API wird ein kryptografischer Schlüssel durch ein CryptoKey-Objekt dargestellt. Um Operationen wie das Signieren und Verschlüsseln durchzuführen, übergeben Sie ein CryptoKey-Objekt an die sign() oder encrypt() Funktion.

Erzeugen und Ableiten von Schlüsseln

Die Funktionen generateKey() und deriveKey() erstellen beide ein neues CryptoKey-Objekt.

Der Unterschied ist, dass generateKey() bei jedem Aufruf einen neuen, unterschiedlichen Schlüsselwert generiert, während deriveKey() einen Schlüssel aus einem anfänglichen Schlüsselmaterial ableitet. Wenn Sie das gleiche Schlüsselmaterial zwei separaten Aufrufen von deriveKey() zur Verfügung stellen, erhalten Sie zwei CryptoKey-Objekte, die denselben zugrunde liegenden Wert haben. Dies ist nützlich, wenn Sie beispielsweise einen Verschlüsselungsschlüssel aus einem Passwort ableiten und später denselben Schlüssel aus demselben Passwort ableiten möchten, um die Daten zu entschlüsseln.

Importieren und Exportieren von Schlüsseln

Um Schlüssel außerhalb Ihrer App verfügbar zu machen, müssen Sie den Schlüssel exportieren, was die Funktion exportKey() tut. Sie können eines von mehreren Exportformaten wählen.

Das Gegenteil von exportKey() ist importKey(). Sie können Schlüssel aus anderen Systemen importieren, und die Unterstützung für Standardformate wie PKCS #8 und JSON Web Key hilft Ihnen dabei. Die Funktion exportKey() exportiert den Schlüssel in einem unverschlüsselten Format.

Wenn der Schlüssel sensitiv ist, sollten Sie wrapKey() verwenden, die den Schlüssel exportiert und ihn dann mit einem anderen Schlüssel verschlüsselt; die API nennt dies einen "Key-Wrapping-Schlüssel".

Das Gegenteil von wrapKey() ist unwrapKey(), das den Schlüssel entschlüsselt und dann importiert.

Speichern von Schlüsseln

CryptoKey ist ein serialisierbares Objekt, das es ermöglicht, Schlüssel mit den Standard-Web-Speicher-APIs zu speichern und abzurufen.

Die Spezifikation erwartet, dass die meisten Entwickler die IndexedDB API verwenden, um CryptoKey-Objekte gegen einen klassischen Schlüsselstring-Identifikator zu speichern, der für die Anwendung sinnvoll ist, sowie alle anderen Metadaten, die sie nützlich finden. Dies ermöglicht das Speichern und Abrufen des CryptoKey, ohne das zugrunde liegende Schlüsselmateriel der Anwendung oder der JavaScript-Umgebung auszusetzen.

Unterstützte Algorithmen

Die von der Web Crypto API bereitgestellten kryptografischen Funktionen können durch einen oder mehrere verschiedene kryptografische Algorithmen ausgeführt werden: das algorithm-Argument der Funktion gibt an, welcher Algorithmus verwendet werden soll. Einige Algorithmen benötigen zusätzliche Parameter: In diesen Fällen ist das algorithm-Argument ein Wörterbuchobjekt, das die zusätzlichen Parameter enthält.

Die folgende Tabelle fasst zusammen, welche Algorithmen für welche kryptografischen Operationen geeignet sind:

sign
verify
encrypt
decrypt
digest deriveBits
deriveKey
wrapKey
unwrapKey
generateKey
exportKey
importKey
RSASSA-PKCS1-v1_5
RSA-PSS
ECDSA
Ed25519
HMAC
RSA-OAEP
AES-CTR
AES-CBC
AES-GCM
AES-KW
SHA-1
SHA-256
SHA-384
SHA-512
ECDH
X25519
HKDF
PBKDF2

Spezifikationen

Specification
Web Cryptography Level 2
# subtlecrypto-interface

Browser-Kompatibilität

Siehe auch