role user (Ui,Sj: agent, | SKuisj: symmetric_key, | %H : one-way/bio hash function | H : hash_func, | Snd,Rcv: channel(dy)) | played_by Ui | def= | local State : nat, | IDi, PWi, RPWi, BIOi, X, Ai, Bi, Ci, R1, Di, Ei, Fi, R2, Gi, Vi : text | const user_server_r1, server_user_r2, | subs1, subs2 : protocol_id | init State 0 | transition | %%%%% Registration phase | 1. State = 0 Rcv(start) | State' 1 RPWi' H(PWi.H(BIOi)) | Snd(IDi.RPWi'_SKuisj) | secret(, subs1, Sj) | secret(, subs2, Ui) | 2. State = 1 Rcv(xor(H(xor(IDi, X)), H(IDi.H(PWi.H(BIOi)))).xor(H(xor(IDi, X).H(PWi.H(BIOi))), X) _SKuisj) | %%%%% Login phase | State' 2 R1' new() | RPWi' H(PWi.H(BIOi)) | Ai' xor(xor(H(xor(IDi, X)), H(IDi.H(PWi.H(BIOi)))), H(IDi.RPWi')) | Ci' xor(H(Ai'.H(PWi.H(BIOi))), X) | Di' xor(IDi, R1') | Ei' xor(IDi, H(Ai'.RPWi')) | Fi' H(IDi.R1'.Ai') | Snd(Ci'.Di'.Ei'.Fi') | witness(Ui, Sj, user_server_r1, R1') | %%%%% Verification phase | 3. State = 2 Rcv(xor(R2', H(R1'.H(IDi.R1'.Ai'))).H(H(R1'.R2'.H(xor(IDi, X)).IDi).R1'.R2')) | State' 3 request(Sj, Ui, server_user_r2, R2') | end role |
|