Введение в p2p-торговлю: что такое торговля peer-to-peer и как устроена локальная биткоин-биржа?

Проблемы безопасности

Реализация и использование распределенных систем имеет не только плюсы, но и минусы, связанные с особенностями обеспечения безопасности.

Получить контроль над столь разветвленной и крупной структурой, какой является сеть Р2Р, или использовать пробелы в реализации протоколов для собственных нужд –
является желанной целью любого хакера. С другой стороны, защитить распределенную структуру сложнее, чем централизованный сервер .

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

Серьезной проблемой является рассылка червей и подделка ID ресурсов для их фальсификации и распространения фальшивых ресурсов в сети.

Так, например, в клиенте Kazaa, используется хеш-функция UUHash которая позволяет быстро находить ID для больших файлов даже на слабых компьютерах,
но и, при этом, оставляет возможность для подделки файлов и записи испорченного файла, имеющего тот же ID. Эта возможность была использована Американской Ассоциацией
Звукозаписывающих Компаний (RIAA), которая наводнила сеть поддельными и испорченными файлами.

Для решения проблемы клиентам нужно пользоваться надежными хешами (деревьями хешей, если файл копируется по частям) такими как SHA-1, Whirlpool, Tiger и только для малоответственных задач, контрольными суммами CRC. Для уменьшения объемов пересылаемых данных и облегчения их шифрования можно использовать компрессию. Для защиты от вирусов нужно иметь возможность хранить идентифицирующую метаинформацию о червях, как это, например, сделано в Gnutella2.

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

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

Часть клиентов только копируют чужие файлы, но не предлагают ничего для копирования другим.

Например, в московских домашних сетях на нескольких активистов, делающих доступными более 100 GB приходится около сотни выкладывающих менее 1 GB. Для борьбы с этим фактором используются разные методы. В eMule применен метод кредитов. Скопировал файл, кредит уменьшился, позволил скопировать свой файл, кредит увеличился, xMule – кредитная система с поощрением распространения редких файлов, eDonkey используется стимулирование размножения источников, в Bittorrent реализована схема “сколько блоков файла получил, столько отдал” и т.д..

В последнее время техника P2P используется для синхронизации файлов в облаках, которое особенно привлекательно при работе с iPad, где нет поддержки прямого файлового обмена.

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

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

Возможности 2C2P

Система 2C2P предлагает платежный шлюз с мгновенным подключением к платформе электронной коммерции для приема платежей со всего мира. Данный сервис:

  • Легко интегрируется с онлайн-бизнесом;
  • Работает с крупными глобальными и азиатскими карточными компаниями, банками, регуляторами;
  • Включает оптимизированные формы, потоки и функции для проведения платежей;
  • Позволяет обрабатывать платежи на сайте и в мобильных приложениях;
  • Предоставляет возможность регулярного проведения циклических платежей;
  • Работает в режиме рассрочки;
  • Позволяет отправлять безопасную ссылку для оплаты через соцсети или другие способы связи.

2C2P автоматически обрабатывает конверсии, поэтому платежи могут проводиться в местной валюте. Система поддерживает различные способы оплаты, включая дебетовые и кредитные карты Visa, MasterCard, American Express, Discover, Diners Club, JCB и UnionPay.

Определяем тип входящего соединения

Для начала откроем порт для прослушивания и будем ждать новых соединений.

На новое соединение читаем первые 4 байта.

Берем список глаголов HTTP и сравниваем с ним наши 4 байта.

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

Если же подключение локальное, то отвечаем файлом, соответствующим запросу.

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

Если же запрашивается путь , то пробуем установить websocket соединение.

Раз уж я собрал велосипед в обработке запросов файлов, то обработку ws соединения сделаю с помощью библиотеки gorilla/websocket.

Для этого создадим и реализуем в нем методы для соответствия интерфейсам и .

Ссылки

IBM. http://www.javvin.com/protocol/rfc2353.pdf : APPN/HPR in IP Networks (APPN Implementers’ Workshop Closed Pages Document).
Гуркин Ю.Н., Семенов Ю.А. P2P. Файлообменные сети: принципы работы, используемые протоколы, безопасность,
“Телекоммуникационные сети и системы”, N 11, стр. 62, 2006.
Liben-Nowell, Balakrishnan, Karger. Analysis of the evolution of peer-to-peer systems. Communications of the Acm February 2003/Vol. 46, No. 2
Petar Maymounkov and David Mazi`eres. Kademlia: A Peer-to-peer Information System Based on the XOR Metric. http://kademlia.scs.cs.nyu.edu
Hari Balakrishnan, M. FransKaashoek , David Karger, Robert Morris, and Ion Stoica. Looking up DATA in P2P systems. In Proc. Acm SIGCOMM’01, San Diego, CA, Aug. 2001.
Understanding the Impact of P2P: Architecture and Protocols. http://www.cachelogic.com/home/pages/understanding/architecture.php
Karger D., Lehman E., Leighton F., Levine M., Lewin D., Panigrahy R. Consistent hashing and random trees: Distributed caching protocols for relieving hot
spots on the World Wide Web
. In Proc. 29th Annual ACM Symposium on Theory of Computing (El Paso, TX, May 1997), pp. 654–663
Hildrum K., Kubiatowicz J., Rao S., and Zhao B. Distributed Object Location in a Dynamic Network. In Proceedings of 14th ACM Symp. on Parallel Algorithms and Architectures (SPAA), August 2002.
Marling Engle: Vulnerabilities of P2P Systems and a Critical look at Their Solutions, http://www.cs.kent.edu/~mengle/ Department of Computer Science, Kent State University, Date: April 2006
Xiaojun Hei, Chao Liang, Yong Liu and Keith W. Ross, Insight into PPLive: A Measurement Study of a Large-Scale P2P IPTV System, http://photon.poly.edu/~jliang/pplive.pdf#search=%22%22Insight%20into%20PPLive%22%22
Xinyan Zhang, Jiangchuan Liu, Bo Li, and Tak-Shing Peter Yum, CoolStreaming/ DONet: A Data-Driven Overlay Network for Efficient Live Media Streaming. http://www.cs.sfu.ca/~jcliu/Papers/47_01.pdf#search=%22CoolStreaming%2FDONet%22
Venkata N. Padmanabhan, Helen J. Wang, Philip A. Chou, Resilient Peer-to-Peer Streaming (MDC), http://research.microsoft.com/~padmanab/papers/icnp2003.pdf#search=%22%22Resilient%20Peer-to-Peer%20Streaming%22%22
Официальные серверы сетевых проектов:
Overnet: http://www.overnet.com;
eDonkey2000: http://www.edonkey.com;
Kademlia: http://www.emule-project.net;
Bittorrent: www.bittorrent.com;
Gnutella: www.gnutella.com;
Gnutella2: www.gnutella2.com;
Direct Connect: dcplusplus.sourceforge.net
http://www.kazaa.com/us/index.htm
http://www2004.org/proceedings/docs/2p250.pdf#search=%22Xinyan%20Zhang%22 (Gossip Based Streaming)

Previous: 4.1.1.4 Повторители, мосты, мультиплексоры, переключатели и маршрутизаторы

   UP:
4.1.1 Ethernet (IEEE 802.3)
    Next:
4.1.1.6 Пассивные оптические сети (PON/EPON/GEPON)


Что скрывается за словами Peer-to-Peer?

При беглом знакомстве с литературой обнаруживается множество различных толкований понятия Peer-to-Peer, отличающихся в основном спектром включаемых особенностей.

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

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

В то же время многие сходятся во мнении, что главные для архитектуры P2P следующие характеристики:

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

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

Здесь самое время порассуждать об особенностях вычислений в grid- и P2P-системах. И те и другие представляют два подхода к распределенным вычислениям с использованием разделяемых ресурсов в крупномасштабном компьютерном сообществе.

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

Однако по мере развития технологии P2P и использования более сложных приложений, таких как распределение структурированного контента, совместная работа на ПК и сетевые вычисления, ожидается конвергенция P2P- и grid-вычислений.

Мотивация к анонимности

Есть много причин использовать анонимную технологию P2P; большинство из них являются общими для всех форм онлайн-анонимности.

Пользователи P2P, желающие сохранить анонимность, обычно делают это, поскольку не хотят, чтобы их идентифицировали как издателя (отправителя) или читателя (получателя) информации. Общие причины включают:

  • Цензура на местном, организационном или национальном уровне
  • Личная приватность предпочтение , такие как предотвращение отслеживания или интеллектуальный анализ данных деятельности
  • Материал или его распространение считаются незаконными или инкриминирующими возможные перехватчики.
  • Материал является законным, но вызывает сожаление, смущает или вызывает проблемы в социальном мире человека.
  • Страх возмездия (против разоблачителей , неофициальных утечек и активистов, которые не верят в ограничения информации или знаний )

Правительства также заинтересованы в анонимной технологии P2P. ВМС США финансировали оригинальный лук маршрутизации исследования , которые привели к развитию Tor сети, которая позже финансировалась Electronic Frontier Foundation и сейчас разрабатывается в некоммерческой организации Tor Project, Inc.

Лучшие модели

Конечно, определить конкретно наиболее подходящее устройство в каждом случае сложно. Список ниже, представляет P2P IP камеры по их покупательской популярности, согласно отзывам в интернет.

Название Mpx ИК-подсветка Ночной режим Крепление Связь Назначение Поворотный механизм Наличие SD-карты Цена
Vstarcam С8892WIP 2 Есть Есть стол Wi-Fi помещение нет нет 2490
Vstarcam C7838WIP с встроенным микрофоном и динамиком 1 Есть Есть потолок Wi-Fi помещение Есть Есть 2793
 Zodiak 909 (динамик+микрофон) 1 Есть Есть Потолок, стол Wi-Fi помещение Есть Есть 5390
Zodikam 3154-P с IP66 и питанием от LAN кабеля 4 Есть Есть Стена Wi-Fi улица нет нет 6340
Zodikam 2101-PTZV 1 Есть Есть Стена Wi-Fi, 3g/4g улица Есть Есть 32990
HiWatch DS-I452 с защитой IP67 5 Есть Есть потолок Wi-Fi Улица, купольная Есть нет 6211

Что дальше?

Вот и реализован простейший Peer-To-Peer мессенджер.

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

А можно не изобретать свой протокол, и задействовать гугловый Protocol Buffers,
подключить блокчейн и защититься от спама с помощью смарт-контрактов Ethereum.

На смарт-контрактах же организовать групповые чаты, каналы, систему имен, аватарки и профили пользователей.

Еще обязательно запустить seed пиры, реализовать обход NAT и передачу сообщений от пира к пиру.

В итоге получится неплохая замена телеграмма/вотсапа, останется только всех друзей туда пересадить =)

Что делаем

Пир (peer) — уникальный экземпляр мессенджера.

Наш мессенджер должен уметь:

  • Находить соседние пиры
  • Устанавливать соединение с другими пирами
  • Шифровать обмен данными с пирами
  • Принимать сообщения от пользователя
  • Показывать сообщения пользователю

Чтобы задачку сделать чуть интереснее, давайте сделаем так, чтобы все это проходило через один сетевой порт.

Если дернуть этот порт по HTTP, то получим реактовское приложение, которое дернет этот же порт, установив web socket соединение.

Если дергать порт по HTTP не с локальной машины, то показываем баннер.

Если к этому порту подключается другой пир, то происходит установка постоянного соединения со сквозным (end-to-end) шифрованием.

Страны Оси

Япония, Италия и Германия

Италия

2P!Северная Италия отличается загорелой кожей и более тёмными волосами, пурпурными глазами. В отличие от 1P, 2P!Северная Италия держит глаза открытыми. Любит доминировать, настойчив в достижении цели, считается искусным манипулятором. Очевидно, гораздо смелее оригинала. Отличается холерическим темпераментом (этим он ближе к 1P!Южной Италии), но умеет сдерживаться, отчего его вспышки агрессии бывают неожиданными. Часто его описывают как садиста. Предпочитает отдавать приказы, но, если надо, сделает всю работу сам. Считается лидером Оси, в 2P вселенной именно он хочет захватить мир, а не Германия. Равнодушно относится к 2P!Германии и 2P!Японии, считает их скорее своими подручными, чем друзьями. В качестве оружия применяет кинжалы/метательные ножи. Варианты имени: Лучано, Роберто.

Германия

Фактически, изменения во внешнем виде носят незначительный характер: его все также изображают мускулистым блондином. Изменения коснулись цвета глаз (голубые => розовато-фиолетовые), шрамов (один на левой щеке, три на руке, все они нанесены после поражения в ВОВ), в некоторых хэдах у него вьются волосы, поэтому он и носит чёрную немецкую пилотку времен ВОВ/любую другую кепку. На плечах носит пиджак цвета хаки, под ним майку в вертикальную полоску и форменные чёрные брюки с берцами. Неряха, непунктуальный, ленивый, пассивный, знает толк в развлечениях. В отличие от оригинала, не девственник. Учитывая его сомнительную мотивацию, легко может оказаться предателем Оси. Обычно появляется в пару к 2P!Северной Италии, дополняя его своим мазохизмом и подчинением. Варианты имени: Бернхард, Лютц.

Япония

Носит чёрную версию японской униформы — униформу императорского японского флота, а также длинный фиолетовый плащ и белые перчатки. Как и Япония, он носит катану, хотя он держит её в другой (правой) руке. У него красные глаза, и, кроме выражения и формы, он мало изменился. По отношению к Кику изображают более доминантным, решительным. Очевидно, он не уходил в изоляцию, оставаясь активным завоевателем. Скорее всего, далеко не так вежлив и воспитан, как оригинал. Чужую культуру он не воспринимает/относится равнодушно, поэтому и культурного шока у него не бывает. В Оси преследует свои цели, сотрудничая с Италией и Германией только ради господства. В 2P мире Япония не изобрёл мангу, аниме и хентай, а суши так и не стали популярны по всему миру. Варианты имени: Куро или Кохэку.

Протокол взаимодействия пиров

Будем все общение между пирами упаковывать в конверт (Envelope).

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

Команда, (или же тип содержимого) удачно расположим в самом начале конверта и определим список команд из 4 байт, не пересекающихся с именами глаголов HTTP.

Весь конверт при передаче сериализуется в массив байт.

Рукопожатие

Когда соединение установлено, пир тут же протягивает руку для рукопожатия, сообщая свое имя, публичный ключ и эфемерный публичный ключ для генерации общего сессионного ключа.

В ответ пир получает аналогичный набор данных, регистрирует найденный пир в своем списке и вычисляет (CalcSharedSecret) общий сессионный ключ.

Обмен пирами

После рукопожатия, пиры обмениваются своими списками пиров =)

Для этого отправляется конверт с командой LIST, а в его содержимое кладется JSON список пиров.
В ответ получаем аналогичный конверт.

Находим в списках новых и с каждым из них проделываем попытку соединения, рукопожатия, обмена пирами и так далее…

Обмен пользовательскими сообщениями

Пользовательские сообщения представляют для нас наибольшую ценность, поэтому каждое соединение будем шифровать и подписывать.

О шифровании

В стандартных (гугловых) библиотеках golang из пакета crypto реализовано множество всяких разных алгоритмов (ГОСТовских нет).

Наиболее удобной для подписей считаю кривую Ed25519. Будем использовать библиотеку ed25519 для подписи сообщений.

В самом начале я подумывал использовать пару ключей полученных из ed25519 не только для подписи, но и для генерации сессионного ключа.

Однако, ключи для подписи не применимы для вычисления общего (shared) ключа — над ними еще нужно поколдовать:

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

Для любителей математики вот ссылки на wiki:ПротоколДиффи—_Хеллмана_на_эллиптических_кривыхЦифровая подпись EdDSA

Генерация общего ключа вполне стандартная: сначала для нового соединения генерим эфемерные ключи, отправляем в сокет конверт с публичным ключом.

Противоположная сторона делает то же самое, но в другом порядке: получает конверт с публичным ключом, генерит свою пару и отправляет публичный ключ в сокет.

Теперь у каждого участника есть чужой публичный и свой приватный эфемерные ключи.

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

Шифровать сообщения будем поштучно давно зарекомендовавшим себя алгоритмом AES в режиме сцепления блоков (CBC).

Вся эта реализации легко находятся в документации golang.

Единственная доработка — авто заполнение сообщения нулевыми байтами для кратности его длины к длине блока шифрования (16 байт).

В далеком 2013 году реализовывал AES (с похожим на CBC режимом) для шифрования сообщений в Telegram в рамках конкурса от Павла Дурова.

Для генерации эфемерного ключа в то время в телеграмм использовался самый обычный протокол Диффи — Хеллмана.

А чтобы исключить нагрузку от фейковых подключений перед каждым обменом ключами клиенты решали задачу факторизации.

Зачем нужны пиринговые сети? Легальное использование P2P сетей

Одноранговые сети нужны для подключения компьютеров и устройств в единую сеть без необходимости настройки сервера. При создании сервера его осень дорого и сложно обслуживать, и люди используют более дешевые альтернативы, такие как P2P. Вот несколько распространенных примеров использования сетей P2P:

  • Когда вы в своем доме подключаете устройство на Windows к домашней группе компьютеров, вы создаете между ними одноранговую сеть. Homegroup — небольшая группа компьютеров, которые связаны между собой для совместного использования дискового пространства и принтеров. Это одно из самых распространенных применений для одноранговой технологии. Некоторые люди могут сказать, что домашние группы не могут быть одноранговыми, поскольку компьютеры в сети подключены к маршрутизатору. Однако имейте в виду, что маршрутизатор никак не связан именно с управлением сети. Маршрутизатор не работает как сервер, а просто как интерфейс или связующее звено между локальной сетью и Интернетом.
  • Когда вы создаете сеть между двумя компьютерами, вы создаете пиринговую сеть.
  • Совместное использование больших файлов в интернете часто выполняется с использованием сетевой архитектуры P2P. Например, некоторые онлайн-игровые платформы используют P2P сеть для загрузки игр между пользователями. Blizzard Entertainment распространяет Diablo III, StarCraft II и World of Warcraft с использованием P2P. Другой крупный издатель, Wargaming, делает то же самое со своими играми World of Tanks, World of Warships и World of Warplanes. Другие же, такие как Steam или GOG, предпочитают не использовать P2P, а поддерживать выделенные серверы по всему миру.
  • Обновления Windows 10 поставляются как с серверов Microsoft, так и через сеть P2P.
  • Многие операционные системы Linux распространяются через BitTorrent, которые используют одноранговые сети. Такими примерами являются Ubuntu, Linux Mint и Manjaro.
  • И наконец, технология блокчейн использует одноранговые децентрализованные сети для записи информации в распределенном реестре на всех компьютерах сети одновременно. (Более подробно читайте в статьях «Что такое блокчейн простыми словами?» и «Что такое распределенный реестр?»)

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector