Браузерная криптография изначально функционирует в условиях, которые существенно отличаются от серверных или нативных приложений. Код исполняется в изолированной среде (sandbox), лишённой прямого доступа к аппаратным ресурсам и защищённой от вмешательства операционной системы. Это накладывает ряд фундаментальных ограничений:
Библиотека SJCL (Stanford Javascript Crypto Library) разрабатывалась с учётом этих ограничений, однако полностью нивелировать их невозможно.
Криптографическая стойкость напрямую зависит от качества случайных чисел. В браузере источники энтропии ограничены:
Основные проблемы:
SJCL использует собственный пул энтропии и комбинирует различные источники:
crypto.getRandomValues, если
доступен)Ключевое ограничение: При недостатке энтропии библиотека может генерировать слабые ключи, особенно при мгновенной инициализации без пользовательского взаимодействия.
JavaScript — интерпретируемый язык (или JIT-компилируемый), что делает криптографические вычисления значительно медленнее по сравнению с нативными реализациями.
Факторы снижения производительности:
Практические последствия:
SJCL частично оптимизирована (например, использует битовые массивы вместо строк), но остаётся ограниченной возможностями JavaScript.
Браузерная среда подвержена атакам, которые сложно реализовать в серверной криптографии:
Типы атак:
JavaScript не предоставляет средств для точного контроля времени выполнения, а значит:
SJCL реализует некоторые защитные меры (например, постоянное время выполнения операций), но:
ограничение: невозможно гарантировать полную защиту из-за особенностей движка JavaScript и браузера.
В браузере отсутствует безопасное хранилище уровня операционной системы.
Доступные варианты хранения:
localStoragesessionStorageВсе они:
Критическое ограничение: любой выполненный в контексте страницы скрипт может получить доступ к ключам.
SJCL не решает проблему хранения — она лишь предоставляет инструменты для шифрования данных перед сохранением.
Безопасность криптографии в браузере напрямую зависит от общей безопасности веб-приложения.
Основные угрозы:
Если злоумышленник получает возможность выполнить код:
SJCL не защищает от этих атак, поскольку работает внутри той же среды.
Даже при использовании HTTPS остаются ограничения:
Проблема: SJCL загружается как JavaScript-файл — если он подменён, вся криптография скомпрометирована.
Не все браузеры одинаково поддерживают криптографические возможности:
Различия:
crypto.getRandomValuesSJCL разработана как кросс-браузерная библиотека, но:
В браузере сложно реализовать полноценное управление ключами:
Особенность: ключи нельзя “скрыть” от среды выполнения — они всегда доступны интерпретатору.
Безопасность зависит не только от кода, но и от устройства пользователя:
Даже идеальная реализация SJCL не защищает от:
SJCL не реализует полный спектр криптографии:
Поддерживается:
Не поддерживается или ограничено:
Это ограничивает использование библиотеки в современных протоколах.
Криптография может блокировать интерфейс:
Возможное решение — Web Workers, но:
SJCL изначально не ориентирована на многопоточность.
Ключевая архитектурная проблема браузерной криптографии:
клиентская сторона не является доверенной
Любые вычисления:
Это делает невозможным использование SJCL для:
При увеличении объёма данных:
JavaScript не подходит для:
Современные браузеры предоставляют Web Crypto API, который:
Однако SJCL:
Это создаёт дилемму:
SJCL — относительно старая библиотека:
Использование требует:
Браузерная криптография чаще всего используется для:
Но не для:
SJCL работает в рамках этой модели и не предназначена для построения полностью автономной криптографической системы на клиенте.