«Телеграф» — электронная почта без интернета

Добрый день!

Мне бы хотелось поделиться с сообществом интересными мыслями о создании автономной децентрализованной электронной почты и продемонстрировать на практике работу одной уже существующей реализации.

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

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

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

«Телеграф» — электронная почта без интернета

Ахтунг!Во избежание возможных недоразумений — в некоторых случаях изображения можно листать:
«Телеграф» — электронная почта без интернета

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

«Телеграф» представляет собой автономный аналог электронной почты, позволяющий передавать простые текстовые сообщения без использования интернета. «Телеграф» в той или иной степени можно отнести к Sneakernet — способ обмена информацией без использования сети.

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

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

Если мы подключим съёмный накопитель к терминалу и запустим скрипт, то он попытается получить исходящие сообщения из директории /mnt/Telegraph/Outbox и перенести их в свою память, после — проверить наличие в своей памяти новых сообщений для текущего пользователя. Если таковые имеются — записать их в /mnt/Telegraph/Inbox.

Регистрация новых устройств

Происходит достаточно произаично. Скрипт находит новые флеш-накопители, подключенные к системе, и пытается сопоставить их уникальные идентификаоры с теми, которые представлены в корне. Если устройства ранее не подвергались регистрации, они будут отформатированы в соответствии с заявленными «Телеграфом» правилами.

После регистрации нового устройства структура корня принимает следующий вид:

View post on imgur.com

В конфигурационном файле config.ini, расположенном в корне флеш-накопителя, находится системная информация — уникальный идентификатор и секретный ключ.

View post on imgur.com

Дайте людям рому!

Нет, ну, право, серьёзно! Исходники раздобыть можно здесь, а нам уже потихоньку пора перебираться от теории к практике.

Но я должен сказать ещё несколько слов о том, как на практике устроена система обмена сообщениями.

Для начала давайте разберёмся, из чего состоит одиннадцатизначный уникальный идентификатор. К примеру, 10455000001.

Первая цифра, 1, отвечает за номер страны. Международный код — 0, Россия же в данном случае — 1.

Далее идут четыре цифры, которые отвечают за номер региона, в котором расположен терминал. 0455 — это Коломенский городской округ.

За ними идут две цифры, — 00, — отвечающие непосредственно за номер терминала.

И только потом — четыре цифры, которые являются порядковым номером пользователя, что закреплён за данным терминалом. У нас это — 0001. Также существует и 0000 — этот номер принадлежит непосредственно самому терминалу. На него нельзя отправить письменную корреспонденцию, но зато сам терминал использует этот номер для отправки служебных сообщений пользователям. Например, если сообщение не удалось доставить по каким-либо причинам.

View post on imgur.com

В корне нашего «почтового ящика» находится две директории, необходимые для того, чтобы получать и отправлть текстовые сообщения. При подключении устройства к терминалу из директории «Outbox» на сервер отгружаются исходящие сообщения, а в директорию «Inbox», что логично, загружаются входящие.

Каждый файл в зависимости от директории поименован номером получателя или отправителя.

Если мы попытаемся отправить сообщение несуществующему адресату, то терминал нам отправит сообщение об ошибке.

View post on imgur.com

Однако, если же мы решим отправить письмо адресату, находящемуся на другом терминале (вне зависимости от того, существует оный или нет), оно будет записано в память терминала до того, как агент не перенесёт письменную корреспонденцию с нашего терминала на свой.

View post on imgur.com

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

Сеанс связи

Давайте попробуем передать сообщение с текстом «Привет!» от 10455000001 к 10455000002.

View post on imgur.com

На этом всё!

Буду рад любой критике в адрес исходного кода проекта и непосредственно самой статьи.

Благодарю за внимание.

Источник: habr.com

Добавить комментарий