Difference between revisions of "Np1sec/concurrent join"

(First version)
 
(Simplifies the protocol without involving confirmation)
Line 3: Line 3:
 
With having session key confirmation one can have following protocol to handle concurrent join.
 
With having session key confirmation one can have following protocol to handle concurrent join.
  
Each session can have 5 status: {current, potentially next, next, admissible, inadmissible}.
+
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.
  
==Session picking protocol for current occupant of the 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 <math>n+1sec</math> protocol.
Suppose user <math>U_i</math> is in Session <math>S</math>. When new user <math>Unew_j</math> send a join request, user <math>U_i</math> start an admissible session <math>S_j</math>  with the list of authenticated participant in the room (not users in the session).
+
  
If <math>m</math> users are joining that session concurrently, there are <math>S_1,...,S_m</math> admissible which are receiving shares and authentication messages.
+
==Session picking protocol for new user joining the room==
 +
New user start a join process by sending <math>(U_{joiner}, y_{joiner})</math>. In respose, it receives messages of the format
  
Suppose <math>S_j</math> receives the mutual authentication of all new users in admissible session <math>S_j</math> that will become the potentially next session of <math>U_i</math>. <math>U_i</math> then sends the combined list of (authenticated) participants in <math>S_j</math>, <math>(U_1,y_1,...,Unew_m,ynew_m,...)</math> to the room intending for new users not in the list to see and to authenticate to, and to old user to signal its potentially next session. It tags <math>S_1,...,S_m</math> as inadmissible sessions.
+
<math> sid, (U_1,y_1,...,U_{joiner},y_{joiner},...), kc_{i}, z_{i}</math>
  
When <math>U_i</math> receives all shares of potentially next session <math>S_j</math> and the authenticated list from all users from current session, they tag the session as next and send the session key confirmation of <math>S_j</math>. The session will not be tagged as inadmissible in case of new authenticated list, it just make new admissible session.
+
From each user <math>i</math>. The joiner makes a session for each <math>sid</math> 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.
  
If user U_i receives another authenticated list from another <math>S_j'</math> then it tag <math>S_j</math> inadmissible as well and start an admissible session with <math>plist_{S_j'} \cup plist_{S_j}</math> as new admissible session waiting for authentication from new users.
+
==Session picking protocol for current occupant of the current session==
 +
Suppose user <math>U_i</math> is in Session <math>S</math>. When new user <math>U_j</math> send a join request, user <math>U_i</math> start a session in limbo <math>S_j</math> with the list of users in the current session plus the joining user. As a part of initiation of each session <math>S_j</math> the current user send a message of type:
  
If it receives key confirmation from all <math>U_l</math> in <math>(U_1,...,Unew_m,..)</math> then it will make <math>S_j</math> as current session and send messages to this session.
+
<math> sid, (U_1,y_1,...,U_{joiner},y_{joiner},...), kc_{i}, z_{i}</math>
  
==Session picking protocol for new user joining the room==
 
When a joining user Unew_l receives a list of potential users which is not including them, it authenticate to U_i's which new user has not yet authenticated to, and compute new share for the new share list. When they have all shares and authentication for plist_j then they send the key confirmation and wait for all of key confirmation.
 
  
When they receive confirmation from every user in plist_j. They make it current session and start chatting.
+
If <math>m</math> users are joining that session concurrently, there are <math>S_1,...,S_m</math>  sessions in-limbo which are receiving shares and authentication messages.  
 +
 
 +
If the <math>U_l</math> currently in room signal to leave the room a session <math>S_l</math> is created. Each session <math>S_j</math> results in creation of session <math>S_{j'}</math> with user <math>U_l</math> omitted. <math>S_j</math> is marked as dead.  
  
admissible -> {inadmissible, potentially next}
+
User <math>U_i</math> 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 <math>S_j</math> results in new session <math>S_{j''}</math> to which  <math>U_{joiner}</math> is added. previous "current" session becomes in-limbo.
potentially next ->{inadmissible, next}
+
next->{current}
+
  
current and inadmissible will be eventually discarded.
+
in-limbo -> {in-limbo, dead, current}
 +
current -> in-limbo

Revision as of 15:53, 13 March 2015

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 n+1sec protocol.

Session picking protocol for new user joining the room

New user start a join process by sending (U_{{joiner}},y_{{joiner}}). In respose, it receives messages of the format

sid,(U_{1},y_{1},...,U_{{joiner}},y_{{joiner}},...),kc_{{i}},z_{{i}}

From each user i. The joiner makes a session for each sid 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 U_{i} is in Session S. When new user U_{j} send a join request, user U_{i} start a session in limbo S_{j} with the list of users in the current session plus the joining user. As a part of initiation of each session S_{j} the current user send a message of type:

sid,(U_{1},y_{1},...,U_{{joiner}},y_{{joiner}},...),kc_{{i}},z_{{i}}


If m users are joining that session concurrently, there are S_{1},...,S_{m} sessions in-limbo which are receiving shares and authentication messages.

If the U_{l} currently in room signal to leave the room a session S_{l} is created. Each session S_{j} results in creation of session S_{{j'}} with user U_{l} omitted. S_{j} is marked as dead.

User U_{i} 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 S_{j} results in new session S_{{j''}} to which U_{{joiner}} is added. previous "current" session becomes in-limbo.

in-limbo -> {in-limbo, dead, current} current -> in-limbo