Spec-Zone.ru › Web APIs

SubtleCrypto

Базовая реализация Широко доступна *

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

* Некоторые части этой функции могут иметь различный уровень поддержки.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Защищенная среда: Эта функция доступна только в защищённых контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Интерфейс SubtleCrypto API шифрования веб-приложений предоставляет ряд низкоуровневых криптографических функций.

Имя интерфейса включает термин «скрытый», чтобы указать, что многие его алгоритмы имеют тонкие требования к использованию, и, следовательно, он должен использоваться с осторожностью, чтобы обеспечить соответствующие гарантии безопасности.

Экземпляр SubtleCrypto доступен как свойство subtle интерфейса Crypto, который, в свою очередь, доступен в окнах через свойство Window.crypto и в рабочих процессах через свойство WorkerGlobalScope.crypto.

Предупреждение: Этот API предоставляет ряд низкоуровневых криптографических примитивов. Их очень легко использовать неправильно, и связанные с этим подводные камни могут быть очень скрытыми.

Даже при правильном использовании основных криптографических функций, безопасное управление ключами и общий дизайн системы безопасности очень сложно реализовать, и, как правило, это область специализированных экспертов по безопасности.

Ошибки в проектировании и реализации системы безопасности могут сделать систему безопасности совершенно неэффективной.

Пожалуйста, изучайте и экспериментируйте, но не гарантируйте и не предполагайте безопасность вашей работы, прежде чем её тщательно пересмотрит человек, разбирающийся в этой области. Курс Crypto 101 может быть отличным местом для начала изучения проектирования и реализации безопасных систем.

Свойства экземпляра

Этот интерфейс не наследует никаких свойств, так как у него нет родительского интерфейса.

Методы экземпляра

Этот интерфейс не наследует никаких методов, так как у него нет родительского интерфейса.

SubtleCrypto.encrypt()

Возвращает Promise, который выполняется с зашифрованными данными, соответствующими заданному открытому тексту, алгоритму и ключу.

SubtleCrypto.decrypt()

Возвращает Promise, который выполняется с открытыми данными, соответствующими зашифрованному тексту, алгоритму и ключу.

SubtleCrypto.sign()

Возвращает Promise, который выполняется с подписью, соответствующей тексту, алгоритму и ключу.

SubtleCrypto.verify()

Возвращает Promise, который выполняется со значением булевого типа, указывающим, соответствует ли заданная подпись тексту, алгоритму и ключу.

SubtleCrypto.digest()

Возвращает Promise, который выполняется с дайджестом, сгенерированным из алгоритма и текста.

SubtleCrypto.generateKey()

Возвращает Promise, который выполняется с только что сгенерированным CryptoKey для симметричных алгоритмов или CryptoKeyPair, содержащим два только что сгенерированных ключа для асимметричных алгоритмов. Они будут соответствовать заданному алгоритму, правам доступа и возможности извлечения.

SubtleCrypto.deriveKey()

Возвращает Promise, который выполняется с только что сгенерированным CryptoKey, полученным из основного ключа и заданного алгоритма.

SubtleCrypto.deriveBits()

Возвращает Promise, который выполняется с только что сгенерированным буфером псевдослучайных битов, полученных из основного ключа и заданного алгоритма.

SubtleCrypto.importKey()

Возвращает Promise, который выполняется с CryptoKey, соответствующим формату, алгоритму, сырым данным ключа, правам доступа и возможности извлечения.

SubtleCrypto.exportKey()

Возвращает Promise, который выполняется с сырыми данными ключа, содержащими ключ в требуемом формате.

SubtleCrypto.wrapKey()

Возвращает Promise, который выполняется с зашифрованным симметричным ключом для использования (передачи и хранения) в небезопасных средах. Зашифрованный ключ соответствует указанному в параметрах формату, а шифрование выполняется заданным ключом шифрования с использованием указанного алгоритма.

SubtleCrypto.unwrapKey()

Возвращает Promise, который выполняется с CryptoKey, соответствующим зашифрованному ключу.

Использование SubtleCrypto

Мы можем разделить функции, реализованные этим API, на две группы: криптографические функции и функции управления ключами.

Криптографические функции

Это функции, которые вы можете использовать для реализации функций безопасности, таких как конфиденциальность и аутентификация в системе. API SubtleCrypto предоставляет следующие криптографические функции:

  • sign() и verify(): создание и проверка цифровых подписей.
  • encrypt() и decrypt(): шифрование и дешифрование данных.
  • digest(): создание дайджеста фиксированной длины и стойкого к коллизиям некоторых данных.

Функции управления ключами

За исключением digest(), все криптографические функции в API используют криптографические ключи. В API SubtleCrypto криптографический ключ представлен с помощью объекта CryptoKey. Для выполнения операций, таких как подпись и шифрование, вы передаёте объект CryptoKey в функцию sign() или encrypt().

Генерация и вычисление ключей

Функции generateKey() и deriveKey() обе создают новый объект CryptoKey.

Разница в том, что generateKey() каждый раз при вызове будет генерировать новое уникальное значение ключа, а deriveKey() вычисляет ключ из исходного набора ключей. Если вы предоставите один и тот же набор ключей двум разным вызовам функции deriveKey(), вы получите два объекта CryptoKey с одинаковым внутренним значением. Это полезно, например, для вычисления ключа шифрования из пароля и последующего вычисления того же ключа из того же пароля для расшифровки данных.

Импорт и экспорт ключей

Чтобы ключи были доступны за пределами вашего приложения, вам необходимо экспортировать ключ, и для этого предназначена функция exportKey(). Вы можете выбрать один из ряда форматов экспорта.

Обратной функцией к exportKey() является importKey(). Вы можете импортировать ключи из других систем, и поддержка стандартных форматов, таких как PKCS #8 и JSON Web Key, поможет вам в этом. Функция exportKey() экспортирует ключ в нешифрованном формате.

Если ключ является конфиденциальным, вы должны использовать wrapKey(), которая экспортирует ключ, а затем шифрует его с помощью другого ключа; API использует «ключ для упаковки ключей».

Обратной функцией к wrapKey() является unwrapKey(), которая расшифровывает и затем импортирует ключ.

Хранение ключей

CryptoKey является сериализуемым объектом, что позволяет хранить и извлекать ключи с помощью стандартных API веб-хранилища.

В спецификации предполагается, что большинство разработчиков будут использовать API IndexedDB, храня объекты CryptoKey по идентификатору ключа, имеющему смысл для приложения, наряду с любой другой метаданными, которую оно посчитает полезной. Это позволяет хранить и извлекать объект CryptoKey без необходимости раскрывать его внутренний ключ материалу приложения или среде JavaScript.

Поддерживаемые алгоритмы

Криптографические функции, предоставляемые API Web Crypto, могут выполняться одним или несколькими различными криптографическими алгоритмами: аргумент algorithm функции указывает, какой алгоритм использовать. Некоторые алгоритмы требуют дополнительных параметров: в таких случаях аргумент algorithm — это объект словаря, содержащий дополнительные параметры.

В таблице ниже показано, какие алгоритмы подходят для каких криптографических операций:

sign
verify
encrypt
decrypt
digest deriveBits
deriveKey
wrapKey
unwrapKey
generateKey
exportKey
importKey
RSASSA-PKCS1-v1_5 ✓ ✓ ✓
RSA-PSS ✓ ✓ ✓
ECDSA ✓ ✓ ✓
Ed25519 ✓ ✓ ✓
HMAC ✓ ✓ ✓
RSA-OAEP ✓ ✓ ✓ ✓
AES-CTR ✓ ✓ ✓ ✓
AES-CBC ✓ ✓ ✓ ✓
AES-GCM ✓ ✓ ✓ ✓
AES-KW ✓ ✓ ✓
SHA-1 ✓
SHA-256 ✓
SHA-384 ✓
SHA-512 ✓
ECDH ✓ ✓ ✓
X25519 ✓ ✓ ✓
HKDF ✓ ✓
PBKDF2 ✓ ✓

Спецификации

Спецификация
Web Cryptography API
# subtlecrypto-interface

Совместимость с браузерами

Настольные Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
SubtleCrypto 37 12 34 24 117–11.1 37 34 24 117–11.3 3.0 37
decrypt 37 79
12–79Not supported: AES-CTR.
34 24 7 37 34 24 7 3.0 37
deriveBits 41 79
12–79["Not supported: ECDH.", "Not supported: HKDF, PBKDF2."]
34 28 11 41 34 28 11 4.0 41
deriveKey 41 79
12–79["Not supported: ECDH.", "Not supported: HKDF, PBKDF2."]
34 28 11 41 34 28 11 4.0 41
digest 41
37–41Before version 41, Chrome expected the algorithm parameter to be an object.
79
12–79Not supported: SHA-1.
34 28
24–28Before version 28, Opera expected the algorithm parameter to be an object.
7 41
37–41Before version 41, Chrome Android expected the algorithm parameter to be an object.
34 28
24–28Before version 28, Opera Android expected the algorithm parameter to be an object.
7 4.0
3.0–4.0Before version 4.0, Samsung Internet expected the algorithm parameter to be an object.
41
37–41Before version 41, WebView Android expected the algorithm parameter to be an object.
encrypt 37 79
12–79Not supported: AES-CTR.
34 24 7 37 34 24 7 3.0 37
exportKey 37 79
12–79["Not supported: RSA-PSS, ECDSA, ECDH.", "Not supported: AES-CTR."]
34 24 7 37 34 24 7 3.0 37
generateKey 37 79
12–79["Not supported: RSA-PSS, ECDSA, ECDH.", "Not supported: AES-CTR."]
34 24 7 37 34 24 7 3.0 37
importKey 37 79
12–79["Not supported: RSA-PSS, ECDSA, ECDH.", "Not supported: AES-CTR, HKDF, PBKDF2."]
34 24 7 37 34 24 7 3.0 37
secure_context_required 60 79 75 47 15 60 79 44 15 8.0 60
sign 37 79
12–79Not supported: RSA-PSS, ECDSA.
34 24 7 37 34 24 7 3.0 37
unwrapKey 37 79
12–79Not supported: AES-CTR.
34 24 7 37 34 24 7 3.0 37
verify 37 79
12–79Not supported: RSA-PSS, ECDSA.
34 24 7 37 34 24 7 3.0 37
worker_support 37 79 48 24 11 37 48 24 11 3.0 37
wrapKey 37 79
12–79Not supported: AES-CTR.
34 24 7 37 34 24 7 3.0 37

См. также

  • Web Crypto API
  • Non-cryptographic uses of SubtleCrypto
  • Web security
  • Privacy, permissions, and information security
  • Crypto и Crypto.subtle.
  • Crypto 101: вводный курс по криптографии.

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API