Обычно парольная защита производится через веб-сервер, который проверяет пароль и выдаёт контент. Стандартный способ:
.htaccess
и htpasswd
. Но что, если нужно выложить зашифрованную веб-страницу и файлы на публичном хостинге, где у нас нет контроля над сервером? Эту проблему решают инструменты StatiCrypt и Portable Secret.Для шифрования HTML перед публикацией StatiCrypt использует AES-256 и WebCrypto, а расшифровка происходит с помощью ввода пароля в браузере на стороне клиента, как показано в демо (пароль test).
StatiCrypt генерирует статическую страницу, которую можно безопасно заливать на любой хостинг, в том числе бесплатный сторонний хостинг, такой как GitHub Pages.
Страница будет расшифрована в браузере посетителя, когда тот введёт известный ему пароль. В принципе, эту систему можно использовать для шифрования личных заметок, если вы хотите выложить их на общедоступный сервер, чтобы всегда иметь к ним доступ, но при этом надёжно защитить от посторонних глаз.
Расшифровка происходит на обычном JavaScript, то есть со стороны клиента не требуется скачивание и установка дополнительных инструментов, кроме стандартного браузера. Ни хостинг-провайдер, ни интернет-провайдер не получают доступ к этой информации в процессе расшифровки её расшировки в браузере.
Проверить шифрование можно в веб-версии StatiCrypt. Сверху поля для исходного HTML и пароля:
Снизу — результат с зашифрованным HTML:
Есть даже веб-редактор для HTML и различные опции оформления интерфейса:
Консольная утилита StatiCrypt доступна для скачивания на Github, а также в виде пакета NPM. В консольной программе настройка интерфейса для поля ввода пароля производится изменением шаблона
lib/password_template.html
в комплекте утилиты с указанием потом пути к шаблону через флаг -t path/to/my/file.html
. Важно только не изменять фрагмент шифрования в этом шаблоне, в том числе формат переменных /*[|variable|]*/0
с обязательным нулём на конце.Существует готовый шаблон для создания и хостинга одностраничного зашифрованного сайта на GitHub Pages.
По умолчанию поле ввода пароля содержит флажок «Запомнить меня» (Remember me). В этом случае пароль хранится в localStorage (в хешированном виде с солью). Опять же по умолчанию нет срока хранения пароля. Для отключения данной опции при генерации страницы из консоли можно использовать флаг
--remember false
. Срок хранения в днях указывает опция --remember NUMBER_OF_DAYS
.Страница шифруется с помощью AES-256 в режиме CBC, который в контексте StatiCrypt лишён характерных для него уязвимостей. Пароль хешируется с помощью функции PBKDF2: 599 тыс. операций хеширования SHA-256 и 1000 операций SHA-1 (для легаси), что составляет рекомендуемой значение 600 тыс. операций.
По сути, генерируется новая веб-страница (зашифрованная), которая вмещает содержимое старой.
Для наилучшей безопасности рекомендуется использовать пароли длиной более 16-ти символов (буквы, цифры, спецсимволы) и менеджер паролей. Например, опенсорсный Bitwarden. Хотя AES-256 считается надёжным современным шифром, но для лучшей защиты от брутфорса лучше использовать пароли как можно большей длины.
Утилита также умеет генерировать ссылку, которая уже содержит хешированный пароль, для доступа к странице без ввода пароля непосредственно в веб-форме браузера. Такую ссылку можно передавать доверенным лицам или использовать самому, а контент при этом хранится на сервере в зашифрованном виде, недоступном для просмотра ни хостером, ни третьими лицами.
Похожий проект, но для шифрования файлов — Portable Secret. Его можно использовать для шифрования конфиденциальных файлов, которые хранятся в небезопасном месте: на USB-флешке, облачном хостинге, на веб-сайте и т. д. А также для шифрования файлов перед отправкой по открытому каналу: по почте или в мессенджере. В принципе, это современная удобная альтернатива PGP. Есть веб-демо для шифрования в браузере (в офлайне).
Комментарии (5)
pae174
22.12.2024 19:18насколько при современных вычислительных мощностях будет устойчив 16-символьный пароль
Если ваши вычислительные русурсы позволяют перебирать один триллион хэшей в секунду, то на полный перебор всех возможных 16-значных комбинаций [a-zA-Z0-9] у вас уйдет примерно 1.5 миллиарда лет. Триллион хэшей в секунду, возможно, могут выдать только все суперкомпьютеры из списка Топ500 суммарно.
MrSmitix
22.12.2024 19:18Главная уязвимость - это люди. Берём список из самых популярных паролей и поехали)
Spyman
Учитывая что расшифровка будет происходить локально и почти мгновенно, то интересно - насколько при современных вычислительных мощностях будет устойчив 16-символьный пароль. Наверняка можно приспособить какую нибудь cuda и перебирать ооочень быстро, а верефицировать по наличию валидных тегов например.
makkarpov
Если используется правильная криптография - то этап преобразования пароля в ключ специально делают очень ресурсоемким как раз против этого. Причём не только по вычислениям, а еще и по объему требуемой памяти. Условно, расшифровка самого текста может занимать миллисекунду, а восстановление ключа для неё из пароля - секунду и требовать 128 мегабайт быстрой памяти. Примеры - scrypt, argon2.