role user (Ui, RC, ASj: agent, | SKey1 : symmetric_key, | SKey2 : symmetric_key, | H, MUL, SUB: hash_func, | Snd, Rcv: channel(dy)) | played_by Ui | def= | local State : nat, | IDi, PWi, IDj, N, Ej, Yj: text, | Di, Ei, Fi, Ai, Bi, Ci, Ri, M1, M2, M3, M4, M6, Rij, Rj, M5, | SKi: message, | Inc : hash_func | const user_rserver, rserver_aserver, | aserver_user, sec1, sec2, sec3, sec4, sec5, sec6: protocol_id | init State ≔0 | transition | 1. State = 0 ∧ Rcv(start) | State' ≔ 1 ∧ Ai' ≔ h(IDi.PWi) | ∧ Snd(IDi.Ai'}_SKey2) | 2. State = 1 ∧ Rcv(Di'.Ei'.Fi'.N'}_SKey2) | State' ≔ 2 ∧ Ci' ≔ exp(IDi, Ai) | ∧ Bi' ≔ xor(Di',Ci') | ∧ Ri' ≔new() | ∧ M1' ≔h(Bi'.Ri') | ∧ M2' ≔ xor(h(Bi'), Ri') | ∧ Snd(M1'.M2'.Fi.IDj) | ∧ secret(PWi}, sec1, Ui}) | 3. State = 2 ∧ Rcv(Ej'.M3') | State' ≔ 3 ∧ Yj' ≔ xor(M3',IDi) | ∧ M4' ≔ h(IDi. Ri. Yj'.IDj) | ∧ M5' ≔exp((IDi.Ri.M4'), Ej) | ∧ Snd(M5') | ∧ secret(Yj'}, sec2, Ui,ASj,RC}) | ∧ witness(ASj, Ui, aserver_user, Ri) | 4. State = 3 ∧ Rcv(M6',Rij') | State' ≔ 4 ∧ Rj' ≔ xor(Rij,Ri) | ∧ SKi' ≔ h(IDi.IDj.Ri.Rj') | ∧ secret(SKi}, sec3, Ui,ASj}) | end role |
|