Hacker News new | past | comments | ask | show | jobs | submit login

All of these censorship resistant communication projects tend to assume that the network needs to be low latency, always connected, etc. It’s far easier to build a robust network if you relax that assumption, and cheap hard drives + e2e encryption mean you ought to be able to route a large volume of private p2p messaging / email in addition to any curated content that’s distributed more widely.

https://boingboing.net/2018/05/03/inside-cubas-massive-weekl... https://www.wired.com/2017/07/inside-cubas-diy-internet-revo... https://en.wikipedia.org/wiki/El_Paquete_Semanal




scuttlebutt, mentioned elsewhere in these comments works entirely offline, and many of its users have absolutely terrible internet connections. It's designed fro that situation and works just fine.


Fidonet comes to mind, though it worked over the landline phone network.


Agreed 100%. That's precisely how Relaynet works (hence the name): https://relaynet.network/


I read the whole page and didn't find any information how it is supposed to actually work. The page compares Relaynet with Starlink and Ballons, but then it doesn't say how Relaynet work.


Hey Urza. There's a page and a corresponding video for each type of stakeholder: end users, service providers and couriers (who step in to restore connectivity with a secure sneakernet). Those are quite high-level on purpose.

If you're interested in the cryptographic and networking details, the specs is probably what you want. At least the introduction to the core spec: https://specs.relaynet.network/RS-000


Hi, unfortunately I am not much wiser from the specs. It describes higher level network/app protocols, no mention on the underlying mechanism of communication. Can you give me example of the hardware on which it is supposed to run and how it would work in Belarus?


Hi Urza,

(Apologies for the late reply. I'm new around here and I didn't remember that HN won't send me an email notifications for replies to my comments.)

Before getting into Relaynet, let's consider how Internet apps work: They have a client and a server, and the client is responsible for producing and delivering its own data. That means that the server must be reachable and ready to respond to each request, at the exact time each takes place. This architecture (called Remote Procedure Call, RPC) is fine when the Internet is available, but it breaks when the Internet is cut off and it's also incompatible with alternative transports because they add a significant latency.

By contrast, Relaynet apps use a radically different architecture: Asynchronous messaging. Instead of clients/servers, apps have "endpoints"; and instead of requests/responses, endpoints exchange "messages". Endpoints delegate the delivery of such messages to one or more brokers, which we call "gateways" in Relaynet. This way, the sender and receiver don't have to be reachable and ready at the same time, because the gateways will keep a copy of each message until it reaches its final destination. Consequently, when the Internet is available, gateways will use it and messages would be delivered instantly, but when the Internet is cut off, gateways will switch to a secure sneakernet (https://en.wikipedia.org/wiki/Sneakernet). Additionally, endpoint messages (called "parcels" in Relaynet) are end-to-end encrypted and signed, so gateways can't tamper with them or see what's inside.

Behind the scenes, Relaynet apps communicate over the Internet/sneakernets via two gateways: A private gateway (a standalone app on the user's device) and a public gateway (a server-side app). Say Twitter supports Relaynet and exposes an endpoint at https://api.twitter.com/relaynet: When you post a tweet, your Twitter app will encapsulate it in a parcel bound for https://api.twitter.com/relaynet, but instead of delivering the parcel by itself, it'd send it to its local private gateway, which will in turn send it to its public gateway, and which will finally deliver it to Twitter's endpoint. Now consider the case where the Twitter server wants to send you data: It'd post the data to your public gateway (e.g., https://eu.relaycorp.tech), which would in turn send to your private gateway, which will finally send it to the endpoint in your local Twitter app; in this direction, the parcel is bound for an opaque address derived from the public key of the endpoint (analogous to Bitcoin addresses).

Now, when the Internet is cut off, your two gateways get disconnected. That's when couriers (https://relaynet.network/couriers) would step in and provide a secure sneakernet. Couriers will physically transport parcels between a place disconnected from the Internet and one connected to it. However, since parcels contain the address of the recipient, and that address would identify the service when it's bound for an Internet host (e.g., https://api.twitter.com/relaynet), gateways will encapsulate those parcels in a new layer of end-to-end encryption -- You can think of it as an "offline TLS". So couriers (or anyone who intercepts them) won't be able to see or change the parcels being transported.

As you may have anticipated by now, for a preexisting, Internet-based service to work on Relaynet, its developer has to make client- and server-side changes to their software. Alternatively, if the service offers an API, a third party could build a Relaynet integration (that's what I did in the Relaynet proof of concept with Twitter: https://twitter.com/relaynet_/status/1089211336171679745). Also, if you're building a service from scratch, you could build a fully decentralised one that doesn't need any servers (see: https://relaynet.network/service-providers)

Relaynet won't need any new/special hardware: Private gateways will support Android 5+/Windows/Linux (macOS and iOS support is on the roadmap), so you can use Relaynet as long as your device runs on one of those platforms.

I highly recommend watching this 12-minute video to learn more about how couriers establish this connectivity and also to see a demo of the software couriers will use: https://youtu.be/UXuLz3q_6bo.

How could this have worked in Belarus? Let's first assume that the implementation of Relaynet is complete and at least one service (e.g., Twitter) is now compatible with it. Based on what I know about the situation (https://netblocks.org/reports/internet-disruption-hits-belar...), this could've been done:

- First of all, people should've ideally installed Relaynet and the Relaynet-compatible app(s) they wish to use before the election (whilst the Internet is available). Generally, people living under repressive regimes should aim to have Relaynet installed before contentious events like elections. Starting to use Relaynet without the Internet is possible but fiddly (https://github.com/relaycorp/relayverse/issues/1).

- Similarly, couriers should've (ideally) planned their routes in advance, especially if they'll be collaborating with other couriers or if they plan to use Latvian/Lithuanian/Polish mobile Internet operators near their borders (without actually crossing the border necessarily). Russian and Ukrainian operators could potentially work too. Couriers would've also identified places likely to remain connected to the Internet in the big cities (Minsk and Barysaw seem to have been remained connected to some extend, although a lot of that would've been government agencies: https://twitter.com/netblocks/status/1293522490355064839).

- When the Internet was cut off, couriers would've stepped in by doing their route: Stopping at one or more locations without access to the Internet, and eventually getting to the nearest place with access to the Internet (somewhere in Minsk/Barysaw or near the border with another country).

- Each courier is free to charge their users if they want to (which would be reasonable, considering the risk and work they have to do), but we're not supporting that in any way in the software. That would be entirely between the courier and the user.

PS: All of this complexity is abstracted away from the end user. As far as they're concerned, all they need to do is install the private gateway and it'll default to a public gateway behind the scenes. Also, we won't be using this terminology with end users: The private gateway will simply be called the "Relaynet app".


Nice. Thanks. Sounds like it is built on similar principles to scuttlebutt.

When would relay-net be ready?


Agreed. They should only be low latency within a dense community, like say at a rally or in an urban neighborhood and even then, latency on the order of seconds is fine. As it is almost always more important to o communicate with those socially proximate to you than those further away.

I think the level of indirection and timelyness can be used as a filter, in that it ought to be modeled after the sneaker nets and human crowds/socialization. For example individual clients can ignore messages more than a configurable signed time/distance and configure their clients to only repeat at a certain rate. That way the network is robust to spam, because it relies on the movement and consensus of people to move messages long range.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: