Web Crypto API
Node.js предоставляет реализацию стандарта Web Crypto API.
Для доступа к этому модулю используйте globalThis.crypto или require('node:crypto').webcrypto.
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('I love cupcakes');
const digest = await subtle.sign({
name: 'HMAC',
}, key, message);
})(); copy Современные алгоритмы в Web Cryptography API
Node.js реализует следующие возможности из предложения WICG «Современные алгоритмы в Web Cryptography API»:
Алгоритмы:
-
'AES-OCB'1 -
'Argon2d'2 -
'Argon2i'2 -
'Argon2id'2 'ChaCha20-Poly1305''cSHAKE128''cSHAKE256'-
'KMAC128'1 -
'KMAC256'1 -
'ML-DSA-44'3 -
'ML-DSA-65'3 -
'ML-DSA-87'3 -
'ML-KEM-512'3 -
'ML-KEM-768'3 -
'ML-KEM-1024'3 'SHA3-256''SHA3-384''SHA3-512'
Форматы ключей:
'raw-public''raw-secret''raw-seed'
Методы:
Надежные эллиптические кривые в Web Cryptography API
Node.js реализует следующие возможности из предложения WICG «Надежные эллиптические кривые в Web Cryptography API»:
Алгоритмы:
'Ed448''X448'
Примеры
Генерация ключей
Класс <SubtleCrypto> можно использовать для генерации симметричных (секретных) ключей или асимметричных пар ключей (открытого и закрытого ключей).
Ключи AES
const { subtle } = globalThis.crypto;
async function generateAesKey(length = 256) {
const key = await subtle.generateKey({
name: 'AES-CBC',
length,
}, true, ['encrypt', 'decrypt']);
return key;
} copy Пары ключей ECDSA
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 };
} copy Пары ключей Ed25519/X25519
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']);
} copy Ключи HMAC
const { subtle } = globalThis.crypto;
async function generateHmacKey(hash = 'SHA-256') {
const key = await subtle.generateKey({
name: 'HMAC',
hash,
}, true, ['sign', 'verify']);
return key;
} copy Пары ключей RSA
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 };
} copy Шифрование и расшифрование
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);
} copy Экспорт и импорт ключей
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;
} copy Упаковка и распаковка ключей
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;
} copy Подписание и проверка подписи
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;
} copy Получение битов и ключей
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;
} copy Хеширование
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;
} copy Проверка поддержки алгоритмов во время выполнения
SubtleCrypto.supports() позволяет обнаруживать возможности Web Crypto API и проверять, поддерживается ли указанный идентификатор алгоритма (включая его параметры) для данной операции.
В этом примере ключ получается из пароля с помощью Argon2, если этот алгоритм доступен, или PBKDF2 в противном случае; затем с помощью этого ключа текст шифруется и расшифровывается алгоритмом AES-OCB, если он доступен, или AES-GCM в противном случае.
const { SubtleCrypto, crypto } = globalThis;
const password = 'correct horse battery staple';
const derivationAlg =
SubtleCrypto.supports?.('importKey', 'Argon2id') ?
'Argon2id' :
'PBKDF2';
const encryptionAlg =
SubtleCrypto.supports?.('importKey', 'AES-OCB') ?
'AES-OCB' :
'AES-GCM';
const passwordKey = await crypto.subtle.importKey(
derivationAlg === 'Argon2id' ? 'raw-secret' : 'raw',
new TextEncoder().encode(password),
derivationAlg,
false,
['deriveKey'],
);
const nonce = crypto.getRandomValues(new Uint8Array(16));
const derivationParams =
derivationAlg === 'Argon2id' ?
{
nonce,
parallelism: 4,
memory: 2 ** 21,
passes: 1,
} :
{
salt: nonce,
iterations: 100_000,
hash: 'SHA-256',
};
const key = await crypto.subtle.deriveKey(
{
name: derivationAlg,
...derivationParams,
},
passwordKey,
{
name: encryptionAlg,
length: 256,
},
false,
['encrypt', 'decrypt'],
);
const plaintext = 'Hello, world!';
const iv = crypto.getRandomValues(new Uint8Array(16));
const encrypted = await crypto.subtle.encrypt(
{ name: encryptionAlg, iv },
key,
new TextEncoder().encode(plaintext),
);
const decrypted = new TextDecoder().decode(await crypto.subtle.decrypt(
{ name: encryptionAlg, iv },
key,
encrypted,
)); copy Матрица алгоритмов
В таблицах перечислены алгоритмы, поддерживаемые реализацией 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'4
|
✔ | ✔ | ✔ | |
'ECDH' |
✔ | ✔ | ✔ | ✔ |
'ECDSA' |
✔ | ✔ | ✔ | ✔ |
'Ed25519' |
✔ | ✔ | ✔ | ✔ |
'Ed448'5
|
✔ | ✔ | ✔ | ✔ |
'HKDF' |
✔ | |||
'HMAC' |
✔ | ✔ | ✔ | |
'KMAC128'4
|
✔ | ✔ | ✔ | |
'KMAC256'4
|
✔ | ✔ | ✔ | |
'ML-DSA-44'4
|
✔ | ✔ | ✔ | ✔ |
'ML-DSA-65'4
|
✔ | ✔ | ✔ | ✔ |
'ML-DSA-87'4
|
✔ | ✔ | ✔ | ✔ |
'ML-KEM-512'4
|
✔ | ✔ | ✔ | ✔ |
'ML-KEM-768'4
|
✔ | ✔ | ✔ | ✔ |
'ML-KEM-1024'4
|
✔ | ✔ | ✔ | ✔ |
'PBKDF2' |
✔ | |||
'RSA-OAEP' |
✔ | ✔ | ✔ | ✔ |
'RSA-PSS' |
✔ | ✔ | ✔ | ✔ |
'RSASSA-PKCS1-v1_5' |
✔ | ✔ | ✔ | ✔ |
'X25519' |
✔ | ✔ | ✔ | ✔ |
'X448'5
|
✔ | ✔ | ✔ | ✔ |
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() -
Хеширование:
subtle.digest()
| Алгоритм | Шифрование | Подписи и MAC | Получение ключа или битов | Упаковка ключей | Инкапсуляция ключей | Хеширование |
|---|---|---|---|---|---|---|
'AES-CBC' |
✔ | ✔ | ||||
'AES-CTR' |
✔ | ✔ | ||||
'AES-GCM' |
✔ | ✔ | ||||
'AES-KW' |
✔ | |||||
'AES-OCB' |
✔ | ✔ | ||||
'Argon2d' |
✔ | |||||
'Argon2i' |
✔ | |||||
'Argon2id' |
✔ | |||||
'ChaCha20-Poly1305'4
|
✔ | ✔ | ||||
'cSHAKE128'4
|
✔ | |||||
'cSHAKE256'4
|
✔ | |||||
'ECDH' |
✔ | |||||
'ECDSA' |
✔ | |||||
'Ed25519' |
✔ | |||||
'Ed448'5
|
✔ | |||||
'HKDF' |
✔ | |||||
'HMAC' |
✔ | |||||
'KMAC128'4
|
✔ | |||||
'KMAC256'4
|
✔ | |||||
'ML-DSA-44'4
|
✔ | |||||
'ML-DSA-65'4
|
✔ | |||||
'ML-DSA-87'4
|
✔ | |||||
'ML-KEM-512'4
|
✔ | |||||
'ML-KEM-768'4
|
✔ | |||||
'ML-KEM-1024'4
|
✔ | |||||
'PBKDF2' |
✔ | |||||
'RSA-OAEP' |
✔ | ✔ | ||||
'RSA-PSS' |
✔ | |||||
'RSASSA-PKCS1-v1_5' |
✔ | |||||
'SHA-1' |
✔ | |||||
'SHA-256' |
✔ | |||||
'SHA-384' |
✔ | |||||
'SHA-512' |
✔ | |||||
'SHA3-256'4
|
✔ | |||||
'SHA3-384'4
|
✔ | |||||
'SHA3-512'4
|
✔ | |||||
'X25519' |
✔ | |||||
'X448'5
|
✔ |
Класс: Crypto
globalThis.crypto — это экземпляр класса Crypto. Crypto — это синглтон, предоставляющий доступ к остальной части API криптографии.
crypto.getRandomValues(typedArray)
-
typedArray<Buffer> | <TypedArray> - Возвращает: <Buffer> | <TypedArray>
Генерирует криптографически стойкие случайные значения. Указанный typedArray заполняется случайными значениями, после чего возвращается ссылка на typedArray.
Указанный typedArray должен быть экземпляром целочисленного типа <TypedArray>, то есть Float32Array и Float64Array не принимаются.
Если размер указанного typedArray превышает 65 536 байт, будет вызвана ошибка.
Класс: 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'4
|
✔ | ✔ | |||
'ECDH' |
✔ | ||||
'ECDSA' |
✔ | ||||
'Ed25519' |
✔ | ||||
'Ed448'5
|
✔ | ||||
'HDKF' |
✔ | ||||
'HMAC' |
✔ | ||||
'KMAC128'4
|
✔ | ||||
'KMAC256'4
|
✔ | ||||
'ML-DSA-44'4
|
✔ | ||||
'ML-DSA-65'4
|
✔ | ||||
'ML-DSA-87'4
|
✔ | ||||
'ML-KEM-512'4
|
✔ | ||||
'ML-KEM-768'4
|
✔ | ||||
'ML-KEM-1024'4
|
✔ | ||||
'PBKDF2' |
✔ | ||||
'RSA-OAEP' |
✔ | ✔ | |||
'RSA-PSS' |
✔ | ||||
'RSASSA-PKCS1-v1_5' |
✔ | ||||
'X25519' |
✔ | ||||
'X448'5
|
✔ |
Класс: CryptoKeyPair
CryptoKeyPair — это простой объект-словарь со свойствами publicKey и privateKey, представляющий пару асимметричных ключей.
cryptoKeyPair.privateKey
- Тип: <CryptoKey> <CryptoKey>, значение
typeкоторого будет'private'.
cryptoKeyPair.publicKey
- Тип: <CryptoKey> <CryptoKey>, значение
typeкоторого будет'public'.
Class: SubtleCrypto
Статический метод: SubtleCrypto.supports(operation, algorithm[, lengthOrAdditionalAlgorithm])
-
operation<string> "encrypt", "decrypt", "sign", "verify", "digest", "generateKey", "deriveKey", "deriveBits", "importKey", "exportKey", "getPublicKey", "wrapKey", "unwrapKey", "encapsulateBits", "encapsulateKey", "decapsulateBits" или "decapsulateKey" -
algorithm<string> | <Algorithm> -
lengthOrAdditionalAlgorithm<null> | <number> | <string> | <Algorithm> | <undefined> В зависимости от операции этот аргумент игнорируется либо представляет значение аргумента length для операции "deriveBits", алгоритм производимого ключа для операции "deriveKey", алгоритм экспортируемого перед оборачиванием ключа для операции "wrapKey", алгоритм импортируемого после разворачивания ключа для операции "unwrapKey" или алгоритм ключа, импортируемого после инкапсуляции/декапсуляции, для операции "encapsulateKey" или "decapsulateKey". По умолчанию:nullдля операции "deriveBits",undefinedв остальных случаях. - Возвращает: <boolean> Указывает, поддерживает ли реализация указанную операцию
Позволяет обнаруживать возможности Web Crypto API и определять, поддерживается ли заданный идентификатор алгоритма (включая его параметры) для указанной операции.
Пример использования этого метода см. в разделе Проверка поддержки алгоритма во время выполнения.
subtle.decapsulateBits(decapsulationAlgorithm, decapsulationKey, ciphertext)
-
decapsulationAlgorithm<string> | <Algorithm> -
decapsulationKey<CryptoKey> -
ciphertext<ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> - Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.
Получатель сообщения использует свой асимметричный закрытый ключ для расшифрования «инкапсулированного ключа» (шифротекста), восстанавливая временный симметричный ключ (представленный как <ArrayBuffer>), который затем используется для расшифрования сообщения.
В настоящее время поддерживаются следующие алгоритмы:
subtle.decapsulateKey(decapsulationAlgorithm, decapsulationKey, ciphertext, sharedKeyAlgorithm, extractable, usages)
-
decapsulationAlgorithm<string> | <Algorithm> -
decapsulationKey<CryptoKey> -
ciphertext<ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> -
sharedKeyAlgorithm<string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams> | <KmacImportParams> -
extractable<boolean> -
usages<string[]> См. Назначения ключа. - Возвращает: <Promise> В случае успеха выполняется с результатом <CryptoKey>.
Получатель сообщения использует свой асимметричный закрытый ключ для расшифрования «инкапсулированного ключа» (шифротекста), восстанавливая временный симметричный ключ (представленный как <CryptoKey>), который затем используется для расшифрования сообщения.
В настоящее время поддерживаются следующие алгоритмы:
subtle.decrypt(algorithm, key, data)
-
algorithm<RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AeadParams> -
key<CryptoKey> -
data<ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> - Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.
Используя метод и параметры, заданные в algorithm, а также ключевой материал, предоставленный key, этот метод пытается расшифровать переданные данные data. В случае успеха возвращённый промис будет выполнен с объектом <ArrayBuffer>, содержащим результат в открытом виде.
В настоящее время поддерживаются следующие алгоритмы:
subtle.deriveBits(algorithm, baseKey[, length])
-
algorithm<EcdhKeyDeriveParams> | <HkdfParams> | <Pbkdf2Params> | <Argon2Params> -
baseKey<CryptoKey> -
length<number> | <null> По умолчанию:null - Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.
Используя метод и параметры, указанные в algorithm, а также ключевой материал, предоставленный baseKey, этот метод пытается сгенерировать length бит.
Если length не указан или null, генерируется максимально возможное для данного алгоритма количество бит. Это допустимо для алгоритмов 'ECDH', 'X25519' и 'X448'5; для остальных алгоритмов length должен быть числом.
В случае успеха возвращённый промис будет выполнен с объектом <ArrayBuffer>, содержащим сгенерированные данные.
В настоящее время поддерживаются следующие алгоритмы:
subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)
-
algorithm<EcdhKeyDeriveParams> | <HkdfParams> | <Pbkdf2Params> | <Argon2Params> -
baseKey<CryptoKey> -
derivedKeyAlgorithm<string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams> | <KmacImportParams> -
extractable<boolean> -
keyUsages<string[]> См. Назначения ключа. - Возвращает: <Promise> В случае успеха выполняется с результатом <CryptoKey>.
Используя метод и параметры, указанные в algorithm, а также ключевой материал, предоставленный baseKey, этот метод пытается создать новый <CryptoKey> на основе метода и параметров из derivedKeyAlgorithm.
Вызов этого метода эквивалентен вызову subtle.deriveBits() для генерации исходного ключевого материала с последующей передачей результата методу subtle.importKey() с использованием параметров deriveKeyAlgorithm, extractable и keyUsages.
В настоящее время поддерживаются следующие алгоритмы:
subtle.digest(algorithm, data)
-
algorithm<string> | <Algorithm> | <CShakeParams> -
data<ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> - Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.
Используя метод, заданный в algorithm, этот метод пытается вычислить дайджест для data. В случае успеха возвращённый промис выполняется с объектом <ArrayBuffer>, содержащим вычисленный дайджест.
Если algorithm задан как <string>, он должен принимать одно из следующих значений:
Если algorithm задан как <Object>, он должен иметь свойство name, значение которого должно быть одним из перечисленных выше.
subtle.encapsulateBits(encapsulationAlgorithm, encapsulationKey)
-
encapsulationAlgorithm<string> | <Algorithm> -
encapsulationKey<CryptoKey> - Возвращает: <Promise> В случае успеха выполняется с результатом <EncapsulatedBits>.
Использует асимметричный открытый ключ получателя сообщения для шифрования временного симметричного ключа. Этот зашифрованный ключ является «инкапсулированным ключом», представленным как <EncapsulatedBits>.
В настоящее время поддерживаются следующие алгоритмы:
subtle.encapsulateKey(encapsulationAlgorithm, encapsulationKey, sharedKeyAlgorithm, extractable, usages)
-
encapsulationAlgorithm<string> | <Algorithm> -
encapsulationKey<CryptoKey> -
sharedKeyAlgorithm<string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams> | <KmacImportParams> -
extractable<boolean> -
usages<string[]> См. Назначения ключа. - Возвращает: <Promise> В случае успеха выполняется с результатом <EncapsulatedKey>.
Использует асимметричный открытый ключ получателя сообщения для шифрования временного симметричного ключа. Этот зашифрованный ключ является «инкапсулированным ключом», представленным как <EncapsulatedKey>.
В настоящее время поддерживаются следующие алгоритмы:
subtle.encrypt(algorithm, key, data)
-
algorithm<RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AeadParams> -
key<CryptoKey> -
data<ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> - Возвращает: <Promise> В случае успеха выполняется с результатом <ArrayBuffer>.
Используя метод и параметры, заданные в algorithm, а также ключевой материал, предоставленный key, этот метод пытается зашифровать data. В случае успеха возвращённый промис выполняется с объектом <ArrayBuffer>, содержащим результат шифрования.
В настоящее время поддерживаются следующие алгоритмы:
subtle.exportKey(format, key)
-
format<string> Должен быть одним из следующих значений:'raw','pkcs8','spki','jwk','raw-secret'4,'raw-public'4 или'raw-seed'4. -
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'4
|
✔ | ✔ | |||||
'ChaCha20-Poly1305'4
|
✔ | ✔ | |||||
'ECDH' |
✔ | ✔ | ✔ | ✔ | ✔ | ||
'ECDSA' |
✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed25519' |
✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed448'5
|
✔ | ✔ | ✔ | ✔ | ✔ | ||
'HMAC' |
✔ | ✔ | ✔ | ||||
'KMAC128'4
|
✔ | ✔ | |||||
'KMAC256'4
|
✔ | ✔ | |||||
'ML-DSA-44'4
|
✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-65'4
|
✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-87'4
|
✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-512'4
|
✔ | ✔ | ✔ | ✔ | |||
'ML-KEM-768'4
|
✔ | ✔ | ✔ | ✔ | |||
'ML-KEM-1024'4
|
✔ | ✔ | ✔ | ✔ | |||
'RSA-OAEP' |
✔ | ✔ | ✔ | ||||
'RSA-PSS' |
✔ | ✔ | ✔ | ||||
'RSASSA-PKCS1-v1_5' |
✔ | ✔ | ✔ |
subtle.getPublicKey(key, keyUsages)
-
key<CryptoKey> Приватный ключ, из которого следует получить соответствующий открытый ключ. -
keyUsages<string[]> См. Назначения ключей. - Возвращает: <Promise> В случае успеха выполняется с <CryptoKey>.
Получает открытый ключ из заданного приватного ключа.
subtle.generateKey(algorithm, extractable, keyUsages)
-
algorithm<string> | <Algorithm> | <RsaHashedKeyGenParams> | <EcKeyGenParams> | <HmacKeyGenParams> | <AesKeyGenParams> | <KmacKeyGenParams>
-
extractable<boolean> -
keyUsages<string[]> См. Назначения ключей. - Возвращает: <Promise> В случае успеха выполняется с <CryptoKey> | <CryptoKeyPair>.
Используя параметры, указанные в algorithm, этот метод пытается сгенерировать новый ключевой материал. В зависимости от используемого алгоритма создаётся либо один <CryptoKey>, либо <CryptoKeyPair>.
Поддерживаются следующие алгоритмы генерации <CryptoKeyPair> (открытого и приватного ключей):
'ECDH''ECDSA''Ed25519'-
'Ed448'5 -
'ML-DSA-44'4 -
'ML-DSA-65'4 -
'ML-DSA-87'4 -
'ML-KEM-512'4 -
'ML-KEM-768'4 -
'ML-KEM-1024'4 'RSA-OAEP''RSA-PSS''RSASSA-PKCS1-v1_5''X25519'-
'X448'5
Поддерживаются следующие алгоритмы генерации <CryptoKey> (секретного ключа):
subtle.importKey(format, keyData, algorithm, extractable, keyUsages)
-
format<string> Должен быть одним из следующих значений:'raw','pkcs8','spki','jwk','raw-secret'4,'raw-public'4 или'raw-seed'4. -
keyData<ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <Object>
-
algorithm<string> | <Algorithm> | <RsaHashedImportParams> | <EcKeyImportParams> | <HmacImportParams> | <KmacImportParams>
-
extractable<boolean> -
keyUsages<string[]> См. Назначения ключей. - Возвращает: <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'4
|
✔ | ✔ | |||||
'Argon2d'4
|
✔ | ||||||
'Argon2i'4
|
✔ | ||||||
'Argon2id'4
|
✔ | ||||||
'ChaCha20-Poly1305'4
|
✔ | ✔ | |||||
'ECDH' |
✔ | ✔ | ✔ | ✔ | ✔ | ||
'ECDSA' |
✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed25519' |
✔ | ✔ | ✔ | ✔ | ✔ | ||
'Ed448'5
|
✔ | ✔ | ✔ | ✔ | ✔ | ||
'HDKF' |
✔ | ✔ | |||||
'HMAC' |
✔ | ✔ | ✔ | ||||
'KMAC128'4
|
✔ | ✔ | |||||
'KMAC256'4
|
✔ | ✔ | |||||
'ML-DSA-44'4
|
✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-65'4
|
✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-DSA-87'4
|
✔ | ✔ | ✔ | ✔ | ✔ | ||
'ML-KEM-512'4
|
✔ | ✔ | ✔ | ✔ | |||
'ML-KEM-768'4
|
✔ | ✔ | ✔ | ✔ | |||
'ML-KEM-1024'4
|
✔ | ✔ | ✔ | ✔ | |||
'PBKDF2' |
✔ | ✔ | |||||
'RSA-OAEP' |
✔ | ✔ | ✔ | ||||
'RSA-PSS' |
✔ | ✔ | ✔ | ||||
'RSASSA-PKCS1-v1_5' |
✔ | ✔ | ✔ | ||||
'X25519' |
✔ | ✔ | ✔ | ✔ | ✔ | ||
'X448'5
|
✔ | ✔ | ✔ | ✔ | ✔ |
subtle.sign(algorithm, key, data)
-
algorithm<string> | <Algorithm> | <RsaPssParams> | <EcdsaParams> | <ContextParams> | <KmacParams> -
key<CryptoKey> -
data<ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> - Возвращает: <Promise> В случае успеха выполняется с <ArrayBuffer>.
Используя метод и параметры, заданные в algorithm, а также ключевой материал, предоставленный в key, этот метод пытается создать криптографическую подпись для data. В случае успеха возвращённый промис выполняется с <ArrayBuffer>, содержащим созданную подпись.
В настоящее время поддерживаются следующие алгоритмы:
subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)
-
format<string> Должно быть одним из значений'raw','pkcs8','spki','jwk','raw-secret'4,'raw-public'4 или'raw-seed'4. -
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[]> См. раздел Назначение ключа. - Возвращает: <Promise> При успешном выполнении возвращается объект <CryptoKey>.
В криптографии «упаковка ключа» означает экспорт и последующее шифрование ключевого материала. Этот метод пытается расшифровать упакованный ключ и создать экземпляр <CryptoKey>. Он эквивалентен сначала вызову метода subtle.decrypt() для зашифрованных данных ключа (с использованием аргументов wrappedKey, unwrapAlgo и unwrappingKey в качестве входных данных), а затем передаче результата методу subtle.importKey() с использованием аргументов unwrappedKeyAlgo, extractable и keyUsages в качестве входных данных. В случае успеха возвращённое обещание выполняется с объектом <CryptoKey>.
В настоящее время поддерживаются следующие алгоритмы упаковки:
Поддерживаются следующие алгоритмы распакованного ключа:
subtle.verify(algorithm, key, signature, data)
-
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.
В настоящее время поддерживаются следующие алгоритмы:
subtle.wrapKey(format, key, wrappingKey, wrapAlgo)
-
format<string> Должно быть одним из значений'raw','pkcs8','spki','jwk','raw-secret'4,'raw-public'4 или'raw-seed'4. -
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.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.secretValue
- Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
Представляет необязательное секретное значение.
argon2Params.version
- Тип: <number>
Представляет номер версии Argon2. Версия по умолчанию и единственная определенная на данный момент — 19 (0x13).
Класс: ContextParams
contextParams.context
- Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>
Свойство context представляет необязательные контекстные данные, связываемые с сообщением.
Класс: CShakeParams
cShakeParams.customization
- Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>
Свойство customization представляет строку настройки. Реализация Web Crypto API в Node.js поддерживает только строку настройки нулевой длины, что равнозначно ее отсутствию.
cShakeParams.functionName
- Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>
Свойство functionName представляет имя функции, используемое NIST для определения функций на основе cSHAKE. Реализация Web Crypto API в Node.js поддерживает только имя функции нулевой длины, что равнозначно отсутствию functionName.
cShakeParams.length
- Тип: <number> задает запрошенную длину выходных данных в битах.
Класс: EcdhKeyDeriveParams
ecdhKeyDeriveParams.public
- Тип: <CryptoKey>
Вывод ключа ECDH выполняется путем получения в качестве входных данных закрытого ключа одной стороны и открытого ключа другой стороны, которые используются для создания общего секрета. Свойству ecdhKeyDeriveParams.public присваивается открытый ключ другой стороны.
Класс: EcdsaParams
ecdsaParams.hash
- Тип: <string> | <Algorithm>
Если значение представлено как <string>, оно должно быть одним из следующих:
Если значение представлено как <Algorithm>, свойство name объекта должно иметь одно из перечисленных выше значений.
ecdsaParams.name
- Тип: <string> Должно быть
'ECDSA'.
Класс: 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
- Тип: <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
- Тип: <string> | <Algorithm>
Если значение представлено как <string>, оно должно быть одним из следующих:
Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.
hmacImportParams.length
- Тип: <number>
Необязательное количество битов в ключе HMAC. Этот параметр необязателен и в большинстве случаев его следует опускать.
hmacImportParams.name
- Тип: <string> Должно быть
'HMAC'.
Класс: HmacKeyGenParams
hmacKeyGenParams.hash
- Тип: <string> | <Algorithm>
Если значение представлено как <string>, оно должно быть одним из следующих:
Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.
hmacKeyGenParams.length
- Тип: <number>
Количество битов для генерации ключа HMAC. Если этот параметр опущен, длина определяется используемым алгоритмом хеширования. Параметр необязателен, и в большинстве случаев его следует опускать.
hmacKeyGenParams.name
- Тип: <string> Должно быть
'HMAC'.
Класс: KeyAlgorithm
keyAlgorithm.name
- Тип: <string>
Класс: KmacImportParams
kmacImportParams.length
- Тип: <number>
Необязательное количество битов в ключе KMAC. Этот параметр необязателен и в большинстве случаев его следует опускать.
kmacImportParams.name
- Тип: <string> Должно быть
'KMAC128'или'KMAC256'.
Класс: KmacKeyAlgorithm
kmacKeyAlgorithm.name
- Тип: <string>
Класс: KmacKeyGenParams
kmacKeyGenParams.length
- Тип: <number>
Количество битов для генерации ключа KMAC. Если этот параметр опущен, длина определяется используемым алгоритмом KMAC. Параметр необязателен, и в большинстве случаев его следует опускать.
kmacKeyGenParams.name
- Тип: <string> Должно быть
'KMAC128'или'KMAC256'.
Класс: KmacParams
kmacParams.algorithm
- Тип: <string> Должно быть
'KMAC128'или'KMAC256'.
kmacParams.customization
- Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>
Элемент customization представляет необязательную строку настройки.
kmacParams.length
- Тип: <number>
Длина выходных данных в байтах. Должна быть положительным целым числом.
Класс: Pbkdf2Params
pbkdf2Params.hash
- Тип: <string> | <Algorithm>
Если значение представлено как <string>, оно должно быть одним из следующих:
Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.
pbkdf2Params.iterations
- Тип: <number>
Количество итераций, выполняемых алгоритмом PBKDF2 при получении битов.
pbkdf2Params.name
- Тип: <string> Должно быть
'PBKDF2'.
pbkdf2Params.salt
- Тип: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
Должно содержать не менее 16 случайных или псевдослучайных байтов.
Класс: RsaHashedImportParams
rsaHashedImportParams.hash
- Тип: <string> | <Algorithm>
Если значение представлено как <string>, оно должно быть одним из следующих:
Если значение представлено как <Algorithm>, свойство name объекта должно быть одним из перечисленных выше значений.
rsaHashedImportParams.name
- Тип: <string> Должно быть одним из
'RSASSA-PKCS1-v1_5','RSA-PSS'или'RSA-OAEP'.
Класс: RsaHashedKeyAlgorithm
rsaHashedKeyAlgorithm.hash
- Тип: <Algorithm>
rsaHashedKeyAlgorithm.name
- Тип: <string>
Класс: RsaHashedKeyGenParams
rsaHashedKeyGenParams.hash
- Тип: <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>, содержащий беззнаковое целое число в порядке от старшего байта к младшему, которое должно умещаться в 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>
Длина (в байтах) используемой случайной соли.
Сноски
-
См. раздел Современные алгоритмы в Web Cryptography API ↩ ↩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 ↩58 ↩59 ↩60 ↩61 ↩62 ↩63 ↩64 ↩65 ↩66 ↩67 ↩68 ↩69 ↩70 ↩71 ↩72 ↩73 ↩74 ↩75 ↩76 ↩77 ↩78 ↩79 ↩80 ↩81 ↩82 ↩83 ↩84 ↩85 ↩86 ↩87 ↩88 ↩89 ↩90 ↩91 ↩92 ↩93 ↩94 ↩95 ↩96 ↩97 ↩98 ↩99 ↩100 ↩101 ↩102 ↩103 ↩104 ↩105 ↩106 ↩107 ↩108 ↩109 ↩110 ↩111 ↩112 ↩113 ↩114 ↩115 ↩116 ↩117 ↩118 ↩119 ↩120 ↩121 ↩122 ↩123 ↩124 ↩125 ↩126 ↩127 ↩128 ↩129 ↩130 ↩131 ↩132 ↩133 ↩134 ↩135 ↩136 ↩137 ↩138 ↩139 ↩140 ↩141 ↩142 ↩143 ↩144 ↩145 ↩146 ↩147 ↩148 ↩149 ↩150
-
См. раздел Защищённые эллиптические кривые в Web Cryptography API ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 ↩22 ↩23 ↩24
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v24.x/docs/api/webcrypto.html