GNUnet

Фреймворк для децентрализованной одноранговой сети, являющийся частью проекта GNU
GNUnet
Разработчик(и)GNUnet эВ [1]
Первоначальный выпуск5 ноября 2001 г .; 22 года назад ( 2001-11-05 )
Стабильный релиз0.19.4 (1 апреля 2023 г .; 18 месяцев назад [2] ) [±] ( 2023-04-01 )
Репозиторий
  • git.gnunet.org/gnunet.git/
Написано вС [3]
Операционная системаофициально: Свободные операционные системы ( Linux , FreeBSD , NetBSD , OpenBSD );
неофициально: Другие операционные системы ( OS X , Windows )
Доступно вИспанский, английский, русский, немецкий, французский
ТипАнонимный P2P , Друг-другу
Лицензия2018: AGPL-3.0 или более поздняя версия [a] [4]
2007: GPL-3.0 или более поздняя версия [b]
2001: GPL-2.0 или более поздняя версия [c]
Веб-сайтgnunet.org
Кристиан Гротхофф, ответственный за поддержку GNUnet, в Берлине 1 августа 2013 года на мероприятии «#youbroketheinternet. Мы сделаем себе GNU-интернет».

GNUnet — это программная среда для децентрализованных одноранговых сетей и официальный пакет GNU . Среда предлагает шифрование ссылок , обнаружение одноранговых сетей , распределение ресурсов , связь по многим транспортным протоколам (таким как TCP , UDP , HTTP , HTTPS , WLAN и Bluetooth ) и различные базовые одноранговые алгоритмы для маршрутизации , многоадресной рассылки и оценки размера сети. [5] [6]

Базовая топология сети GNUnet — это ячеистая сеть . GNUnet включает в себя распределенную хэш-таблицу (DHT), которая является рандомизированным вариантом Kademlia , который все еще может эффективно маршрутизировать в сетях малого мира . GNUnet предлагает опцию « топологии F2F » для ограничения подключений только доверенными друзьями пользователя. Собственные друзья друзей пользователя (и так далее) могут затем косвенно обмениваться файлами с компьютером пользователя, никогда не используя его IP-адрес напрямую.

GNUnet использует унифицированные идентификаторы ресурсов (не одобренные IANA , хотя заявка была подана). [ когда? ] URI GNUnet состоят из двух основных частей: модуля и идентификатора модуля. URI GNUnet имеет форму,
gnunet://module/identifierгде module — это имя модуля, а identifier — это строка, специфичная для модуля.

Основная кодовая база написана на языке C , но существуют привязки к другим языкам для создания API для разработки расширений на этих языках. GNUnet является частью проекта GNU . Он привлек интерес хакерского сообщества после разоблачений PRISM . [7]

GNUnet состоит из нескольких подсистем, основными из которых являются транспортная и основная подсистемы. [8] Транспортная подсистема обеспечивает незащищенную связь на уровне канала, в то время как основная обеспечивает обнаружение одноранговых узлов и шифрование. [9] На основе основной подсистемы строятся различные приложения.

GNUnet включает в себя различные P2P-приложения в основном дистрибутиве фреймворка, включая обмен файлами, чат и VPN; кроме того, несколько внешних проектов (например, secushare) также расширяют инфраструктуру GNUnet.

GNUnet не имеет отношения к старому протоколу Gnutella P2P. Gnutella не является официальным проектом GNU, в то время как GNUnet является таковым. [10]

Транспорт

Первоначально GNUnet использовал UDP для базовой транспортировки. [11] Теперь транспортная подсистема GNUnet предоставляет несколько вариантов, таких как TCP и SMTP. [12]

Порт связи, официально зарегистрированный в IANA , — 2086 ( tcp + udp ). [13]

Система доверия

GNUnet предоставляет систему доверия, основанную на экономической модели, основанной на избытке. [14] Идея использования экономической системы взята из сети MojoNation. [15]

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

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

Обмен файлами

Основное применение на данном этапе — анонимный , устойчивый к цензуре обмен файлами, позволяющий пользователям анонимно публиковать или извлекать информацию всех видов. Протокол GNUnet, обеспечивающий анонимность, называется GAP (протокол анонимности GNUnet). [16] GNUnet FS может дополнительно использовать GNU libextractor для автоматического аннотирования общих файлов метаданными .

Кодировка файла

Файлы, доступные в GNUnet, закодированы с помощью ECRS (кодировка для устойчивого к цензуре обмена). [17]

Весь контент представлен в виде GBlocks. Каждый GBlock содержит 1024 байта. Существует несколько типов GBlocks, каждый из которых служит определенной цели. Любой GBlock уникально идентифицируется своим хешем RIPEMD-160 . B {\displaystyle B} H ( B ) {\displaystyle H(B)}

DBlocks хранят фактическое содержимое файла и ничего больше. Файл разбивается на части по 1024 байта, и полученные фрагменты сохраняются в DBlocks. DBlocks связаны в дерево Меркла с помощью IBlocks, которые хранят идентификаторы DBlock.

Блоки шифруются с помощью симметричного ключа, полученного при их хранении в сети. H ( B ) {\displaystyle H(B)}

Запросы и ответы

Протокол анонимности GNUnet состоит из запросов и ответов. В зависимости от нагрузки на пересылающий узел сообщения пересылаются на ноль или более узлов.

Запросы используются для поиска контента и запроса блоков данных.

Запрос содержит идентификатор ресурса, адрес ответа, приоритет и TTL (время жизни).

Идентификатор ресурса datum представляет собой тройной хеш . [18] Узел, который отвечает на запрос, предоставляет доказательства того, что у него действительно есть запрошенный ресурс, не предоставляя его промежуточным узлам, поэтому промежуточные узлы не могут расшифровать . Q {\displaystyle Q} H ( H ( H ( Q ) ) ) {\displaystyle H(H(H(Q)))} H ( H ( Q ) ) {\displaystyle H(H(Q))} H ( Q ) {\displaystyle H(Q)} Q {\displaystyle Q}

Адрес ответа — это главное отличие по сравнению с протоколом Freenet . В то время как во Freenet ответ всегда распространяется обратно по тому же пути, что и запрос, в GNUnet путь может быть короче. Пир, получающий запрос, может отбросить его, переслать его без перезаписи адреса ответа или переадресовать его, заменив адрес ответа своим собственным адресом. Переадресуя запросы, пир обеспечивает трафик покрытия для своих собственных запросов, в то время как переадресация их позволяет пиру избегать быть ссылкой в ​​распространении ответа и сохранять свою пропускную способность. Эта функция позволяет пользователю жертвовать анонимностью ради эффективности. Пользователь может указать уровень анонимности для каждой операции публикации, поиска и загрузки. Нулевой уровень анонимности может использоваться для выбора неанонимного обмена файлами. Инфраструктура DHT GNUnet используется только в том случае, если указан неанонимный обмен файлами. Уровень анонимности определяет, какой объем трафика покрытия должен быть у пира, чтобы скрыть собственные действия пользователя.

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

TTL используется для предотвращения слишком долгого пребывания запросов в сети.

URI для обмена файлами

Идентификатор модуля fs состоит из chk , sks , ksk или loc , за которыми следует косая черта и значение, специфичное для категории. Большинство URI содержат хэши, которые кодируются в base32hex . [19]

  • chk идентифицирует файлы, как правило:gnunet://fs/chk/[file hash].[query hash].[file size in bytes]
Хэш файла — это хэш открытого текстового файла, который позволяет расшифровать его после загрузки. Хэш запроса — это хэш самого верхнего GBlock, который позволяет загрузить все дерево GBlock, содержащих зашифрованный файл. Размер файла необходим для определения формы дерева.
  • sks идентифицирует файлы в пространствах имен, как правило:gnunet://fs/sks/NAMESPACE/IDENTIFIER
  • ksk идентифицирует поисковые запросы, как правило:gnunet://fs/ksk/KEYWORD[+KEYWORD]*
  • loc идентифицирует данные на конкретной машине, обычно:gnunet://fs/loc/PEER/QUERY.TYPE.KEY.SIZE

Примеры

Тип URI файлообменника GNUnet, указывающий на конкретную копию текста лицензии GNU GPL :gnunet://fs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992

Другой тип URI файлообмена GNUnet, указывающий на результаты поиска по ключевому слову «gpl»:gnunet://fs/ksk/gpl

Система имен GNU

GNUnet включает реализацию GNU Name System (GNS), децентрализованной и устойчивой к цензуре замены DNS . В GNS каждый пользователь управляет своими собственными зонами и может делегировать поддомены зонам, управляемым другими пользователями. Поиск записей, определенных другими пользователями, выполняется с использованием DHT GNUnet. [20] GNS был стандартизирован в RFC  9498. Реестр GANA управляет доменом верхнего уровня ".alt" в GNS. [21]

Перевод протокола

GNUnet может туннелировать IP-трафик через одноранговую сеть. При необходимости GNUnet может выполнять трансляцию протокола IPv4-IPv6 в этом процессе. GNUnet предоставляет шлюз уровня приложения DNS для проксирования DNS-запросов и сопоставления адресов с нужным семейством адресов по мере необходимости. Таким образом, GNUnet предлагает возможную технологию для облегчения перехода на IPv6 . Кроме того, в сочетании с GNS система трансляции протоколов GNUnet может использоваться для доступа к скрытым службам — службам на основе IP, которые работают локально на некотором одноранговом узле в сети и к которым можно получить доступ только путем разрешения имени GNS.

Социальный API

В начале сентября 2013 года Габор Икс Тот опубликовал диссертацию [22], в которой представил проект социальной службы обмена сообщениями для одноранговой структуры GNUnet, которая предлагает масштабируемость, расширяемость и сквозную зашифрованную связь. Масштабируемость достигается за счет многоадресной доставки сообщений, в то время как расширяемость становится возможной благодаря использованию PSYC (протокола для синхронной конференц-связи), который обеспечивает расширяемый синтаксис RPC (удаленный вызов процедур), который может развиваться со временем без необходимости обновления программного обеспечения на всех узлах сети. Еще одной ключевой функцией, предоставляемой уровнем PSYC, являются многоадресные каналы с отслеживанием состояния, которые используются для хранения, например, профилей пользователей. Сквозная зашифрованная связь обеспечивается службой сетки GNUnet, на которой построены многоадресные каналы. Псевдонимы пользователей и социальные места в системе имеют криптографические идентификаторы, идентифицируемые по их открытому ключу, которые сопоставляются с запоминающимися именами людей с помощью GNS ( система имен GNU ), где каждый псевдоним имеет зону, указывающую на его места.

Это необходимый строительный блок для превращения фреймворка GNUnet в полностью одноранговую социальную сетевую платформу.

Чат

Чат был реализован в модуле CADET, [23] для которого существует интерфейс GTK для GNOME , [24] специально разработанный для появляющихся телефонов на базе Linux (таких как Librem 5 или PinePhone ). [25]

Смотрите также

Примечания

  1. ^ AGPL-3.0 или более поздняя версия с 05.06.2018.
  2. ^ GPL-3.0 или более поздняя версия с 2007-07-02 по 2018-06-05.
  3. ^ GPL-2.0 или более поздняя с 2001 по 2007-07-02.

Ссылки

  1. ^ GNUnet.org – О GNUnet eV
  2. ^ Шанценбах, Мартин (01.04.2023). "GNUnet 0.19.4". gnunet.org . Получено 03.04.2023 .
  3. ^ Исходный код GNUnet
  4. ^ "уведомление о лицензии, размещенное в верхней части одного из исходных файлов репозитория проекта, вероятно, в каждом из его исходных файлов" . Получено 8 июня 2018 г. GNUnet является свободным программным обеспечением: вы можете распространять его и/или изменять в соответствии с условиями GNU Affero General Public License, опубликованной Free Software Foundation, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
  5. ^ ЭвансПолотГротхофф 2012.
  6. ^ Гротхофф, Кристиан (10 октября 2017 г.). Система GNUnet (кандидатская диссертация). Университет Ренна 1.
  7. ^ Гротхофф 2013.
  8. ^ ФеррейраГротхоффРут 2003, Рисунок 1.
  9. ^ FerreiraGrothoffRuth 2003, II. GNUNET И ТРАНСПОРТНЫЙ УРОВЕНЬ: «Ядро отвечает за шифрование между соединениями, привязку идентификаторов узлов к маршрутизируемым адресам и обнаружение одноранговых узлов».
  10. ^ "GNU Software". Программное обеспечение - GNU Project - Free Software Foundation . Free Software Foundation, Inc . Получено 25 января 2020 г. .
  11. ^ ГротхоффПатраскуБеннеттСтеф 2002, 3.1.1 UDP.
  12. ^ ФеррейраГротхоффРут 2003.
  13. ^ Реестр имен служб и номеров портов транспортных протоколов, стр. 38
  14. ^ Гротхофф 2003.
  15. ^ ГротхоффПатраскуБеннеттСтеф 2002, 2.4 Mojo Nation.
  16. ^ Беннетт Гротхофф 2003.
  17. ^ БеннеттГротхоффГорозовПатраску 2002.
  18. ^ ГротхоффПатраскуБеннеттСтеф 2002, 5.5 Подробнее о запросах.
  19. ^ Гротхофф, Кристиан. "File-Sharing URIs". www.gnunet.org . Архивировано из оригинала 17 августа 2016 года . Получено 15 июля 2016 года .
  20. ^ Вакс, Шанценбах и Гротхофф 2014.
  21. ^ "RFC 9498: Система имен GNU [LWN.net]". lwn.net .
  22. ^ Тот, Габор X (2013-09-05), Проектирование системы социальных сообщений с использованием многоадресной рассылки с отслеживанием состояния. Архивировано 22 февраля 2014 г. на Wayback Machine - Получено 28 сентября 2013 г.
  23. ^ Документация GNUnet.org (14.11.2019) Чат с (простым) клиентом - Получено 14.11.2019
  24. ^ cadet-gtk на GitLab
  25. ^ GNUnet CADET для мобильного Linux – Reddit

Дополнительные ссылки

  • Гротхофф, Кристиан; Патраску, Иоана; Беннетт, Криста; Стеф, Тибериу; Горозов, Цветан (2002-06-13). Белая книга GNet (PDF) (Технический отчет). Университет Пердью.
  • Bennett, Krista; Grothoff, Christian; Horozov, Tzvetan; Patrascu, Ioana (2002-07-03). Batten, Lynn ; Seberry, Jennifer (ред.). Эффективный обмен зашифрованными данными . Lecture Notes in Computer Science. Springer Berlin Heidelberg. стр. 107–120. CiteSeerX  10.1.1.19.9837 . doi :10.1007/3-540-45450-0_8. ISBN 9783540438618.
  • Феррейра, Роналдо; Гротхофф, Кристиан; Рут, Пол (2003-05-01). "Абстракция транспортного уровня для одноранговых сетей" (PDF) . CCGrid 2003. 3-й Международный симпозиум IEEE/ACM по кластерным вычислениям и Grid, 2003. Труды . IEEE. стр. 398–405. CiteSeerX  10.1.1.13.5086 . doi :10.1109/CCGRID.2003.1199393. ISBN 978-0-7695-1919-7. S2CID  1928711.
  • Гротхофф, Кристиан с дипломом математика (1 июня 2003 г.). «Распределение ресурсов в одноранговых сетях». Wirtschaftsinformatik . 45 (3): 285–292. дои : 10.1007/BF03254946. ISSN  0937-6429. S2CID  4479637.
  • Вакс, Маттиас; Шанценбах, Мартин; Гротхофф, Кристиан (2014). «Устойчивая к цензуре, улучшающая конфиденциальность и полностью децентрализованная система имен» (PDF) . Криптология и сетевая безопасность . Конспект лекций по информатике. Том 8813. С. 127–142. doi :10.1007/978-3-319-12280-9_9. ISBN 978-3-319-12279-3.
  • Беннетт, Криста; Гротхофф, Кристиан (2003-03-26). "Gap – Practical Anonymous Networking". В Dingledine, Roger (ред.). Privacy Enhancing Technologies . Lecture Notes in Computer Science. Vol. 2760. Springer Berlin Heidelberg. pp. 141–160. CiteSeerX  10.1.1.125.9673 . doi :10.1007/978-3-540-40956-4_10. ISBN 9783540206101.
  • Эванс, Натан; Полот, Бартломей; Гротхофф, Кристиан (2012-05-21). «Эффективная и безопасная оценка размера децентрализованной сети». В Бестак, Роберт; Кенкл, Лукас; Ли, Ли Эрран; Видмер, Йорг; Инь, Хао (ред.). Сетевые технологии 2012. Конспект лекций по информатике. Том 7289. Springer Berlin Heidelberg. стр. 304–317. doi :10.1007/978-3-642-30045-5_23. ISBN 9783642300448.
  • Гротхофф, Кристиан (01.08.2013). "Видео: Вы сломали Интернет. Мы создаем себе GNU-интернет". gnunet.org . Пиратская партия Германии , Берлин . Получено 4 октября 2013 г.
  • Гротхофф, Кристиан (2015). «Архитектура GNUnet: 45 подсистем за 45 минут» (PDF) . Получено 14 июля 2016 г.
  • Официальный сайт
Retrieved from "https://en.wikipedia.org/w/index.php?title=GNUnet&oldid=1213151228"