26 Fake "[| evs: ns_public; B ~= Spy; |
26 Fake "[| evs: ns_public; B ~= Spy; |
27 X: synth (analz (sees Spy evs)) |] |
27 X: synth (analz (sees Spy evs)) |] |
28 ==> Says Spy B X # evs : ns_public" |
28 ==> Says Spy B X # evs : ns_public" |
29 |
29 |
30 (*Alice initiates a protocol run, sending a nonce to Bob*) |
30 (*Alice initiates a protocol run, sending a nonce to Bob*) |
31 NS1 "[| evs: ns_public; A ~= B; Nonce NA ~: used evs |] |
31 NS1 "[| evs1: ns_public; A ~= B; Nonce NA ~: used evs1 |] |
32 ==> Says A B (Crypt (pubK B) {|Nonce NA, Agent A|}) |
32 ==> Says A B (Crypt (pubK B) {|Nonce NA, Agent A|}) |
33 # evs : ns_public" |
33 # evs1 : ns_public" |
34 |
34 |
35 (*Bob responds to Alice's message with a further nonce*) |
35 (*Bob responds to Alice's message with a further nonce*) |
36 NS2 "[| evs: ns_public; A ~= B; Nonce NB ~: used evs; |
36 NS2 "[| evs2: ns_public; A ~= B; Nonce NB ~: used evs2; |
37 Says A' B (Crypt (pubK B) {|Nonce NA, Agent A|}) : set evs |] |
37 Says A' B (Crypt (pubK B) {|Nonce NA, Agent A|}) : set evs2 |] |
38 ==> Says B A (Crypt (pubK A) {|Nonce NA, Nonce NB|}) |
38 ==> Says B A (Crypt (pubK A) {|Nonce NA, Nonce NB|}) |
39 # evs : ns_public" |
39 # evs2 : ns_public" |
40 |
40 |
41 (*Alice proves her existence by sending NB back to Bob.*) |
41 (*Alice proves her existence by sending NB back to Bob.*) |
42 NS3 "[| evs: ns_public; |
42 NS3 "[| evs3: ns_public; |
43 Says A B (Crypt (pubK B) {|Nonce NA, Agent A|}) : set evs; |
43 Says A B (Crypt (pubK B) {|Nonce NA, Agent A|}) : set evs3; |
44 Says B' A (Crypt (pubK A) {|Nonce NA, Nonce NB|}) : set evs |] |
44 Says B' A (Crypt (pubK A) {|Nonce NA, Nonce NB|}) : set evs3 |] |
45 ==> Says A B (Crypt (pubK B) (Nonce NB)) # evs : ns_public" |
45 ==> Says A B (Crypt (pubK B) (Nonce NB)) # evs3 : ns_public" |
46 |
46 |
47 (**Oops message??**) |
47 (**Oops message??**) |
48 |
48 |
49 end |
49 end |