Перейти до вмісту

Kademlia

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Kad Network)

Kademlia (укр. Кадемлія) — це протокол комунікації для децентралізованих оверлейних однорангових мереж. Kademlia заснована на метриці XOR і є варіацією розподіленої геш-таблиці (тобто зберігання інформації в розподіленій мережі)[1][2].

Kademlia була створена Петром Маймунковим та Девідом Мазьєром у 2002 році[3][4] і вважається початком третього покоління протоколів обчислень з плоскою ієрархією[5].

Огляд протоколу

[ред. | ред. код]

Протокол Kademlia складається з чотирьох віддалених викликів процедур (RPC): PING (перевіряє, чи є вузол в мережі), STORE (дає вказівку вузлу зберегти пару [ключ, значення] для подальшого пошуку), FIND_NODE (приймає 160-бітний ключ як аргумент), і FIND_VALUE. Одержувач RPC FIND_NODE повертає кортеж (IP-адреса, UDP-порт, ідентифікатор вузла) для кожного з k вузлів, найближчих до ідентифікатора призначення. RPC FIND_VALUE поводиться подібно до FIND_NODE, повертаючи k вузлів, найближчих до ідентифікатора призначення, за одним винятком: якщо одержувач RPC отримав STORE для заданого ключа, він повертає збережене значення[6][7].

Кожен вузол і ключ Kademlia ідентифікується 160-бітовим ідентифікатором, кожне значення зберігається на k вузлах, чиї ідентифікатори вузлів найближчі до ідентифікатора ключа. Відстань між двома ідентифікаторами id1 та id2 визначається як id1 XOR id2[1].

Kad Network

[ред. | ред. код]

Kad Network (Kad) — це децентралізована, оверлейна, однорангова файлообмінна мережа, реалізація однорангового протоколу зв'язку Kademlia. «Kad» є природним продовженням і розвитком мережі ED2K[8]. Його відмінною рисою є використання XOR як метрики[9][2].

Огляд мережі

[ред. | ред. код]

У Kad кожен клієнт користувача також є вузлом, через який проходять пошукові запити та службова інформація. Всі клієнти користувачів у мережі також є серверами і мають однаковий ранг (звідси значення «однорангової мережі»).

Kademlia визначає структуру мережі та обмін інформацією через пошук вузлів. Вузли Kademlia спілкуються між собою за допомогою UDP. Віртуальна мережа або оверлейна мережа формується вузлами-учасниками. Кожен вузол ідентифікується номером або ідентифікатором вузла. Ідентифікатор вузла слугує не лише для ідентифікації, алгоритм Kademlia використовує ідентифікатор вузла для пошуку значень (зазвичай хешів файлів або ключових слів). Фактично, ідентифікатор вузла надає пряме посилання на хеші файлів, і цей вузол зберігає інформацію про те, де можна отримати файл або ресурс.

Специфікація

[ред. | ред. код]
Бінарне дерево мережі Kademlia

Мережа Kad складається з декількох взаємодіючих вузлів, які взаємодіють один з одним і зберігають інформацію один для одного. Кожен вузол має NodeID, квазіунікальний двійковий номер, який ідентифікує його в мережі. Важливо, щоб ідентифікатори вузлів були рівномірно розподілені; на це спирається дизайн мережі. Хоча протокол цього не вимагає, є можливі переваги в тому, що вузол використовує один і той же NodeID щоразу, коли він підключається до мережі, замість того, щоб генерувати новий, залежний від сеансу NodeID[10].

Пошук

[ред. | ред. код]
Приклад пошуку вузла в мережі Kademlia

Кожен вузол відповідає за зберігання різних типів даних. По-перше, кожен вузол зберігає вихідну карту, тобто інформацію про учасників мережі, які готові поділитися певним файлом. Карта являє собою хеш файлу в якості ключа і список джерел в якості значення. Вихідна карта вузла містить контактну інформацію про хеші всіх файлів, хеш яких відповідає ідентифікатору вузла або близький до нього (з використанням метрики XOR). Наприклад, за допомогою хешу файлу можна знайти вузли з ID, близькими до хешу файлу і запросити у них список джерел для завантаження файлу. По-друге, якщо немає хешу файлу, можна шукати його за ключовими словами. Для цього ім'я опублікованого файлу розбивається на кілька послідовних слів, і кожне слово хешується окремо. Для пошуку за цими ключовими словами у кожного вузла є друга карта, яка містить хеші слів, близьких до ID вузла в якості ключів і хеші файлів та їх імена в якості значень[11].

Уразливості

[ред. | ред. код]

Мережа Kad вразлива до атаки Сивілли[12][13] та зараження руткітом TDSS(інші мови), який створює ботнети[14].

Відгалуження

[ред. | ред. код]

Існує багато відгалужень мережі Кадемлія. Однак їх реалізації досить сильно відрізняються від оригінального протоколу[2].

OpenKad — реалізація Kademlia DHT на Java, яка перебувала в розробці до березня 2013 року[15][16].

Anonymous Kad (A-Kad) — анонімний протокол на основі мережі Kad, який забезпечує повну конфіденційність і безпеку для провайдерів і запитувачів файлів[17].

NeoKad[18] — відгалуження мережі Кадемлія, метою якого є розвиток гнучкості та анонімності. Мережа загального призначення NeoKad може обробляти довільні корисні навантаження, це досягається за рахунок запуску скриптового движка на кожному вузлі і надання скриптам можливості обробляти корисне навантаження, при необхідності сценарії відправляються разом із запитом на пошук. Маршрутизація в NeoKad реалізована таким чином, щоб забезпечити анонімність і правдоподібне заперечення будь-якого конкретного вузла[19]. Як і, наприклад, у випадку з IPv4 та IPv6, коли мережа розділена на 3 групи вузлів: ті, що мають лише IPv4, ті, що мають IPv4 та IPv6, і ті, що мають лише IPv6, конструкція рекурсивного пошуку дозволяє будь-якому вузлу спілкуватися з будь-яким іншим вузлом, навіть якщо пряме з'єднання неможливо встановити. Очевидним розширенням було додавання можливостей маршрутизації пакетів, щоб за допомогою NeoKad ви могли не тільки публікувати дані в мережі, а потім отримувати їх, але й створювати надійні потокові тунелі між двома анонімними об'єктами. Звичайно, всі дані шифруються за допомогою надійного наскрізного шифрування, і на додаток до цього існує також рівень затуманення, який запобігає фільтруванню на рівні інтернет-провайдера[20][21].

Зокрема, користуються величезним успіхом у користувачів eMule та eDonkey[2].

Клієнти мережі Kad

[ред. | ред. код]
  • aMule (клієнт для мереж eDonkey2000 та Kad)[22];
  • eMule (починаючи з версії 0.50a, навіть невелика локальна мережа Kad з 2 вузлів добре працює без жодних проблем з налаштуванням);
  • iMule(інші мови) (P2P-клієнт, заснований на aMule, який дозволяє анонімно обмінюватися файлами);
  • MLDonkey(інші мови) (програма для обміну файлами, яка може отримувати доступ до різних мереж: BitTorrent, Direct Connect, eDonkey2000, FastTrack, Kademlia, Overnet, Soulseek);
  • Mule on Android (клієнт для платформи Android)[23];
  • Tribler;
  • Vuze(інші мови) (BitTorrent-клієнт з підтримкою анонімного обміну даними);
  • RevConnect (клієнт, сумісний з мережею Direct Connect)[24];
  • Деякі інші вільні BitTorrent-клієнти для мереж обміну файлами також підтримують мережу Kad.

Використання протоколу Kademlia

[ред. | ред. код]

Код протоколу Kademlia використовується в наступному програмному забезпеченні:

  • BitTorrent — в Mainline DHT(інші мови), що використовується клієнтами BitTorrent для пошуку однорангових вузлів, що використовують протокол BitTorrent[25].
  • Етеріум — в платформі для створення децентралізованих сервісів на базі блокчейна[5].
  • IPFS — в одноранговому гіпермедійному протоколі зв'язку[5][26].

Код Kademlia є основою багатьох розгалужень, а також часто використовується в різноманітному програмному забезпеченні для файлообмінних мереж[27].

Див. також

[ред. | ред. код]

Зноски

[ред. | ред. код]
  1. а б Chan, Kelsey. Kademlia Visualization - Basics. kelseyc18.github.io. Процитовано 10 липня 2025.
  2. а б в г Kademlia. xlattice.sourceforge.net. Процитовано 19 березня 2025.
  3. Papers by David Mazières. www.scs.stanford.edu. Архів оригіналу за 9 квітня 2025. Процитовано 10 липня 2025.
  4. IPTPS 2002 Electronic Proceedings. cs.rice.edu. Архів оригіналу за 2 травня 2012. Процитовано 10 липня 2025.
  5. а б в Leffew, Kevin (2 липня 2022). A Brief Overview of Kademlia, and its use in various decentralized platforms. Coinmonks (англ.). Процитовано 4 липня 2025.
  6. Chan, Kelsey. Kademlia Visualization - Basics. kelseyc18.github.io. Процитовано 10 липня 2025.
  7. Singh, Uddeshya (9 жовтня 2022). Kademlia Protocol in Distributed Hash Tables. Medium (англ.). Процитовано 10 липня 2025.
  8. FAQ eD2k-Kademlia-ru - AMule Project FAQ. wiki.amule.org (рос.). Архів оригіналу за 2 квітня 2025. Процитовано 4 липня 2025.
  9. Dtechlog (25 серпня 2017). Протоколы / Kademlia. dtechlog (англ.). Процитовано 4 липня 2025.
  10. Kademlia: A Design Specification. xlattice.sourceforge.net. Процитовано 18 березня 2025.
  11. Як працює пошук у Kad Network. Хабр (рос.). 22 липня 2013. Процитовано 19 березня 2025.
  12. Peng Wang, James Tyra, Eric Chan-Tin, Tyson Malchow, Denis Foo Kune, Nicholas Hopper, Yongdae Kim (22 вересня 2008). Attacking the Kad network (PDF) (вид. Proceedings of the 4th international conference on Security and privacy in communication netowrks). New York, NY, USA: Association for Computing Machinery. с. 1–10. doi:10.1145/1460877.1460907. ISBN 978-1-60558-241-2. Архів оригіналу за 11 березня 2014.{{cite web}}: Обслуговування CS1: Сторінки з посиланнями на джерела, що мають зайву точність в параметрі year (посилання)
  13. Evaluation of Sybil Attacks Protection Schemes in KAD. ResearchGate GmbH. 2009. Архів оригіналу за 20 марта 2025. {{cite web}}: Не збігається часова мітка у |archive-date= / |archive-url=; можливо, 20 березня 2025? (довідка)
  14. TDL4 – Top Bot. securelist.com (амер.). 27 червня 2011. Процитовано 20 березня 2025.
  15. Google Code Archive - Long-term storage for Google Code Project Hosting. code.google.com. Архів оригіналу за 1 січня 2017. Процитовано 5 липня 2025.
  16. Google Code Archive - Long-term storage for Google Code Project Hosting. code.google.com. Процитовано 5 липня 2025.
  17. CSDL | IEEE Computer Society. www.computer.org. doi:10.1109/mobhoc.2009.5336924. Процитовано 5 липня 2025.
  18. NeoLoader, NeoLoader - Next Feneration P2P File Sharing, 18 березня 2025, процитовано 21 березня 2025
  19. NeoLoader — Full Feature List. neoloader.com. Процитовано 21 березня 2025.
  20. NeoLoader — NeoKad Network. neoloader.com. Процитовано 21 березня 2025.
  21. NeoLoader. neoloader.com. Процитовано 21 березня 2025.
  22. AMule - AMule Project FAQ. wiki.amule.org. Архів оригіналу за 1 квітня 2025. Процитовано 7 липня 2025.
  23. eMule на Android. Хабр (рос.). 2017. Процитовано 4 липня 2025.
  24. RevConnect. www.revconnect.com (англ.). Архів оригіналу за 9 грудня 2015. Процитовано 5 липня 2025.
  25. bep_0005.rst_post. www.bittorrent.org. Процитовано 19 березня 2025.
  26. Distributed Hash Tables with Kademlia — Stanford Code the Change Guides documentation. codethechange.stanford.edu. Процитовано 10 липня 2025.
  27. Leffew, Kevin (2 липня 2022). A Brief Overview of Kademlia, and its use in various decentralized platforms. Coinmonks (англ.). Процитовано 4 липня 2025.

Література

[ред. | ред. код]

Посилання

[ред. | ред. код]