11 ms·
Yggdrasil – Early-stage implementation of an end-to-end encrypted IPv6 network
- nickik 5y agoOn of the use-cases for this is for Peer-to-Peer matrix: https://matrix.org/blog/2020/06/02/introducing-p-2-p-matrix https://matrix.org/blog/2020/06/02/introducing-p-2-p-matrix
- Hbruz0 5y agoLove it !
- adamcstephens 5y agoExcept I think the matrix project is going with pinecone instead. https://github.com/matrix-org/pinecone https://github.com/matrix-org/pinecone
- lifty 5y agoWhich is based on yggdrasil.
- Arathorn 5y agoit's fairly circular actually - we used Yggdrasil in some of the earlier P2P Matrix POCs. This showed up some limitations, so we worked on solutions for them (alongside Yggdrasil) which became Pinecone on the Matrix side, and Ironwood on the Yggdrasil side. Then Yggdrasil 0.4 is incorporating them for general purpose IP overlay routing, while Pinecone is focusing on Matrix-specific application layer overlay routing. Perhaps the two will converge in the end, but until then they're somewhat overlapping friendly sister projects :)
- nickik 5y agoHave you considered GNUNet? That could also over a solution for the username problem.
- rwmj 5y agoAlso the name of one of the first Linux distributions (https://en.wikipedia.org/wiki/Yggdrasil_Linux/GNU/X https://en.wikipedia.org/wiki/Yggdrasil_Linux/GNU/X)
- Tepix 5y agoTheir Linux CDs proved essential in a time where bandwidth was scarce and expensive with home users on dialup and only universities having a few megabits of bandwidth.
- Kichererbsen 5y agoNot only that - the distribution my dad brought home included a _book_ (remember those?) which was actually a bunch of open source books collected in one! Tons of information on Unix stuff, shells, commands etc. I learnt so much from those books. I have no idea how someone would start in this day and age... (this was so important to tell for me that I finally stopped lurking and made an account _just_ for this comment!)
- wizzwizz4 5y agoYou start by having someone tell you about man -k. That, plus playing (typos → error messages → more words to look up) is probably sufficient.
- WalterGR 5y agoNorse mythology has that beat by over 600 years. https://en.wikipedia.org/wiki/Yggdrasil_(disambiguation) https://en.wikipedia.org/wiki/Yggdrasil_(disambiguation)
- hulahoof 5y agofor some reason I thought norse mythology was older than this !
- 5y ago
- neatze 5y agoInteresting choice of LGPL license with exception.
- rijoja 5y agoMaybe they where forced to due to a dependency.
- gostsamo 5y agoNo, the readme says "shamelessly taken from godeb".
- snovv_crash 5y agoCould someone summarize what exactly the implications are of the exception? It seems that it is a link-time firewall for any GPL viral behaviour? As long as you're on the other side of the linker you can do anything, including embed a statically linked version in a proprietary application?
- jpetso 5y agoMy guess would be that this allows developers to distribute applications on Apple's App Store without much of a headache, where otherwise the user has no (LGPL-guaranteed) way to swap out libraries otherwise. IANAL, and haven't spent any significant research on this fwiw.
- neilalexander 5y agoWe're prepping for a major new release too — information here: https://yggdrasil-network.github.io/2021/06/19/preparing-for-v0-4.html https://yggdrasil-network.github.io/2021/06/19/preparing-for...
- infogulch 5y agohttps://yggdrasil-network.github.io/2021/06/19/preparing-for-v0-4.html#keyspace https://yggdrasil-network.github.io/2021/06/19/preparing-for... > the root is the node with the lowest ed25519 public key, rather than the highest sha512sum hash of the public key With this scheme, could a bad actor decide to choose a poor key just to be the neighbor of a target in (edit) keyspace? Ordering by the hash of a public key means that the order is protected by the hash function's preimage resistance; does the generation of a ed25519 key have a similar protection?
- miloignis 5y agoEven with preimage resistance, it seems like it wouldn't be insane to just burn cycles until you got one close enough, bitcoin-style. Dealing with attackers in a system like this seems very challenging, though very worthwhile in the end! Maybe something web-of-trust-y...
- infogulch 5y agoMy point is that I don't think there's anything during key generation that requires the resulting key to be secure / chosen 'well', so an attacker might exploit key generation as a way to target a particular spot in the line, where having an insecure/easily compromised key doesn't matter to them even though that may be detrimental to the health of the network. But at least with preimage resistance any public key is just as likely as any other to get a particular spot that they desire so there's no incentive to exploit key generation to get it, they might as well generate a bunch of secure keys if they want to use a bitcoin-style brute force strategy.
- foxpurple 5y agoCan anyone explain what this means? What does it let me do?
- neilalexander 5y agoYggdrasil builds a multi-hop IPv6 overlay network using peer-to-peer connections. You can string a whole bunch of nodes together using whatever means (cables, wireless or TCP peerings over the internet or any other network) and you get a full-mesh network where everyone can reach everyone else. It's designed to be as minimal-configuration as possible and scalable in a way that many other mesh routing protocols aren't.
- number6 5y agoSo it's a kind of VPN?
- FuriouslyAdrift 5y agoIt's an overlay network (a software defined network that runs on top of another network... like you internet service providers network). It's closer to bittorent than a VPN. It has end-to-end encryption and each node (the app that runs on your PC) distributes routes to each other (similar to how routing works on the Internet between large networks). It appears to be a flat spanning-tree style network. They mention that it is using similar code and ideas as the cjdns project.
- abra0 5y agoDo I understand correctly that it does not do hole-punching, and e.g. unlike with a VPN a host behind NAT will not be able to accept incoming connections?
- Sleepytime 5y agoThis is correct in the sense of peering, however hosts behind a NAT can simply connect to any other host on the network such as a pubic peer and then they can accept incoming connections over the yggdrasil network. I use yggdrasil for NAT hole punching my VPN, for example.
- bigpoppa 5y agoXenogears
- 4bpp 5y agoOne thing that wasn't clear to me from the documentation: What's the typical latency you observe with this network? Does the routing take physical distance/observed delays into account in some way, or could you wind up with short (in network space) paths that in reality bounce a packet back and forth between the US and New Zealand repeatedly?
- neilalexander 5y agoLatency is dependent on the underlying peering connections. Yggdrasil will try wherever possible to take the shortest paths in network space, but yes, it's possible those could be physically indirect if the underlying peerings are indirect. Generally on the public network (which is probably a couple thousand nodes in number, where people have contributed a number of public nodes and have interconnected them) we see very reasonable latencies.
- capableweb 5y ago> Generally on the public network [...] we see very reasonable latencies Could you elaborate with some specific examples on what you see being "very reasonable latencies"?
- Sleepytime 5y agoI'm getting sub 100ms latencies across the continent with multi hop routes through public peers.
- woah 5y agoAre you not routing based on latency and reliability like i.e. Babel does? You're only routing based on number of hops?
- deleted 5y ago[deleted]
- habibur 5y agoNeed performance comparison chart. Yggdrasil network throughput vs plain. Yggdrasil processor load and memory overhead vs plain. Yggdrasil latency vs plain. No matter how bad that numbers look. One can at least know beforehand what to expect.
- heythere22 5y agoA comparison to ZeroTier is also nice, they both seem to have the same use case (ZT can supply and route IPv4 and IPv6 addresses)
- ment0s 5y agoWhat a stupid name. Looks like misspelled medicine name.
- olodus 5y agoWow hey there, let me counter that opinion with my opposing that is very fitting. Sure the word might look a bit crazy to non-nordic people (it is kinda crazy, hard to disagree there) but the meaning of the name is imo really well chosen. It comes from the fairly well-known norse myth of the world-tree spanning all realms. So a overlay P2P network based on a global spanning tree feels like a very fitting name. But hey, you are free to dislike it for personal reasons if you want :)
- nickik 5y agoIts a great name. Its your general knowledge that is the problem.
- jancsika 5y agoI don't see anything in the rules against bringing a comment back from the dead. I'm gonna bring it back from the dead. Summons "What a stupid name. Looks like misspelled medicine name." Also of note-- the same user posted almost the same comment twice-- once without the final word "name" in it. I prefer the version with the trailing "name" because it flows better. Thank you.
- ment0s 5y agoWhat a stupid name. Looks like misspelled medicine.
- crad 5y agoDoes it run on / require Yggdrasil Linux? (asking with tongue in cheek)
- commandlinefan 5y agoThe documentation is a little light - is this similar to Freenet?
- rjmalagon 5y agoNope, is more like a "Vitual public network" maker. Peer links are encrypted, each peer has its own key, but DHT and routing is not obfuscated. It exposes virtual network interfaces with an IPV6 address per node. You can use common software on it. "Magic VPN" or "Magic E2EE LAN" kinda IPSEC for commoners, depends on how you config it.
- maz1b 5y agoThought it was a StarCraft reference at first, but learned that it actually stems from Norse mythology. What commercial application will this have for an average consumer that isn't tech-savvy?
- scruffyherder 5y agoWhen not sounding like a Linux distro reminds me of 6to4
- wiml 5y agoHow does this compare to cjdns? Has anyone tried both?
- andrius4669 5y agoIt works pretty similar to cjdns, but implementation is not as crashy in my experience, also some transport protocol differences (ygg uses tcp while cjdns does udp), also DHT routing instead of cjdns supernode stuff. So while usability is pretty similar, they're pretty different underneath.
- pharmakom 5y agoThis is really exciting! What happens if nodes misbehave?
- deleted 5y ago[deleted]
- nicce 5y agoCan someone explain, why it has end-to-end encryption by default on this level, and why it is good? Isn't this project more about host discovery and routing. Is it providing more performance compared to encryption on other layers, or just for "easy automatic" data encryption? Based on documentation, it sounds that they have some kind of own crypto implementation in the end. I found the whitepaper describing used algorithms, but I would need to know more how exactly they are applied and why they are selected, before I could trust the encryption.
- jdsully 5y agoThis allows us to focus our investment on one layer and have it apply to all applications on top "for free". I'm not saying this specific implementation is the right one, but having it below the app layer makes a ton of sense.
- qxfys 5y agothe name reminds me of a paper came across my desk couple of months back: https://arxiv.org/abs/2007.11403 https://arxiv.org/abs/2007.11403 - "Yggdrasil: Privacy-aware Dual Deduplication in Multi Client Settings"
- infogulch 5y agoHow does Yggdrasil compare to Wireguard? A github search shows that yggrasil-go uses wireguard-tun project as the tun driver; does it relate in any other way? The main problem/use case is different of course (Wireguard is a manually configured point-to-point vpn with e2ee, where yggdrasil is an internet-scale overlay network with e2ee.), but I mean at a low level, protocol, encryption, etc.
- natural219 5y agoI’d also be curious about this. Say for the use case of running a small private chat server hosted on a home network; does either of these seem better suited, or are they just different architectures that can handle mostly similar things?
- rjmalagon 5y agoVery different. WireGuard is explicit basic, only cares how to make an encrypted link between two devices, and do it very well. Key exchange, IP assignation and routing are manual work. There are solution build on top of WireGuard (Tailscale is one of them) that puts some "automagic". YG puts more "magic" on protocol (autorouting, mesh making, etc), but is not that clean on design (crypto not formally tested, latency prone TCP links, not good enough NAT punching, etc). Wireguard and YG are different tools on the SDN network toolbox, and can be mixed for special porpoises.
- natural219 5y agoThis is really helpful; thank you
- rjmalagon 5y agoAt low level is not related to WireGuard in any way. The wintun project only exposes a virtual network interface to Windows systems, a clean and proper signed windows driver. That side project to Wireguard was created because the native windows virtual interface is too basic for "advanced vpns" and the former windows TUN driver (OpenVPN side project TUN driver for windows) used by everyone was clunky and old. YG uses it own crypto and routing, wintun is used here only to expose the virtual network interface on Windows.
- aleken 5y agoI have two devices split by VNET and not routed out to the internet. I connect those two and a VPS to create a small Yggdrasil network. This allows me to access all three devices from “anywhere”. Would use again.
- boardwaalk 5y agoWhat does this give you that Wireguard wouldn’t? (Honest question, I have no idea.)
- aleken 5y agoGood question. I could achieve the same with Tailscale or Innernet, both using Wireguard. So perhaps my answer has to be that Yggdrasil tickles my interest in mesh networking.
- aleken 5y agoOh. Also. If I lose my VPS my network is still functioning to a degree. If you lose your wireguard server I believe you’re out of luck?
- some_furry 5y agohttps://github.com/yggdrasil-network/yggdrasil-go/blob/983dfdb5535124cf2663166db580387d7a8a149d/src/crypto/crypto.go#L265 https://github.com/yggdrasil-network/yggdrasil-go/blob/983df... I've never seen anyone need to check the top byte of a nonce before. This looks very odd to me.
- jra_samba 5y agoI haven't checked, but this may be due to the restriction in CCM/GCM. Here is the relevant comment/code from Samba. * CCM and GCM algorithms must never have their * nonce wrap, or the security of the whole * communication and the keys is destroyed. * We must drop the connection once we have * transfered too much data. * * NOTE: We assume nonces greater than 8 bytes. */ ... switch (xconn->smb2.server.cipher) { case SMB2_ENCRYPTION_AES128_CCM: nonce_size = SMB2_AES_128_CCM_NONCE_SIZE; break; case SMB2_ENCRYPTION_AES128_GCM: nonce_size = gnutls_cipher_get_iv_size(GNUTLS_CIPHER_AES_128_GCM); break; default: nonce_size = 0; break; } x->nonce_high_max = SMB2_NONCE_HIGH_MAX(nonce_size); x->nonce_high = 0; x->nonce_low = 0; Where the definition of SMB2_NONCE_HIGH_MAX is: #define SMB2_NONCE_HIGH_MAX(nonce_len_bytes) ((uint64_t)(\ ((nonce_len_bytes) >= 16) ? UINT64_MAX : \ ((nonce_len_bytes) <= 8) ? 0 : \ (((uint64_t)1 << (((nonce_len_bytes) - 8)*8)) - 1) \ ))
- alophawen 5y agoFun fact. Yggdrasil can be translated to "the horse (drasil) of the terrible storm god (Ygg)", where Ygg is one of many names for Odin / Wutan https://en.wikipedia.org/wiki/List_of_names_of_Odin https://en.wikipedia.org/wiki/List_of_names_of_Odin
- musicale 5y agoI wonder how they deal with the typical problems of tree networks, such as: - bandwidth bottleneck at the root - single point of failure at the root - any node failure partitions its subtrees - slow, complicated reconfiguration after node or link failure