🔐
Безопасность
March 20, 20267 min readBy BrowseryTools Team

Шифрование текста: клиентское шифрование и AES-256

Что такое клиентское шифрование, как работает AES-256-GCM, чем симметричное шифрование отличается от асимметричного и как безопасно шифровать текст прямо в браузере.

шифрованиеaesконфиденциальностьбезопасностькриптография

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

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

Что на самом деле означает клиентское шифрование

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

Это существенно отличается от серверного шифрования (также называемого «шифрованием в состоянии покоя»), при котором сервер получает ваши данные в открытом виде и затем шифрует их для хранения, используя ключи, которые контролирует сам сервер. В этой модели поставщик услуг всегда может расшифровать ваши данные. При клиентском шифровании данные может прочитать только тот, кто держит ключ — который никогда не покидает ваше устройство.

Практическое следствие: если кто-то взломает сервер и похитит зашифрованные данные, у него не будет ничего полезного. Зашифрованный текст требует ключа для расшифровки, а ключ никогда не находился на сервере.

Симметричное против асимметричного шифрования

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

  • Симметричное шифрование (AES) — один ключ шифрует данные, и тот же ключ расшифровывает их. Быстрое, эффективное и подходящее для шифрования больших объёмов данных. Проблема — распределение ключей: как безопасно передать ключ тому, кому нужно расшифровать данные? Для личного использования (шифрование собственных заметок) симметричное шифрование идеально — у вас единственный ключ. AES (Advanced Encryption Standard) является доминирующим симметричным алгоритмом.
  • Асимметричное шифрование (RSA, ECDH) — два математически связанных ключа: публичный ключ, который может использовать любой для шифрования данных, и приватный ключ, которым владеет только хозяин и использует для расшифровки. Решает проблему распределения ключей — вы можете свободно делиться публичным ключом. Значительно медленнее симметричного шифрования для больших данных. Большинство реальных систем используют асимметричное шифрование только для обмена симметричным ключом, а затем переключаются на AES для основных данных. Именно так работает TLS (HTTPS).

Почему AES-256 является стандартом

AES-256 означает AES с 256-битным ключом. Размер ключа 256 бит означает наличие 2256 возможных ключей — числа настолько большого, что перебор его невозможен с любой технологией, существующей или теоретически возможной на классических компьютерах. Для перспективы: если бы каждый атом в наблюдаемой Вселенной был компьютером, проверяющим миллиард ключей в секунду, потребовалось бы больше времени, чем возраст Вселенной, чтобы перебрать все 2256 ключей.

AES также является стандартом NIST (Национального института стандартов и технологий США), подвергался обширному криптоанализу на протяжении десятилетий без обнаружения практических уязвимостей в самом алгоритме и имеет аппаратное ускорение (инструкции AES-NI) практически в каждом современном процессоре — делая его одновременно наиболее безопасным и наиболее быстрым доступным вариантом. AES-GCM (режим Галуа/счётчика) является рекомендуемым вариантом, поскольку обеспечивает как шифрование, так и аутентификацию (обнаружение изменений зашифрованного текста).

Получение ключа из пароля

AES-256 требует 256-битного (32-байтного) ключа. Пароли, выбранные человеком, — не 32 случайных байта: это короткие строки с паттернами и ограниченным набором символов. Использование пароля напрямую в качестве ключа AES было бы катастрофически небезопасным. Функции формирования ключей (KDF) преодолевают этот разрыв.

KDF принимает пароль и создаёт криптографически стойкий ключ любой желаемой длины. Три наиболее важных KDF:

  • PBKDF2 (Password-Based Key Derivation Function 2) — применяет HMAC-функцию тысячи или сотни тысяч раз (итераций) к паролю. Больше итераций означает больше вычислительной работы для злоумышленника, пытающегося перебрать пароль. PBKDF2 — наиболее широко поддерживаемая KDF, используется в Wi-Fi безопасности WPA2, шифровании устройств iOS и многих веб-системах аутентификации.
  • bcrypt — разработана специально для хеширования паролей с намеренно медленным вычислением. Имеет «коэффициент стоимости», управляющий скоростью. Широко применяется для хранения паролей пользователей в базах данных, но обычно не используется для получения ключей AES.
  • scrypt — добавляет потребление памяти поверх вычислительной стоимости. Злоумышленник, использующий специализированное оборудование (ASIC или GPU), может дёшево запускать PBKDF2 параллельно; scrypt требует настолько много памяти на каждое вычисление, что параллельные атаки становятся дорогостоящими. Используется в некоторых криптовалютных системах и новых приложениях безопасности.

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

Что на самом деле означает «сервер не видит ваши данные»

Когда инструмент утверждает «сервер не видит ваши данные», это означает, что открытый текст никогда не покидает браузер. JavaScript, работающий в браузере, выполняет шифрование локально, и только зашифрованный текст (зашифрованный вывод) когда-либо мог бы передаваться — и только если вы решите его передать.

Инструмент шифрования текста BrowseryTools идёт дальше: ничего не передаётся вообще. Вся операция локальная. Убедиться в этом можно, открыв DevTools браузера, переключившись на вкладку Network и наблюдая, что при шифровании или расшифровке никаких запросов не делается. Инструмент использует Web Crypto API — встроенную криптографическую библиотеку каждого современного браузера — что означает: криптография — это не собственный JavaScript-код; это та же проверенная реализация, которую ваш браузер использует для HTTPS-соединений.

Распространённые заблуждения о браузерном шифровании

  • «HTTPS уже шифрует всё» — HTTPS шифрует данные при передаче между браузером и сервером. Как только данные достигают сервера, они расшифровываются и хранятся в открытом виде (или повторно шифруются ключами, контролируемыми сервером). Клиентское шифрование защищает данные от самого сервера, а не только от перехвата по сети.
  • «JavaScript можно изменить, чтобы украсть мои данные» — справедливо для любого веб-приложения. Именно поэтому для чувствительных случаев использования предпочтительны открытые, проверенные инструменты по сравнению с непрозрачными. Для максимальной безопасности скачайте инструмент и запускайте его офлайн.
  • «Браузерное шифрование слабое» — браузерное шифрование с использованием Web Crypto API и AES-256-GCM — это тот же алгоритм, применяемый корпоративным ПО безопасности и полнодисковым шифрованием операционных систем. Алгоритм не становится слабее от того, что работает в браузере.
  • «Если я забуду пароль, данные можно восстановить» — нет. Клиентское шифрование не предоставляет механизма восстановления. Данные математически невосстановимы без ключа. Это особенность, а не недостаток — но она требует тщательного управления ключами.

Практические сценарии использования

  • Шифрование конфиденциальных заметок — медицинские данные, реквизиты финансовых счетов или личные дневниковые записи, которые вы хотите хранить в облачном приложении для заметок, не доверяя провайдеру
  • Защита конфиденциального текста в документах — встраивание зашифрованных учётных данных или секретов в документ, которым будут делиться, где только получатель, знающий пароль, сможет их прочитать
  • Отправка личных сообщений через публичные каналы — зашифруйте сообщение, поделитесь зашифрованным текстом в публичном канале, а пароль передайте через отдельный приватный канал
  • Безопасные резервные копии — шифрование экспортированных данных перед их хранением в ненадёжном сервисе резервного копирования

Ограничения клиентского шифрования

Клиентское шифрование мощно, но не является полноценным решением безопасности:

  • Слабые пароли нивелируют надёжное шифрование — AES-256 с паролем «hello123» практически не защищает от целеустремлённого злоумышленника, способного проводить словарные атаки
  • Компрометация устройства — если злоумышленник контролирует ваше устройство (вредоносное ПО, кейлоггер), он может перехватить данные до шифрования или перехватить ключ
  • Нет обмена без обмена ключами — передача зашифрованных данных другому человеку требует безопасной передачи ключа — это отдельная проблема
  • Нет поиска или индексирования — зашифрованные данные нельзя искать, сортировать или обрабатывать без предварительной расшифровки

🛠️

Try the Tools — 100% Free, No Sign-Up

Everything runs in your browser. No uploads. No accounts. No ads.

Explore All Tools →