3 ms·
Let's assume you want to build a decentralized application according to my personal definition of decentralization: peer-to-peer with no application servers of
by throwaway0asd 4y ago
Let's assume you want to build a decentralized application according to my personal definition of decentralization: peer-to-peer with no application servers of any kind.
1. To me this means IP address to IP address communication. But but but IPv4 NAT address: for this there are TURN servers which look pretty expensive. A TURN service provides application layer routing, like a proxy, to route data to a respective node on a private network.
2. I don't want to pay for TURN or deal with the extra layer, so I just write off nodes limited to a NAT IPv4 address on a separate subnet.
3. You need to account for session/relationship management. For this I am using a tiered model whereby nodes are assigned a group identity that allows for increases to access inversely proportional to autonomy.
4. You need some manner of trust validation. This is the piece social media doesn't know how to solve without some sort of centralized ledger. I am just using certificates and putting this liability directly onto the users to properly execute a text challenge response.
5. In a peer-to-peer decentralized model both ends run a listener for incoming connections on a fixed port. That sounds amazingly close to the definition of a server, but each connection is otherwise a client-to-client tunnel with a random client port on both ends. That means one end creates a client connection and points to a remote user running a listener. That listener spawns a connection to a client port and performs the checks to verify connection establishment, validation, anything else. After that initial processing on the listener you are left with a connection. If the connection is bidirectional both ends must listen for incoming data equivalently and must manage sessions and relationships equivalently.
Finally, you need to rethink how your prioritize software. Commercially software obtains value from that which you own, which is either a copyright on an application or data in a database. In a decentralized world data is that which you are willing to access or transmit and nothing more. The value is purely functional to your application and nothing for you to secure behind a subscription.
That said the value of a decentralized application comes down to three things:
* automation - whether the application eliminates manual effort
* transmission - whether the application can connect over a network in a way that resembles immediate local device access, such as real time bidirectional communication
* utility - does the application do something amazing, which is more than putting data on a screen. You have to think bigger than a webpage or a spreadsheet.
Once you solve for transmission and OS challenges end to end encryption is as simple as turning on your application.
- Karrot_Kream 4y agoThere are overlay network projects that try to solve this problem. Take a look at Yggdrasil [1] which builds an overlay E2E encrypted, P2P mesh network. While you don't need TURN servers specifically, instead the overlay layer handles the P2P proxying for you. It still suffers from the same problem of necessitating intermediaries, and the fact that many peers don't actually have their own ASN so they aren't at the top of the network hierarchy, but makes it fairly "transparent" to use the network as everyone is assigned both a /128 and a /64 (for prefix delegation purposes) on the Yggdrasil network. At another level, Tor is essentially the same secure P2P network. While onion routing is used to route packets, fundamentally you don't need a publicly routable IPv4 or IPv6 address to receive packets. Instead peers onion route packets until the server with the correct keys can decrypt the packet. [1]: https://yggdrasil-network.github.io/ https://yggdrasil-network.github.io/