Proposal for concurrent join
With having session key confirmation one can have following protocol to handle concurrent join.
each occupant can mark each session with one of the 5 status: {current, in-limbo, dead} current: User messages are being encrypted and decrypted in the current session. The join request will be process by this session. in-limbo: A session which is receiving shares and confirmation, this session can potentially become the next session if it receive session confirmation from all users. dead: The session is abonden and not going to become current session.
The protocol join one user at the time but is greedy and non-blocking in respect to several concurrent joiner and eventually results in join of all new users as long as current users in the session cooperate with join process. The global order of messages is essential in for the protocol to succeed which is a transport assumption for protocol.
Session picking protocol for new user joining the room
New user start a join process by sending . In respose, it receives messages of the format
From each user . The joiner makes a session for each which contain them as a participant, the user initiate a session and gather shares. When a session receives all shares it compute the session key becomes the current session. All other session can remains in limbo or get discarded based on the memory capacity of the implementation and security requirement.
Session picking protocol for current occupant of the current session
Suppose user is in Session . When new user send a join request, user start a session in limbo with the list of users in the current session plus the joining user. As a part of initiation of each session the current user send a message of type:
If users are joining that session concurrently, there are sessions in-limbo which are receiving shares and authentication messages.
If the currently in room signal to leave the room a session is created. Each session results in creation of session with user omitted. is marked as dead.
User send the shares and authentication token necessary for each session. The first session which receives all confirmation will become the main session, the joiner user of that session becomes the current session. All other results in new session to which is added. previous "current" session becomes in-limbo.
in-limbo -> {in-limbo, dead, current} current -> in-limbo