# TMN # # Modelled after the description in the SPORE library # http://www.lsv.ens-cachan.fr/spore/tmn.html # # Note: # According to Boyd and Mathuria Kb is the session key this is not clear # from the description in SPORE usertype SessionKey; const pk: Function; secret sk: Function; inversekeys(pk,sk); const Fresh: Function; const Compromised: Function; protocol tmn^KeyCompromise(C) { // Read the names of 3 agents and disclose a session between them including // corresponding session key to simulate key compromise role C { const Ni,Nr: Nonce; const Kr,Ki: SessionKey; var I,R,S: Agent; read_C1(C,C, I,R,S); send_C2(C,C, R,{Ki}pk(S), I, {Kr}pk(S), {Kr}Ki, Kr ); claim_C3(C,Empty, (Compromised,Kr)); } } protocol tmn(I,R,S) { role I { const Ki: SessionKey; var Kr: SessionKey; send_1(I,S, R,{Ki}pk(S) ); read_4(S,I, R,{Kr}Ki ); claim_I1(I,Secret,Kr); claim_I2(I,Nisynch); claim_I3(I,Empty,(Fresh,Kr)); } role R { const Kr: SessionKey; read_2(S,R, I ); send_3(R,S, I, { Kr }pk(S) ); claim_R1(R,Secret,Kr); claim_R2(R,Nisynch); claim_R3(R,Empty,(Fresh,Kr)); } role S { var Ki,Kr: SessionKey; read_1(I,S, R,{Ki}pk(S) ); send_2(S,R, I ); read_3(R,S, I, { Kr }pk(S) ); send_4(S,I, R,{Kr}Ki ); } } const Alice,Bob,Eve,Simon: Agent; const Ke: SessionKey; untrusted Eve; compromised sk(Eve);