For a long time I wanted to make a very simple chat application that is end to end encrypted an isn't too complicated, and can run just fine on a slow computer with little RAM.
I've also read about wireless community networks, where people have built their own internet instead of the internet. These networks often don't have persistent connection to the internet. So something that works in a local network that doesn't have connection to the internet would be useful. This is also good for resilience at the end of the world situations when the society starts to collapse and one cannot rely on the internet anymore.
I have named this project simply Chat2026, because my computer is full of half finished chat projects as early as Chat2019. The issue is always the same: I wanted to do too much. Well there is a good chance that I this can be yet another abandoned project. Maybe if I develop this in public, maybe I have feel more pressure to finish it and make at least a working prototype.
Each node generates an asymmetric public/private keypair. This keypair isn't a single key, but separate keys for encryption and signing.
A node can be passive and active, a passive has only keys, the active one also has an IP/port pair or domain/port pair. Two passive nodes cannot connect to each other, but any node can connect to active nodes. Once the connection is established the node appears online, and communication can be initiated either way.
When two nodes connect they mutually authenticate and identify each other. I think this can be done using TLS. The node that initiates the connection will be the client, the one that receives the connection will be the server. But when two active nodes connect to each other then that node can act as both client and server. Therefore the same certificate can be used for both at the client side and server side.
Using TLS also means we can use our own PKI (public key infrastructure). So we can have an offline key, and if our device is compromised but the offline key is not we can use the offline key to sign a new key.
So before we move on we need to test the following:
Once this part is done, the essence of the project: that is encrypted communication is done. From that point we only need to think about the user interface.
I'll try to use Rust. In the next part I will share some code as well.
See the latest posts below, click the "..." to see them all. Click the tags to filter by tag. You can also subscribe to RSS in those lists.
Double entry bookkeeping explained - english finance
Chat2026 part 10: continuing application design - english chat2026-devblog
If you want privacy, please use a desktop PC - english privacy
YouTube is now practically unsearchable - english rants
Chat2026 part 9: using CRL in the server and client examples - english chat2026-devblog