Difference between revisions of "Np1sec/algebraic"
m (Dmitri moved page MpOTR/algebraic to Np1sec/algebraic) |
|||
(9 intermediate revisions by one other user not shown) | |||
Line 31: | Line 31: | ||
|- | |- | ||
|align="right"| Receive other users' id/key | |align="right"| Receive other users' id/key | ||
− | |align="center"|<math>plist_i|klist_i \leftarrow (U_1|y_1|\dots|U_n|y_n)</math> | + | |align="center"|<math>plist_i|klist_i \leftarrow (U_1|y_1|\dots|U_n|y_n)\cup(U_i,y_i)</math> |
|- | |- | ||
|align="right"|Compute Session Id | |align="right"|Compute Session Id | ||
Line 52: | Line 52: | ||
|- | |- | ||
|align="right"|Broadcast key shares and confirmation | |align="right"|Broadcast key shares and confirmation | ||
− | |align="center"|<math>(U_i, z_i, \sigma_i kc_i)</math> | + | |align="center"|<math>(U_i, z_i, \sigma_i, kc_i)</math> |
|- | |- | ||
|align="right"| Receive other users' key shares and confirmation | |align="right"| Receive other users' key shares and confirmation | ||
Line 58: | Line 58: | ||
|- | |- | ||
|align="right"|Check validity of key confirmation | |align="right"|Check validity of key confirmation | ||
− | |align="center"|<math>kc_i[j] == | + | |align="center"|<math>kc_i[j] == H(k_{j,i}, U_j) \textrm{ for } j \in \{1,\dots,n\}</math> |
|- | |- | ||
|align="right"|Check public shares | |align="right"|Check public shares | ||
Line 73: | Line 73: | ||
|- | |- | ||
|align="right"|Broadcast session key confirmation | |align="right"|Broadcast session key confirmation | ||
− | |align="center"|<math> | + | |align="center"|<math>skc_i \leftarrow H(k_i, sid_i, U_i)</math> |
|} | |} | ||
Line 82: | Line 82: | ||
!align="center"|Pseudo-code | !align="center"|Pseudo-code | ||
|- | |- | ||
− | |align="right"| broadcast all user's identities | + | |align="right"| broadcast all user's identities |
− | |align="center"|<math> | + | |align="center"|<math> (U_1|y_1|\dots|U_n|y_n) </math> |
|- | |- | ||
|align="right"| Receive other users' id/key and update participant list | |align="right"| Receive other users' id/key and update participant list | ||
− | |align="center"|<math>plist_i|klist_i | + | |align="center"|<math>(plist_i|klist_i) \cup (U_j|y_j)</math> |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
|- | |- | ||
|align="right"|Compute Session Id | |align="right"|Compute Session Id | ||
Line 98: | Line 92: | ||
|- | |- | ||
|align="right"|Generate Triple Diffie-Hellman P2P key for the new participant | |align="right"|Generate Triple Diffie-Hellman P2P key for the new participant | ||
− | |align="center"|<math>k_{i,j} \leftarrow H({y_j}^{lp_i},LP_j^{x_i},y_j^{x_i})</math> | + | |align="center"|<math>k_{i,j} \leftarrow H({y_j}^{lp_i},LP_j^{x_i},y_j^{x_i})</math> |
|- | |- | ||
|align="right"|Generate key confirmations | |align="right"|Generate key confirmations | ||
− | |align="center"|<math> | + | |align="center"|<math>kc_{i,j}\leftarrow H(k_{i,j}, U_i) </math> |
|- | |- | ||
|align="right"|Generate secret shares | |align="right"|Generate secret shares | ||
Line 116: | Line 110: | ||
|- | |- | ||
|align="right"| Receive other users' key shares and new users confirmation | |align="right"| Receive other users' key shares and new users confirmation | ||
− | |align="center"|<math>(U_1|z_1,\sigma_1,\dots U_n|z_n,\sigma_n), kc_{ | + | |align="center"|<math>(U_1|z_1,\sigma_1,\dots U_n|z_n,\sigma_n), kc_{i,j}</math> |
|- | |- | ||
|align="right"|Check validity of key confirmation | |align="right"|Check validity of key confirmation | ||
− | |align="center"|<math> | + | |align="center"|<math>kc_{j,i} == H(k_{i,j},U_j)</math> |
|- | |- | ||
|align="right"|Check public shares | |align="right"|Check public shares | ||
Line 134: | Line 128: | ||
|- | |- | ||
|align="right"|Broadcast session key confirmation | |align="right"|Broadcast session key confirmation | ||
− | |align="center"|<math> | + | |align="center"|<math>skc_i \leftarrow H(k_i, sid_i, U_i)</math> |
|} | |} | ||
Line 143: | Line 137: | ||
|- | |- | ||
|align="right"| Remove leaving user's id/key and update participant list | |align="right"| Remove leaving user's id/key and update participant list | ||
− | |align="center"|<math>plist_i|klist_i \ | + | |align="center"|<math>(plist_i|klist_i) \backslash (U_j|y_j)</math> |
|- | |- | ||
|align="right"|Compute Session Id | |align="right"|Compute Session Id | ||
|align="center"|<math>sid_i \leftarrow H(U_1|y_1|\dots|U_n|y_n)</math> | |align="center"|<math>sid_i \leftarrow H(U_1|y_1|\dots|U_n|y_n)</math> | ||
− | |||
− | |||
− | |||
|- | |- | ||
|align="right"|Generate secret shares | |align="right"|Generate secret shares | ||
Line 161: | Line 152: | ||
|- | |- | ||
|align="right"|Broadcast key shares | |align="right"|Broadcast key shares | ||
− | |align="center"|<math>(U_i, z_i, \sigma_i | + | |align="center"|<math>(U_i, z_i, \sigma_i)</math> |
|- | |- | ||
|align="right"| Receive other users' key shares | |align="right"| Receive other users' key shares | ||
− | |align="center"|<math>(U_1|z_1,\sigma_1,\dots U_n|z_n,\sigma_n) | + | |align="center"|<math>(U_1|z_1,\sigma_1,\dots U_n|z_n,\sigma_n)</math> |
− | + | ||
− | + | ||
− | + | ||
|- | |- | ||
|align="right"|Check public shares | |align="right"|Check public shares | ||
Line 184: | Line 172: | ||
|align="center"|<math>skc_i \leftarrow H(k_i, sid_i, U_i)</math> | |align="center"|<math>skc_i \leftarrow H(k_i, sid_i, U_i)</math> | ||
|} | |} | ||
− | |||
==Send== | ==Send== | ||
Line 195: | Line 182: | ||
|- | |- | ||
|align="right"| Append the hash of the session digest up to parent of current message | |align="right"| Append the hash of the session digest up to parent of current message | ||
− | |align="center"|<math> m \leftarrow (m, Digest( | + | |align="center"|<math> m \leftarrow (m, Digest(parent(m)), parent\_id) </math> |
|- | |- | ||
|align="right"| Sign the message | |align="right"| Sign the message | ||
Line 201: | Line 188: | ||
|- | |- | ||
|align="right"|Encrypt | |align="right"|Encrypt | ||
− | |align="center"|<math>e \leftarrow | + | |align="center"|<math>e \leftarrow Enc_{k_{sid}}(m)</math> |
|- | |- | ||
|align="right"| Broadcast the message | |align="right"| Broadcast the message | ||
Line 213: | Line 200: | ||
|- | |- | ||
|align="right"| check signature | |align="right"| check signature | ||
− | |align="center"|<math> verify(m) == ( | + | |align="center"|<math> verify(m,\sigma) </math> |
+ | |- | ||
+ | |align="right"| update message block chain | ||
+ | |align="center"|<math> Insert(BlackChain_{sid}, m) </math> | ||
|- | |- | ||
|align="right"| decrypt messagen | |align="right"| decrypt messagen | ||
Line 219: | Line 209: | ||
|- | |- | ||
|align="right"| Verify session id and hash | |align="right"| Verify session id and hash | ||
− | |align="center"|<math> | + | |align="center"|<math> sid_i == sid_{rec} \; \textrm{and} \; h == Digest(parent\_id)</math> |
|- | |- | ||
− | |align="right"| Update key | + | |align="right"| Update sender key or share key |
− | |align="center"|<math> | + | |align="center"|<math>y_j \leftarrow s \; \textrm { or } \; z_{j} \leftarrow s</math> |
+ | |- | ||
+ | |align="right"| if all users' share are received session key | ||
+ | |align="center"|<math>k_i \leftarrow ComputeSessionKey(z_1,...,z_n) </math> | ||
|- | |- | ||
|align="right"| return m | |align="right"| return m | ||
|align="center"|<math>m</math> | |align="center"|<math>m</math> | ||
|} | |} | ||
+ | |||
+ | [[Category: mpOTR]] |
Latest revision as of 18:46, 2 December 2014
Chatroom Setup
Description | Pseudo-code |
---|---|
Generate ephemeral DH private key of the room initiator | |
Generate DH key for BD, Triple DH and Signature | |
Set participant list |
Join
Description | Pseudo-code |
---|---|
Generate ephemeral DH private key | |
Generate DH key for BD, Triple DH and Signature | |
Broadcast User identity and the DH key | |
Receive other users' id/key | |
Compute Session Id | |
Generate Triple Diffie-Hellman P2P keys | }} |
Generate key confirmations | }} |
Generate secret shares | |
Generate public shares | |
Sign identity, shares | |
Broadcast key shares and confirmation | |
Receive other users' key shares and confirmation | |
Check validity of key confirmation | |
Check public shares | |
Check signatures | |
Recover secret shares | |
Generate session key | |
Broadcast session key confirmation |
Accept
Description | Pseudo-code |
---|---|
broadcast all user's identities | |
Receive other users' id/key and update participant list | |
Compute Session Id | |
Generate Triple Diffie-Hellman P2P key for the new participant | |
Generate key confirmations | |
Generate secret shares | |
Generate public shares | |
Sign identity, shares | |
Broadcast key shares and confirmation | |
Receive other users' key shares and new users confirmation | |
Check validity of key confirmation | |
Check public shares | |
Check signatures | |
Recover secret shares | |
Generate session key | |
Broadcast session key confirmation |
Leave
Description | Pseudo-code |
---|---|
Remove leaving user's id/key and update participant list | |
Compute Session Id | |
Generate secret shares | |
Generate public shares | |
Sign identity, shares | |
Broadcast key shares | |
Receive other users' key shares | |
Check public shares | |
Check signatures | |
Recover secret shares | |
Generate session key | |
Broadcast session key confirmation |
Send
Description | Pseudo-code |
---|---|
Generate new DH Key or new key share if needed and append | |
Append the hash of the session digest up to parent of current message | |
Sign the message | |
Encrypt | |
Broadcast the message |
Receive
Description | Pseudo-code |
---|---|
check signature | |
update message block chain | |
decrypt messagen | |
Verify session id and hash | |
Update sender key or share key | |
if all users' share are received session key | |
return m |