diff -r 4a9040b85e2e -r 1f495d4d922b src/HOL/Auth/Yahalom_Bad.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/Auth/Yahalom_Bad.thy Thu Mar 18 10:41:33 1999 +0100 @@ -0,0 +1,66 @@ +(* Title: HOL/Auth/Yahalom + ID: $Id$ + Author: Lawrence C Paulson, Cambridge University Computer Laboratory + Copyright 1996 University of Cambridge + +Inductive relation "yahalom" for the Yahalom protocol. + +Example of why Oops is necessary. This protocol can be attacked because it +doesn't keep NB secret, but without Oops it can be "verified" anyway. +*) + +Yahalom_Bad = Shared + + +consts yahalom :: event list set +inductive "yahalom" + intrs + (*Initial trace is empty*) + Nil "[]: yahalom" + + (*The spy MAY say anything he CAN say. We do not expect him to + invent new nonces here, but he can also use NS1. Common to + all similar protocols.*) + Fake "[| evs: yahalom; X: synth (analz (knows Spy evs)) |] + ==> Says Spy B X # evs : yahalom" + + (*A message that has been sent can be received by the + intended recipient.*) + Reception "[| evsr: yahalom; Says A B X : set evsr |] + ==> Gets B X # evsr : yahalom" + + (*Alice initiates a protocol run*) + YM1 "[| evs1: yahalom; Nonce NA ~: used evs1 |] + ==> Says A B {|Agent A, Nonce NA|} # evs1 : yahalom" + + (*Bob's response to Alice's message.*) + YM2 "[| evs2: yahalom; Nonce NB ~: used evs2; + Gets B {|Agent A, Nonce NA|} : set evs2 |] + ==> Says B Server + {|Agent B, Nonce NB, Crypt (shrK B) {|Agent A, Nonce NA|}|} + # evs2 : yahalom" + + (*The Server receives Bob's message. He responds by sending a + new session key to Alice, with a packet for forwarding to Bob.*) + YM3 "[| evs3: yahalom; Key KAB ~: used evs3; + Gets Server + {|Agent B, Nonce NB, Crypt (shrK B) {|Agent A, Nonce NA|}|} + : set evs3 |] + ==> Says Server A + {|Crypt (shrK A) {|Agent B, Key KAB, Nonce NA, Nonce NB|}, + Crypt (shrK B) {|Agent A, Key KAB|}|} + # evs3 : yahalom" + + (*Alice receives the Server's (?) message, checks her Nonce, and + uses the new session key to send Bob his Nonce. The premise + A ~= Server is needed to prove Says_Server_not_range.*) + YM4 "[| evs4: yahalom; A ~= Server; + Gets A {|Crypt(shrK A) {|Agent B, Key K, Nonce NA, Nonce NB|}, X|} + : set evs4; + Says A B {|Agent A, Nonce NA|} : set evs4 |] + ==> Says A B {|X, Crypt K (Nonce NB)|} # evs4 : yahalom" + + (*This message models possible leaks of session keys. The Nonces + identify the protocol run. Quoting Server here ensures they are + correct.*) + +end