Pull to refresh

Интернет на магнитах 5 — Маяки и сообщения (личные, публичные и обновления)

Reading time 8 min
Views 4.2K

Я вспомнил что не рассказал важную часть для обеспечения возможности общения и обновления контента в P2P сетях.


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


Как это работает


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


Общий алгоритм получения


  1. Публикуется шаблон маяка.
  2. Формируется маяк.
  3. Поиск этого маяка и файла с хешем маяка в имени.
  4. Загрузка найденных файлов или просмотр шары источников маяка.

Общий алгоритм отправки такой


  1. Пишем сообщение.
  2. Шифруем открытым ключом адресата.
  3. Формируем маяк по шаблону адресата.
  4. Получаем хеш от маяка и вставляем в имя файла с сообщением.
  5. Публикуем маяк и файл с сообщением в p2p сетях.

Наше сообщение и маяк свободно могут копировать другие участники сети. Так как оно зашифровано они не смогут его прочитать но помогут его держать онлайн пока его не получит адресат.


Открытое сообщение от автора


  1. Публикуем шаблон маяка.
  2. Пишем сообщение и подписываем.
  3. Генерируем маяк.
  4. В имя файла сообщения вписываем хеш маяка.
  5. Публикуем маяк и файл с сообщением.

Шаблон маяка


Это файл из которого формируется маяк.


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


  1. Публичный ключ для шифрования сообщений предназначенных адресату
  2. Шаблон маяка — инструкции для формирования маяка
  3. Подпись — файл подписывается.

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


Создание шаблона маяка


  1. Получаем отпечаток публичного ключа.


    gpg --list-sigs --with-fingerprint

  2. Экспортируем публичный ключ


    gpg --export -a >  lighthouse_template_[отпечаток публичного ключа].txt

  3. Открываем файл(lighthouse_template_[отпечаток публичного ключа].txt) и дополняем инструкцией.
    Пример:


    yyyy — год полностью по UTC±0:00
    mm — месяц по времени UTC±0:00 (дополняется нулём если меньше 10)
    dd — день по времени UTC±0:00 (дополняется нулём если меньше 10)
    hh — час в 24 часовом формате по времени UTC±0:00 (дополняется нулём если меньше 10)

    Шаблон имени файла маяка (важно для сети BitTorrent):
    lighthouse_yyyy-mm-ddThhZ_[отпечаток публичного ключа].asc

    Для формирования маяка добавьте в конце файла дату и время в формате:
    yyyy-mm-ddThhZ

  4. Подписываем.


    gpg --clearsign lighthouse_template_[отпечаток публичного ключа].txt


Пример шаблона маяка


Файл: lighthouse_template_f43b4866b4f47e8e27bfafa56f4c4f2384a3135d.asc


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2

mQENBFk6ZDMBCADE/yoNEOosw16n3P2ZSjH+quYlSbZePBudHnAlNZ/e4KSxEnXx
B/44vKJX98y0X6TjCk0TVrAfJQhOrwg9/X6IMkeii1Nzt+NhrygojuVmEJS0kHvi
QoJLrotBXdYWbUtfVE8zGS/qVmtFi6ns/ouV1yqLnRSA+dVfLNa/7k5glo+7TEDt
g/CkSQ5CKJowPnBYnCxF4aQQQi8ydDIMXIFVyuApPRHLNsqIeA4CFlpb2Xb3ksEN
/tse4zjBRgNS3nc6SLYfv6KKb8O6oHxWzz+mXlrvL4G1dszUE7Yg4FND9t9P+bMQ
d+7OqDgO00/eEBooTcOptuHXTLxftu3z9S2VABEBAAG0Iml2YW4zODYgPG1hZ25l
dEBpdmFuMzg2LmdpdGh1Yi5pbz6JAT8EEwEIACkFAlk6ZDMCGyMFCQEOQt0HCwkI
BwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRBvTE8jhKMTXUA7B/93TSAcSQW5Nvgw
CpgsJHTRbUsWT2heovl1CeME39H3iKxlNVMl2N5l5kFNUryLMo63ZXp5tm9C7UKx
o2X6+3TJg/Td+WxC2vhXyLeSWc6KkV98a7Sg6kgdBBDXA1x4TfLNT8dijYBqNNgU
OVJ3gOyOCXa7Is9gPYobtwFvTTzsKqfz3JkAZf54Y7EulLYo+esty2nDqIhyC+7Q
a5izjxhGME1gAWjPT4Yr/QytmL1D1WD8tmmVrvFtBwUo3iyZhf2TCVkkJ41mOAq+
Vr2tfZPnxUxSaLMU4cm0rUoZ79NK3FX70xJjy4IgQtj/NDuQwv1KgqSClxCKkpI/
BJSvjxzguQENBFk6ZDMBCAD6DTPWTkG7Zqqhz/5oaM4zFG9ncTtnVXiR0rRPzuyn
aXz1/Kn3odEEG4kyEQbHS/lLfnLsqAkSMjUHiBsC6R0h1bTqSDnHEhPqpuLm526N
6j+o5/oIC8ANlGH5fFGDMNXy5MrRuFGMv/tHDuSW56rb6Kh9jPoU+1HCAGpv4zd9
iXB/nOYHlLl3NZ4+883wd0BgIKslSpvOU8sTjqcEwcIFFHr8SBUM6x1nKSq1Ad+C
bEQPBA7EKdIeV/N5CZ9s6fnvUvc1bNMOO8YdJ4wCWfDSGWu7ZdPyj+Yh+9/R7EIW
bEAHX5v/IcAu1u0U53goehGvEu9K4lNjibYRu8hDU02fABEBAAGJASUEGAEIAA8F
Alk6ZDMCGwwFCQEOQt0ACgkQb0xPI4SjE11j5Af9EBukKcDSQfSFBgsRRxLzfk3l
B4Qa7Kb2JKPdf8p+rlC8n7b7nS1WnDsh/ADnRO1+njP4oHo4eV3P09ao9PNagM5k
YldAG2oAOj9RhVSMI4Jt+/Tf7NZixLPjMCakrGA47wQwC9bp+AmV/ST8I6/r2t3W
4uXDLUKzvZxpBUVqEG9x0olnQiBgMicyUlW1WmyMKiorVET6rSnCv3yv33lMRQRG
5txSw/z0jXhhK6ENn0mHMGeiBqGITTwjQM7uQTkw2GmNJfHpg+jThnJQran+cGDZ
tvKsoBc4BFnM4eTxZfeyYPquG2QWZ59kcqm4JRyJfHYKT+CIPQXmEmD4uyp5/Q==
=QxOi
- -----END PGP PUBLIC KEY BLOCK-----

yyyy - год полностью по UTC±0:00
mm - месяц по времени UTC±0:00 (дополняется нулём если меньше 10)
dd - день по времени UTC±0:00 (дополняется нулём если меньше 10)
hh - час в 24 часовом формате по времени UTC±0:00 (дополняется нулём если меньше 10)

Шаблон имени файла маяка (важно для сети BitTorrent):
lighthouse_yyyy-mm-ddThhZ_f43b4866b4f47e8e27bfafa56f4c4f2384a3135d.asc

Для формирования маяка добавьте в конце файла дату и время в формате:
yyyy-mm-ddThhZ
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBCAAGBQJZOr9iAAoJEG9MTyOEoxNd8RIIALQUa9BuMgh+uET4wse7sBDG
19RvKbUq+9HCOaxL+Qfz+C5VO1XVIxC/Vi2iP1RVwBjkKtTANXdxcf9jR/S2ZHpL
0ohDsJ8O8EPf0sTEr5nvGE27KobEhvAb9TbxrOLuZlWtqWh09CvgyEZPVnnMa7v1
WL6xVln2BjZOkndn60ToqPcVUYQpwIEfHBz7S8WYdRFumN8sUCfJYaXGFElSLKiA
2Y+fTayhPIKcwBTzRuIU6fQWWCUA7egZ3JsWWiBP68parRcsDDOia3UiddFRr0jW
lmGrsOJiZ2Vq2xfXNqY+BfcSdT8AXnt9yUYCdaH2w2oI3uEXlw8eF8JyxO60w8k=
=FJOw
-----END PGP SIGNATURE-----

Маяк


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


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


Пример маяка


Маяк на 09 июня 2017 года 18:33 Москвы будет выглядеть так.


Файл: lighthouse_2017-06-09T15Z_f43b4866b4f47e8e27bfafa56f4c4f2384a3135d.asc


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2

mQENBFk6ZDMBCADE/yoNEOosw16n3P2ZSjH+quYlSbZePBudHnAlNZ/e4KSxEnXx
B/44vKJX98y0X6TjCk0TVrAfJQhOrwg9/X6IMkeii1Nzt+NhrygojuVmEJS0kHvi
QoJLrotBXdYWbUtfVE8zGS/qVmtFi6ns/ouV1yqLnRSA+dVfLNa/7k5glo+7TEDt
g/CkSQ5CKJowPnBYnCxF4aQQQi8ydDIMXIFVyuApPRHLNsqIeA4CFlpb2Xb3ksEN
/tse4zjBRgNS3nc6SLYfv6KKb8O6oHxWzz+mXlrvL4G1dszUE7Yg4FND9t9P+bMQ
d+7OqDgO00/eEBooTcOptuHXTLxftu3z9S2VABEBAAG0Iml2YW4zODYgPG1hZ25l
dEBpdmFuMzg2LmdpdGh1Yi5pbz6JAT8EEwEIACkFAlk6ZDMCGyMFCQEOQt0HCwkI
BwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRBvTE8jhKMTXUA7B/93TSAcSQW5Nvgw
CpgsJHTRbUsWT2heovl1CeME39H3iKxlNVMl2N5l5kFNUryLMo63ZXp5tm9C7UKx
o2X6+3TJg/Td+WxC2vhXyLeSWc6KkV98a7Sg6kgdBBDXA1x4TfLNT8dijYBqNNgU
OVJ3gOyOCXa7Is9gPYobtwFvTTzsKqfz3JkAZf54Y7EulLYo+esty2nDqIhyC+7Q
a5izjxhGME1gAWjPT4Yr/QytmL1D1WD8tmmVrvFtBwUo3iyZhf2TCVkkJ41mOAq+
Vr2tfZPnxUxSaLMU4cm0rUoZ79NK3FX70xJjy4IgQtj/NDuQwv1KgqSClxCKkpI/
BJSvjxzguQENBFk6ZDMBCAD6DTPWTkG7Zqqhz/5oaM4zFG9ncTtnVXiR0rRPzuyn
aXz1/Kn3odEEG4kyEQbHS/lLfnLsqAkSMjUHiBsC6R0h1bTqSDnHEhPqpuLm526N
6j+o5/oIC8ANlGH5fFGDMNXy5MrRuFGMv/tHDuSW56rb6Kh9jPoU+1HCAGpv4zd9
iXB/nOYHlLl3NZ4+883wd0BgIKslSpvOU8sTjqcEwcIFFHr8SBUM6x1nKSq1Ad+C
bEQPBA7EKdIeV/N5CZ9s6fnvUvc1bNMOO8YdJ4wCWfDSGWu7ZdPyj+Yh+9/R7EIW
bEAHX5v/IcAu1u0U53goehGvEu9K4lNjibYRu8hDU02fABEBAAGJASUEGAEIAA8F
Alk6ZDMCGwwFCQEOQt0ACgkQb0xPI4SjE11j5Af9EBukKcDSQfSFBgsRRxLzfk3l
B4Qa7Kb2JKPdf8p+rlC8n7b7nS1WnDsh/ADnRO1+njP4oHo4eV3P09ao9PNagM5k
YldAG2oAOj9RhVSMI4Jt+/Tf7NZixLPjMCakrGA47wQwC9bp+AmV/ST8I6/r2t3W
4uXDLUKzvZxpBUVqEG9x0olnQiBgMicyUlW1WmyMKiorVET6rSnCv3yv33lMRQRG
5txSw/z0jXhhK6ENn0mHMGeiBqGITTwjQM7uQTkw2GmNJfHpg+jThnJQran+cGDZ
tvKsoBc4BFnM4eTxZfeyYPquG2QWZ59kcqm4JRyJfHYKT+CIPQXmEmD4uyp5/Q==
=QxOi
- -----END PGP PUBLIC KEY BLOCK-----

yyyy - год полностью по UTC±0:00
mm - месяц по времени UTC±0:00 (дополняется нулём если меньше 10)
dd - день по времени UTC±0:00 (дополняется нулём если меньше 10)
hh - час в 24 часовом формате по времени UTC±0:00 (дополняется нулём если меньше 10)

Шаблон имени файла маяка (важно для сети BitTorrent):
lighthouse_yyyy-mm-ddThhZ_f43b4866b4f47e8e27bfafa56f4c4f2384a3135d.asc

Для формирования маяка добавьте в конце файла дату и время в формате:
yyyy-mm-ddThhZ
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBCAAGBQJZOr9iAAoJEG9MTyOEoxNd8RIIALQUa9BuMgh+uET4wse7sBDG
19RvKbUq+9HCOaxL+Qfz+C5VO1XVIxC/Vi2iP1RVwBjkKtTANXdxcf9jR/S2ZHpL
0ohDsJ8O8EPf0sTEr5nvGE27KobEhvAb9TbxrOLuZlWtqWh09CvgyEZPVnnMa7v1
WL6xVln2BjZOkndn60ToqPcVUYQpwIEfHBz7S8WYdRFumN8sUCfJYaXGFElSLKiA
2Y+fTayhPIKcwBTzRuIU6fQWWCUA7egZ3JsWWiBP68parRcsDDOia3UiddFRr0jW
lmGrsOJiZ2Vq2xfXNqY+BfcSdT8AXnt9yUYCdaH2w2oI3uEXlw8eF8JyxO60w8k=
=FJOw
-----END PGP SIGNATURE-----
2017-06-09T15Z

Хеши этого маяка (urn:[название]:[хеш или мультихеш или CIDv1])


urn:sha1:mthkta2fsilqxpoox6vessac37674gl3
urn:tree:tiger:abrmyjcyckt7lccz5jjqebazmt3tkuordfetana
urn:btih:i7mif67cu6r2jkxw23qwyanlx7tqqtoy
urn:ed2k:7f9112c53d5ae16377d54c6bdc34d4f7
urn:sha256:ad300aeb8b4ab6db19b640883d19d0900841c25689ed97e0ec0490cd23a7bd71
urn:ipfs:zb2rhiJLDNbWfS1z6yKcTGzQcazmumkcttkXc4FFq3hfeGn8Y

Соответственно каждый час создаётся новый маяк.


В каждой P2P сети используется соответствующий ей хеш.


Поиск фалов по хешу маяка позволяет передать открытое сообщение в имени файла маяка. (Gnutella2, DirectConnect, Edonkey2000, IPFS)


Поиск используя хеш как часть имени файла позволит передать файл. Это может быть зашифрованное публичным ключём из маяка приватное сообщение. (Gnutella2, DirectConnect, Edonkey2000, IPFS)


Комментарии к файлу маяка также могут использоваться. В них может быть сообщение либо магнит на файл с сообщением приватным. (Gnutella2)


IPFS


Для сети IPFS необходимо найти источники маяка и получить связанные с источниками файлы/каталоги по публичным ключам источников. Далее в списке найти сам маяк или файл/каталог с хешем маяка в имени.


Получаем список пиров с маяком:


ipfs dht findprovs [мультихеш маяка]

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


Получаем мультихеш шары:


ipfs name resolve [мультихеш публичного ключа]

Результат /ipfs/ путь с мультихешом связанного файла или каталога


Ищем маяк и файл с хешом маяка в имени:


ipfs refs -r --format="<dst> <linkname>" [мультихеш шары]| grep "[мультихеш маяка]" 

В результате получаем сообщения:


[мультихеш маяка] [Сообщение в имени файла маяка]
[мультихеш файла] [Имя файла которое содержит в себе мультихеш маяка]

Во втором случае сообщением является содержимое файла.


Загружаем командой:


ipfs get [мультихеш файла]

Edonkey2000, DirectConnect, Gnutella(1,2)


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


Gnutella2


В этой сети возможно комментирование источниками файла. В таком случае достаточно искать маяк по хешу и смотреть комментарии к результатам. Или можно также искать используя хеш как часть имени файла.


BitTorrent


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


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


Второй вариант создание множества маяков и тогда присутствие на раздаче будет 1 а отсутствие 0. Часть маяков будут кодировать хеш а другая часть контрольную сумму.


Заключение


Как то так.


Ссылки


CID (Content IDentifier)
multihash
Commands | IPFS Docs


gpg Man


ISO 8601 — международный стандарт, который описывает формат даты и времени


Другие части:
Интернет на магнитах 1 — Магнит
Интернет на магнитах 2 — Гипертекст
Интернет на магнитах 3 — P2P Сайт и Форум
Интернет на магнитах 4 — Делим магнит на части
Интернет на магнитах 5 — Маяки и сообщения(личные, публичные и обновления)

Tags:
Hubs:
+13
Comments 0
Comments Leave a comment

Articles