Post

vanished-rooms - a chat room CLI in Go

vanished-rooms - a chat room CLI in Go

VANISHED ROOMS

Screenshot0

Screenshot0

Vanished Rooms is a high-privacy, CLI-based messaging application developed in Go. It is designed to provide users with a secure, room-based communication environment where anonymity and data persistence are eliminated by design.

🔗 vanished-rooms repository


Key Features

  • Zero-Knowledge E2EE: End-to-end encryption ensuring that only the participants can read the messages.

  • Hybrid Encryption Architecture:
    • Symmetric Encryption (AES): Used for high-speed message encryption within the room.

    • Asymmetric Encryption (RSA): Utilized to securely distribute the AES session key among participants.

  • Anti-Forensics & Zero Logs: No activity logs or metadata are stored at any point.

  • Anonymity via Tor: Native routing through the Tor network to mask user IP addresses.

  • Server Amnesia: The server is configured to wipe all volatile memory and restart periodically, ensuring total data clearance.

  • User-Centric Privacy Logic:
    • Instant Purge: User data is immediately wiped upon disconnection.

    • Self-Destructing Rooms: Rooms are automatically deleted as soon as the last participant leaves.


P2P Architecture & Key Management

The application follows a decentralized Peer-to-Peer (P2P) logic for key distribution:

  1. Room Creator (Host): The user who initializes the room generates the master AES key.

  2. Key Distribution: The host is responsible for encrypting the AES key with the RSA public keys of joining participants and distributing it securely.

  3. Dynamic Leadership: If the host leaves the room, the role is automatically reassigned to the next user in line (determined by joining timestamp), ensuring the room’s continuity and security without a central authority.


Logic Sequence

Screenshot0

Usage

1
2
3
4
5
6
7
8
9
git clone [https://github.com/n3oari/vanished-rooms.git](https://github.com/n3oari/vanished-rooms.git)

go mod tidy

go run main.go server

go run main.go client -u <username> -p <password> -k <path-private-rsa-key>

You can also use the Makefile

Help menu (connected)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/create -n <name> -p <pass> --private <y/n> Create a new room and join automatically.

/rooms  None    List all currently active rooms.

/join   -n <name> -p <pass> Join an existing room using credentials.

/leave-room None    Exit the current room.

/users  None    List all users in your current room.

/help   None    Display the help menu.

/quit   None    Disconnect and remove your user permanently.
This post is licensed under CC BY 4.0 by the author.