Web Cryptography API представляет собой стандартизированный интерфейс, определённый консорциумом W3C, для выполнения криптографических операций непосредственно в браузерной среде. Спецификация описывает набор низкоуровневых примитивов, позволяющих выполнять операции шифрования, дешифрования, генерации и проверки цифровых подписей, а также управление криптографическими ключами без необходимости использования сторонних библиотек или небезопасных JavaScript-реализаций алгоритмов.
Ключевая цель спецификации — обеспечить безопасную, производительную и совместимую реализацию криптографии на стороне клиента с использованием нативных возможностей браузера и операционной системы.
Спецификация описывает API как набор асинхронных операций,
предоставляемых через объект crypto.subtle. Важнейшей
особенностью является строгая изоляция криптографических операций от
синхронного JavaScript-кода, что снижает риск блокировок и утечек данных
через тайминговые атаки.
Основные компоненты архитектуры:
1. Crypto интерфейс
window.cryptogetRandomValuessubtle для криптографических
операций2. SubtleCrypto
Promise3. CryptoKey
Спецификация Web Cryptography API была разработана с учётом нескольких фундаментальных принципов безопасности и совместимости:
Операции выполняются в защищённой среде браузера, что исключает прямой доступ к внутренним механизмам реализации алгоритмов.
API не предполагает ручную реализацию криптографии разработчиком. Вместо этого используются встроенные, проверенные реализации алгоритмов.
Криптографические вычисления могут быть ресурсоёмкими, поэтому все операции выполняются асинхронно через Promise, предотвращая блокировку UI-потока.
Поддержка строго определённого набора алгоритмов, таких как:
Спецификация ориентирована на широкий спектр сценариев, связанных с безопасностью данных в веб-приложениях.
Web Crypto API позволяет выполнять симметричное и асимметричное шифрование, что особенно важно для:
Поддержка асимметричных алгоритмов позволяет реализовывать:
Функции хэширования используются для:
Все криптографические операции работают с бинарными данными. В качестве входных и выходных форматов используются:
ArrayBufferUint8ArrayЭто обеспечивает строгую типизацию данных и исключает неоднозначности строкового представления.
Объект CryptoKey является центральной абстракцией
управления ключами. Он содержит:
Пример логики спецификации:
Симметричные алгоритмы используют один ключ для шифрования и дешифрования данных.
AES-GCM
AES-CBC
Используется пара ключей: публичный и приватный.
RSA-OAEP
RSASSA-PKCS1-v1_5
Web Crypto API включает алгоритм digest, реализующий
хэширование:
Каждая операция в Web Crypto API следует стандартной модели:
crypto.subtleПримерные категории операций:
generateKey — создание ключейimportKey — импорт ключа из внешнего представленияexportKey — экспорт ключа (если разрешено)encrypt / decrypt — симметричное или
асимметричное шифрованиеsign / verify — цифровые подписиdigest — вычисление хэшаWeb Crypto API доступен только в защищённом контексте:
Это предотвращает перехват криптографических операций в незащищённых соединениях.
Ключи могут быть:
Это снижает риск утечки ключевого материала через JavaScript.
Разработчик не может модифицировать реализацию алгоритмов или вмешиваться в процесс их выполнения. Это гарантирует:
Спецификация строго разделяет:
Используется для представления ключей в JSON-формате, удобном для обмена между сервисами.
Используются для асимметричных ключей в бинарных форматах, совместимых с криптографическими системами вне браузера.
Спецификация W3C Web Cryptography API реализована в современных браузерах с небольшими различиями:
Несмотря на стандартизацию, различия могут касаться:
Web Cryptography API стала базовым уровнем криптографической инфраструктуры веба. Она используется как фундамент для:
Её появление позволило отказаться от небезопасных JavaScript-реализаций криптографических алгоритмов и перенести ответственность за корректность реализации на уровень браузера и операционной системы.