Как стать автором
Обновить

Нарушение целостности информации: как общаться в мессенджере и не быть прочитанным третьими лицами

Время на прочтение4 мин
Количество просмотров9.7K

Наверное, все мы когда-нибудь слышали дискуссии о том, что наши мессенджеры читают, что WhatsApp набит бэкдорами, а Telegram прогнулся... Я уже не говорю о тех, чьи аккаунты взломали и вытащили самые откровенные переписки. Согласитесь, не очень хочется писать, когда боишься, что прочитает не тот, кто должен был.

Этот пост не о том, кто и как хранит нашу переписку и куда сливает. Здесь я хочу предложить вам идею разрыва целостности информации. Что же это такое?

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

Это и есть нарушение целостности информации: Вы делите информацию на кусочки и отправляете разными каналами. Так эту информацию сложнее будет собирать.

Сервисы одноразовых записок

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

Как это работает?

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

Ссылка на записку
Ссылка на записку

— Почему никто не сможет прочитать записку, кроме собеседника?

Это одноразовая записка. После того, как Ваш друг прочитает послание оно навсегда удалится с сервера. Поэтому когда кто-то еще найдет у Вас эту ссылку и попытается узнать, что там было, то останется с носом ни с чем. А ежели за вами тотальная слежка и записку прочитает кто-то вперёд Вашего друга, то вы оба об этом узнаете, когда не сможете её открыть, и будете впредь общаться лично.

— А админы сайта не узнают мой пароль?

Здесь самое интересное. При создании записки Ваш браузер генерирует случайный ключ и шифрует им записку. Зашифрованное содержание летит на сервер и ждёт Вашего друга, а ключ приписывается в конец ссылки как якорь, который никогда не отправляется на сервер (RFC, раздел 2.4.1). Когда друг открывает записку, он получает с сервера зашифрованное содержание записки, которая сразу же удалится, а его браузер расшифровывает её ключом из ссылки. Бадумс! Остаётся только сохранить себе все данные, а то второй раз записку уже не откроешь.

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

Private-Net.work Notes — что это и чем отличается от других

Private-Net.work — сервис одноразовых записок, созданный мной. Я постарался объединить всё лучшее, что когда-либо видел и что умею сам: минималистичный дизайн и понятный интерфейс сделают сайт удобным в использовании, шифрование AES защитит Вас от утечек, а отсутствие чего-либо лишнего сыграет на благо обоим пунктам. Кстати, насчёт лишнего.

— А пока я пишу записку, не будут ли на неё смотреть скрипты?

Все необходимые для работы сайта библиотеки и javascript-скрипты хранятся непосредственно на моём сервере. Не используется ничего, что хранится на других сайтах и CDN, чтобы быть уверенным, что всё, что используется, не собирает данные с нашего сайта, открытые в браузерах наших пользователей. На сайте нет ни рекламы, ни трекинговых скриптов. Тоже для того, чтобы расшифрованные записки никто не брал.

— Вы ведёте какую-то аналитику? Что собираете?

Ничего не собираем. Что касается аналитики, то у меня есть всего 2 счётчика: количество созданных записок и количество прочитанных. Всё.

— А Вы можете узнать, что я заходил на сайт? Ведь наверняка в логах есть ip адреса?

Я стараюсь не собирать лишней инфы. Поэтому в своих основных журналах запросов к сайту хранится только часть хеша от ip-адреса, чтобы отличать разных посетителей, при поиске ошибок в работе сайта. Ещё хеш ip-адреса используеся в антиспам-системах для защиты от ботов и злоумышленников. Но пока всё работает как надо, никто и на хеш не смотрит.

— Что известно о записке и её авторе?

Когда Вы создаёте записку, ни Вы, ни тот, кто её получит, не связывается с ней. Из-за того, что велико количество записок, которые никто никогда не читает, пришлось установить период, в течении которого записки в любом случае удаляются. Чтобы нельзя было идентифицировать создателя записки по дате её написания, хранится только дата, к которой она должна быть удалена, предоставляя возможность пользователям самим выбирать, как долго она будет храниться. По умолчанию, записки удаляются через 7 дней.

Сейчас в базе данных каждой записке соответствуют 4 поля: её идентификатор, зашифрованное содержимое, дата, к которой она будет удалена, если её не прочитают до этого и счетчик (также необходимый для расшифровки). Вот так выглядит одна из тестовых записок в базе данных:

id

content

delete_date

counter

hHQ8eny

4b4fd1a3

2022-01-23 13:39:22.546147

114186091782275

Форматирование

На своем сайте я сделал возможность форматирования записок. Так что если Вы кому-то отправите инструкцию к чему-то, не забудьте сделать это красиво)

Заключение

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

P.S. Если найдутся желающие поковыряться в моем сайте, скриптах и что-нибудь взломать, то я против не буду. Но прошу рассказать мне о Ваших находках по контактам, указанным на сайте, чтобы я мог всё исправить. Открывать код бэкенда я пока всё же не планировал, так как считаю такой вариант более безопасным в моём случае.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 23: ↑22 и ↓1+25
Комментарии66

Публикации

Истории

Работа

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань