BitMessage - протокол безопасного обмена сообщениями, основанный на биткойн.
Bitmessage – предложенный в ноябре 2012 года протокол конфиденциального обмена информацией, основанный на идеях биткойн. Работа протокола базируется на децентрализованной Р2Р-сети и системе открытых\закрытых ключей.
Введение
Сердце биткойн — структура blockchain. Основная её функциональность — обмениваться защищенной информацией в одноранговой Р2Р-сети, распределенно её хранить и своевременно обновлять. По умолчанию в роли этой информации выступают данные о распределении монет по кошелькам (открытым ключам несимметричной системы шифрования), однако эта информация может быть любой. Пример — проект NameCoin, который представляет собой распределенную DNS-базу, основанную на blockchain.
На страже любых изменений (и честных, и мошеннических) стоит алгоритм Proof-of-Work (PoW). Концепция PoW означает, что для проведения некоторой операции пользователь должен выполнить определенное количество вычислений. В случае биткойн для того чтобы создать транзакцию вычисления не нужны, а вот для того, чтобы её подтвердить (включить в блок) необходимо найти хэш определенной формы.
Создателями BitMessage (BM) была поставлена задача адаптировать эти идеи для построения сети защищенного обмена сообщениями. Потребность в такой достаточно простой в использовании и при этом хорошо защищенной системе существует. Так, в емейл системе все завязано на сервера провайдеров — в лучшем случае mail.ru или gmail. Любой имеющий к ним доступ может просматривать любую переписку, а тот факт, что у них есть специальный терминал для автоматического доступа правоохранительных и силовых ведомств различных стран, даже не скрывается. Кроме того, любое сообщение можно подделать путем подмены заголовков и использовать для социальной инженерии.
Системы шифрования вроде PGP\GPG обеспечивают высокий уровень конфиденциальности и частично исправляют эти недостатки. Используя криптографические подписи они гарантируют для адресата, что автором сообщения является именно указанный отправитель и что сообщение отправлено в том самом виде, в котором получено. Однако они крайне непросты в использовании, требуют понимания основ шифрования, механизма открытых\закрытых ключей, текущего состояния шифрования алгоритмов. Даже грамотные пользователи PGP\GPG используют их не повседневно, а лишь для отправки особо важной корреспонденции. Кроме того, такая система неспособна скрыть сам факт переписки двух конкретных человек, даже если содержание их разговора остается неизвестным.
BitMessage по заявлению своих создателей — прототип средства обмена информации одновременно простого как емейл и защищенного как PGP.
При этом из криптовалютного мира было позаимствовано несколько базовых идей:
1. Использование хэша открытого ключа в качестве адреса. На данный момент адрес представляет собой двоичную последовательность длиной 18 или 19 байт, как правило кодированную в base58. То есть очень похожа на криптовалютный кошелек, к которым мы уже успели привыкнуть. Пример — BM-BbkPSZbzPwpVcYZpU4yHwf9ZPEapN5Zx (официальный канал обновлений программы).
2. Proof-of-Work. Необходимо несколько минут процессорного времени для отправки 1 сообщения.
Отличие от криптовалют заключается в отсутствии необходимости хранить большие объемы информации. Никаких многомегабайтовых блокчейнов.
Особенности реализации
Аутентификация в сети происходит почти также как в криптовалютах. При отпрвке сообщения выбирается адрес адресата (т. е. Фактически его открытый ключ), сообщение подписывается закрытым ключом отправителя. Расшифровать его сможет только адреса, обладающий закрытым ключом, парным к адресу. Чтобы передать сообщение необходимо выполнить процедуру PoW в форме подбора хэша определенной формы. Сложность линейно зависит от размера сообщения, зашита в код программы и может быть изменена со временем. В данный момент (версия 2.0.4 - 2.0.5) «порядка 3-5 минут работы среднего ЦПУ».
Как и в биткойне, пользователи формируют одноранговую Р2Р сеть и все получают все сообщения. Клиент пытается декодировать каждое тем набором закрытых ключей, которыми обладает. Сообщения содержат время отправки. Через 2 дня сообщение умирает, и чтобы переслать его снова, придется вновь выполнить PoW.
Масштабируемость системы обеспечивает иерархическая структура стримов (stream - “поток”). После превышения определенного порога нагрузки ноды начинают агрегироваться в стримы. Стрим прописан в каждом адресе, нода поддерживает соединение только с теми стримами, адресами в которых владеет. Каждый родительский стрим имеет ровно 2 дочерних, в итоге получается иерархическое бинарное дерево.
Время от времени нода коннектится к пирам родительского стрима и демонстрирует, что жива. Кроме того, каждая нода держит в память краткий список нодов обоих дочерних стримов и корневого стрима #1.
Пусть ноде достаточно глубокого стрима надо передать сообщение в стрим другой ветви. Для этого ей надо отправить его любому пиру стрима-адресата, но перед этим надо его сначала найти. Для этого ищется ближайший стрим, являющийся общим предком стрима-отправителя и стрима-адресата. Сделать это можно, так каждый пир время от времени соединяется с родительским стримом и знает по крайней мере одного пира оттуда. После нахождения общего предка, осталось сделать несколько шагов вниз по дереву, сделать это опять же можно, так как у любого стрима есть краткий список пиров дочерних по отношению к нему. Список пиров стрима-адресата сохраняется, так как велика вероятность, что переписка продолжится.
Отдельный механизм предусмотрен в ВМ для рассылок (broadcast). В клиенте присутствует специальная секция рассылок. Используя эту функцию некто сможет анонимно рассылать любую информацию, и её получатели будут уверены, что отправил её именно он и дошла она без искажений.
Описание клиента
Объектом пересылки может быть запрос открытого ключа, открытый ключ или сообщение. Клиент поддерживает соединение с пирами своего стрима и скачивает те объекты, которых у него нет. После этого хранит 2 дня, потом удаляет.
На прием адресованного к нему сообщения клиент отвечает подтверждением. Таким образом, отправитель может понять, что его сообщение не дошло до адресата в течение 2 дней и отправить заново.
Знакомые с криптовалютными клиентами вряд ли найдут в программа BitMessage много нового. Пожалуй, единственный нюанс заключается в процессе генерации адреса, в которой возможны 2 опции.
Первая — использовать фразу-пароль для генерации. В этом случае не придется хранить файл ключей, доступ к адресу можно получить с любого клиента, зная фразу-пароль. Дополнительно придется запомнить номер стрима, к которому адрес принадлежит. В случае выбора этого метода, любой, кто узнает пароль и номер стрима получит доступ к вашей переписке и сможет отправлять сообщения от вашего имени. Альтернатива — генератор случайных чисел.
Вторая опция — в какой стрим включить вновь сгенерированный адрес. По умолчанию предлагается включить его в тот, в котором уже находится большинство ваших адресов. Если адрес первый, выбирается наиболее свободный стрим. Чем меньше стримов в клиенте, тем меньше трафика он генерирует и меньше ресурсов потребляет.
Служебную информацию клиент хранит в папке ~/PyBitMessage (c:\Users\Alex\AppData\Roaming\PyBitmessage\ в случае windows). Внутри снова все до боли знакомо по криптовалютным клиентам. В текущей версии в ней присутствуют:
• keys.dat – файл ключей, аналог wallet.dat
• messages.dat – файл текущих сообщений. Размер на момент написания меньше 1 МБ.
• knownnodes.dat – инфо об известных пирах.
Мой клиент поддерживает 10 активных соединений и почти не генерирует трафика. Последнее, правда, может измениться с ростом использования сети.
Текущее состояние безопасности
С момента первых версий (ноябрь 2012) в ВМ было обнаружено несколько серьёзных уязвимостей. Так, при переходе с версии 0.1 до 0.2 был изменен алгоритм шифрования с RSA на ECC, что привело к обратной несовместимости. В данный момент официальный статус программы - «нуждается в независимом аудите безопасности».
Собственно, это вполне ожидаемо от криптографической системы, которой всего 3 месяца от роду.
В итоге
BitMessage предлагает систему, которая была бы проста в использовании, при этом хорошо защищена и высокоанонимна. Нельзя сказать, кто владеет какими адресами, нельзя понять, что эти несколько адресов принадлежат одному владельцу. Вероятность деанонимизации в такой системе мала, а передаваемая информция надежно зашифрована.
В перспективе протокол может найти применение как средство повседневной конфиденциальной переписки и анонимной рассылки информации — например торрент-файлов.
Разумеется, для особо снедаемых паранойен дам и господ, весь трафик без труда пускается через Tor.
Ссылки
BM-BcKajCHjXt1LeDZ9XM2F4BDwS4wssHu6 - пишите письма, шлите телеграммы. :)
https://bitmessage.org/wiki/Main_Page - официальный сайт. Почему-то редиректит на эту вики.
https://bitmessage.org/bitmessage.pdf - whitepaper
https://bitmessage.org/forum/ - форум проекта
https://bitcointalk.org/index.php?topic=128230.0;all - основная тема на bitcointalk
http://bitslog.wordpress.com/2012/11/30/bitmessage-completely-broken-crypto/ - первый доклад о безопасности. Уязвимость ветки 0.1
4 Comments
Recommended Comments
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now