All pastes #274945 Raw Edit

MANOWAR^

public text v1 · immutable
·published 2006-12-11 02:45 UTC
rendered paste body
%% PROTOCOL*: NSPK: Needham-Schroeder Public-Key Protocol
%% VARIANT: fix by Lowe (of 1995) without key server
%% PURPOSE: Two-party mutual authentication
%% MODELER: David von Oheimb, Siemens CT IC 3, January 2005
%% ALICE_BOB:
%%\begin{verbatim}
%% 1. A  - {Na.A}_Kb ----> B
%% 2. A <- {Na.Nb.B}_Ka -  B
%% 3. A  - {Nb}_Kb ------> B
%%\end{verbatim}
%% PROBLEMS: 3
%% ATTACKS: None
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%HLPSL:
role alice (A, B: agent,             
            Ka, Kb: public_key,      
            SND, RCV: channel (dy)) 
played_by A def=

  local State : nat, 
        Na, Nb: text

  init State := 0

  transition  
   
    0.  State  = 0 /\ RCV(start) =|> 
	State':= 2 /\ Na' := new() /\ SND({Na'.A}_Kb)
		   /\ secret(Na',na,{A,B}) 
		   /\ witness(A,B,bob_alice_na,Na')

    %2.  State  = 2 /\ RCV({Na.Nb'.B}_Ka) =|> 
	%State':= 4 /\ SND({Nb'}_Kb) 
	%	   /\ request(A,B,alice_bob_nb,Nb')

    2.  State  = 2 /\ RCV({Na.Nb'.B}_Ka) =|> 
	State':= 4 /\ request(A,B,alice_bob_nb,Nb')

end role

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

role bob(A, B: agent,      
         Ka, Kb: public_key,      
         SND, RCV: channel (dy)) 
played_by B def=

  local State : nat, 
	Na, Nb: text

  init State := 1

  transition 

    1.  State  = 1 /\ RCV({Na'.A}_Kb) =|> 
	State':= 3 /\ Nb' := new() /\ SND({Na'.Nb'.B}_Ka)
		   /\ secret(Nb',nb,{A,B}) 
		   /\ witness(B,A,alice_bob_nb,Nb')

%We do not need the code below anymore.
%    3.  State  = 3 /\ RCV({Nb}_Kb) =|> 
%	State':= 5 /\ request(B,A,bob_alice_na,Na)

end role

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

role session(A, B: agent, Ka, Kb: public_key) def=

  local SA, RA, SB, RB: channel (dy)

  composition 

	alice(A,B,Ka,Kb,SA,RA)
     /\ bob  (A,B,Ka,Kb,SB,RB)

end role

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

role environment() def=

    const a, b	       : agent,
	  ka, kb, ki   : public_key,
	  na, nb,
	  alice_bob_nb,
	  bob_alice_na : protocol_id

    intruder_knowledge = {a, b, ka, kb, ki, inv(ki)}

    composition

	session(a,b,ka,kb)
     /\ session(a,i,ka,ki)
     /\ session(i,b,ki,kb)

end role

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

goal

  secrecy_of na, nb
  %We no longer want this goal achieved.
  %authentication_on alice_bob_nb
  authentication_on bob_alice_na

end goal

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

environment()