Difference between revisions of "Np1sec/concurrent join"

(Simplifies the protocol without involving confirmation)
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
=Proposal for concurrent join=
 
=Proposal for concurrent join=
  
With having session key confirmation one can have following protocol to handle concurrent join.
+
One can have the following protocol to handle concurrent join.
  
each occupant can mark each session with one of the 5 status: {current, in-limbo, dead}
+
Each occupant can mark each session with one of the '''5 statuses: {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.
+
'''current''': User messages are being encrypted and decrypted in the current session. The join request will be processed 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.
+
'''in-limbo''': A session which is receiving shares and confirmations, this session can potentially become the next session if it receives session confirmation from all users.
'''dead''': The session is abonden and not going to become current session.
+
'''dead''': The session is abandoned and not going to become 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.
+
The protocol joins one user at a time but is greedy and non-blocking in respect to several concurrent joiners and eventually results in joins of all new users (as long as current users in the session cooperate with the join process). The global order of messages is essential for the protocol to succeed, which is a transport assumption for <math>n+1sec</math> protocol.
  
 
==Session picking protocol for new user joining the room==
 
==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
+
New user starts a join process by sending <math>(U_{joiner}, y_{joiner})</math>. In respose, it receives messages of the format
  
 
<math> sid, (U_1,y_1,...,U_{joiner},y_{joiner},...), kc_{i}, z_{i}</math>
 
<math> sid, (U_1,y_1,...,U_{joiner},y_{joiner},...), kc_{i}, z_{i}</math>
  
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.
+
From each user <math>i</math>. The joiner makes a session for each <math>sid</math> which contains them as a participant, the user initiates a session and gathers shares. When a session receives all shares, it computes the session key and becomes the current session. All other sessions can remain 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==
 
==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:
+
Suppose user <math>U_i</math> is in Session <math>S</math>. When a new user <math>U_j</math> sends a join request, the user <math>U_i</math> starts a session in limbo <math>S_j</math> with the list of users in the current session plus the joining user. As part of initiation of each session <math>S_j</math> the current user sends a message of type:
  
 
<math> sid, (U_1,y_1,...,U_{joiner},y_{joiner},...), kc_{i}, z_{i}</math>
 
<math> sid, (U_1,y_1,...,U_{joiner},y_{joiner},...), kc_{i}, z_{i}</math>
  
  
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 <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.  
+
If <math>U_l</math>, currently in the session, signals to leave the room, a new session <math>S_l</math> is created. Furthermore, each session <math>S_j</math> in-limbo which has <math>U_l</math> as participants, results in the creation of new session <math>S_{j'}</math> with user <math>U_l</math> omitted and <math>S_j</math> is marked as dead.  
  
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.
+
The user <math>U_i</math> sends the shares and authentication token necessary for each session. The first session which receives all confirmations will become the main session, and the joiner user of that session becomes the current session. All other <math>S_j</math> result in new sessions <math>S_{j''}</math> to which <math>U_{joiner}</math> is added. Previous active (current) session of the room becomes in-limbo.
  
 
in-limbo -> {in-limbo, dead, current}
 
in-limbo -> {in-limbo, dead, current}
 
current -> in-limbo
 
current -> in-limbo

Latest revision as of 16:33, 13 March 2015

Proposal for concurrent join

One can have the following protocol to handle concurrent join.

Each occupant can mark each session with one of the 5 statuses: {current, in-limbo, dead} current: User messages are being encrypted and decrypted in the current session. The join request will be processed by this session. in-limbo: A session which is receiving shares and confirmations, this session can potentially become the next session if it receives session confirmation from all users. dead: The session is abandoned and not going to become the current session.

The protocol joins one user at a time but is greedy and non-blocking in respect to several concurrent joiners and eventually results in joins of all new users (as long as current users in the session cooperate with the join process). The global order of messages is essential 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 starts 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 contains them as a participant, the user initiates a session and gathers shares. When a session receives all shares, it computes the session key and becomes the current session. All other sessions can remain 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 a new user U_{j} sends a join request, the user U_{i} starts a session in limbo S_{j} with the list of users in the current session plus the joining user. As part of initiation of each session S_{j} the current user sends 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 U_{l}, currently in the session, signals to leave the room, a new session S_{l} is created. Furthermore, each session S_{j} in-limbo which has U_{l} as participants, results in the creation of new session S_{{j'}} with user U_{l} omitted and S_{j} is marked as dead.

The user U_{i} sends the shares and authentication token necessary for each session. The first session which receives all confirmations will become the main session, and the joiner user of that session becomes the current session. All other S_{j} result in new sessions S_{{j''}} to which U_{{joiner}} is added. Previous active (current) session of the room becomes in-limbo.

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