src/HOL/Auth/Yahalom.ML
changeset 5434 9b4bed3f394c
parent 5421 01fc8d6a40f2
child 5492 d9fc3457554e
equal deleted inserted replaced
5433:b66a23a45377 5434:9b4bed3f394c
    12 
    12 
    13 Pretty.setdepth 25;
    13 Pretty.setdepth 25;
    14 
    14 
    15 
    15 
    16 (*A "possibility property": there are traces that reach the end*)
    16 (*A "possibility property": there are traces that reach the end*)
    17 Goal "[| A ~= B; A ~= Server; B ~= Server |]   \
    17 Goal "A ~= Server \
    18 \     ==> EX X NB K. EX evs: yahalom.          \
    18 \     ==> EX X NB K. EX evs: yahalom.          \
    19 \            Says A B {|X, Crypt K (Nonce NB)|} : set evs";
    19 \            Says A B {|X, Crypt K (Nonce NB)|} : set evs";
    20 by (REPEAT (resolve_tac [exI,bexI] 1));
    20 by (REPEAT (resolve_tac [exI,bexI] 1));
    21 by (rtac (yahalom.Nil RS yahalom.YM1 RS yahalom.YM2 RS yahalom.YM3 RS 
    21 by (rtac (yahalom.Nil RS yahalom.YM1 RS yahalom.YM2 RS yahalom.YM3 RS 
    22           yahalom.YM4) 2);
    22           yahalom.YM4) 2);
    23 by possibility_tac;
    23 by possibility_tac;
    24 result();
    24 result();
    25 
    25 
    26 
    26 
    27 (**** Inductive proofs about yahalom ****)
    27 (**** Inductive proofs about yahalom ****)
    28 
       
    29 (*Nobody sends themselves messages*)
       
    30 Goal "evs: yahalom ==> ALL X. Says A A X ~: set evs";
       
    31 by (etac yahalom.induct 1);
       
    32 by Auto_tac;
       
    33 qed_spec_mp "not_Says_to_self";
       
    34 Addsimps [not_Says_to_self];
       
    35 AddSEs   [not_Says_to_self RSN (2, rev_notE)];
       
    36 
    28 
    37 
    29 
    38 (** For reasoning about the encrypted portion of messages **)
    30 (** For reasoning about the encrypted portion of messages **)
    39 
    31 
    40 (*Lets us treat YM4 using a similar argument as for the Fake case.*)
    32 (*Lets us treat YM4 using a similar argument as for the Fake case.*)
   107 
    99 
   108 
   100 
   109 (*Describes the form of K when the Server sends this message.  Useful for
   101 (*Describes the form of K when the Server sends this message.  Useful for
   110   Oops as well as main secrecy property.*)
   102   Oops as well as main secrecy property.*)
   111 Goal "[| Says Server A {|Crypt (shrK A) {|Agent B, Key K, na, nb|}, X|} \
   103 Goal "[| Says Server A {|Crypt (shrK A) {|Agent B, Key K, na, nb|}, X|} \
   112 \          : set evs;                                                   \
   104 \          : set evs;   evs : yahalom |]                                \
   113 \        evs : yahalom |]                                          \
       
   114 \     ==> K ~: range shrK";
   105 \     ==> K ~: range shrK";
   115 by (etac rev_mp 1);
   106 by (etac rev_mp 1);
   116 by (etac yahalom.induct 1);
   107 by (etac yahalom.induct 1);
   117 by (ALLGOALS Asm_simp_tac);
   108 by (ALLGOALS Asm_simp_tac);
   118 by (Blast_tac 1);
   109 by (Blast_tac 1);