Обзор спецификации W3C Web Cryptography API

Web Cryptography API представляет собой стандартизированный интерфейс, определённый консорциумом W3C, для выполнения криптографических операций непосредственно в браузерной среде. Спецификация описывает набор низкоуровневых примитивов, позволяющих выполнять операции шифрования, дешифрования, генерации и проверки цифровых подписей, а также управление криптографическими ключами без необходимости использования сторонних библиотек или небезопасных JavaScript-реализаций алгоритмов.

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


Архитектурная модель Web Crypto API

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

Основные компоненты архитектуры:

1. Crypto интерфейс

  • Доступен через глобальный объект window.crypto
  • Включает генератор случайных чисел getRandomValues
  • Содержит подинтерфейс subtle для криптографических операций

2. SubtleCrypto

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

3. CryptoKey

  • Абстракция криптографического ключа
  • Может быть симметричным или асимметричным
  • Поддерживает ограничения использования (extractable, usages)

Принципы проектирования спецификации W3C

Спецификация Web Cryptography API была разработана с учётом нескольких фундаментальных принципов безопасности и совместимости:

Изоляция криптографических операций

Операции выполняются в защищённой среде браузера, что исключает прямой доступ к внутренним механизмам реализации алгоритмов.

Отсутствие собственных реализаций алгоритмов в JavaScript

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

Асинхронность всех операций

Криптографические вычисления могут быть ресурсоёмкими, поэтому все операции выполняются асинхронно через Promise, предотвращая блокировку UI-потока.

Стандартизация алгоритмов

Поддержка строго определённого набора алгоритмов, таких как:

  • AES-CBC
  • AES-GCM
  • RSA-OAEP
  • RSASSA-PKCS1-v1_5
  • ECDSA
  • SHA-1, SHA-256, SHA-384, SHA-512

Область применения Web Cryptography API

Спецификация ориентирована на широкий спектр сценариев, связанных с безопасностью данных в веб-приложениях.

Шифрование данных на стороне клиента

Web Crypto API позволяет выполнять симметричное и асимметричное шифрование, что особенно важно для:

  • хранения конфиденциальной информации в браузере
  • защиты локальных данных
  • реализации end-to-end encryption

Цифровые подписи

Поддержка асимметричных алгоритмов позволяет реализовывать:

  • проверку целостности сообщений
  • аутентификацию источника данных
  • защиту от подделки запросов

Хэширование

Функции хэширования используются для:

  • проверки целостности данных
  • построения идентификаторов
  • хранения паролей (в сочетании с дополнительными механизмами)

Ключевые сущности спецификации

ArrayBuffer и TypedArray как основа работы с данными

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

  • ArrayBuffer
  • Uint8Array
  • другие TypedArray представления

Это обеспечивает строгую типизацию данных и исключает неоднозначности строкового представления.


CryptoKey и управление ключами

Объект CryptoKey является центральной абстракцией управления ключами. Он содержит:

  • алгоритм ключа
  • тип (secret, public, private)
  • разрешённые операции (encrypt, decrypt, sign, verify, deriveKey)
  • признак извлекаемости (extractable)

Пример логики спецификации:

  • ключ может быть создан, импортирован или экспортирован
  • доступ к ключевому материалу контролируется браузером
  • прямое чтение сырого ключа ограничено

Основные группы алгоритмов в спецификации

Симметричное шифрование

Симметричные алгоритмы используют один ключ для шифрования и дешифрования данных.

AES-GCM

  • обеспечивает конфиденциальность и целостность
  • широко используется в современных веб-приложениях
  • поддерживает аутентифицированное шифрование

AES-CBC

  • классический режим блочного шифрования
  • требует отдельного механизма контроля целостности

Асимметричная криптография

Используется пара ключей: публичный и приватный.

RSA-OAEP

  • применяется для шифрования данных
  • основан на математике RSA

RSASSA-PKCS1-v1_5

  • используется для цифровых подписей
  • поддерживается для совместимости с существующими системами

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

Web Crypto API включает алгоритм digest, реализующий хэширование:

  • SHA-1 (устаревший, ограниченное использование)
  • SHA-256 (наиболее распространённый)
  • SHA-384 и SHA-512 (для повышенной криптографической стойкости)

Поток выполнения операций в SubtleCrypto

Каждая операция в Web Crypto API следует стандартной модели:

  1. Подготовка входных данных (ArrayBuffer)
  2. Вызов метода crypto.subtle
  3. Возврат Promise
  4. Получение результата в бинарном виде

Примерные категории операций:

  • generateKey — создание ключей
  • importKey — импорт ключа из внешнего представления
  • exportKey — экспорт ключа (если разрешено)
  • encrypt / decrypt — симметричное или асимметричное шифрование
  • sign / verify — цифровые подписи
  • digest — вычисление хэша

Ограничения и модель безопасности спецификации

Контекст безопасности (Secure Context)

Web Crypto API доступен только в защищённом контексте:

  • HTTPS
  • localhost

Это предотвращает перехват криптографических операций в незащищённых соединениях.


Ограничение доступа к ключам

Ключи могут быть:

  • неизвлекаемыми (non-extractable)
  • ограниченными по использованию

Это снижает риск утечки ключевого материала через JavaScript.


Отсутствие прямого доступа к алгоритмам

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

  • предсказуемость поведения
  • защиту от внедрения небезопасных реализаций

Формат данных и сериализация

Спецификация строго разделяет:

  • бинарные данные (ArrayBuffer)
  • криптографические ключи (CryptoKey)
  • экспортируемые форматы (JWK, SPKI, PKCS8)

JWK (JSON Web Key)

Используется для представления ключей в JSON-формате, удобном для обмена между сервисами.

SPKI и PKCS8

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


Совместимость и реализация в браузерах

Спецификация W3C Web Cryptography API реализована в современных браузерах с небольшими различиями:

  • Chrome / Chromium-based браузеры: полная поддержка
  • Firefox: полная поддержка с собственными оптимизациями
  • Safari: поддержка с некоторыми ограничениями исторически более позднего внедрения

Несмотря на стандартизацию, различия могут касаться:

  • списка поддерживаемых алгоритмов
  • производительности отдельных операций
  • поведения при импорте/экспорте ключей

Роль спецификации в современной веб-криптографии

Web Cryptography API стала базовым уровнем криптографической инфраструктуры веба. Она используется как фундамент для:

  • библиотек end-to-end encryption
  • WebAuthn и механизмов аутентификации
  • защищённых мессенджеров в браузере
  • криптографических протоколов поверх HTTP

Её появление позволило отказаться от небезопасных JavaScript-реализаций криптографических алгоритмов и перенести ответственность за корректность реализации на уровень браузера и операционной системы.