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 generiertenCryptoKey
für symmetrische Algorithmen oder einemCryptoKeyPair
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 generiertenCryptoKey
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 einemCryptoKey
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 einemCryptoKey
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:
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
Loading…
Siehe auch
- Web Crypto API
- Nicht-kryptografische Verwendungen von SubtleCrypto
- Websicherheit
- Datenschutz, Berechtigungen und Informationssicherheit
Crypto
undCrypto.subtle
.- Crypto 101: ein Einführungskurs in die Kryptografie.