By building on the above foundational elements the Service Node network, the onion routing system, and the Signal protocol we now have a simple secure messenger which allows two users to talk to each other both synchronously and asynchronously without using a central server or exposing metadata such as IP addresses or phone numbers. However, there are certain additional features which users expect from modern messengers, the implementation of which requires further extension of Tingl.
Large groups run into significant scaling issues when members leave the group, as keys must be re-derived and redistributed to the entire group. Also, end-to-end encryption is useless for channels since anyone can join it and a single compromised user device destroy group privacy. Thus it ’s viable to relax security guarantees for channels and rely only on transport capabilities of the network.
In Tingl channel creator is encouraged to manage their own server to host a channel or arrange for a channel to be created on an existing channel server host. All messages and attachments stored and served by channel server throuh onion requests using server identity and some service node chosen by the server as an intermediary listener node (similar to Online Messaging), preserving network anonimity for all participants and channel server itself.
The creator of the channel is the original admistrator and owner of the channel. Administrator has permissions to post to the channel, delete previous posts, add new administrators and ban users from the channel.
Public channel can be joined by any user who knows channel ID, but users can be banned by administrator if administrator adds their user ID to a list of banned users.
Private channel could only be joined by users invited by an administrator. There are a few options available for administrators to invite users:
User can be invited directly by user ID.
Administrator can create a link that could be used to join the channel by anyone who has that link.
Administractor can create a one-time link that expires after use.