SubtleCrypto
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die SubtleCrypto
-Schnittstelle der Web Crypto API bietet eine Reihe von niedrigstufigen kryptografischen Funktionen.
Der Name der Schnittstelle enthält den Begriff "subtle" (subtil), um anzuzeigen, dass viele ihrer Algorithmen subtile Anforderungen an die Verwendung haben und daher mit Vorsicht verwendet werden müssen, um geeignete Sicherheitsgarantien zu bieten.
Eine Instanz von SubtleCrypto
ist als die subtle
-Eigenschaft der Crypto
-Schnittstelle verfügbar, die wiederum 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 Fallstricke können sehr subtil sein.
Selbst wenn Sie die grundlegenden kryptografischen Funktionen korrekt verwenden, sind sichere Schlüsselverwaltung und das Gesamtdesign des Sicherheitssystems extrem schwer richtig hinzubekommen und gehören im Allgemeinen in das Gebiet von Sicherheitsexperten.
Fehler im Design und in der Implementierung des Sicherheitssystems können die Sicherheit des Systems vollständig unwirksam machen.
Bitte lernen und experimentieren Sie, aber garantieren oder implizieren Sie nicht die Sicherheit Ihrer Arbeit, bevor ein Experte auf diesem Gebiet sie gründlich überprüft hat. Der Crypto 101 Kurs kann ein großartiger Einstieg in das Design und die Implementierung sicherer Systeme sein.
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 erfüllt wird mit den verschlüsselten Daten entsprechend dem Klartext, dem Algorithmus und dem Schlüssel, die als Parameter übergeben wurden. SubtleCrypto.decrypt()
-
Gibt ein
Promise
zurück, das erfüllt wird mit den Klartextdaten entsprechend dem verschlüsselten Text, dem Algorithmus und dem Schlüssel, die als Parameter übergeben wurden. SubtleCrypto.sign()
-
Gibt ein
Promise
zurück, das erfüllt wird mit der Signatur, die dem Text, dem Algorithmus und dem Schlüssel entspricht, die als Parameter übergeben wurden. SubtleCrypto.verify()
-
Gibt ein
Promise
zurück, das erfüllt wird mit einem booleschen Wert, der angibt, ob die als Parameter übergebene Signatur dem Text, dem Algorithmus und dem Schlüssel entspricht, die ebenfalls als Parameter übergeben wurden. SubtleCrypto.digest()
-
Gibt ein
Promise
zurück, das erfüllt wird mit einem Digest, der durch den Algorithmus und den Text generiert wird, die als Parameter übergeben wurden. SubtleCrypto.generateKey()
-
Gibt ein
Promise
zurück, das erfüllt wird mit einem neu generiertenCryptoKey
, für symmetrische Algorithmen, oder einemCryptoKeyPair
, das zwei neu generierte Schlüssel für asymmetrische Algorithmen enthält. Diese entsprechen dem Algorithmus, den Verwendungen und der Extraktionsfähigkeit, die als Parameter übergeben wurden. SubtleCrypto.deriveKey()
-
Gibt ein
Promise
zurück, das erfüllt wird mit einem neu generiertenCryptoKey
, der aus dem Master-Key und dem spezifischen Algorithmus abgeleitet wird, die als Parameter übergeben wurden. SubtleCrypto.deriveBits()
-
Gibt ein
Promise
zurück, das erfüllt wird mit einem neu generierten Puffer von pseudo-zufälligen Bits, die aus dem Master-Key und dem spezifischen Algorithmus abgeleitet werden, die als Parameter übergeben wurden. SubtleCrypto.importKey()
-
Gibt ein
Promise
zurück, das erfüllt wird mit einemCryptoKey
, der dem Format, dem Algorithmus, den Rohschlüsseldaten, den Verwendungen und der Extraktionsfähigkeit entspricht, die als Parameter übergeben wurden. SubtleCrypto.exportKey()
-
Gibt ein
Promise
zurück, das erfüllt wird mit den Rohschlüsseldaten, die den Schlüssel im gewünschten Format enthalten. SubtleCrypto.wrapKey()
-
Gibt ein
Promise
zurück, das erfüllt wird mit einem verpackten symmetrischen Schlüssel zur Verwendung (Übertragung und Speicherung) in unsicheren Umgebungen. Der verpackte Schlüssel entspricht dem im Parameter angegebenen Format und die Verpackung erfolgt durch den angegebenen Verpackungsschlüssel unter Verwendung des angegebenen Algorithmus. SubtleCrypto.unwrapKey()
-
Gibt ein
Promise
zurück, das erfüllt wird mit einemCryptoKey
, der dem im Parameter angegebenen verpackten Schlüssel entspricht.
Verwendung von SubtleCrypto
Die von dieser API implementierten Funktionen können in zwei Gruppen unterteilt werden: Kryptografiefunktionen und Schlüsselverwaltungsfunktionen.
Kryptografiefunktionen
Dies sind die Funktionen, die Sie verwenden können, um Sicherheitsfunktionen wie Datenschutz und Authentifizierung in einem System zu implementieren. Die SubtleCrypto
-API bietet die folgenden Kryptografiefunktionen:
Schlüsselverwaltungsfunktionen
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 Signieren und Verschlüsseln durchzuführen, übergeben Sie ein CryptoKey
-Objekt in die Funktion sign()
oder encrypt()
.
Generieren und Ableiten von Schlüsseln
Die Funktionen generateKey()
und deriveKey()
erstellen beide ein neues CryptoKey
-Objekt.
Der Unterschied besteht darin, dass generateKey()
bei jedem Aufruf einen neuen, einzigartigen Schlüsselwert erzeugt, während deriveKey()
einen Schlüssel aus einem anfänglichen Schlüsselmateriel ableitet. Wenn Sie dasselbe Schlüsselmateriel in zwei separate Aufrufe von deriveKey()
geben, erhalten Sie zwei CryptoKey
-Objekte mit demselben zugrunde liegenden Wert. 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, und dafür ist exportKey()
da. Sie können eines von mehreren Exportformaten auswählen.
Das Gegenteil von exportKey()
ist importKey()
. Sie können Schlüssel aus anderen Systemen importieren, und die Unterstützung von Standardformaten wie PKCS #8 und JSON Web Key hilft Ihnen dabei. Die exportKey()
-Funktion exportiert den Schlüssel in einem unverschlüsselten Format.
Wenn der Schlüssel sensitiv ist, sollten Sie wrapKey()
verwenden, welche den Schlüssel exportiert und dann mit einem anderen Schlüssel verschlüsselt; die API nennt dies einen "Schlüssel-Umwickel-Schlüssel".
Das Gegenteil von wrapKey()
ist unwrapKey()
, welche den Schlüssel entschlüsselt und dann importiert.
Speicherung von Schlüsseln
CryptoKey
ist ein serialisierbares Objekt, das es ermöglicht, Schlüssel mithilfe standardmäßiger Web-Storage-APIs zu speichern und abzurufen.
Die Spezifikation geht davon aus, dass die meisten Entwickler die IndexedDB-API verwenden, um CryptoKey
-Objekte anhand eines Schlüsselzeichenspeichers, der für die Anwendung sinnvoll ist, sowie anderer nützlicher Metadaten zu speichern. Dies ermöglicht die Speicherung und den Abruf des CryptoKey
, ohne dass das zugrunde liegende Schlüsselmateriel der Anwendung oder der JavaScript-Umgebung offengelegt werden muss.
Unterstützte Algorithmen
Die kryptografischen Funktionen der Web Crypto API können von einem oder mehreren verschiedenen kryptografischen Algorithmen durchgefü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 kryptografische 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 API # subtlecrypto-interface |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Web Crypto API
- Nicht-kryptographische Nutzungen von SubtleCrypto
- Web-Sicherheit
- Datenschutz, Berechtigungen und Informationssicherheit
Crypto
undCrypto.subtle
.- Crypto 101: ein Einführungskurs in die Kryptographie.