src/HOL/Auth/NS_Public.thy
author paulson
Fri, 03 Oct 1997 10:32:50 +0200
changeset 3772 6ee707a73248
parent 3683 aafe719dff14
child 5434 9b4bed3f394c
permissions -rw-r--r--
Routine tidying up
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2318
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
     1
(*  Title:      HOL/Auth/NS_Public
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
     2
    ID:         $Id$
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
     4
    Copyright   1996  University of Cambridge
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
     5
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
     6
Inductive relation "ns_public" for the Needham-Schroeder Public-Key protocol.
2538
c55f68761a8d Mended spelling error
paulson
parents: 2516
diff changeset
     7
Version incorporating Lowe's fix (inclusion of B's identity in round 2).
2318
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
     8
*)
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
     9
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    10
NS_Public = Public + 
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    11
3519
ab0a9fbed4c0 Changing "lost" from a parameter of protocol definitions to a constant.
paulson
parents: 3466
diff changeset
    12
consts  ns_public  :: event list set
2549
0c723635b9e6 Cosmetic improvements
paulson
parents: 2538
diff changeset
    13
2318
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    14
inductive ns_public
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    15
  intrs 
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    16
         (*Initial trace is empty*)
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    17
    Nil  "[]: ns_public"
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    18
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    19
         (*The spy MAY say anything he CAN say.  We do not expect him to
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    20
           invent new nonces here, but he can also use NS1.  Common to
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    21
           all similar protocols.*)
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    22
    Fake "[| evs: ns_public;  B ~= Spy;  
3683
aafe719dff14 Global change: lost->bad and sees Spy->spies
paulson
parents: 3659
diff changeset
    23
             X: synth (analz (spies evs)) |]
2318
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    24
          ==> Says Spy B X  # evs : ns_public"
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    25
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    26
         (*Alice initiates a protocol run, sending a nonce to Bob*)
3659
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    27
    NS1  "[| evs1: ns_public;  A ~= B;  Nonce NA ~: used evs1 |]
2497
47de509bdd55 New treatment of nonce creation
paulson
parents: 2451
diff changeset
    28
          ==> Says A B (Crypt (pubK B) {|Nonce NA, Agent A|})
3659
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    29
                 # evs1  :  ns_public"
2318
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    30
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    31
         (*Bob responds to Alice's message with a further nonce*)
3659
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    32
    NS2  "[| evs2: ns_public;  A ~= B;  Nonce NB ~: used evs2;
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    33
             Says A' B (Crypt (pubK B) {|Nonce NA, Agent A|}) : set evs2 |]
2497
47de509bdd55 New treatment of nonce creation
paulson
parents: 2451
diff changeset
    34
          ==> Says B A (Crypt (pubK A) {|Nonce NA, Nonce NB, Agent B|})
3659
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    35
                # evs2  :  ns_public"
2318
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    36
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    37
         (*Alice proves her existence by sending NB back to Bob.*)
3659
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    38
    NS3  "[| evs3: ns_public;
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    39
             Says A  B (Crypt (pubK B) {|Nonce NA, Agent A|}) : set evs3;
2516
4d68fbe6378b Now with Andy Gordon's treatment of freshness to replace newN/K
paulson
parents: 2497
diff changeset
    40
             Says B' A (Crypt (pubK A) {|Nonce NA, Nonce NB, Agent B|})
3659
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    41
               : set evs3 |]
eddedfe2f3f8 Renamed "evs" to "evs1", "evs2", etc. in protocol inductive definition
paulson
parents: 3541
diff changeset
    42
          ==> Says A B (Crypt (pubK B) (Nonce NB)) # evs3 : ns_public"
2318
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    43
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    44
  (**Oops message??**)
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    45
6d3f7c7f70b0 Public-key examples
paulson
parents:
diff changeset
    46
end