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 19 20 21 22 23 24 |
|
Примеры¶
Генерация ключей¶
Класс SubtleCrypto
можно использовать для генерации симметричных (секретных) ключей или пар асимметричных ключей (открытый ключ и закрытый ключ).
AES ключи¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Пары ключей ECDSA¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Ключевые пары Ed25519/Ed448/X25519/X448¶
Стабильность: 1 – Экспериментальная
Фича изменяется и не допускается флагом командной строки. Может быть изменена или удалена в последующих версиях.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
HMAC ключи¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Пары ключей RSA¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Шифрование и дешифрование¶
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 |
|
Экспорт и импорт ключей¶
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 |
|
Завертывание и разворачивание ключей¶
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 |
|
Подпишите и проверьте¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Получение битов и ключей¶
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 58 59 60 |
|
Дайджест¶
1 2 3 4 5 6 7 8 9 10 |
|
Матрица алгоритмов¶
В таблице подробно описаны алгоритмы, поддерживаемые реализацией Node.js Web Crypto API, и API, поддерживаемые для каждого из них:
Алгоритм | generateKey |
exportKey |
importKey |
encrypt |
decrypt |
wrapKey |
unwrapKey |
deriveBits |
deriveKey |
sign |
verify |
digest |
---|---|---|---|---|---|---|---|---|---|---|---|---|
'RSASSA-PKCS1-v1_5' |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'RSA-PSS' |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'RSA-OAEP' |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
'ECDSA' |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'Ed25519' [1] |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'Ed448' [2] |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'ECDH' |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'X25519' [3] |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'X448' [4] |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'AES-CTR' |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
'AES-CBC' |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
'AES-GCM' |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
'AES-KW' |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'HMAC' |
✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'HKDF' |
✔ | ✔ | ✔ | ✔ | ||||||||
'PBKDF2' |
✔ | ✔ | ✔ | ✔ | ||||||||
'SHA-1' |
✔ | |||||||||||
'SHA-256' |
✔ | |||||||||||
'SHA-384' |
✔ | |||||||||||
'SHA-512' |
✔ |
Класс: 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>
Генерирует случайный RFC 4122 UUID версии 4. UUID генерируется с помощью криптографического генератора псевдослучайных чисел.
Класс: CryptoKey
¶
cryptoKey.algorithm
¶
- Тип: {AesKeyGenParams|RsaHashedKeyGenParams|EcKeyGenParams|HmacKeyGenParams}
Объект, детализирующий алгоритм, для которого может быть использован ключ, вместе с дополнительными параметрами, специфичными для данного алгоритма.
Только для чтения.
cryptoKey.extractable
¶
- Тип:
<boolean>
Если true
, {CryptoKey} может быть извлечен с помощью subtleCrypto.exportKey()
или subtleCrypto.wrapKey()
.
Только для чтения.
cryptoKey.type
¶
- Тип:
<string>
Одно из'secret'
,'private'
или'public'
.
Строка, определяющая, является ли ключ симметричным ('secret'
) или асимметричным ('private'
или 'public'
) ключом.
cryptoKey.usages
¶
- Тип:
<string[]>
Массив строк, определяющих операции, для которых может быть использован ключ.
Возможные варианты использования следующие:
'encrypt'
- ключ может быть использован для шифрования данных.'decrypt'
- ключ может быть использован для расшифровки данных.'sign'
- Ключ может использоваться для создания цифровых подписей.'verify'
- Ключ может использоваться для проверки цифровых подписей.'deriveKey'
- Ключ может быть использован для получения нового ключа.'deriveBits'
- Ключ может быть использован для получения битов.'wrapKey'
- Ключ может быть использован для получения другого ключа.'unwrapKey'
- Ключ может быть использован для разворачивания другого ключа.
Допустимые варианты использования ключа зависят от алгоритма ключа (определяется cryptokey.algorithm.name
).
Key Type | 'encrypt' |
'decrypt' |
'sign' |
'verify' |
'deriveKey' |
'deriveBits' |
'wrapKey' |
'unwrapKey' |
---|---|---|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ✔ | ✔ | ||||
'AES-CTR' | ✔ | ✔ | ✔ | ✔ | ||||
'AES-GCM' | ✔ | ✔ | ✔ | ✔ | ||||
'AES-KW' | ✔ | ✔ | ||||||
'ECDH' | ✔ | ✔ | ||||||
'X25519' 1 | ✔ | ✔ | ||||||
'X448' 1 | ✔ | ✔ | ||||||
'ECDSA' | ✔ | ✔ | ||||||
'Ed25519' 1 | ✔ | ✔ | ||||||
'Ed448' 1 | ✔ | ✔ | ||||||
'HDKF' | ✔ | ✔ | ||||||
'HMAC' | ✔ | ✔ | ||||||
'PBKDF2' | ✔ | ✔ | ||||||
'RSA-OAEP' | ✔ | ✔ | ✔ | ✔ | ||||
'RSA-PSS' | ✔ | ✔ | ||||||
'RSASSA-PKCS1-v1_5' | ✔ | ✔ |
Класс: CryptoKeyPair
¶
CryptoKeyPair
- это простой словарный объект со свойствами publicKey
и privateKey
, представляющий пару асимметричных ключей.
cryptoKeyPair.privateKey
¶
- Тип: {CryptoKey} Криптоключ {CryptoKey},
тип
которого будет'private'
.
cryptoKeyPair.publicKey
¶
- Тип: {CryptoKey} Криптоключ {CryptoKey},
тип
которого будет"public"
.
Класс: SubtleCrypto
¶
subtle.decrypt(algorithm, key, data)
¶
algorithm
: {RsaOaepParams|AesCtrParams|AesCbcParams|AesGcmParams}key
: {CryptoKey}data
: {ArrayBuffer|TypedArray|DataView|Buffer}- Возвращает:
<Promise>
, содержащий<ArrayBuffer>
.
Используя метод и параметры, указанные в algorithm
, и ключевой материал, предоставленный key
, subtle.decrypt()
пытается расшифровать предоставленные data
. В случае успеха, возвращаемое обещание будет разрешено с <ArrayBuffer>
, содержащим результат в виде открытого текста.
В настоящее время поддерживаются следующие алгоритмы:
RSA-OAEP
AES-CTR
AES-CBC
AES-GCM
subtle.deriveBits(algorithm, baseKey, length)
¶
algorithm
: {AlgorithmIdentifier|EcdhKeyDeriveParams|HkdfParams|Pbkdf2Params}baseKey
: {CryptoKey}length
:<number>
|<null>
- Возвращает:
<Promise>
, содержащий<ArrayBuffer>
.
Используя метод и параметры, указанные в algorithm
, и ключевой материал, предоставленный baseKey
, subtle.deriveBits()
пытается сгенерировать биты length
.
Реализация Node.js требует, чтобы, когда length
является числом, оно было кратно 8
.
Когда length
равно null
, генерируется максимальное количество битов для данного алгоритма. Это разрешено для алгоритмов 'ECDH
, 'X25519
и 'X448
.
В случае успеха возвращаемое обещание будет разрешено с <ArrayBuffer>
, содержащим сгенерированные данные.
В настоящее время поддерживаются следующие алгоритмы:
'ECDH'
'X25519'
'X448'
'HKDF'
'PBKDF2'
subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)
¶
algorithm
: {AlgorithmIdentifier|EcdhKeyDeriveParams|HkdfParams|Pbkdf2Params}baseKey
: {CryptoKey}derivedKeyAlgorithm
: {HmacKeyGenParams|AesKeyGenParams}extractable
:<boolean>
keyUsages
:<string[]>
See Key usages.- Возвращает:
<Promise>
, содержащий {CryptoKey}.
Используя метод и параметры, указанные в algorithm
, и ключевой материал, предоставленный baseKey
, subtle.deriveKey()
пытается сгенерировать новый {CryptoKey} на основе метода и параметров в derivedKeyAlgorithm
.
Вызов subtle.deriveKey()
эквивалентен вызову subtle.deriveBits()
для генерации исходного ключевого материала, а затем передаче результата в метод subtle.importKey()
с использованием параметров deriveKeyAlgorithm
, extractable
и keyUsages
в качестве входных.
В настоящее время поддерживаются следующие алгоритмы:
'ECDH'
'X25519'
[11]'X448'
[12]'HKDF'
ПБКДФ2
subtle.digest(algorithm, data)
¶
алгоритм
: {string|Object}данные
: {ArrayBuffer|TypedArray|DataView|Buffer}- Возвращает:
<Promise>
, содержащий<ArrayBuffer>
Используя метод, определенный алгоритмом
, subtle.digest()
пытается сгенерировать дайджест данных
. В случае успеха возвращаемое обещание разрешается с <ArrayBuffer>
, содержащим вычисленный дайджест.
Если algorithm
указан как <string>
, он должен быть одним из:
'SHA-1'
SHA-256
SHA-384
SHA-512
.
Если algorithm
предоставлен как <Object>
, он должен иметь свойство name
, значение которого является одним из вышеперечисленных.
subtle.encrypt(algorithm, key, data)
¶
алгоритм
: {RsaOaepParams|AesCtrParams|AesCbcParams|AesGcmParams}ключ
: {CryptoKey}- Возвращает:
<Promise>
, содержащий<ArrayBuffer>
.
Используя метод и параметры, указанные algorithm
, и ключевой материал, предоставленный key
, subtle.encrypt()
пытается зашифровать данные
. В случае успеха возвращаемое обещание разрешается с <ArrayBuffer>
, содержащим зашифрованный результат.
В настоящее время поддерживаются следующие алгоритмы:
RSA-OAEP
AES-CTR
AES-CBC
AES-GCM
subtle.exportKey(format, key)
¶
format
:<string>
Must be one of'raw'
,'pkcs8'
,'spki'
, or'jwk'
.key
: {CryptoKey}- Возвращает:
<Promise>
, содержащий {ArrayBuffer|Object}.
Экспортирует заданный ключ в указанный формат, если он поддерживается.
Если {CryptoKey} не может быть извлечен, возвращаемое обещание будет отклонено.
Если формат
равен 'pkcs8'
или 'spki'
и экспорт успешен, возвращаемое обещание будет разрешено с <ArrayBuffer>
, содержащим экспортированные данные ключа.
Если формат
равен 'jwk'
и экспорт успешен, возвращаемое обещание будет разрешено в объект JavaScript, соответствующий спецификации JSON Web Key.
Key Type | 'spki' |
'pkcs8' |
'jwk' |
'raw' |
---|---|---|---|---|
'AES-CBC' |
✔ | ✔ | ||
'AES-CTR' |
✔ | ✔ | ||
'AES-GCM' |
✔ | ✔ | ||
'AES-KW' |
✔ | ✔ | ||
'ECDH' |
✔ | ✔ | ✔ | ✔ |
'ECDSA' |
✔ | ✔ | ✔ | ✔ |
'Ed25519' [13] |
✔ | ✔ | ✔ | ✔ |
'Ed448' [14] |
✔ | ✔ | ✔ | ✔ |
'HDKF' |
||||
'HMAC' |
✔ | ✔ | ||
'PBKDF2' |
||||
'RSA-OAEP' |
✔ | ✔ | ✔ | |
'RSA-PSS' |
✔ | ✔ | ✔ | |
'RSASSA-PKCS1-v1_5' |
✔ | ✔ | ✔ |
subtle.generateKey(algorithm, extractable, keyUsages)
¶
algorithm
: {AlgorithmIdentifier|RsaHashedKeyGenParams|EcKeyGenParams|HmacKeyGenParams|AesKeyGenParams}
extractable
:<boolean>
keyUsages
:<string[]>
See Key usages.- Возвращает:
<Promise>
, содержащий {CryptoKey|CryptoKeyPair}.
Используя метод и параметры, указанные в algorithm
, subtle.generateKey()
пытается сгенерировать новый ключевой материал. В зависимости от используемого метода, метод может генерировать либо один {CryptoKey}, либо {CryptoKeyPair}.
Поддерживаемые алгоритмы генерации {CryptoKeyPair} (открытого и закрытого ключа) включают:
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'RSA-OAEP'
'ECDSA'
'Ed25519'
'Ed448'
'ECDH'
'X25519'
'X448'
Поддерживаются следующие алгоритмы генерации {CryptoKey} (секретного ключа):
HMAC
AES-CTR
AES-CBC
AES-GCM
AES-KW
subtle.importKey(format, keyData, algorithm, extractable, keyUsages)
¶
format
:<string>
. Должен быть одним изraw
,pkcs8
,spki
илиjwk
.keyData
: {ArrayBuffer|TypedArray|DataView|Buffer|Object}algorithm
: {AlgorithmIdentifier|RsaHashedImportParams|EcKeyImportParams|HmacImportParams}extractable
:<boolean>
keyUsages
:<string[]>
См. Key Usages.- Возвращает:
<Promise>
, содержащий {CryptoKey}.
Метод subtle.importKey()
пытается интерпретировать предоставленные keyData
в заданном формате
для создания экземпляра {CryptoKey} с использованием предоставленных аргументов algorithm
, extractable
и keyUsages
. Если импорт прошел успешно, возвращаемое обещание будет разрешено с созданным {CryptoKey}.
Если импортируется ключ 'PBKDF2
, extractable
должно быть false
.
В настоящее время поддерживаются следующие алгоритмы:
Key Type | 'spki' |
'pkcs8' |
'jwk' |
'raw' |
---|---|---|---|---|
'AES-CBC' |
✔ | ✔ | ||
'AES-CTR' |
✔ | ✔ | ||
'AES-GCM' |
✔ | ✔ | ||
'AES-KW' |
✔ | ✔ | ||
'ECDH' |
✔ | ✔ | ✔ | ✔ |
'X25519' [19] |
✔ | ✔ | ✔ | ✔ |
'X448' [20] |
✔ | ✔ | ✔ | ✔ |
'ECDSA' |
✔ | ✔ | ✔ | ✔ |
'Ed25519' [21] |
✔ | ✔ | ✔ | ✔ |
'Ed448' [22] |
✔ | ✔ | ✔ | ✔ |
'HDKF' |
✔ | |||
'HMAC' |
✔ | ✔ | ||
'PBKDF2' |
✔ | |||
'RSA-OAEP' |
✔ | ✔ | ✔ | |
'RSA-PSS' |
✔ | ✔ | ✔ | |
'RSASSA-PKCS1-v1_5' |
✔ | ✔ | ✔ |
subtle.sign(algorithm, key, data)
¶
algorithm
: {AlgorithmIdentifier|RsaPssParams|EcdsaParams|Ed448Params}key
: {CryptoKey}data
: {ArrayBuffer|TypedArray|DataView|Buffer}- Возвращает:
<Promise>
, содержащий<ArrayBuffer>
.
Используя метод и параметры, заданные algorithm
, и ключевой материал, предоставленный key
, subtle.sign()
пытается сгенерировать криптографическую подпись data
. В случае успеха возвращаемое обещание разрешается с <ArrayBuffer>
, содержащим сгенерированную подпись.
В настоящее время поддерживаются следующие алгоритмы:
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'ECDSA'
'Ed25519'
[23]'Ed448'
[24]'HMAC'
subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)
.¶
format
:<string>
Должен быть одним изraw
,pkcs8
,spki
илиjwk
.wrappedKey
: {ArrayBuffer|TypedArray|DataView|Buffer}unwrappingKey
: {CryptoKey}unwrapAlgo
: {AlgorithmIdentifier|RsaOaepParams|AesCtrParams|AesCbcParams|AesGcmParams}unwrappedKeyAlgo
: {AlgorithmIdentifier|RsaHashedImportParams|EcKeyImportParams|HmacImportParams}extractable
:<boolean>
keyUsages
:<string[]>
См. Key Usages.- Возвращает:
<Promise>
, содержащий {CryptoKey}.
В криптографии "обертывание ключа" означает экспорт и последующее шифрование ключевого материала. Метод subtle.unwrapKey()
пытается расшифровать обернутый ключ и создать экземпляр {CryptoKey}. Это эквивалентно вызову subtle.decrypt()
сначала на зашифрованных ключевых данных (используя аргументы wrappedKey
, unwrapAlgo
и unwrappingKey
в качестве входных данных), а затем передаче результатов в метод subtle.importKey()
, используя аргументы unwrappedKeyAlgo
, extractable
и keyUsages
в качестве входных данных. В случае успеха возвращаемое обещание разрешается с объектом {CryptoKey}.
В настоящее время поддерживаются следующие алгоритмы обертывания:
'RSA-OAEP'
'AES-CTR'
'AES-CBC'
'AES-GCM'
'AES-KW'
Поддерживаемые алгоритмы развернутого ключа включают:
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'RSA-OAEP'
'ECDSA'
'Ed25519'
[25]'Ed448'
[26]'ECDH'
'X25519'
[27]'X448'
[28]'HMAC'
'AES-CTR'
'AES-CBC'
'AES-GCM'
'AES-KW'
subtle.verify(algorithm, key, signature, data)
¶
algorithm
: {AlgorithmIdentifier|RsaPssParams|EcdsaParams|Ed448Params}key
: {CryptoKey}signature
: {ArrayBuffer|TypedArray|DataView|Buffer}data
: {ArrayBuffer|TypedArray|DataView|Buffer}- Возвращает:
<Promise>
, содержащий<boolean>
.
Используя метод и параметры, указанные в algorithm
, и ключевой материал, предоставленный key
, subtle.verify()
пытается проверить, что signature
является действительной криптографической подписью данных
. Возвращаемое обещание разрешается либо с true
, либо с false
.
В настоящее время поддерживаются следующие алгоритмы:
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'ECDSA'
'Ed25519'
'Ed448'
'HMAC'
subtle.wrapKey(format, key, wrappingKey, wrapAlgo)
.¶
format
:<string>
Должен быть одним изraw
,pkcs8
,spki
илиjwk
.key
: {CryptoKey}wrappingKey
: {CryptoKey}wrapAlgo
: {AlgorithmIdentifier|RsaOaepParams|AesCtrParams|AesCbcParams|AesGcmParams}- Возвращает:
<Promise>
, содержащий<ArrayBuffer>
.
В криптографии "обертывание ключа" означает экспорт и последующее шифрование ключевого материала. Метод subtle.wrapKey()
экспортирует ключевой материал в формат, определенный format
, затем шифрует его, используя метод и параметры, указанные wrapAlgo
, и ключевой материал, предоставленный wrappingKey
. Это эквивалентно вызову subtle.exportKey()
с использованием format
и key
в качестве аргументов, затем передаче результата методу subtle.encrypt()
с использованием wrappingKey
и wrapAlgo
в качестве входных данных. В случае успеха возвращенное обещание будет разрешено с <ArrayBuffer>
, содержащим зашифрованные ключевые данные.
В настоящее время поддерживаются следующие алгоритмы обертывания:
RSA-OAEP
AES-CTR
AES-CBC
AES-GCM
AES-KW
Параметры алгоритма¶
Объекты параметров алгоритма определяют методы и параметры, используемые различными методами {SubtleCrypto}. Хотя они описаны здесь как "классы", они являются простыми объектами словаря JavaScript.
Класс: AlgorithmIdentifier
¶
algorithmIdentifier.name
¶
- Тип:
<string>
Класс: AesCbcParams
¶
aesCbcParams.iv
¶
- Тип: {ArrayBuffer|TypedArray|DataView|Buffer}
Предоставляет вектор инициализации. Он должен быть длиной ровно 16 байт и должен быть непредсказуемым и криптографически случайным.
aesCbcParams.name
¶
- Тип:
<string>
Должно бытьAES-CBC
.
Класс: AesCtrParams
¶
aesCtrParams.counter
¶
- Тип: {ArrayBuffer|TypedArray|DataView|Buffer}
Начальное значение блока счетчика. Оно должно быть длиной ровно 16 байт.
Метод AES-CTR
использует самые правые биты длины
блока в качестве счетчика, а оставшиеся биты - в качестве несе.
aesCtrParams.length
¶
- Тип:
<number>
Количество битов вaesCtrParams.counter
, которые будут использоваться в качестве счетчика.
aesCtrParams.name
¶
- Тип:
<string>
Должно бытьAES-CTR
.
Класс: AesGcmParams
¶
aesGcmParams.additionalData
¶
- Тип: {ArrayBuffer|TypedArray|DataView|Buffer|undefined}
В методе AES-GCM additionalData
- это дополнительные входные данные, которые не шифруются, но включаются в проверку подлинности данных. Использование additionalData
является необязательным.
aesGcmParams.iv
¶
- Тип: {ArrayBuffer|TypedArray|DataView|Buffer}
Вектор инициализации должен быть уникальным для каждой операции шифрования с использованием данного ключа.
В идеале это детерминированное 12-байтовое значение, которое вычисляется таким образом, что гарантируется его уникальность для всех вызовов, использующих один и тот же ключ. В качестве альтернативы вектор инициализации может состоять как минимум из 12 криптографически случайных байтов. Более подробную информацию о построении векторов инициализации для AES-GCM см. в разделе 8 NIST SP 800-38D.
aesGcmParams.name
¶
- Тип:
<string>
Должно бытьAES-GCM
.
aesGcmParams.tagLength
¶
- Тип:
<number>
Размер в битах генерируемого тега аутентификации. Это значение должно быть одним из32
,64
,96
,104
,112
,120
или128
. По умолчанию:128
.
Класс: AesKeyGenParams
¶
aesKeyGenParams.length
¶
- Тип:
<number>
Длина генерируемого ключа AES. Она должна быть либо 128
, либо 192
, либо 256
.
aesKeyGenParams.name
¶
- Тип:
<string>
Должно быть одним из'AES-CBC'
,'AES-CTR'
,'AES-GCM'
или'AES-KW'
.
Класс: EcdhKeyDeriveParams
¶
ecdhKeyDeriveParams.name
¶
- Тип:
<string>
Должно бытьECDH
,X25519
илиX448
.
ecdhKeyDeriveParams.public
¶
- Тип: {CryptoKey}
ECDH-производство ключей работает, принимая на вход закрытый ключ одной стороны и открытый ключ другой стороны, и используя их оба для генерации общего разделяемого секрета. Свойство ecdhKeyDeriveParams.public
устанавливается на открытый ключ другой стороны.
Класс: EcdsaParams
¶
ecdsaParams.hash
¶
- Тип: {строка|Объект}
Если представлено как <string>
, значение должно быть одним из:
SHA-1
SHA-256
SHA-384
SHA-512
.
Если объект представлен в виде <Object>
, он должен иметь свойство 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'
.
Класс: Ed448Params
¶
ed448Params.name
¶
- Тип:
<string>
Должно бытьed448
.
ed448Params.context
¶
- Тип: {ArrayBuffer|TypedArray|DataView|Buffer|undefined}
Член context
представляет необязательные данные контекста для связи с сообщением. Реализация Node.js Web Crypto API поддерживает только контекст нулевой длины, что эквивалентно отсутствию контекста вообще.
Класс: HkdfParams
¶
hkdfParams.hash
¶
- Тип: {строка|Объект}
Если представлено как <string>
, значение должно быть одним из:
SHA-1
SHA-256
SHA-384
SHA-512
.
Если объект представлен в виде <Object>
, он должен иметь свойство 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|Object}
Если представлено как <string>
, значение должно быть одним из:
SHA-1
SHA-256
SHA-384
SHA-512
Если объект представлен в виде <Object>
, он должен иметь свойство name
, значение которого равно одному из перечисленных выше значений.
hmacImportParams.length
¶
- Тип:
<number>
Необязательное количество битов в ключе HMAC. Это необязательное значение, и в большинстве случаев его следует опускать.
hmacImportParams.name
¶
- Тип:
<string>
Должно бытьHMAC
.
Класс: HmacKeyGenParams
¶
hmacKeyGenParams.hash
¶
- Тип: {string|Object}
Если представлено как <string>
, значение должно быть одним из:
SHA-1
SHA-256
SHA-384
SHA-512
Если объект представлен в виде <Object>
, он должен иметь свойство name
, значение которого равно одному из перечисленных выше значений.
hmacKeyGenParams.length
¶
- Тип:
<number>
Количество битов для генерации ключа HMAC. Если опущено, длина будет определяться используемым алгоритмом хэширования. Этот параметр является необязательным и в большинстве случаев должен быть опущен.
hmacKeyGenParams.name
¶
- Тип:
<string>
Должно бытьHMAC
.
Класс: Pbkdf2Params
¶
pbkdb2Params.hash
¶
- Тип: {string|Object}
Если представлено как <string>
, значение должно быть одним из:
SHA-1
SHA-256
SHA-384
SHA-512
Если объект представлен в виде <Object>
, он должен иметь свойство name
, значение которого равно одному из перечисленных выше значений.
pbkdf2Params.iterations
¶
- Тип:
<number>
Количество итераций, которые должен сделать алгоритм PBKDF2 при выведении битов.
pbkdf2Params.name
¶
- Тип:
<string>
Должно быть'PBKDF2'
.
pbkdf2Params.salt
¶
- Тип: {ArrayBuffer|TypedArray|DataView|Buffer}
Должно быть не менее 16 случайных или псевдослучайных байт.
Класс: RsaHashedImportParams
¶
rsaHashedImportParams.hash
¶
- Тип: {string|Object}
Если представлено как <string>
, значение должно быть одним из:
SHA-1
SHA-256
SHA-384
SHA-512
Если объект представлен в виде <Object>
, он должен иметь свойство name
, значение которого равно одному из перечисленных выше значений.
rsaHashedImportParams.name
¶
- Тип:
<string>
Должно быть одним из'RSASSA-PKCS1-v1_5'
,'RSA-PSS'
или'RSA-OAEP'
.
Класс: RsaHashedKeyGenParams
¶
rsaHashedKeyGenParams.hash
¶
- Тип: {string|Object}
Если представлено как <string>
, значение должно быть одним из:
SHA-1
SHA-256
SHA-384
SHA-512
Если объект представлен в виде <Object>
, он должен иметь свойство 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>
Длина (в байтах) используемой случайной соли.