Web Crypto API¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Node.js реализует стандарт Web Crypto API.
Доступ: globalThis.crypto или require('node:crypto').webcrypto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Современные алгоритмы в Web Cryptography API¶
Стабильность: 1.1 – Активная разработка
Изменения возможны; при необходимости проверяйте поведение в документации upstream.
Node.js поддерживает следующие возможности из предложения WICG Modern Algorithms in the Web Cryptography API:
Алгоритмы:
'AES-OCB'3'Argon2d'4'Argon2i'4'Argon2id'4'ChaCha20-Poly1305''cSHAKE128''cSHAKE256''KMAC128'3'KMAC256'3'KT128''KT256''ML-DSA-44'5'ML-DSA-65'5'ML-DSA-87'5'ML-KEM-512'5'ML-KEM-768'5'ML-KEM-1024'5'SHA3-256''SHA3-384''SHA3-512''TurboSHAKE128''TurboSHAKE256'
Форматы ключей:
'raw-public''raw-secret''raw-seed'
Методы:
subtle.decapsulateBits()subtle.decapsulateKey()subtle.encapsulateBits()subtle.encapsulateKey()subtle.getPublicKey()SubtleCrypto.supports()
Безопасные кривые в Web Cryptography API¶
Стабильность: 1.1 – Активная разработка
Node.js поддерживает следующие возможности из предложения WICG Secure Curves in the Web Cryptography API:
Алгоритмы:
'Ed448''X448'
Примеры¶
Генерация ключей¶
Класс SubtleCrypto позволяет создавать симметричные (секретные) ключи и асимметричные пары (открытый и закрытый ключ).
Ключи AES¶
1 2 3 4 5 6 7 8 9 10 | |
Пары ключей ECDSA¶
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Пары ключей Ed25519/X25519¶
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Ключи HMAC¶
1 2 3 4 5 6 7 8 9 10 | |
Пары ключей RSA¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Шифрование и расшифрование¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
Экспорт и импорт ключей¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Упаковка и распаковка ключей¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
Подпись и проверка¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Получение битов и ключей¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
Хеш (digest)¶
1 2 3 4 5 6 7 | |
Проверка поддержки алгоритмов в рантайме¶
SubtleCrypto.supports() позволяет определять возможности в Web Crypto API и выяснять, поддерживается ли заданный идентификатор алгоритма (вместе с его параметрами) для указанной операции.
В этом примере из пароля выводится ключ с помощью Argon2, если доступен, иначе PBKDF2; затем с ним шифруется и расшифровывается текст с помощью AES-OCB, если доступен, иначе AES-GCM.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | |
Матрица алгоритмов¶
Таблицы описывают алгоритмы, поддерживаемые реализацией Web Crypto API в Node.js, и доступные для каждого из них API:
API управления ключами¶
| Алгоритм | subtle.generateKey() | subtle.exportKey() | subtle.importKey() | subtle.getPublicKey() |
|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ✔ | |
'AES-CTR' | ✔ | ✔ | ✔ | |
'AES-GCM' | ✔ | ✔ | ✔ | |
'AES-KW' | ✔ | ✔ | ✔ | |
'AES-OCB' | ✔ | ✔ | ✔ | |
'Argon2d' | ✔ | |||
'Argon2i' | ✔ | |||
'Argon2id' | ✔ | |||
'ChaCha20-Poly1305'2 | ✔ | ✔ | ✔ | |
'ECDH' | ✔ | ✔ | ✔ | ✔ |
'ECDSA' | ✔ | ✔ | ✔ | ✔ |
'Ed25519' | ✔ | ✔ | ✔ | ✔ |
'Ed448'1 | ✔ | ✔ | ✔ | ✔ |
'HKDF' | ✔ | |||
'HMAC' | ✔ | ✔ | ✔ | |
'KMAC128'2 | ✔ | ✔ | ✔ | |
'KMAC256'2 | ✔ | ✔ | ✔ | |
'ML-DSA-44'2 | ✔ | ✔ | ✔ | ✔ |
'ML-DSA-65'2 | ✔ | ✔ | ✔ | ✔ |
'ML-DSA-87'2 | ✔ | ✔ | ✔ | ✔ |
'ML-KEM-512'2 | ✔ | ✔ | ✔ | ✔ |
'ML-KEM-768'2 | ✔ | ✔ | ✔ | ✔ |
'ML-KEM-1024'2 | ✔ | ✔ | ✔ | ✔ |
'PBKDF2' | ✔ | |||
'RSA-OAEP' | ✔ | ✔ | ✔ | ✔ |
'RSA-PSS' | ✔ | ✔ | ✔ | ✔ |
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ | ✔ |
'X25519' | ✔ | ✔ | ✔ | ✔ |
'X448'1 | ✔ | ✔ | ✔ | ✔ |
API криптографических операций¶
Условные обозначения столбцов:
- Шифрование:
subtle.encrypt()/subtle.decrypt() - Подписи и MAC:
subtle.sign()/subtle.verify() - Вывод ключа или битов:
subtle.deriveBits()/subtle.deriveKey() - Упаковка ключа:
subtle.wrapKey()/subtle.unwrapKey() - Инкапсуляция ключа:
subtle.encapsulateBits()/subtle.decapsulateBits()/subtle.encapsulateKey()/subtle.decapsulateKey() - Хеш (digest):
subtle.digest()
| Алгоритм | Шифрование | Подписи и MAC | Вывод ключа или битов | Упаковка ключа | Инкапсуляция ключа | Digest |
|---|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ||||
'AES-CTR' | ✔ | ✔ | ||||
'AES-GCM' | ✔ | ✔ | ||||
'AES-KW' | ✔ | |||||
'AES-OCB' | ✔ | ✔ | ||||
'Argon2d' | ✔ | |||||
'Argon2i' | ✔ | |||||
'Argon2id' | ✔ | |||||
'ChaCha20-Poly1305'2 | ✔ | ✔ | ||||
'cSHAKE128'2 | ✔ | |||||
'cSHAKE256'2 | ✔ | |||||
'ECDH' | ✔ | |||||
'ECDSA' | ✔ | |||||
'Ed25519' | ✔ | |||||
'Ed448'1 | ✔ | |||||
'HKDF' | ✔ | |||||
'HMAC' | ✔ | |||||
'KMAC128'2 | ✔ | |||||
'KMAC256'2 | ✔ | |||||
'KT128'2 | ✔ | |||||
'KT256'2 | ✔ | |||||
'ML-DSA-44'2 | ✔ | |||||
'ML-DSA-65'2 | ✔ | |||||
'ML-DSA-87'2 | ✔ | |||||
'ML-KEM-512'2 | ✔ | |||||
'ML-KEM-768'2 | ✔ | |||||
'ML-KEM-1024'2 | ✔ | |||||
'PBKDF2' | ✔ | |||||
'RSA-OAEP' | ✔ | ✔ | ||||
'RSA-PSS' | ✔ | |||||
'RSASSA-PKCS1-v1_5' | ✔ | |||||
'SHA-1' | ✔ | |||||
'SHA-256' | ✔ | |||||
'SHA-384' | ✔ | |||||
'SHA-512' | ✔ | |||||
'SHA3-256'2 | ✔ | |||||
'SHA3-384'2 | ✔ | |||||
'SHA3-512'2 | ✔ | |||||
'TurboSHAKE128'2 | ✔ | |||||
'TurboSHAKE256'2 | ✔ | |||||
'X25519' | ✔ | |||||
'X448'1 | ✔ |
Класс: Crypto¶
globalThis.crypto — это экземпляр класса Crypto. Класс Crypto — синглтон, открывающий доступ к остальной части криптографического API.
crypto.subtle¶
- Тип:
<SubtleCrypto>
Предоставляет доступ к API SubtleCrypto.
crypto.getRandomValues(typedArray)¶
typedArray<Buffer>|<TypedArray>- Возвращает:
<Buffer>|<TypedArray>
Генерирует криптографически стойкие случайные значения. Переданный typedArray заполняется случайными значениями, возвращается ссылка на typedArray.
typedArray должен быть экземпляром целочисленного TypedArray, то есть Float32Array и Float64Array не принимаются.
Будет выброшена ошибка, если размер typedArray превышает 65 536 байт.
crypto.randomUUID()¶
- Возвращает:
<string>
Генерирует случайный UUID версии 4 по RFC 4122. UUID создаётся с помощью криптографически стойкого генератора псевдослучайных чисел.
Класс: CryptoKey¶
cryptoKey.algorithm¶
- Тип:
<KeyAlgorithm>|<RsaHashedKeyAlgorithm>|<EcKeyAlgorithm>|<AesKeyAlgorithm>|<HmacKeyAlgorithm>|<KmacKeyAlgorithm>
Объект с описанием алгоритма, для которого предназначен ключ, вместе с дополнительными параметрами, зависящими от алгоритма.
Только для чтения.
cryptoKey.extractable¶
- Тип:
<boolean>
Если true, CryptoKey можно извлечь через subtle.exportKey() или subtle.wrapKey().
Только для чтения.
cryptoKey.type¶
- Тип:
<string>Одно из'secret','private'или'public'.
Строка, указывающая, является ли ключ симметричным ('secret') или асимметричным ('private' или 'public').
cryptoKey.usages¶
- Тип:
<string[]>
Массив строк с операциями, для которых может использоваться ключ.
Возможные варианты использования:
'encrypt'— разрешает использовать ключ сsubtle.encrypt()'decrypt'— разрешает использовать ключ сsubtle.decrypt()'sign'— разрешает использовать ключ сsubtle.sign()'verify'— разрешает использовать ключ сsubtle.verify()'deriveKey'— разрешает использовать ключ сsubtle.deriveKey()'deriveBits'— разрешает использовать ключ сsubtle.deriveBits()'encapsulateBits'— разрешает использовать ключ сsubtle.encapsulateBits()'decapsulateBits'— разрешает использовать ключ сsubtle.decapsulateBits()'encapsulateKey'— разрешает использовать ключ сsubtle.encapsulateKey()'decapsulateKey'— разрешает использовать ключ сsubtle.decapsulateKey()'wrapKey'— разрешает использовать ключ сsubtle.wrapKey()'unwrapKey'— разрешает использовать ключ сsubtle.unwrapKey()
Допустимые варианты зависят от алгоритма ключа (см. cryptokey.algorithm.name).
Условные обозначения столбцов:
- Шифрование:
subtle.encrypt()/subtle.decrypt() - Подписи и MAC:
subtle.sign()/subtle.verify() - Вывод ключа или битов:
subtle.deriveBits()/subtle.deriveKey() - Упаковка ключа:
subtle.wrapKey()/subtle.unwrapKey() - Инкапсуляция ключа:
subtle.encapsulateBits()/subtle.decapsulateBits()/subtle.encapsulateKey()/subtle.decapsulateKey()
| Поддерживаемый алгоритм ключа | Шифрование | Подписи и MAC | Вывод ключа или битов | Упаковка ключа | Инкапсуляция ключа |
|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | |||
'AES-CTR' | ✔ | ✔ | |||
'AES-GCM' | ✔ | ✔ | |||
'AES-KW' | ✔ | ||||
'AES-OCB' | ✔ | ✔ | |||
'Argon2d' | ✔ | ||||
'Argon2i' | ✔ | ||||
'Argon2id' | ✔ | ||||
'ChaCha20-Poly1305'2 | ✔ | ✔ | |||
'ECDH' | ✔ | ||||
'ECDSA' | ✔ | ||||
'Ed25519' | ✔ | ||||
'Ed448'1 | ✔ | ||||
'HDKF' | ✔ | ||||
'HMAC' | ✔ | ||||
'KMAC128'2 | ✔ | ||||
'KMAC256'2 | ✔ | ||||
'ML-DSA-44'2 | ✔ | ||||
'ML-DSA-65'2 | ✔ | ||||
'ML-DSA-87'2 | ✔ | ||||
'ML-KEM-512'2 | ✔ | ||||
'ML-KEM-768'2 | ✔ | ||||
'ML-KEM-1024'2 | ✔ | ||||
'PBKDF2' | ✔ | ||||
'RSA-OAEP' | ✔ | ✔ | |||
'RSA-PSS' | ✔ | ||||
'RSASSA-PKCS1-v1_5' | ✔ | ||||
'X25519' | ✔ | ||||
'X448'1 | ✔ |
Класс: CryptoKeyPair¶
CryptoKeyPair — простой объект-словарь со свойствами publicKey и privateKey, представляющий асимметричную пару ключей.
cryptoKeyPair.privateKey¶
- Тип:
<CryptoKey>— CryptoKey, у которогоtypeбудет'private'.
cryptoKeyPair.publicKey¶
- Тип:
<CryptoKey>— CryptoKey, у которогоtypeбудет'public'.
Класс: SubtleCrypto¶
Статический метод: SubtleCrypto.supports(operation, algorithm[, lengthOrAdditionalAlgorithm])¶
Стабильность: 1.1 – Активная разработка
operation<string>"encrypt","decrypt","sign","verify","digest","generateKey","deriveKey","deriveBits","importKey","exportKey","getPublicKey","wrapKey","unwrapKey","encapsulateBits","encapsulateKey","decapsulateBits"или"decapsulateKey"algorithm<string>|<Algorithm>lengthOrAdditionalAlgorithmnull |<number>|<string>|<Algorithm>| undefined В зависимости от операции: игнорируется; либо значение аргумента длины, если операция —"deriveBits"; либо алгоритм выводимого ключа при"deriveKey"; либо алгоритм ключа, экспортируемого перед упаковкой при"wrapKey"; либо алгоритм ключа, импортируемого после распаковки при"unwrapKey"; либо алгоритм ключа, импортируемого после инкапсуляции/декапсуляции при"encapsulateKey"или"decapsulateKey". По умолчанию:null, если операция —"deriveBits", иначеundefined.- Возвращает:
<boolean>указывает, поддерживает ли реализация заданную операцию
Позволяет определять возможности в Web Crypto API и выяснять, поддерживается ли заданный идентификатор алгоритма (вместе с его параметрами) для указанной операции.
См. раздел Checking for runtime algorithm support с примером использования этого метода.
subtle.decapsulateBits(decapsulationAlgorithm, decapsulationKey, ciphertext)¶
Стабильность: 1.1 – Активная разработка
decapsulationAlgorithm<string>|<Algorithm>decapsulationKey<CryptoKey>ciphertext<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>- Возвращает:
<Promise>при успехе выполняется с ArrayBuffer.
Получатель сообщения использует свой асимметричный закрытый ключ, чтобы расшифровать «инкапсулированный ключ» (ciphertext) и восстановить временный симметричный ключ (в виде ArrayBuffer), которым затем расшифровывается сообщение.
В настоящее время поддерживаются следующие алгоритмы:
subtle.decapsulateKey(decapsulationAlgorithm, decapsulationKey, ciphertext, sharedKeyAlgorithm, extractable, usages)¶
Стабильность: 1.1 – Активная разработка
decapsulationAlgorithm<string>|<Algorithm>decapsulationKey<CryptoKey>ciphertext<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>sharedKeyAlgorithm<string>|<Algorithm>|<HmacImportParams>|<AesDerivedKeyParams>|<KmacImportParams>extractable<boolean>usages<string[]>См. Key usages.- Возвращает:
<Promise>при успехе выполняется с CryptoKey.
Получатель сообщения использует свой асимметричный закрытый ключ, чтобы расшифровать «инкапсулированный ключ» (ciphertext) и восстановить временный симметричный ключ (в виде CryptoKey), которым затем расшифровывается сообщение.
В настоящее время поддерживаются следующие алгоритмы:
subtle.decrypt(algorithm, key, data)¶
Добавлено в: v15.0.0
algorithm<RsaOaepParams>|<AesCtrParams>|<AesCbcParams>|<AeadParams>key<CryptoKey>data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>- Возвращает:
<Promise>при успехе выполняется с ArrayBuffer.
По методу и параметрам из algorithm и ключевому материалу из key метод пытается расшифровать переданные data. При успехе промис выполняется с ArrayBuffer, содержащим открытый текст.
В настоящее время поддерживаются следующие алгоритмы:
subtle.deriveBits(algorithm, baseKey[, length])¶
Добавлено в: v15.0.0
algorithm<EcdhKeyDeriveParams>|<HkdfParams>|<Pbkdf2Params>|<Argon2Params>baseKey<CryptoKey>length<number>| null По умолчанию:null- Возвращает:
<Promise>при успехе выполняется с ArrayBuffer.
По методу и параметрам из algorithm и ключевому материалу из baseKey метод пытается сгенерировать length бит.
Если length не указан или равен null, генерируется максимальное число бит для данного алгоритма. Так допускается для 'ECDH', 'X25519' и 'X448'1; для остальных алгоритмов length должен быть числом.
При успехе промис выполняется с ArrayBuffer, содержащим сгенерированные данные.
В настоящее время поддерживаются следующие алгоритмы:
subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)¶
Добавлено в: v15.0.0
algorithm<EcdhKeyDeriveParams>|<HkdfParams>|<Pbkdf2Params>|<Argon2Params>baseKey<CryptoKey>derivedKeyAlgorithm<string>|<Algorithm>|<HmacImportParams>|<AesDerivedKeyParams>|<KmacImportParams>extractable<boolean>keyUsages<string[]>См. Key usages.- Возвращает:
<Promise>при успехе выполняется с CryptoKey.
По методу и параметрам из algorithm и ключевому материалу из baseKey метод пытается сгенерировать новый CryptoKey по методу и параметрам в derivedKeyAlgorithm.
Вызов этого метода эквивалентен вызову subtle.deriveBits() для получения сырого ключевого материала с последующей передачей результата в subtle.importKey() с аргументами deriveKeyAlgorithm, extractable и keyUsages.
В настоящее время поддерживаются следующие алгоритмы:
subtle.digest(algorithm, data)¶
Добавлено в: v15.0.0
algorithm<string>|<Algorithm>|<CShakeParams>|<TurboShakeParams>|<KangarooTwelveParams>data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>- Возвращает:
<Promise>при успехе выполняется с ArrayBuffer.
По методу из algorithm метод пытается вычислить дайджест data. При успехе промис выполняется с ArrayBuffer, содержащим вычисленный дайджест.
Если algorithm задан как string, допустимы значения:
'cSHAKE128'2'cSHAKE256'2'KT128'2'KT256'2'SHA-1''SHA-256''SHA-384''SHA-512''SHA3-256'2'SHA3-384'2'SHA3-512'2'TurboSHAKE128'2'TurboSHAKE256'2
Если algorithm задан как Object, у него должно быть свойство name со значением из списка выше.
subtle.encapsulateBits(encapsulationAlgorithm, encapsulationKey)¶
Стабильность: 1.1 – Активная разработка
encapsulationAlgorithm<string>|<Algorithm>encapsulationKey<CryptoKey>- Возвращает:
<Promise>при успехе выполняется с EncapsulatedBits.
Использует асимметричный открытый ключ получателя сообщения для шифрования временного симметричного ключа. Этот зашифрованный ключ — «инкапсулированный ключ» в виде EncapsulatedBits.
В настоящее время поддерживаются следующие алгоритмы:
subtle.encapsulateKey(encapsulationAlgorithm, encapsulationKey, sharedKeyAlgorithm, extractable, usages)¶
Стабильность: 1.1 – Активная разработка
encapsulationAlgorithm<string>|<Algorithm>encapsulationKey<CryptoKey>sharedKeyAlgorithm<string>|<Algorithm>|<HmacImportParams>|<AesDerivedKeyParams>|<KmacImportParams>extractable<boolean>usages<string[]>См. Key usages.- Возвращает:
<Promise>при успехе выполняется с EncapsulatedKey.
Использует асимметричный открытый ключ получателя сообщения для шифрования временного симметричного ключа. Этот зашифрованный ключ — «инкапсулированный ключ» в виде EncapsulatedKey.
В настоящее время поддерживаются следующие алгоритмы:
subtle.encrypt(algorithm, key, data)¶
Добавлено в: v15.0.0
algorithm<RsaOaepParams>|<AesCtrParams>|<AesCbcParams>|<AeadParams>key<CryptoKey>data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>- Возвращает:
<Promise>при успехе выполняется с ArrayBuffer.
По методу и параметрам из algorithm и ключевому материалу из key метод пытается зашифровать data. При успехе промис выполняется с ArrayBuffer, содержащим шифротекст.
В настоящее время поддерживаются следующие алгоритмы:
subtle.exportKey(format, key)¶
Добавлено в: v15.0.0
format<string>Должен быть одним из'raw','pkcs8','spki','jwk','raw-secret'2,'raw-public'2 или'raw-seed'2.key<CryptoKey>- Возвращает:
<Promise>при успехе выполняется с ArrayBuffer | Object.
Экспортирует ключ в указанный формат, если он поддерживается.
Если CryptoKey не извлекаемый, промис будет отклонён.
Если format — 'pkcs8' или 'spki' и экспорт успешен, промис выполняется с ArrayBuffer, содержащим данные ключа.
Если format — 'jwk' и экспорт успешен, промис выполняется с объектом JavaScript, соответствующим спецификации JSON Web Key.
| Поддерживаемый алгоритм ключа | 'spki' | 'pkcs8' | 'jwk' | 'raw' | 'raw-secret' | 'raw-public' | 'raw-seed' |
|---|---|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ✔ | ||||
'AES-CTR' | ✔ | ✔ | ✔ | ||||
'AES-GCM' | ✔ | ✔ | ✔ | ||||
'AES-KW' | ✔ | ✔ | ✔ | ||||
'AES-OCB'2 | ✔ | ✔ | |||||
'ChaCha20-Poly1305'2 | ✔ | ✔ | |||||
'ECDH' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ECDSA' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed25519' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed448'1 | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'HMAC' | ✔ | ✔ | ✔ | ||||
'KMAC128'2 | ✔ | ✔ | |||||
'KMAC256'2 | ✔ | ✔ | |||||
'ML-DSA-44'2 | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-65'2 | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-87'2 | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-512'2 | ✔ | ✔ | ✔ | ✔ | |||
'ML-KEM-768'2 | ✔ | ✔ | ✔ | ✔ | |||
'ML-KEM-1024'2 | ✔ | ✔ | ✔ | ✔ | |||
'RSA-OAEP' | ✔ | ✔ | ✔ | ||||
'RSA-PSS' | ✔ | ✔ | ✔ | ||||
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ |
subtle.getPublicKey(key, keyUsages)¶
Стабильность: 1.1 – Активная разработка
key<CryptoKey>Закрытый ключ, из которого выводится соответствующий открытый ключ.keyUsages<string[]>См. Key usages.- Возвращает:
<Promise>при успехе выполняется с CryptoKey.
Выводит открытый ключ из заданного закрытого ключа.
subtle.generateKey(algorithm, extractable, keyUsages)¶
Добавлено в: v15.0.0
-
algorithm<string>|<Algorithm>|<RsaHashedKeyGenParams>|<EcKeyGenParams>|<HmacKeyGenParams>|<AesKeyGenParams>|<KmacKeyGenParams> -
extractable<boolean> keyUsages<string[]>См. Key usages.- Возвращает:
<Promise>при успехе выполняется с CryptoKey | CryptoKeyPair.
По параметрам из algorithm метод пытается сгенерировать новый ключевой материал. В зависимости от алгоритма получается один CryptoKey или CryptoKeyPair.
Алгоритмы, при которых генерируется CryptoKeyPair (открытый и закрытый ключ):
'ECDH''ECDSA''Ed25519''Ed448'1'ML-DSA-44'2'ML-DSA-65'2'ML-DSA-87'2'ML-KEM-512'2'ML-KEM-768'2'ML-KEM-1024'2'RSA-OAEP''RSA-PSS''RSASSA-PKCS1-v1_5''X25519''X448'1
Алгоритмы, при которых генерируется CryptoKey (секретный ключ):
subtle.importKey(format, keyData, algorithm, extractable, keyUsages)¶
Добавлено в: v15.0.0
format<string>Должен быть одним из'raw','pkcs8','spki','jwk','raw-secret'2,'raw-public'2 или'raw-seed'2.-
keyData<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>|<Object> -
algorithm<string>|<Algorithm>|<RsaHashedImportParams>|<EcKeyImportParams>|<HmacImportParams>|<KmacImportParams> -
extractable<boolean> keyUsages<string[]>См. Key usages.- Возвращает:
<Promise>при успехе выполняется с CryptoKey.
Метод пытается интерпретировать переданные keyData в формате format и создать экземпляр CryptoKey с использованием algorithm, extractable и keyUsages. При успешном импорте промис выполняется с CryptoKey, представляющим ключевой материал.
При импорте ключей алгоритмов KDF extractable должен быть false.
В настоящее время поддерживаются следующие алгоритмы:
| Поддерживаемый алгоритм ключа | 'spki' | 'pkcs8' | 'jwk' | 'raw' | 'raw-secret' | 'raw-public' | 'raw-seed' |
|---|---|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ✔ | ||||
'AES-CTR' | ✔ | ✔ | ✔ | ||||
'AES-GCM' | ✔ | ✔ | ✔ | ||||
'AES-KW' | ✔ | ✔ | ✔ | ||||
'AES-OCB'2 | ✔ | ✔ | |||||
'Argon2d'2 | ✔ | ||||||
'Argon2i'2 | ✔ | ||||||
'Argon2id'2 | ✔ | ||||||
'ChaCha20-Poly1305'2 | ✔ | ✔ | |||||
'ECDH' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ECDSA' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed25519' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed448'1 | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'HDKF' | ✔ | ✔ | |||||
'HMAC' | ✔ | ✔ | ✔ | ||||
'KMAC128'2 | ✔ | ✔ | |||||
'KMAC256'2 | ✔ | ✔ | |||||
'ML-DSA-44'2 | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-65'2 | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-87'2 | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-512'2 | ✔ | ✔ | ✔ | ✔ | |||
'ML-KEM-768'2 | ✔ | ✔ | ✔ | ✔ | |||
'ML-KEM-1024'2 | ✔ | ✔ | ✔ | ✔ | |||
'PBKDF2' | ✔ | ✔ | |||||
'RSA-OAEP' | ✔ | ✔ | ✔ | ||||
'RSA-PSS' | ✔ | ✔ | ✔ | ||||
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ | ||||
'X25519' | ✔ | ✔ | ✔ | ✔ | ✔ | ||
'X448'1 | ✔ | ✔ | ✔ | ✔ | ✔ |
subtle.sign(algorithm, key, data)¶
Добавлено в: v15.0.0
algorithm<string>|<Algorithm>|<RsaPssParams>|<EcdsaParams>|<ContextParams>|<KmacParams>key<CryptoKey>data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>- Возвращает:
<Promise>при успехе выполняется с ArrayBuffer.
По методу и параметрам из algorithm и ключевому материалу из key метод пытается сформировать криптографическую подпись data. При успехе промис выполняется с ArrayBuffer, содержащим подпись.
В настоящее время поддерживаются следующие алгоритмы:
'ECDSA''Ed25519''Ed448'1'HMAC''KMAC128'2'KMAC256'2'ML-DSA-44'2'ML-DSA-65'2'ML-DSA-87'2'RSA-PSS''RSASSA-PKCS1-v1_5'
subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)¶
Добавлено в: v15.0.0
format<string>Должен быть одним из'raw','pkcs8','spki','jwk','raw-secret'2,'raw-public'2 или'raw-seed'2.wrappedKey<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>-
unwrappingKey<CryptoKey> -
unwrapAlgo<string>|<Algorithm>|<RsaOaepParams>|<AesCtrParams>|<AesCbcParams>|<AeadParams> -
unwrappedKeyAlgo<string>|<Algorithm>|<RsaHashedImportParams>|<EcKeyImportParams>|<HmacImportParams>|<KmacImportParams> -
extractable<boolean> keyUsages<string[]>См. Key usages.- Возвращает:
<Promise>при успехе выполняется с CryptoKey.
В криптографии «упаковка ключа» означает экспорт и последующее шифрование ключевого материала. Метод пытается расшифровать упакованный ключ и создать экземпляр CryptoKey. Это эквивалентно сначала вызову subtle.decrypt() для зашифрованных данных ключа (аргументы wrappedKey, unwrapAlgo и unwrappingKey), затем передаче результата в subtle.importKey() с аргументами unwrappedKeyAlgo, extractable и keyUsages. При успехе промис выполняется с объектом CryptoKey.
В настоящее время поддерживаются следующие алгоритмы упаковки:
Поддерживаются следующие алгоритмы распакованного ключа:
'AES-CBC''AES-CTR''AES-GCM''AES-KW''AES-OCB'2'ChaCha20-Poly1305'2'ECDH''ECDSA''Ed25519''Ed448'1'HMAC''KMAC128'1'KMAC256'1'ML-DSA-44'2'ML-DSA-65'2'ML-DSA-87'2'ML-KEM-512'2'ML-KEM-768'2'ML-KEM-1024'2'RSA-OAEP''RSA-PSS''RSASSA-PKCS1-v1_5''X25519''X448'1
subtle.verify(algorithm, key, signature, data)¶
Добавлено в: v15.0.0
algorithm<string>|<Algorithm>|<RsaPssParams>|<EcdsaParams>|<ContextParams>|<KmacParams>key<CryptoKey>signature<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>data<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>- Возвращает:
<Promise>при успехе выполняется с boolean.
По методу и параметрам из algorithm и ключевому материалу из key метод пытается проверить, что signature является действительной криптографической подписью data. Промис выполняется со значением true или false.
В настоящее время поддерживаются следующие алгоритмы:
'ECDSA''Ed25519''Ed448'1'HMAC''KMAC128'1'KMAC256'1'ML-DSA-44'2'ML-DSA-65'2'ML-DSA-87'2'RSA-PSS''RSASSA-PKCS1-v1_5'
subtle.wrapKey(format, key, wrappingKey, wrapAlgo)¶
Добавлено в: v15.0.0
format<string>Должен быть одним из'raw','pkcs8','spki','jwk','raw-secret'2,'raw-public'2 или'raw-seed'2.key<CryptoKey>wrappingKey<CryptoKey>wrapAlgo<string>|<Algorithm>|<RsaOaepParams>|<AesCtrParams>|<AesCbcParams>|<AeadParams>- Возвращает:
<Promise>при успехе выполняется с ArrayBuffer.
В криптографии «упаковка ключа» означает экспорт и последующее шифрование ключевого материала. Метод экспортирует ключевой материал в формат format, затем шифрует его методом и параметрами из wrapAlgo и ключом wrappingKey. Это эквивалентно вызову subtle.exportKey() с format и key, затем передаче результата в subtle.encrypt() с wrappingKey и wrapAlgo. При успехе промис выполняется с ArrayBuffer, содержащим зашифрованные данные ключа.
В настоящее время поддерживаются следующие алгоритмы упаковки:
Параметры алгоритмов¶
Объекты параметров алгоритма задают методы и параметры для различных методов SubtleCrypto. Несмотря на описание как «классов», это обычные объекты-словари JavaScript.
Класс: Algorithm¶
Algorithm.name¶
- Тип:
<string>
Класс: AeadParams¶
aeadParams.additionalData¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>| undefined
Дополнительные данные, которые не шифруются, но участвуют в аутентификации данных. Использование additionalData необязательно.
aeadParams.iv¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Вектор инициализации должен быть уникален для каждой операции шифрования с данным ключом.
aeadParams.name¶
- Тип:
<string>Должно быть'AES-GCM','AES-OCB', или'ChaCha20-Poly1305'.
aeadParams.tagLength¶
- Тип:
<number>Размер в битах сгенерированного тега аутентификации.
Класс: AesDerivedKeyParams¶
aesDerivedKeyParams.name¶
- Тип:
<string>Должно быть одним из'AES-CBC','AES-CTR','AES-GCM','AES-OCB', или'AES-KW'
aesDerivedKeyParams.length¶
- Тип:
<number>
Длина выводимого ключа AES. Должна быть 128, 192 или 256.
Класс: AesCbcParams¶
aesCbcParams.iv¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Вектор инициализации. Длина ровно 16 байт; должен быть непредсказуемым и криптографически случайным.
aesCbcParams.name¶
- Тип:
<string>Должно быть'AES-CBC'.
Класс: AesCtrParams¶
aesCtrParams.counter¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Начальное значение блока счётчика. Длина ровно 16 байт.
В режиме AES-CTR правые length бит блока используются как счётчик, остальные биты — как одноразовое число (nonce).
aesCtrParams.length¶
- Тип:
<number>Число бит вaesCtrParams.counter, используемых в качестве счётчика.
aesCtrParams.name¶
- Тип:
<string>Должно быть'AES-CTR'.
Класс: AesKeyAlgorithm¶
aesKeyAlgorithm.length¶
- Тип:
<number>
Длина ключа AES в битах.
aesKeyAlgorithm.name¶
- Тип:
<string>
Класс: AesKeyGenParams¶
aesKeyGenParams.length¶
- Тип:
<number>
Длина генерируемого ключа AES. Должна быть 128, 192 или 256.
aesKeyGenParams.name¶
- Тип:
<string>Должно быть одним из'AES-CBC','AES-CTR','AES-GCM', или'AES-KW'
Класс: Argon2Params¶
argon2Params.associatedData¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Необязательные связанные данные.
argon2Params.memory¶
- Тип:
<number>
Объём памяти в кибибайтах. Должен быть не меньше 8-кратной степени параллелизма.
argon2Params.name¶
- Тип:
<string>Должно быть одним из'Argon2d','Argon2i', или'Argon2id'.
argon2Params.nonce¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Одноразовое число (nonce), в приложениях хеширования паролей используется как соль.
argon2Params.parallelism¶
- Тип:
<number>
Степень параллелизма.
argon2Params.passes¶
- Тип:
<number>
Число проходов.
argon2Params.secretValue¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Необязательное секретное значение.
argon2Params.version¶
- Тип:
<number>
Номер версии Argon2. По умолчанию и сейчас единственно определённая версия — 19 (0x13).
Класс: ContextParams¶
contextParams.name¶
contextParams.context¶
Добавлено в: v24.7.0
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>| undefined
Свойство context задаёт необязательные контекстные данные, связываемые с сообщением.
Класс: CShakeParams¶
Добавлено в: v24.7.0
cShakeParams.name¶
cShakeParams.outputLength¶
- Тип:
<number>запрашиваемая длина вывода в битах.
cShakeParams.functionName¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>| undefined
Свойство functionName задаёт имя функции, которое NIST использует для определения функций на основе cSHAKE. Реализация Web Crypto API в Node.js поддерживает только нулевую длину functionName, что эквивалентно отсутствию functionName.
cShakeParams.customization¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>| undefined
Свойство customization задаёт строку настройки. Реализация Web Crypto API в Node.js поддерживает только нулевую длину customization, что эквивалентно отсутствию customization.
Класс: EcdhKeyDeriveParams¶
ecdhKeyDeriveParams.name¶
ecdhKeyDeriveParams.public¶
- Тип:
<CryptoKey>
Вывод ключа ECDH использует на входе закрытый ключ одной стороны и открытый ключ другой — из них получается общий секрет. Свойство ecdhKeyDeriveParams.public задаёт открытый ключ другой стороны.
Класс: EcdsaParams¶
ecdsaParams.hash¶
Добавлено в: v15.0.0
- Тип:
<string>|<Algorithm>
Если задано как string, значение должно быть одним из:
Если задано как Algorithm, свойство name объекта должно быть одним из перечисленных выше значений.
ecdsaParams.name¶
- Тип:
<string>Должно быть'ECDSA'.
Класс: EcKeyAlgorithm¶
ecKeyAlgorithm.name¶
- Тип:
<string>
ecKeyAlgorithm.namedCurve¶
- Тип:
<string>
Класс: EcKeyGenParams¶
ecKeyGenParams.name¶
- Тип:
<string>Должно быть одним из'ECDSA'или'ECDH'.
ecKeyGenParams.namedCurve¶
- Тип:
<string>Должно быть одним из'P-256','P-384','P-521'.
Класс: EcKeyImportParams¶
ecKeyImportParams.name¶
- Тип:
<string>Должно быть одним из'ECDSA'или'ECDH'.
ecKeyImportParams.namedCurve¶
- Тип:
<string>Должно быть одним из'P-256','P-384','P-521'.
Класс: EncapsulatedBits¶
Временный симметричный секретный ключ (в виде ArrayBuffer) для шифрования сообщения и шифротекст (его можно передать получателю вместе с сообщением), зашифрованный этим общим ключом. Получатель своим закрытым ключом восстанавливает общий ключ и расшифровывает сообщение.
encapsulatedBits.ciphertext¶
- Тип:
<ArrayBuffer>
encapsulatedBits.sharedKey¶
- Тип:
<ArrayBuffer>
Класс: EncapsulatedKey¶
Временный симметричный секретный ключ (в виде CryptoKey) для шифрования сообщения и шифротекст (его можно передать получателю вместе с сообщением), зашифрованный этим общим ключом. Получатель своим закрытым ключом восстанавливает общий ключ и расшифровывает сообщение.
encapsulatedKey.ciphertext¶
- Тип:
<ArrayBuffer>
encapsulatedKey.sharedKey¶
- Тип:
<CryptoKey>
Класс: HkdfParams¶
hkdfParams.hash¶
Добавлено в: v15.0.0
- Тип:
<string>|<Algorithm>
Если задано как string, значение должно быть одним из:
Если задано как Algorithm, свойство name объекта должно быть одним из перечисленных выше значений.
hkdfParams.info¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Контекстные данные приложения для алгоритма HKDF. Может быть нулевой длины, но должно быть указано.
hkdfParams.name¶
- Тип:
<string>Должно быть'HKDF'.
hkdfParams.salt¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Соль существенно повышает стойкость HKDF. Она должна быть случайной или псевдослучайной и той же длины, что и выход функции хеширования (например, при 'SHA-256' соль — 256 бит случайных данных).
Класс: HmacImportParams¶
hmacImportParams.hash¶
Добавлено в: v15.0.0
- Тип:
<string>|<Algorithm>
Если задано как string, значение должно быть одним из:
Если задано как Algorithm, свойство name объекта должно быть одним из перечисленных выше значений.
hmacImportParams.length¶
- Тип:
<number>
Необязательное число бит в ключе HMAC. Обычно не указывается.
hmacImportParams.name¶
- Тип:
<string>Должно быть'HMAC'.
Класс: HmacKeyAlgorithm¶
hmacKeyAlgorithm.hash¶
- Тип:
<Algorithm>
hmacKeyAlgorithm.length¶
- Тип:
<number>
Длина ключа HMAC в битах.
hmacKeyAlgorithm.name¶
- Тип:
<string>
Класс: HmacKeyGenParams¶
hmacKeyGenParams.hash¶
Добавлено в: v15.0.0
- Тип:
<string>|<Algorithm>
Если задано как string, значение должно быть одним из:
Если задано как Algorithm, свойство name объекта должно быть одним из перечисленных выше значений.
hmacKeyGenParams.length¶
- Тип:
<number>
Число бит для генерируемого ключа HMAC. Если не указано, длина определяется используемым алгоритмом хеширования. Обычно не указывается.
hmacKeyGenParams.name¶
- Тип:
<string>Должно быть'HMAC'.
Класс: KeyAlgorithm¶
keyAlgorithm.name¶
- Тип:
<string>
Класс: KangarooTwelveParams¶
kangarooTwelveParams.customization¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>| undefined
Необязательная строка настройки для KangarooTwelve.
kangarooTwelveParams.name¶
kangarooTwelveParams.outputLength¶
- Тип:
<number>запрашиваемая длина вывода в битах.
Класс: KmacImportParams¶
kmacImportParams.length¶
- Тип:
<number>
Необязательное число бит в ключе KMAC. Обычно не указывается.
kmacImportParams.name¶
- Тип:
<string>Должно быть'KMAC128'или'KMAC256'.
Класс: KmacKeyAlgorithm¶
kmacKeyAlgorithm.length¶
- Тип:
<number>
Длина ключа KMAC в битах.
kmacKeyAlgorithm.name¶
- Тип:
<string>
Класс: KmacKeyGenParams¶
kmacKeyGenParams.length¶
- Тип:
<number>
Число бит для генерируемого ключа KMAC. Если не указано, длина определяется используемым алгоритмом KMAC. Обычно не указывается.
kmacKeyGenParams.name¶
- Тип:
<string>Должно быть'KMAC128'или'KMAC256'.
Класс: KmacParams¶
Добавлено в: v24.8.0
kmacParams.algorithm¶
- Тип:
<string>Должно быть'KMAC128'или'KMAC256'.
kmacParams.outputLength¶
- Тип:
<number>
Длина вывода в байтах. Должна быть положительным целым числом.
kmacParams.customization¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>| undefined
Свойство customization задаёт необязательную строку настройки.
Класс: Pbkdf2Params¶
pbkdf2Params.hash¶
Добавлено в: v15.0.0
- Тип:
<string>|<Algorithm>
Если задано как string, значение должно быть одним из:
Если задано как Algorithm, свойство name объекта должно быть одним из перечисленных выше значений.
pbkdf2Params.iterations¶
- Тип:
<number>
Число итераций PBKDF2 при выводе битов.
pbkdf2Params.name¶
- Тип:
<string>Должно быть'PBKDF2'.
pbkdf2Params.salt¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Рекомендуется не менее 16 случайных или псевдослучайных байт.
Класс: RsaHashedImportParams¶
rsaHashedImportParams.hash¶
Добавлено в: v15.0.0
- Тип:
<string>|<Algorithm>
Если задано как string, значение должно быть одним из:
Если задано как Algorithm, свойство name объекта должно быть одним из перечисленных выше значений.
rsaHashedImportParams.name¶
- Тип:
<string>Должно быть одним из'RSASSA-PKCS1-v1_5','RSA-PSS'или'RSA-OAEP'.
Класс: RsaHashedKeyAlgorithm¶
rsaHashedKeyAlgorithm.hash¶
- Тип:
<Algorithm>
rsaHashedKeyAlgorithm.modulusLength¶
- Тип:
<number>
Длина модуля RSA в битах.
rsaHashedKeyAlgorithm.name¶
- Тип:
<string>
rsaHashedKeyAlgorithm.publicExponent¶
- Тип:
<Uint8Array>
Открытая экспонента RSA.
Класс: RsaHashedKeyGenParams¶
rsaHashedKeyGenParams.hash¶
Добавлено в: v15.0.0
- Тип:
<string>|<Algorithm>
Если задано как string, значение должно быть одним из:
Если задано как Algorithm, свойство name объекта должно быть одним из перечисленных выше значений.
rsaHashedKeyGenParams.modulusLength¶
- Тип:
<number>
Длина модуля RSA в битах. Рекомендуется не меньше 2048.
rsaHashedKeyGenParams.name¶
- Тип:
<string>Должно быть одним из'RSASSA-PKCS1-v1_5','RSA-PSS'или'RSA-OAEP'.
rsaHashedKeyGenParams.publicExponent¶
- Тип:
<Uint8Array>
Открытая экспонента RSA. Должна быть Uint8Array с целым без знака в формате big-endian, помещающимся в 32 бита. В Uint8Array допустимы ведущие нулевые биты. Значение должно быть простым. Если нет причин выбирать другое, используйте new Uint8Array([1, 0, 1]) (65537) в качестве открытой экспоненты.
Класс: RsaOaepParams¶
rsaOaepParams.label¶
- Тип:
<ArrayBuffer>|<TypedArray>|<DataView>|<Buffer>
Дополнительные байты, которые не шифруются, но связываются с полученным шифротекстом.
Параметр rsaOaepParams.label необязателен.
rsaOaepParams.name¶
- Тип:
<string>Должно быть'RSA-OAEP'.
Класс: RsaPssParams¶
rsaPssParams.name¶
- Тип:
<string>Должно быть'RSA-PSS'.
rsaPssParams.saltLength¶
- Тип:
<number>
Длина (в байтах) используемой случайной соли.
Класс: TurboShakeParams¶
turboShakeParams.domainSeparation¶
- Тип:
<number>| undefined
Необязательный байт разделения доменов (0x01–0x7f). По умолчанию: 0x1f.
turboShakeParams.name¶
turboShakeParams.outputLength¶
- Тип:
<number>запрашиваемая длина вывода в битах.