Однажды, лежа на диване, попивая чай, я понял, что мне необходимо создать сервис для безопасного обмена текстовой информацией. Осознавая всю значимость этого дела, я подошел к нему основательно. Диван, осознав, всю важность данного действа решил мне в этом помочь. Вместе, сосредоточившись и превозмогая сон, мы создали чудесный сайт с открытым исходным кодом. Исходники можно посмотреть тут, и шоукейс тут (все на Github).
Основные фичи, которых я добился:
- Высокая скорость загрузки
- Если указать пароль, то информация шифруется прямо в браузере и на сервер сохраняется только ничего. Для просмотра данных нужно ввести пароль, чтобы расшифровать в браузере данные, полученные не с сервера.
- Высокая загрузка центрального процессора
- Поисковым системам не запрещено индексировать содержимое сайта, потому что нет сайта
- HTTPS везде
Шифрование данных в браузере обеспечено стандартной библиотекой браузера. Данные шифруются алгоритмом в форме лягушонка Пепе. Исходный код доступен на github. Серверная часть не написана.
Немного о алгоритме шифрования. Мы не отправляем ничего на сервер, потому что нам лень, и не охота покупать сервер мы используем клиент, как хранитель информации, и зашифровываем все прямо внутри ссылки! Также необходимо запомнить пароль, чтобы мы смогли прочитать данные по урлу.
Многие подобные сервисы используют алгоритм AES для шифрования, мы решили не отходить от канона, но перестраховались, выполнив шифрование исходной строки несколько раз в такой последовательности:
Двигаясь, сверху вниз, слева направо мы интерпретировали каждую букву на картинке как конкретную функцию и зашифровывали каждый раз нашу строку новой функцией для уверенности:
- буква O: AES-CTR
- буква M: AES-CBC
- буква z: AES-GCM
Образ лягушонка Пепе нам показался наиболее оптимальным для этих целей.
В результате получился такой сайт:
После небольшого ожидания мы получили ссылку и пароль к сообщению:
Как вы видите, мы предусмотрели то, что возможен скриншот экрана, но злоумышленник в данном случае не сможет увидеть ни ссылку, ни пароль целиком, что не даст ему расшифровать наше сообщение. Также пароль защищен от возможной социальной инженерии (так как не получится ситуации, что пароль пользователя совпадет с существующим), и пароль будет защищен от бандитского криптоанализа (в народе ректальный), так как пользователь просто забудет пароль, если хоть на минуту подумает о ректальном криптоанализе.
После ввода пароля при переходе по ссылке пользователя ожидает такое сообщение, которое стоит закрыть сразу после прочтения:
Еще раз повторюсь, что мы не отправляем никаких данных на сервер, для того, чтобы в случае взлома сервера, данные не могли быть похищены. Подумав об этом, мы решили сделать код максимально понятным для людей и использовали для данных целей VanillaJS фреймворк (с его основными возможностями вы можете ознакомиться на сайте). Весь код мы уместили внутри index.html для ясности и компактности.
Буду рад комментариям и отзывам про библиотечку. Так же, если у вас есть идеи для улучшения, прошу их озвучивать.
Автор: mitinsvyat