belun.app Блог
EN

Как зашифровать текст паролем: AES-256 прямо в браузере

Что AES-256-GCM и PBKDF2 делают с вашим сообщением, какой пароль имеет смысл выбирать и в каких случаях браузерное шифрование не подходит.

Навесной замок на клавиатуре ноутбука — шифрование текста паролем в браузере

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

Зашифровать этот текст паролем — маленькое скучное решение. Шифрование текста делает это в браузере, без аккаунта и без загрузки на сервер, так что открытый текст не существует нигде, кроме вкладки, в которой вы его набрали.

Пароль — это ещё не ключ

Эту часть обычно пропускают, а она-то и решает.

AES-256 нужен ключ на 256 бит: 32 байта хорошей случайности. Пароль hunter2 — это семь байт очень плохой случайности. Подставить его напрямую значит оставить атакующему крошечное пространство перебора.

Поэтому пароль сначала проходит через PBKDF2-HMAC-SHA256. Функция хеширует его вместе со случайной 16-байтовой солью, потом хеширует результат ещё раз, и так 600 000 раз. Цифра взята из рекомендаций OWASP по хранению паролей, обновлённых в 2023 году: к тому моменту фермы на видеокартах разогнались настолько, что прежние 10 000 итераций стали украшением.

Вы замечаете это как короткую паузу после нажатия кнопки. Пауза здесь и есть смысл. Тому, кто перебирает миллион паролей, придётся заплатить её миллион раз.

Почему один и тот же текст каждый раз шифруется по-разному

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

Иначе наблюдатель узнаёт кое-что, вообще ничего не расшифровывая. Одинаковый шифротекст во вторник и в пятницу означает, что вы дважды отправили одно и то же. Повторяющиеся блоки внутри сообщения выдают его структуру. Примерно на этом и прославился знаменитый пингвин, зашифрованный в режиме ECB.

Режим GCM добавляет 16-байтовый тег аутентификации. Поменяйте хоть один бит в зашифрованном блоке — расшифровка не пройдёт вовсе, вместо того чтобы выдать мусор, отдалённо похожий на текст. Это удобно: вы узнаёте о подмене, а не доверяете испорченному результату.

Структура, если интересно: байт версии, четыре байта с числом итераций, 16 байт соли, 12 байт IV, дальше шифротекст с тегом. Всё это упаковывается в Base64, который добавляет к размеру примерно треть.

Как выбрать пароль, чтобы он не оказался слабым местом

Четыре случайных слова из списка Diceware на 7776 позиций дают около 51 бита энтропии. Tr0ub4dor&3 даёт примерно 28, хотя из-за спецсимволов кажется «надёжнее». Выигрывают длина и случайность, а не хитрые замены букв.

Что действительно помогает:

  • Сгенерируйте пароль, а не придумывайте. Придуманные людьми пароли кучкуются в предсказуемых местах.
  • Не берите пароль, которым вы куда-то входите. Утечёт там — утечёт и здесь.
  • Отправляйте пароль другим каналом, не тем, где лежит шифротекст. Пароль в соседнем сообщении обесценивает всю затею.
  • Запишите его до того, как закроете вкладку. Восстановления нет. Потерян пароль — потеряно сообщение.

Когда этот инструмент не подходит

Зашифрованная заметка во вкладке браузера не заменяет нормальную работу с ключами. Для файлов берите age или GPG. Для команды, которая постоянно обменивается секретами, — менеджер паролей с общим доступом. Если в вашей модели угроз есть заражённое устройство, веб-страница не спасёт: то, что читает страницу, читает и нажатия клавиш.

А вот для сообщения, которое надо на неделю пристроить в полупубличном месте, размер инструмента ровно тот. Откройте Шифрование текста, вставьте текст, задайте фразу, которую точно вспомните, и скопируйте блок.

Попробуйте инструмент

Шифрование текста →