Эту статью необходимо обновить . Пожалуйста ( Апрель 2019 ) |
Разработчик(и) | GNUnet эВ [1] |
---|---|
Первоначальный выпуск | 5 ноября 2001 г ( 2001-11-05 ) |
Стабильный релиз | 0.19.4 (1 апреля 2023 г [±] ( 2023-04-01 ) | [2] )
Репозиторий |
|
Написано в | С [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 — это программная среда для децентрализованных одноранговых сетей и официальный пакет 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 .
DBlocks хранят фактическое содержимое файла и ничего больше. Файл разбивается на части по 1024 байта, и полученные фрагменты сохраняются в DBlocks. DBlocks связаны в дерево Меркла с помощью IBlocks, которые хранят идентификаторы DBlock.
Блоки шифруются с помощью симметричного ключа, полученного при их хранении в сети.
Протокол анонимности GNUnet состоит из запросов и ответов. В зависимости от нагрузки на пересылающий узел сообщения пересылаются на ноль или более узлов.
Запросы используются для поиска контента и запроса блоков данных.
Запрос содержит идентификатор ресурса, адрес ответа, приоритет и TTL (время жизни).
Идентификатор ресурса datum представляет собой тройной хеш . [18] Узел, который отвечает на запрос, предоставляет доказательства того, что у него действительно есть запрошенный ресурс, не предоставляя его промежуточным узлам, поэтому промежуточные узлы не могут расшифровать .
Адрес ответа — это главное отличие по сравнению с протоколом Freenet . В то время как во Freenet ответ всегда распространяется обратно по тому же пути, что и запрос, в GNUnet путь может быть короче. Пир, получающий запрос, может отбросить его, переслать его без перезаписи адреса ответа или переадресовать его, заменив адрес ответа своим собственным адресом. Переадресуя запросы, пир обеспечивает трафик покрытия для своих собственных запросов, в то время как переадресация их позволяет пиру избегать быть ссылкой в распространении ответа и сохранять свою пропускную способность. Эта функция позволяет пользователю жертвовать анонимностью ради эффективности. Пользователь может указать уровень анонимности для каждой операции публикации, поиска и загрузки. Нулевой уровень анонимности может использоваться для выбора неанонимного обмена файлами. Инфраструктура DHT GNUnet используется только в том случае, если указан неанонимный обмен файлами. Уровень анонимности определяет, какой объем трафика покрытия должен быть у пира, чтобы скрыть собственные действия пользователя.
Приоритет определяет, какую часть своего доверия пользователь готов потратить в случае нехватки ресурсов.
TTL используется для предотвращения слишком долгого пребывания запросов в сети.
Идентификатор модуля fs состоит из chk , sks , ksk или loc , за которыми следует косая черта и значение, специфичное для категории. Большинство URI содержат хэши, которые кодируются в base32hex . [19]
gnunet://fs/chk/[file hash].[query hash].[file size in bytes]
gnunet://fs/sks/NAMESPACE/IDENTIFIER
gnunet://fs/ksk/KEYWORD[+KEYWORD]*
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
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.
В начале сентября 2013 года Габор Икс Тот опубликовал диссертацию [22], в которой представил проект социальной службы обмена сообщениями для одноранговой структуры GNUnet, которая предлагает масштабируемость, расширяемость и сквозную зашифрованную связь. Масштабируемость достигается за счет многоадресной доставки сообщений, в то время как расширяемость становится возможной благодаря использованию PSYC (протокола для синхронной конференц-связи), который обеспечивает расширяемый синтаксис RPC (удаленный вызов процедур), который может развиваться со временем без необходимости обновления программного обеспечения на всех узлах сети. Еще одной ключевой функцией, предоставляемой уровнем PSYC, являются многоадресные каналы с отслеживанием состояния, которые используются для хранения, например, профилей пользователей. Сквозная зашифрованная связь обеспечивается службой сетки GNUnet, на которой построены многоадресные каналы. Псевдонимы пользователей и социальные места в системе имеют криптографические идентификаторы, идентифицируемые по их открытому ключу, которые сопоставляются с запоминающимися именами людей с помощью GNS ( система имен GNU ), где каждый псевдоним имеет зону, указывающую на его места.
Это необходимый строительный блок для превращения фреймворка GNUnet в полностью одноранговую социальную сетевую платформу.
Чат был реализован в модуле CADET, [23] для которого существует интерфейс GTK для GNOME , [24] специально разработанный для появляющихся телефонов на базе Linux (таких как Librem 5 или PinePhone ). [25]
является свободным программным обеспечением: вы можете распространять его и/или изменять в соответствии с условиями GNU Affero General Public License, опубликованной Free Software Foundation, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.