Pull to refresh

Описание протокола BitMessage

Reading time3 min
Views12K
В свете программы PRISM у многих пользователей интернета наблюдается повышенный уровень паранойи. Думаю, использование протокола BitMessage поможет Вам почувствовать себя более защищенным.

Сразу оговорюсь, что протокол достаточно молодой, хотя и достаточно многообещающий. Молодость средства криптографии может свидетельствовать о том, что не все дефекты (в том числе и критичные для сохранения сообщения или Вашей анонимности) были найдены и устранены. Версия клиента 0.0.1, написанного на Python, вышла 21 марта. Сейчас актуальна версия 0.3.4 и популярность, как и количество пользователей растет, в геометрической прогрессии.

По сравнению чатом в tor, или i2p подкупает легкость установки клиента. Буквально в один клик!



Адреса


Для начала использования протокола потребуется создать свой адрес в сети. Фактически, адрес является хэшем (в кодировке base58) от версии, потока (stream) и публичных ключей.
Пример адресов:

  • BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw
  • BM-2D88888iFvohJyschKVRKTJq4KCboU9sov

Все адреса пользователя, вместе с ключами хранятся в файле keys.dat. Например, так:

[BM-BcNyrZGAEWH7ShtRKsJRtWCnR5mUYpN8]
enabled = false
privsigningkey = 5JzhSaTpKFhZ1bMkmUiFhpvbzMqaNcc3vLEHBhbuVX7LgVPqkAM
privencryptionkey = 5JQxLd1iQD7uvfTiCgsFgFi63iDJVCEXF2TGvRC5wn5aC5e27mW

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

На уровне TCP/IP


PyBitmessage клиенте использует порт по умолчанию 8444, при этом в клиент встроена возможность проксирования, и намекается на использование tor.
Заложена, но, насколько я понял, пока не до конца реализована, возможность использования IPv6.
Подключаясь к p2p сети, каждый клиент указывает, какие потоки (каждый адрес привязан к потоку) его интересуют. После этого он получает все сообщения данного потока. Для отправки сообщения, оно передается всем узлам к которым подключен, а они в свою очередь узлам к которым они подключены, и так до тех пор, пока сообщение не окажется на каждом узле потока.

Proof of Work (POW)


Сообщения хранятся на каждом узле BitMessage сети в течении 48 часов. Для того чтобы предотвратить флуд, при отправке сообщения программа занимается подбором 8ми байтового префикса сообщения с целью получить сообщение чей хэш будет меньше заданной величины (механизм сходный с майнингом в bitcoin). Обычно данная работа занимает 2 минуты на стороне отправителя. Проверить же результат на других узлах, и заблокировать флуд можно очень быстро.

Сообщения


Каждое сообщение в сети подписывается отправителем. Программа отображает сообщение пользователю только убедившись, что сообщение не подменили при пересылке.
Всего есть два типа сообщений:
  • Широковещательные (Broadcast)
  • Личное (Private)

Каждое сообщение зашифровано и не имеет намеков на то, какой ключ нужно использовать для расшифровки. Т.е. приходится перебирать все свои ключи для приватных сообщений, и все ключи на адреса которых подписан, для публичных.
Широковещательные сообщения позволяют скрыть отправителя сообщения (ip адрес отправителя, но не адрес в Bitmessage сети). При отправке сообщения оно шифруется закрытым ключом отправителя. Любой, знающий адрес отправителя может расшифровать сообщение открытым ключем и прочитать само сообщение.
Личное сообщение скрывает как отправителя сообщения, так и его текст от всех кроме получателя. При отправке сообщения оно шифруется открытым ключом получателя.

Как же достигается анонимность


Все сообщения рассылаются всем. Но благодаря тому, что все они зашифрованы определить, кому сообщение адресуется, или кто отправитель, невозможно. Более того, даже определив, что нас интересует отправитель определенного сообщения (например, широковещательного) понять, кто же его изначально отправил в сеть сложно. А в случае использования tor ещё сложнее.

Чем приходится расплачиваться


Достаточно большой трафик – вы получаете все сообщения своего потока. Сегодня это 40 мегабайт.
Иногда, 100% загрузка процессора – для отправки сообщения надо рассчитать POW, а для получения попробовать расшифровать всеми своими ключами.

Спецификация протокола


Официальная документация протокола находится по адресу bitmessage.org/wiki/Protocol_specification

Как его использовать


Для личного общения — скачать с официального сайта клиент, запустить (не требует установки), наслаждаться bitmessage.org/wiki/Main_Page
Для программ не на .NET можно использовать API официального клиента bitmessage.org/wiki/API_Reference
Для использования в .NET приложениях можно использовать библиотеку на c# github.com/sharpbitmessage/SharpBitmessage

Ну и главное, мой адрес BM-2D88888iFvohJyschKVRKTJq4KCboU9sov
Tags:
Hubs:
Total votes 51: ↑49 and ↓2+47
Comments40

Articles