Ru-Board.club
← Вернуться в раздел «Программы»

» Paranoid Mail

Автор: ym1
Дата сообщения: 23.07.2016 15:10
Для всех, кто не хочет, чтобы его переписку читал товарисч майор, мой новый продукт: Paranoid Mail.


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


Ключевые особенности:

• Система работает по принципу клиент-сервер, похожему на принцип работы SMTP/Pop3
• 1024бит end-to-end шифрование
• Открытый код, никаких бэкдоров для «органов»
• Анонимность. Не требует ваших имени, мейла, телефона и прочих персональных данных
• Не содержит такой дыры в безопасности, как «восстановление пароля»
• Все данные хранятся на компьютере пользователя в зашифрованном виде
• Не требует инсталляции, можно запускать с флешек и прочих внешних носителей
• Нет ограничений на размер прикрепляемых файлов
• Никакой рекламы. Никакого спама.



Что еще реализовано:

• Адресация похожа на email: UserID@ServerID. Но используются не имена, а 64-бит числа, получаемые из имен однонаправленной хэш-функцией. Для анонимности. Получить, к примеру, из yuri@ym-com.net — 15938711793627702731@18377662922546148207 легко, наоборот же — из ID получить имена — практически невозможно.
• Система серверов-релеев: для затруднения отслеживания факта «пользователь А переписывается с пользователем Б» сообщения между серверами пересылаются не напрямую, а через цепочку из 1-5 случайно выбираемых промежуточных серверов
• Для дополнительного затруднения отслеживания реализован такой механизм: cервер отправителя не может видеть, какому именно пользователю на сервере-получателе предназначено сообщение. Сервер получателя не может видеть, какой именно пользователь сервера отправителя отправил сообщения. Промежуточные сервера не могут видеть ни кто отправитель, ни кто получатель — только их сервера.
• Текст сообщений может быть в формате plain text (Unicode) или RTF
• Прикрепленные файлы большого размера автоматически разделяются на части размером от 800 килобайт до 8 мегабайт (в зависимости от выбранных настроек клиента). Кроме того, текст и поддающиеся сжатию части файлов сжимаются при помощи алгоритма LZMA (7-zip)
• Сами сообщения и данные о учетных записях, контактах и ключах — зашифрованы комбинацией криптоалгоритмов ThreeFish-1024 и ChaCha20. Обмен данными по сети шифруется одним из алгоритмов: ChaCha20, ThreeFish-256 или ThreeFish-512, случайно выбираемым отвечающей стороной
• Реализована защита от сканирования портов и от Man-in-the-middle
• Даже если компьютер пользователя будет изъят «органами», без пользовательского мастер-пароля и без файла .key (хранящего в зашифрованном мастер-паролем виде учетные записи, контакты и ключи) не получится не только прочитать сами сообщения, но и узнать, с кем он вообще переписывался. Истинные UserID/ServerID контактов хранятся только зашифрованными.
• Для хранения у отправителя, во время пересылки, у получателя — используются РАЗНЫЕ ключи (причем, во время пересылки — разные для каждого сообщения).
• Регистрация новых пользователей на сервере автоматическая, не требующая ни вмешательства администратора, ни ввода каких-либо персональных данных. Свободная для всех (если на сервере включен соответствующий флажок), или доступная лишь тем, кто знает, помимо публичного IP/порта еще приватные IP/порт/пароль.


Сервер и клиент написаны на языке C#.
На данный момент доступны версии сервера: для Windows/.Net 4.5.1+ и для Mono 4+ (Линукс, MacOS, FreeBSD).
Клиент на данный момент доступен лишь для Windows/.Net 4.5.1+, разработка под другие платформы пока на раннем этапе.


Сервер может использовать для хранения данных MySQL(и его клоны вроде MariaDB), MS SQL (включая экспресс-версию) или SQLite.
Клиент хранит данные в SQLite.


Серверу требуется как минимум 1 доступный извне TCP-порт (все равно какой) с реальным IP адресом.


Более подробную информацию можно получить на сайте проекта: https://paranoid.ym-com.net
Исходный код доступен на https://github.com/YuriMyakotin/Paranoid-Mail
Форум проекта: https://forum.paranoid.ym-com.net


Желающие поучаствовать в дальнейшей разработке — приветствуются. Равно как и желающие разместить у себя новые сервера Paranoid Mail.


PS: В ближайших планах: сбор средств на аренду множества VPS/VDS в различных странах мира для размещения relay-серверов, доступных для использования всеми желающими.
В более отдаленных планах: создание мессенджера/голосовой "звонилки" с теми же ключевыми особенностями — анонимностью, стойким шифрованием и максимальным затруднением отслеживания "кто и кому писал/звонил".
Автор: RedLord
Дата сообщения: 23.07.2016 22:20
ym1
шото safari сертификат hxxps://paranoid.ym-com.net/ считает ненадежным
Автор: ym1
Дата сообщения: 23.07.2016 23:31

Цитата:
шото safari сертификат hxxps://paranoid.ym-com.net/ считает ненадежным


Бесплатный сертификат от WoSign, гугл хром/эксплорер/файрфокс его кушают нормально.
Автор: RedLord
Дата сообщения: 23.07.2016 23:36
ym1
использование комбинаций нескольких алгоритмов криптования увеличивает стойкость?
Автор: ym1
Дата сообщения: 23.07.2016 23:42
Если в одном из используемых алгоритмов когда-нибудь найдут дыру - этого будет мало для расшифровки сообщения, ибо второй-то останется невзломанным. Я потому и назвал программу Paranoid, что предпочел перестраховаться. И использовал два принципиально разных алгоритма, потоковый ChaCha от Бернштейна и блочный ThreeFish от Шнайера.
Автор: RedLord
Дата сообщения: 23.07.2016 23:49

Цитата:
Реализована защита от сканирования портов и от Man-in-the-middle

возможно в двух словах описать рализацию?
Автор: ym1
Дата сообщения: 24.07.2016 00:00
От скана - упрощенно говоря, сервер ответит только в том случае, если сразу после коннекта получит от вызывающей стороны правильную сигнатуру - 64 рандомных байта и 64 - результат вычисления хеша из этого рандома, ID сервера и - для приватных портов - пароля на этот самый порт. Если хеш неверен - соединение молча сбрасывается, а ip сканщика - отправляется в блеклист на пару минут (а потом каждая попытка коннекта с забаненого ip продлевает время бана).

От MITM - весь обмен на этапе хэндшейкинга и обмена публичными сессионными ключами - хешируется, после чего сервер подписывает хэш своим секретным ключом, а вызывающая сторона - проверяет подпись публичным ключом сервера (Ed25519 алгоритм).

Любая подмена данных MITM'ом - приводит к тому, что хеш не совпадет и подпись будет неверна (ибо у него ж нет секретного ключа сервера) , вызывающая сторона сбросит соединение.


Автор: RedLord
Дата сообщения: 24.07.2016 00:23
ym1
мерси. будем посмотреть
Автор: ym1
Дата сообщения: 24.07.2016 00:27
Код, отвечающий за установку соединения - в ParanoidShared/NetSessionBase.cs, NetworkEncryption.cs

ну и код, отвечающий за ответ - ParanoidServer/NetSessionServer.cs, функция Answer


Автор: Dunkeshu
Дата сообщения: 24.07.2016 01:30

Цитата:
Адресация похожа на email: UserID@ServerID.
Что-то подсказывает мне, что это не почтовая программа(нет совместимости). В этом случае собака(@) не нужна Это только мои домыслы, но проект заинтересовал.
Автор: ym1
Дата сообщения: 24.07.2016 08:57
Совместимости нет, естественно - с самого начала задуман был самостоятельный софт, без сопряжения с существующими емейлами, ибо анонимность они не обеспечивают. Просто принцип похожий. Такая же система серверов и юзеров, похожая адресация. И калькулятор, позволяющий перевести имена в ID.
Автор: RedLord
Дата сообщения: 24.07.2016 10:26
ym1
имхо, будет веселее, если на гитхабе указать необходимую версию студии.
скучно высматривать в sln.
Автор: ym1
Дата сообщения: 24.07.2016 11:01
Ага, указал.
Vs 2015 или последний MonoDevelop.
Автор: Dunkeshu
Дата сообщения: 24.07.2016 17:36
Вариант сервера с динамическим IP адресом не рассматривался (это для группы пользователей-клиентов)?
Автор: RedLord
Дата сообщения: 24.07.2016 18:19
Dunkeshu
Вроде, релеи обеспечивают динамику
Автор: ym1
Дата сообщения: 24.07.2016 18:42
Адрес может быть и динамическим, главное, чтобы извне по нему достучаться можно было до сервера в любой момент. Более того, сервер можно и за NAT убрать, лишь бы, опять же, пробрасывался нужный порт.

Серверы-релеи в PM для другого, это для того, чтобы труднее было проследить, кто кому пишет, просто наблюдая за трафиком сервера. Вместо директа от сервера А к серверу Б - сообщение пойдет по случайной цепочке релеев, от 1 до 5 хопов.
Автор: Dunkeshu
Дата сообщения: 24.07.2016 19:05

Цитата:
Вариант сервера с динамическим IP адресом не рассматривался (это для группы пользователей-клиентов)?
Имел ввиду поддержку отправки внешнего IP адреса сервера группе клиентов(клиентской группе), через сторонние сервисы (или цепочку севисов).
Автор: ym1
Дата сообщения: 24.07.2016 19:22
База ip адресов, публичных ключей, флагов серверов - ведется парочкой (в данный момент) "корневых" серверов, они же отвечают за регистрацию новых серверов в системе. Остальные сервера время от времени запрашивают изменения в базе. Клиенты получают базу серверов от своего сервера (в первый раз, до регистрации эккаунта - с одного из корневых через https).
Плюс, клиент может вручную прописать в настройках эккаунта другие адрес/порт, например, для использования приватного адреса.

В поле IP может быть прописан и динамический DNS адрес, какой-нибудь blablabla.ddns.net. Лишь бы поддерживался актуальным.

Автор: Dunkeshu
Дата сообщения: 24.07.2016 19:28
Вас понял и нужный функционал можно дописать(добавить) самому.
Автор: ym1
Дата сообщения: 24.07.2016 19:29
При желании можно вообще чисто приватный сервер сделать, просто на него с других серверов ничего не сможет дойти.
Автор: Dunkeshu
Дата сообщения: 24.07.2016 19:44

Цитата:
При желании можно вообще чисто приватный сервер сделать, просто на него с других серверов ничего не сможет дойти.
Именно этот вариант, как мне кажется, надо развивать. Он будет иметь больший спрос, чем глобальный(цепочка корневых серверов). Это только мои домыслы.
Автор: ym1
Дата сообщения: 24.07.2016 19:53
Такой вариант имеет один минус - если и отправитель и получатель на одном сервере, владелец сервера может легко собирать информацию, от какого юзера какому сообщения и потом сдать их.

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

Промежуточные же сервера вообще не видят никакой информации о юзерах, просто сообщение с сервера 1 на сервер 2.
Автор: Dunkeshu
Дата сообщения: 24.07.2016 22:36

Цитата:
Если на разных - сервер-отправитель знает лишь юзера-отправителя, но не знает юзера-получателя. Сервер-получатель, наоборот - знает лишь своего юзера, для кого сообщение, но не знает, какой юзер другого сервера его отправил.
Если зажать кое-что в тиски, некоторому количеству пользователей, то многие при этом, продадут и мать родную. То есть, анонимность в любом случае не обеспечивается. Поэтому всё это имеет значение только для маркетинга и никакой анонимности не обеспечит, так как, ничто не мешает организовать несколько цепочек серверов со своими людьми и собирать информацию, предварительно заманив на них побольше пользователей, как это и делается на почтовых серверах и других сервисах. Это только мои домыслы.
Автор: ym1
Дата сообщения: 24.07.2016 23:34
Продать можно лишь то, что человек знает сам К примеру, сдать свои ключи - никак не поможет расшифровке почтовой базы тех, с кем сдавший переписывался. By design
Автор: Dunkeshu
Дата сообщения: 25.07.2016 00:13

Цитата:
сдать свои ключи - никак не поможет расшифровке почтовой базы тех, с кем сдавший переписывался.
Мда, это необходимо только камикадзе, а для простого смертного http://img1.joyreactor.cc/pics/post/терморектальный-криптоанализ-смешные-демотиваторы-2673.jpeg
Автор: ym1
Дата сообщения: 25.07.2016 08:10
Опять же, достаточно затереть .key файл - и никакой пароль не поможет расшифровать сообщения
Автор: ym1
Дата сообщения: 14.08.2016 18:46
Слегка изменил программу, убрал устаревшую версию Skein 1.1

На следующей неделе должен заработать первый открытый для всех сервер.

Страницы: 1

Предыдущая тема: Переносной ЖД


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.