You are here

Polled GNUnet Chat

This is a proposed protocol for implementing a chat system in GNUnet. It is polled, meaning that clients ask (poll) the network for new messages to a specific room. It is much like the protocol for anonymously searching for files on GNUnet. The protocol prevents eavesdropping by making the participants in the chat room aware of being polled and from whom the poll originated.

Motivation
==========
The reason to design a polled chat system is to exploit the success and well-understood behavior of the file sharing protocol.

Messages and Rooms
==================
Each room has an identifier. When a user sends a message to a room, they compute a sequence number which is 1 greater than the user's current sequence number for that room. This sequence number is ever-increasing, it is represented by an arbitrary precision integer type. The user also attaches the sequence number and pseudonym of another message the user has seen in that room. This other message can be thought of as a in-response-to identifier, the UI may let the user select which message this is. Otherwise it should probably be the latest message the user has seen. The user then signs the (room, seq, (pseudonym, seq), message) tuple with their pseudonym private key and saves this message in a message buffer. The user serves requests for messages from their message buffer matching the room and sequence number.

Requesting messages
===================
A user who is in a room will periodically request new messages from the network. A request is a (room, pseudonym, seq) tuple which is signed with the requesters pseudonym private key.
Since requests are signed, there is no way for a requester to spy on a room. If a user receives a request and the requester is not currently displayed as in the room then the requester is added to the display. Users may also choose to which requesters they will respond based on a policy (like an ignore list, except the other way around). It's also possible for the chat client to display which users have requested messages from the local node, which can help in detecting lost messages or confused users. For example, displaying a message which nobody has requested in red, which some people have requested in yellow, and which everyone has requested in white, with a mouse-over/tool-tip displaying the pseudonyms which have and/or have not requested it.

Entering a room
===============
When entering a room the user sends a request with the room identifier signed with their pseudonym private key. Users in the room will respond with their pseudonym and current sequence number. The client can optionally start requesting past messages.

Leaving a room
==============
A pseudonym signed message of some sort would indicate departure.

Locked Rooms and privacy
========================
(Sure, why not? Throw some encryption in there somewhere.)

Attacks
=======
* Spamming by responding to every message request.
- Users can ignore messages from responders which they believe are not in the room or are not authorized (TBD) to be in the room.
- Users can ignore messages from responders who are in the room but are annoying (just like IRC).
* Attacking locked rooms and privacy
- TBD

Comments

Hi there,

Please read the previous thoughts on this issue: https://gnunet.org/node/1218