Na meer dan twee jaar ontwikkeling is de referentie-implementatie van het Yggdrasil-protocol 0.5 beschikbaar gesteld, waarmee een aparte gedecentraliseerde privé IPv6-netwerk bovenop het reguliere wereldwijde netwerk kan worden opgezet om de privacy te beschermen, met end-to-end encryptie. In het Yggdrasil-netwerk kunnen alle bestaande applicaties die IPv6 ondersteunen worden gebruikt. De implementatie is geschreven in de programmeertaal Go en wordt verspreid onder de LGPLv3-licentie. Ondersteunde platforms zijn Linux, OpenWRT, Windows, macOS, FreeBSD, OpenBSD, VyOS en Ubiquiti EdgeRouter.
Yggdrasil ontwikkelt een nieuw routingconcept voor het creëren van een wereldwijd gedecentraliseerd netwerk, waarin knooppunten zowel direct met elkaar kunnen verbinden in een mesh-netwerk (bijvoorbeeld via Wi-Fi of Bluetooth), als interactie kunnen hebben bovenop bestaande IPv6- of IPv4-netwerken (netwerk boven netwerk). Een kenmerk van Yggdrasil is de zelforganiserende werking, die geen expliciete routingconfiguratie vereist — informatie over routes wordt berekend op basis van de locatie van het knooppunt ten opzichte van andere knooppunten. Apparaten worden geadresseerd via een standaard IPv6-adres dat niet verandert bij verplaatsing van het knooppunt (in Yggdrasil wordt een ongebruikt adresbereik 0200::/7 gebruikt).
Het gehele Yggdrasil-netwerk wordt niet beschouwd als een verzameling van losse subnetten, maar als een enkele gestructureerde boomstructuur, die één "wortel" heeft, waarbij elk knooppunt één ouder en één of meerdere nakomelingen heeft. Deze boomstructuur maakt het mogelijk om een route naar een doelnodes te bouwen, ten opzichte van een bronnodes, met behulp van het "locator"-mechanisme, dat het optimale pad naar het knooppunt vanaf de wortel bepaalt. Informatie over de boom wordt tussen knooppunten verspreid en niet gecentraliseerd opgeslagen.
Om te beschermen tegen traffic-analyse wordt end-to-end encryptie in het netwerk toegepast (transitknooppunten kunnen de inhoud niet bepalen), maar anonimiteit wordt niet gegarandeerd — bij verbinding via internet kunnen peer-to-peer knooppunten, waarmee directe interactie plaatsvindt, het werkelijke IP-adres bepalen, daarom wordt aanbevolen om knooppunten via Tor of I2P aan te sluiten voor anonimisering.
Ondanks dat het project zich in de alfa-ontwikkelingsfase bevindt, is het al vrij stabiel genoeg voor dagelijks gebruik, maar het garandeert geen terugwaartse compatibiliteit tussen releases. Voor Yggdrasil wordt een set diensten ondersteund door de gemeenschap, waaronder een platform voor het hosten van Linux-containers voor hosting hun websites, de zoekmachine YaCy, de communicatie-server Matrix, de IRC-server, DNS, het VoIP-systeem, een BitTorrent-tracker, een kaart van aansluitpunten, een gateway naar IPFS en een proxy voor toegang tot de netwerken Tor, I2P en clearnet.
In de nieuwe versie:
- De mogelijkheid is toegevoegd om authenticatie voor verbindingen met peers in te stellen met een wachtwoord. Het wachtwoord kan worden opgegeven met de parameter 'password=', bijvoorbeeld 'tls://a.b.c.d:12345?password=123456abcdef'.
- De mogelijkheid is toegevoegd om het QUIC-protocol, dat op UDP is gebaseerd, te gebruiken voor interactie met peers. Om QUIC te gebruiken, moet de URI-schema quic:// in de directives Listen en Peers worden opgegeven, maar de ondersteuning voor QUIC is nog niet zo goed getest als TCP en TLS.
- Er is een nieuwe optie PrivateKeyPath geïntroduceerd die het mogelijk maakt om de privésleutel in PEM-formaat op te slaan, afzonderlijk van het hoofdconfiguratiebestand. Voor het exporteren van de sleutel naar een apart bestand kan de optie '-exportkey' worden gebruikt.
- Er is een nieuwe routeringsschema geïmplementeerd, die niet achterwaarts compatibel is met eerdere versies (knooppunten met Yggdrasil 0.5 kunnen niet communiceren met hosts op basis van Yggdrasil 0.4), maar het lost de meeste stabiliteits- en schaalbaarheidsproblemen op die aanwezig waren in tak 0.4, en vermindert aanzienlijk het geheugenverbruik en de dataverkeer in afwezigheid van netwerkactiviteit.
In de nieuwe implementatie worden probabilistische Bloom-filterstructuren gebruikt om verbindingen en knooppunten te traceren. De gedistribueerde hash-tafel (DHT) wordt niet langer gebruikt voor het uitwisselen van routeringsinformatie en het koppelen van openbare sleutels in een boomstructuur netwerk.
Om lokale consistentie te waarborgen en de afhankelijkheid van routes naar wortelknopen te verminderen, geven knooppunten nu afzonderlijk informatie door over elke link, die wordt getraceerd in CRDT-structuren. In plaats van routering van de bron, wordt greedy routering toegepast (verzoeken worden naar het dichtstbijzijnde aangrenzende knooppunt gestuurd).
De formaten die worden gebruikt bij het onderhandelen over verbindingen en multicast-distributie zijn herzien voor betere schaalbaarheid. De connectiebeheercode is aangepast voor betrouwbaardere peer-status tracking. Er is afzonderlijke tracking van de intervallen tussen herhaalde verbindingen voor elke geconfigureerde peer mogelijk gemaakt.
Om storingen te detecteren worden in plaats van periodieke, afzonderlijke keepalive-verzoeken gepersonaliseerde bevestigingsberichten voor verkeer gebruikt, die het mogelijk maken netwerkverkeer bij inactiviteit te elimineren (dit vermindert bijvoorbeeld het energieverbruik op mobiele apparaten door overbodig verkeer in idle-modus uit te sluiten).
Bron: opennet.ru
