src/HOL/Auth/Smartcard/ShoupRubinBella.thy
author berghofe
Wed, 11 Jul 2007 11:14:51 +0200
changeset 23746 a455e69c31cc
parent 21588 cd0dc678a205
child 23894 1a4167d761ac
permissions -rwxr-xr-x
Adapted to new inductive definition package.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     1
(*  ID:         $Id$
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     2
    Author:     Giampaolo Bella, Catania University
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     3
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     4
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     5
header{*Bella's modification of the Shoup-Rubin protocol*}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     6
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     7
theory ShoupRubinBella imports Smartcard begin
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     8
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
     9
text{*The modifications are that message 7 now mentions A, while message 10
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    10
now mentions Nb and B. The lack of explicitness of the original version was
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    11
discovered by investigating adherence to the principle of Goal
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    12
Availability. Only the updated version makes the goals of confidentiality,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    13
authentication and key distribution available to both peers.*}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    14
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    15
consts
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    16
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    17
    sesK :: "nat*key => key"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    18
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    19
axioms
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    20
     
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    21
   (*sesK is injective on each component*) 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    22
   inj_sesK [iff]: "(sesK(m,k) = sesK(m',k')) = (m = m' \<and> k = k')"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    23
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    24
   (*all long-term keys differ from sesK*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    25
   shrK_disj_sesK [iff]: "shrK A \<noteq> sesK(m,pk)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    26
   crdK_disj_sesK [iff]: "crdK C \<noteq> sesK(m,pk)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    27
   pin_disj_sesK  [iff]: "pin P \<noteq> sesK(m,pk)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    28
   pairK_disj_sesK[iff]: "pairK(A,B) \<noteq> sesK(m,pk)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    29
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    30
   (*needed for base case in analz_image_freshK*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    31
   Atomic_distrib [iff]: "Atomic`(KEY`K \<union> NONCE`N) =
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    32
                   Atomic`(KEY`K) \<union> Atomic`(NONCE`N)" 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    33
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    34
  (*this protocol makes the assumption of secure means
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    35
    between each agent and his smartcard*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    36
   shouprubin_assumes_securemeans [iff]: "evs \<in> srb \<Longrightarrow> secureM"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    37
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    38
constdefs
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    39
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    40
  Unique :: "[event, event list] => bool" ("Unique _ on _")
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    41
   "Unique ev on evs == 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    42
      ev \<notin> set (tl (dropWhile (% z. z \<noteq> ev) evs))"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    43
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    44
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
    45
inductive_set srb :: "event list set"
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
    46
  where
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    47
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    48
    Nil:  "[]\<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    49
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    50
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    51
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
    52
  | Fake: "\<lbrakk> evsF \<in> srb;  X \<in> synth (analz (knows Spy evsF)); 
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    53
             illegalUse(Card B) \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    54
          \<Longrightarrow> Says Spy A X # 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    55
              Inputs Spy (Card B) X # evsF \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    56
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    57
(*In general this rule causes the assumption Card B \<notin> cloned
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    58
  in most guarantees for B - starting with confidentiality -
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    59
  otherwise pairK_confidential could not apply*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
    60
  | Forge:
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    61
         "\<lbrakk> evsFo \<in> srb; Nonce Nb \<in> analz (knows Spy evsFo);
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    62
             Key (pairK(A,B)) \<in> knows Spy evsFo \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    63
          \<Longrightarrow> Notes Spy (Key (sesK(Nb,pairK(A,B)))) # evsFo \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    64
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    65
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    66
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
    67
  | Reception: "\<lbrakk> evsrb\<in> srb; Says A B X \<in> set evsrb \<rbrakk>
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    68
              \<Longrightarrow> Gets B X # evsrb \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    69
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    70
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    71
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    72
(*A AND THE SERVER*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
    73
  | SR_U1:  "\<lbrakk> evs1 \<in> srb; A \<noteq> Server \<rbrakk>
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    74
          \<Longrightarrow> Says A Server \<lbrace>Agent A, Agent B\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    75
                # evs1 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    76
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
    77
  | SR_U2:  "\<lbrakk> evs2 \<in> srb; 
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    78
             Gets Server \<lbrace>Agent A, Agent B\<rbrace> \<in> set evs2 \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    79
          \<Longrightarrow> Says Server A \<lbrace>Nonce (Pairkey(A,B)), 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    80
                           Crypt (shrK A) \<lbrace>Nonce (Pairkey(A,B)), Agent B\<rbrace>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    81
                  \<rbrace>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    82
                # evs2 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    83
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    84
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    85
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    86
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    87
(*A AND HER CARD*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    88
(*A cannot decrypt the verifier for she dosn't know shrK A,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    89
  but the pairkey is recognisable*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
    90
  | SR_U3:  "\<lbrakk> evs3 \<in> srb; legalUse(Card A);
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    91
             Says A Server \<lbrace>Agent A, Agent B\<rbrace> \<in> set evs3;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    92
             Gets A \<lbrace>Nonce Pk, Certificate\<rbrace> \<in> set evs3 \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    93
          \<Longrightarrow> Inputs A (Card A) (Agent A)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    94
                # evs3 \<in> srb"   (*however A only queries her card 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    95
if she has previously contacted the server to initiate with some B. 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    96
Otherwise she would do so even if the Server had not been active. 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    97
Still, this doesn't and can't mean that the pairkey originated with 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    98
the server*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
    99
 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   100
(*The card outputs the nonce Na to A*)               
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   101
  | SR_U4:  "\<lbrakk> evs4 \<in> srb; 
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   102
             Nonce Na \<notin> used evs4; legalUse(Card A); A \<noteq> Server;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   103
             Inputs A (Card A) (Agent A) \<in> set evs4 \<rbrakk> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   104
       \<Longrightarrow> Outpts (Card A) A \<lbrace>Nonce Na, Crypt (crdK (Card A)) (Nonce Na)\<rbrace>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   105
              # evs4 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   106
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   107
(*The card can be exploited by the spy*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   108
(*because of the assumptions on the card, A is certainly not server nor spy*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   109
  | SR_U4Fake: "\<lbrakk> evs4F \<in> srb; Nonce Na \<notin> used evs4F; 
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   110
             illegalUse(Card A);
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   111
             Inputs Spy (Card A) (Agent A) \<in> set evs4F \<rbrakk> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   112
      \<Longrightarrow> Outpts (Card A) Spy \<lbrace>Nonce Na, Crypt (crdK (Card A)) (Nonce Na)\<rbrace>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   113
            # evs4F \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   114
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   115
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   116
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   117
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   118
(*A TOWARDS B*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   119
  | SR_U5:  "\<lbrakk> evs5 \<in> srb; 
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   120
             Outpts (Card A) A \<lbrace>Nonce Na, Certificate\<rbrace> \<in> set evs5;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   121
             \<forall> p q. Certificate \<noteq> \<lbrace>p, q\<rbrace> \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   122
          \<Longrightarrow> Says A B \<lbrace>Agent A, Nonce Na\<rbrace> # evs5 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   123
(*A must check that the verifier is not a compound message, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   124
  otherwise this would also fire after SR_U7 *)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   125
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   126
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   127
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   128
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   129
(*B AND HIS CARD*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   130
  | SR_U6:  "\<lbrakk> evs6 \<in> srb; legalUse(Card B);
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   131
             Gets B \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs6 \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   132
          \<Longrightarrow> Inputs B (Card B) \<lbrace>Agent A, Nonce Na\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   133
                # evs6 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   134
(*B gets back from the card the session key and various verifiers*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   135
  | SR_U7:  "\<lbrakk> evs7 \<in> srb; 
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   136
             Nonce Nb \<notin> used evs7; legalUse(Card B); B \<noteq> Server;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   137
             K = sesK(Nb,pairK(A,B));
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   138
             Key K \<notin> used evs7;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   139
             Inputs B (Card B) \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs7\<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   140
    \<Longrightarrow> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   141
                            Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   142
                            Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   143
                # evs7 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   144
(*The card can be exploited by the spy*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   145
(*because of the assumptions on the card, A is certainly not server nor spy*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   146
  | SR_U7Fake:  "\<lbrakk> evs7F \<in> srb; Nonce Nb \<notin> used evs7F; 
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   147
             illegalUse(Card B);
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   148
             K = sesK(Nb,pairK(A,B));
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   149
             Key K \<notin> used evs7F;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   150
             Inputs Spy (Card B) \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs7F \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   151
          \<Longrightarrow> Outpts (Card B) Spy \<lbrace>Nonce Nb, Agent A, Key K,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   152
                            Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   153
                            Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   154
                # evs7F \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   155
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   156
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   157
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   158
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   159
(*B TOWARDS A*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   160
(*having sent an input that mentions A is the only memory B relies on,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   161
  since the output doesn't mention A - lack of explicitness*) 
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   162
  | SR_U8:  "\<lbrakk> evs8 \<in> srb;  
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   163
             Inputs B (Card B) \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs8;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   164
             Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   165
                                 Cert1, Cert2\<rbrace> \<in> set evs8 \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   166
          \<Longrightarrow> Says B A \<lbrace>Nonce Nb, Cert1\<rbrace> # evs8 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   167
  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   168
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   169
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   170
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   171
(*A AND HER CARD*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   172
(*A cannot check the form of the verifiers - although I can prove the form of
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   173
  Cert2 - and just feeds her card with what she's got*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   174
  | SR_U9:  "\<lbrakk> evs9 \<in> srb; legalUse(Card A);
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   175
             Gets A \<lbrace>Nonce Pk, Cert1\<rbrace> \<in> set evs9;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   176
             Outpts (Card A) A \<lbrace>Nonce Na, Cert2\<rbrace> \<in> set evs9; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   177
             Gets A \<lbrace>Nonce Nb, Cert3\<rbrace> \<in> set evs9;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   178
             \<forall> p q. Cert2 \<noteq> \<lbrace>p, q\<rbrace> \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   179
          \<Longrightarrow> Inputs A (Card A) 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   180
                 \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce Pk,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   181
                  Cert1, Cert3, Cert2\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   182
                # evs9 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   183
(*But the card will only give outputs to the inputs of the correct form*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   184
  | SR_U10: "\<lbrakk> evs10 \<in> srb; legalUse(Card A); A \<noteq> Server;
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   185
             K = sesK(Nb,pairK(A,B));
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   186
             Inputs A (Card A) \<lbrace>Agent B, Nonce Na, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   187
                                 Nonce (Pairkey(A,B)),
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   188
                                 Crypt (shrK A) \<lbrace>Nonce (Pairkey(A,B)), 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   189
                                                   Agent B\<rbrace>,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   190
                                 Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   191
                                 Crypt (crdK (Card A)) (Nonce Na)\<rbrace>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   192
               \<in> set evs10 \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   193
          \<Longrightarrow> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   194
                                 Key K, Crypt (pairK(A,B)) (Nonce Nb)\<rbrace>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   195
                 # evs10 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   196
(*The card can be exploited by the spy*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   197
(*because of the assumptions on the card, A is certainly not server nor spy*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   198
  | SR_U10Fake: "\<lbrakk> evs10F \<in> srb; 
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   199
             illegalUse(Card A);
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   200
             K = sesK(Nb,pairK(A,B));
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   201
             Inputs Spy (Card A) \<lbrace>Agent B, Nonce Na, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   202
                                   Nonce (Pairkey(A,B)),
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   203
                                   Crypt (shrK A) \<lbrace>Nonce (Pairkey(A,B)), 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   204
                                                    Agent B\<rbrace>,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   205
                                   Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   206
                                   Crypt (crdK (Card A)) (Nonce Na)\<rbrace>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   207
               \<in> set evs10F \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   208
          \<Longrightarrow> Outpts (Card A) Spy \<lbrace>Agent B, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   209
                                   Key K, Crypt (pairK(A,B)) (Nonce Nb)\<rbrace>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   210
                 # evs10F \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   211
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   212
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   213
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   214
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   215
(*A TOWARDS B*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   216
(*having initiated with B is the only memory A relies on,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   217
  since the output doesn't mention B - lack of explicitness*) 
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   218
  | SR_U11: "\<lbrakk> evs11 \<in> srb;
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   219
             Says A Server \<lbrace>Agent A, Agent B\<rbrace> \<in> set evs11;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   220
             Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key K, Certificate\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   221
               \<in> set evs11 \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   222
          \<Longrightarrow> Says A B (Certificate) 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   223
                 # evs11 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   224
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   225
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   226
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   227
(*Both peers may leak by accident the session keys obtained from their
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   228
  cards*)
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   229
  | Oops1:
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   230
     "\<lbrakk> evsO1 \<in> srb;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   231
         Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, Cert1, Cert2\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   232
           \<in> set evsO1 \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   233
     \<Longrightarrow> Notes Spy \<lbrace>Key K, Nonce Nb, Agent A, Agent B\<rbrace> # evsO1 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   234
23746
a455e69c31cc Adapted to new inductive definition package.
berghofe
parents: 21588
diff changeset
   235
  | Oops2:
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   236
     "\<lbrakk> evsO2 \<in> srb;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   237
         Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key K, Certificate\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   238
           \<in> set evsO2 \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   239
    \<Longrightarrow> Notes Spy \<lbrace>Key K, Nonce Nb, Agent A, Agent B\<rbrace> # evsO2 \<in> srb"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   240
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   241
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   242
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   243
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   244
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   245
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   246
(*To solve Fake case when it doesn't involve analz - used to be condensed
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   247
  into Fake_parts_insert_tac*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   248
declare Fake_parts_insert_in_Un  [dest]
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   249
declare analz_into_parts [dest]
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   250
(*declare parts_insertI [intro]*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   251
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   252
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   253
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   254
(*General facts about message reception*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   255
lemma Gets_imp_Says: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   256
       "\<lbrakk> Gets B X \<in> set evs; evs \<in> srb \<rbrakk> \<Longrightarrow> \<exists> A. Says A B X \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   257
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   258
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   259
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   260
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   261
lemma Gets_imp_knows_Spy: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   262
     "\<lbrakk> Gets B X \<in> set evs; evs \<in> srb \<rbrakk>  \<Longrightarrow> X \<in> knows Spy evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   263
apply (blast dest!: Gets_imp_Says Says_imp_knows_Spy)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   264
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   265
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   266
lemma Gets_imp_knows_Spy_parts_Snd: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   267
     "\<lbrakk> Gets B \<lbrace>X, Y\<rbrace> \<in> set evs; evs \<in> srb \<rbrakk>  \<Longrightarrow> Y \<in> parts (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   268
apply (blast dest!: Gets_imp_Says Says_imp_knows_Spy parts.Inj parts.Snd)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   269
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   270
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   271
lemma Gets_imp_knows_Spy_analz_Snd: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   272
     "\<lbrakk> Gets B \<lbrace>X, Y\<rbrace> \<in> set evs; evs \<in> srb \<rbrakk>  \<Longrightarrow> Y \<in> analz (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   273
apply (blast dest!: Gets_imp_Says Says_imp_knows_Spy analz.Inj analz.Snd)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   274
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   275
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   276
(*end general facts*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   277
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   278
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   279
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   280
(*Begin lemmas on secure means, from Event.ML, proved for shouprubin. They help
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   281
  the simplifier, especially in analz_image_freshK*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   282
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   283
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   284
lemma Inputs_imp_knows_Spy_secureM_srb: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   285
      "\<lbrakk> Inputs Spy C X \<in> set evs; evs \<in> srb \<rbrakk> \<Longrightarrow> X \<in> knows Spy evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   286
apply (simp (no_asm_simp) add: Inputs_imp_knows_Spy_secureM)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   287
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   288
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   289
lemma knows_Spy_Inputs_secureM_srb_Spy: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   290
      "evs \<in>srb \<Longrightarrow> knows Spy (Inputs Spy C X # evs) = insert X (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   291
apply (simp (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   292
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   293
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   294
lemma knows_Spy_Inputs_secureM_srb: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   295
    "\<lbrakk> A \<noteq> Spy; evs \<in>srb \<rbrakk> \<Longrightarrow> knows Spy (Inputs A C X # evs) =  knows Spy evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   296
apply (simp (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   297
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   298
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   299
lemma knows_Spy_Outpts_secureM_srb_Spy: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   300
      "evs \<in>srb \<Longrightarrow> knows Spy (Outpts C Spy X # evs) = insert X (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   301
apply (simp (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   302
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   303
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   304
lemma knows_Spy_Outpts_secureM_srb: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   305
     "\<lbrakk> A \<noteq> Spy; evs \<in>srb \<rbrakk> \<Longrightarrow> knows Spy (Outpts C A X # evs) =  knows Spy evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   306
apply (simp (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   307
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   308
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   309
(*End lemmas on secure means for shouprubin*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   310
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   311
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   312
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   313
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   314
(*BEGIN technical lemmas - evolution of forwarding lemmas*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   315
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   316
(*If an honest agent uses a smart card, then the card is his/her own, is
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   317
  not stolen, and the agent has received suitable data to feed the card. 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   318
  In other words, these are guarantees that an honest agent can only use 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   319
  his/her own card, and must use it correctly.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   320
  On the contrary, the spy can "Inputs" any cloned cards also by the Fake rule.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   321
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   322
  Instead of Auto_tac, proofs here used to asm-simplify and then force-tac.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   323
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   324
lemma Inputs_A_Card_3: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   325
    "\<lbrakk> Inputs A C (Agent A) \<in> set evs; A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   326
     \<Longrightarrow> legalUse(C) \<and> C = (Card A) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   327
      (\<exists> Pk Certificate. Gets A \<lbrace>Pk, Certificate\<rbrace> \<in> set evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   328
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   329
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   330
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   331
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   332
lemma Inputs_B_Card_6: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   333
     "\<lbrakk> Inputs B C \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs; B \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   334
      \<Longrightarrow> legalUse(C) \<and> C = (Card B) \<and> Gets B \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   335
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   336
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   337
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   338
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   339
lemma Inputs_A_Card_9: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   340
     "\<lbrakk> Inputs A C \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce Pk,   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   341
                                           Cert1, Cert2, Cert3\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   342
         A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   343
  \<Longrightarrow> legalUse(C) \<and> C = (Card A) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   344
      Gets A \<lbrace>Nonce Pk, Cert1\<rbrace> \<in> set evs     \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   345
      Outpts (Card A) A \<lbrace>Nonce Na, Cert3\<rbrace> \<in> set evs        \<and>   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   346
      Gets A \<lbrace>Nonce Nb, Cert2\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   347
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   348
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   349
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   350
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   351
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   352
(*The two occurrences of A in the Outpts event don't match SR_U4Fake, where
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   353
  A cannot be the Spy. Hence the card is legally usable by rule SR_U4*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   354
lemma Outpts_A_Card_4: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   355
     "\<lbrakk> Outpts C A \<lbrace>Nonce Na, (Crypt (crdK (Card A)) (Nonce Na))\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   356
         evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   357
     \<Longrightarrow> legalUse(C) \<and> C = (Card A) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   358
         Inputs A (Card A) (Agent A) \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   359
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   360
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   361
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   362
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   363
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   364
(*First certificate is made explicit so that a comment similar to the previous
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   365
  applies. This also provides Na to the Inputs event in the conclusion*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   366
lemma Outpts_B_Card_7: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   367
      "\<lbrakk> Outpts C B \<lbrace>Nonce Nb, Agent A, Key K,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   368
                      Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   369
                      Cert2\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   370
         evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   371
     \<Longrightarrow> legalUse(C) \<and> C = (Card B) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   372
         Inputs B (Card B) \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   373
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   374
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   375
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   376
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   377
lemma Outpts_A_Card_10: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   378
     "\<lbrakk> Outpts C A \<lbrace>Agent B, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   379
                    Key K, (Crypt (pairK(A,B)) (Nonce Nb))\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   380
         evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   381
     \<Longrightarrow> legalUse(C) \<and> C = (Card A) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   382
         (\<exists> Na Ver1 Ver2 Ver3.  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   383
       Inputs A (Card A) \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce (Pairkey(A,B)),  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   384
                              Ver1, Ver2, Ver3\<rbrace> \<in> set evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   385
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   386
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   387
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   388
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   389
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   390
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   391
(*
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   392
Contrarily to original version, A doesn't need to check the form of the 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   393
certificate to learn that her peer is B. The goal is available to A.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   394
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   395
lemma Outpts_A_Card_10_imp_Inputs: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   396
     "\<lbrakk> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key K, Certificate\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   397
          \<in> set evs; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   398
     \<Longrightarrow> (\<exists> Na Ver1 Ver2 Ver3.  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   399
       Inputs A (Card A) \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce (Pairkey(A,B)),  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   400
                              Ver1, Ver2, Ver3\<rbrace> \<in> set evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   401
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   402
apply simp_all
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   403
apply blast+
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   404
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   405
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   406
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   407
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   408
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   409
(*Weaker version: if the agent can't check the forms of the verifiers, then
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   410
  the agent must not be the spy so as to solve SR_U4Fake. The verifier must be
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   411
  recognised as some cyphertex in order to distinguish from case SR_U7, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   412
  concerning B's output, which also begins with a nonce.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   413
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   414
lemma Outpts_honest_A_Card_4: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   415
     "\<lbrakk> Outpts C A \<lbrace>Nonce Na, Crypt K X\<rbrace> \<in>set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   416
         A \<noteq> Spy;  evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   417
     \<Longrightarrow> legalUse(C) \<and> C = (Card A) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   418
         Inputs A (Card A) (Agent A) \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   419
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   420
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   421
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   422
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   423
(*alternative formulation of same theorem
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   424
Goal "\<lbrakk> Outpts C A \<lbrace>Nonce Na, Certificate\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   425
         \<forall> p q. Certificate \<noteq> \<lbrace>p, q\<rbrace>;    
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   426
         A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   427
     \<Longrightarrow> legalUse(C) \<and> C = (Card A) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   428
         Inputs A (Card A) (Agent A) \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   429
same proof
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   430
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   431
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   432
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   433
lemma Outpts_honest_B_Card_7: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   434
    "\<lbrakk> Outpts C B \<lbrace>Nonce Nb, Agent A, Key K, Cert1, Cert2\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   435
       B \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   436
   \<Longrightarrow> legalUse(C) \<and> C = (Card B) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   437
       (\<exists> Na. Inputs B (Card B) \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   438
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   439
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   440
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   441
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   442
lemma Outpts_honest_A_Card_10: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   443
     "\<lbrakk> Outpts C A \<lbrace>Agent B, Nonce Nb, Key K, Certificate\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   444
         A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   445
     \<Longrightarrow> legalUse (C) \<and> C = (Card A) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   446
         (\<exists> Na Pk Ver1 Ver2 Ver3.  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   447
          Inputs A (Card A) \<lbrace>Agent B, Nonce Na, Nonce Nb, Pk,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   448
                              Ver1, Ver2, Ver3\<rbrace> \<in> set evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   449
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   450
apply simp_all
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   451
apply blast+
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   452
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   453
(*-END-*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   454
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   455
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   456
(*Even weaker versions: if the agent can't check the forms of the verifiers
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   457
  and the agent may be the spy, then we must know what card the agent
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   458
  is getting the output from. 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   459
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   460
lemma Outpts_which_Card_4: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   461
    "\<lbrakk> Outpts (Card A) A \<lbrace>Nonce Na, Crypt K X\<rbrace> \<in> set evs; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   462
    \<Longrightarrow> Inputs A (Card A) (Agent A) \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   463
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   464
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   465
apply clarify
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   466
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   467
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   468
lemma Outpts_which_Card_7: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   469
  "\<lbrakk> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, Cert1, Cert2\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   470
       \<in> set evs;  evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   471
     \<Longrightarrow> \<exists> Na. Inputs B (Card B) \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   472
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   473
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   474
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   475
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   476
(*This goal is now available - in the sense of Goal Availability*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   477
lemma Outpts_which_Card_10: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   478
    "\<lbrakk> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key K, Certificate \<rbrace> \<in> set evs;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   479
       evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   480
    \<Longrightarrow> \<exists> Na. Inputs A (Card A) \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce (Pairkey(A,B)), 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   481
                            Crypt (shrK A) \<lbrace>Nonce (Pairkey(A,B)), Agent B\<rbrace>,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   482
                            Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   483
                            Crypt (crdK (Card A)) (Nonce Na) \<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   484
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   485
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   486
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   487
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   488
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   489
(*Lemmas on the form of outputs*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   490
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   491
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   492
(*A needs to check that the verifier is a cipher for it to come from SR_U4
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   493
  otherwise it could come from SR_U7 *)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   494
lemma Outpts_A_Card_form_4: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   495
  "\<lbrakk> Outpts (Card A) A \<lbrace>Nonce Na, Certificate\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   496
         \<forall> p q. Certificate \<noteq> \<lbrace>p, q\<rbrace>; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   497
     \<Longrightarrow> Certificate = (Crypt (crdK (Card A)) (Nonce Na))"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   498
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   499
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   500
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   501
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   502
lemma Outpts_B_Card_form_7: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   503
   "\<lbrakk> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, Cert1, Cert2\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   504
        \<in> set evs; evs \<in> srb \<rbrakk>          
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   505
      \<Longrightarrow> \<exists> Na.    
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   506
          K = sesK(Nb,pairK(A,B)) \<and>                       
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   507
          Cert1 = (Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   508
          Cert2 = (Crypt (pairK(A,B)) (Nonce Nb))"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   509
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   510
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   511
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   512
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   513
lemma Outpts_A_Card_form_10: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   514
   "\<lbrakk> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key K, Certificate\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   515
        \<in> set evs; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   516
      \<Longrightarrow> K = sesK(Nb,pairK(A,B)) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   517
          Certificate = (Crypt (pairK(A,B)) (Nonce Nb))"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   518
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   519
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   520
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   521
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   522
lemma Outpts_A_Card_form_bis: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   523
  "\<lbrakk> Outpts (Card A') A' \<lbrace>Agent B', Nonce Nb', Key (sesK(Nb,pairK(A,B))), 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   524
     Certificate\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   525
         evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   526
      \<Longrightarrow> A' = A \<and> B' = B \<and> Nb = Nb' \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   527
          Certificate = (Crypt (pairK(A,B)) (Nonce Nb))"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   528
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   529
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   530
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   531
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   532
(*\<dots> and Inputs *)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   533
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   534
lemma Inputs_A_Card_form_9: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   535
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   536
     "\<lbrakk> Inputs A (Card A) \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce Pk,   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   537
                             Cert1, Cert2, Cert3\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   538
         evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   539
  \<Longrightarrow>    Cert3 = Crypt (crdK (Card A)) (Nonce Na)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   540
apply (erule rev_mp)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   541
apply (erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   542
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   543
(*Fake*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   544
apply force
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   545
(*SR_U9*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   546
apply (blast dest!: Outpts_A_Card_form_4)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   547
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   548
(* Pk, Cert1, Cert2 cannot be made explicit because they traversed the network in the clear *)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   549
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   550
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   551
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   552
(*General guarantees on Inputs and Outpts*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   553
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   554
(*for any agents*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   555
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   556
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   557
lemma Inputs_Card_legalUse: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   558
  "\<lbrakk> Inputs A (Card A) X \<in> set evs; evs \<in> srb \<rbrakk> \<Longrightarrow> legalUse(Card A)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   559
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   560
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   561
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   562
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   563
lemma Outpts_Card_legalUse: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   564
  "\<lbrakk> Outpts (Card A) A X \<in> set evs; evs \<in> srb \<rbrakk> \<Longrightarrow> legalUse(Card A)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   565
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   566
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   567
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   568
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   569
(*for honest agents*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   570
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   571
lemma Inputs_Card: "\<lbrakk> Inputs A C X \<in> set evs; A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   572
      \<Longrightarrow> C = (Card A) \<and> legalUse(C)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   573
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   574
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   575
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   576
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   577
lemma Outpts_Card: "\<lbrakk> Outpts C A X \<in> set evs; A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   578
      \<Longrightarrow> C = (Card A) \<and> legalUse(C)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   579
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   580
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   581
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   582
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   583
lemma Inputs_Outpts_Card: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   584
     "\<lbrakk> Inputs A C X \<in> set evs \<or> Outpts C A Y \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   585
         A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   586
     \<Longrightarrow> C = (Card A) \<and> legalUse(Card A)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   587
apply (blast dest: Inputs_Card Outpts_Card)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   588
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   589
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   590
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   591
(*for the spy - they stress that the model behaves as it is meant to*) 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   592
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   593
(*The or version can be also proved directly.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   594
  It stresses that the spy may use either her own legally usable card or
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   595
  all the illegally usable cards.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   596
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   597
lemma Inputs_Card_Spy: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   598
  "\<lbrakk> Inputs Spy C X \<in> set evs \<or> Outpts C Spy X \<in> set evs; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   599
      \<Longrightarrow> C = (Card Spy) \<and> legalUse(Card Spy) \<or>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   600
          (\<exists> A. C = (Card A) \<and> illegalUse(Card A))"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   601
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   602
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   603
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   604
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   605
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   606
(*END technical lemmas*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   607
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   608
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   609
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   610
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   611
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   612
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   613
(*BEGIN unicity theorems: certain items uniquely identify a smart card's
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   614
                          output*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   615
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   616
(*A's card's first output: the nonce uniquely identifies the rest*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   617
lemma Outpts_A_Card_unique_nonce:
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   618
     "\<lbrakk> Outpts (Card A) A \<lbrace>Nonce Na, Crypt (crdK (Card A)) (Nonce Na)\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   619
           \<in> set evs;   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   620
         Outpts (Card A') A' \<lbrace>Nonce Na, Crypt (crdK (Card A')) (Nonce Na)\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   621
           \<in> set evs;   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   622
         evs \<in> srb \<rbrakk> \<Longrightarrow> A=A'"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   623
apply (erule rev_mp, erule rev_mp, erule srb.induct, simp_all)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   624
apply (fastsimp dest: Outpts_parts_used)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   625
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   626
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   627
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   628
(*B's card's output: the NONCE uniquely identifies the rest*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   629
lemma Outpts_B_Card_unique_nonce: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   630
     "\<lbrakk> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key SK, Cert1, Cert2\<rbrace> \<in> set evs;   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   631
      Outpts (Card B') B' \<lbrace>Nonce Nb, Agent A', Key SK', Cert1', Cert2'\<rbrace> \<in> set evs;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   632
       evs \<in> srb \<rbrakk> \<Longrightarrow> B=B' \<and> A=A' \<and> SK=SK' \<and> Cert1=Cert1' \<and> Cert2=Cert2'"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   633
apply (erule rev_mp, erule rev_mp, erule srb.induct, simp_all)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   634
apply (fastsimp dest: Outpts_parts_used)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   635
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   636
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   637
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   638
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   639
(*B's card's output: the SESKEY uniquely identifies the rest*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   640
lemma Outpts_B_Card_unique_key: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   641
     "\<lbrakk> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key SK, Cert1, Cert2\<rbrace> \<in> set evs;   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   642
      Outpts (Card B') B' \<lbrace>Nonce Nb', Agent A', Key SK, Cert1', Cert2'\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   643
       evs \<in> srb \<rbrakk> \<Longrightarrow> B=B' \<and> A=A' \<and> Nb=Nb' \<and> Cert1=Cert1' \<and> Cert2=Cert2'"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   644
apply (erule rev_mp, erule rev_mp, erule srb.induct, simp_all)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   645
apply (fastsimp dest: Outpts_parts_used)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   646
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   647
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   648
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   649
lemma Outpts_A_Card_unique_key: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   650
   "\<lbrakk> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key K, V\<rbrace> \<in> set evs;   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   651
      Outpts (Card A') A' \<lbrace>Agent B', Nonce Nb', Key K, V'\<rbrace> \<in> set evs;   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   652
         evs \<in> srb \<rbrakk> \<Longrightarrow> A=A' \<and> B=B' \<and> Nb=Nb' \<and> V=V'"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   653
apply (erule rev_mp, erule rev_mp, erule srb.induct, simp_all)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   654
apply (blast dest: Outpts_A_Card_form_bis)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   655
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   656
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   657
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   658
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   659
(*Revised unicity theorem - applies to both steps 4 and 7*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   660
lemma Outpts_A_Card_Unique: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   661
  "\<lbrakk> Outpts (Card A) A \<lbrace>Nonce Na, rest\<rbrace> \<in> set evs; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   662
     \<Longrightarrow> Unique (Outpts (Card A) A \<lbrace>Nonce Na, rest\<rbrace>) on evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   663
apply (erule rev_mp, erule srb.induct, simp_all add: Unique_def)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   664
apply (fastsimp dest: Outpts_parts_used)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   665
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   666
apply (fastsimp dest: Outpts_parts_used)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   667
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   668
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   669
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   670
(*can't prove the same on evs10 for it doesn't have a freshness assumption!*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   671
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   672
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   673
(*END unicity theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   674
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   675
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   676
(*BEGIN counterguarantees about spy's knowledge*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   677
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   678
(*on nonces*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   679
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   680
lemma Spy_knows_Na: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   681
      "\<lbrakk> Says A B \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   682
      \<Longrightarrow> Nonce Na \<in> analz (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   683
apply (blast dest!: Says_imp_knows_Spy [THEN analz.Inj, THEN analz.Snd])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   684
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   685
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   686
lemma Spy_knows_Nb: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   687
      "\<lbrakk> Says B A \<lbrace>Nonce Nb, Certificate\<rbrace> \<in> set evs; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   688
      \<Longrightarrow> Nonce Nb \<in> analz (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   689
apply (blast dest!: Says_imp_knows_Spy [THEN analz.Inj, THEN analz.Fst])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   690
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   691
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   692
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   693
(*on Pairkey*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   694
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   695
lemma Pairkey_Gets_analz_knows_Spy: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   696
      "\<lbrakk> Gets A \<lbrace>Nonce (Pairkey(A,B)), Certificate\<rbrace> \<in> set evs; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   697
      \<Longrightarrow> Nonce (Pairkey(A,B)) \<in> analz (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   698
apply (blast dest!: Gets_imp_knows_Spy [THEN analz.Inj])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   699
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   700
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   701
lemma Pairkey_Inputs_imp_Gets: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   702
     "\<lbrakk> Inputs A (Card A)             
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   703
           \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce (Pairkey(A,B)),     
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   704
             Cert1, Cert3, Cert2\<rbrace> \<in> set evs;           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   705
         A \<noteq> Spy; evs \<in> srb \<rbrakk>     
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   706
      \<Longrightarrow> Gets A \<lbrace>Nonce (Pairkey(A,B)), Cert1\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   707
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   708
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   709
apply force
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   710
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   711
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   712
lemma Pairkey_Inputs_analz_knows_Spy: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   713
     "\<lbrakk> Inputs A (Card A)             
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   714
           \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce (Pairkey(A,B)),     
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   715
             Cert1, Cert3, Cert2\<rbrace> \<in> set evs;           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   716
         evs \<in> srb \<rbrakk>     
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   717
     \<Longrightarrow> Nonce (Pairkey(A,B)) \<in> analz (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   718
apply (case_tac "A = Spy")
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   719
apply (fastsimp dest!: Inputs_imp_knows_Spy_secureM [THEN analz.Inj])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   720
apply (blast dest!: Pairkey_Inputs_imp_Gets [THEN Pairkey_Gets_analz_knows_Spy])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   721
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   722
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   723
(* This fails on base case because of XOR properties.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   724
lemma Pairkey_authentic:
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   725
  "\<lbrakk> Nonce (Pairkey(A,B)) \<in> parts (knows Spy evs);
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   726
     Card A \<notin> cloned; evs \<in> sr \<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   727
 \<Longrightarrow> \<exists> cert. Says Server A \<lbrace>Nonce (Pairkey(A,B)), Cert\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   728
apply (erule rev_mp)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   729
apply (erule sr.induct, simp_all)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   730
apply clarify
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   731
oops
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   732
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   733
 1. \<And>x a b.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   734
       \<lbrakk>Card A \<notin> cloned; Pairkey (A, B) = Pairkey (a, b); Card a \<in> cloned;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   735
        Card b \<in> cloned\<rbrakk>
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   736
       \<Longrightarrow> False
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   737
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   738
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   739
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   740
(*END counterguarantees on spy's knowledge*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   741
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   742
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   743
(*BEGIN rewrite rules for parts operator*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   744
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   745
declare shrK_disj_sesK [THEN not_sym, iff] 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   746
declare pin_disj_sesK [THEN not_sym, iff]
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   747
declare crdK_disj_sesK [THEN not_sym, iff]
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   748
declare pairK_disj_sesK [THEN not_sym, iff]
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   749
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   750
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   751
ML
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   752
{*
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   753
val Outpts_B_Card_form_7 = thm "Outpts_B_Card_form_7"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   754
val Outpts_A_Card_form_4 = thm "Outpts_A_Card_form_4"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   755
val Outpts_A_Card_form_10 = thm "Outpts_A_Card_form_10"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   756
val Gets_imp_knows_Spy = thm "Gets_imp_knows_Spy"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   757
val Outpts_B_Card_form_7 = thm "Outpts_B_Card_form_7"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   758
val Gets_imp_knows_Spy_parts_Snd = thm "Gets_imp_knows_Spy_parts_Snd"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   759
val Gets_imp_knows_Spy_analz_Snd = thm "Gets_imp_knows_Spy_analz_Snd"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   760
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   761
val prepare_tac = 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   762
 (*SR_U8*)   forward_tac [Outpts_B_Card_form_7] 14 THEN
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   763
 (*SR_U8*)   Clarify_tac 15 THEN
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   764
 (*SR_U9*)   forward_tac [Outpts_A_Card_form_4] 16 THEN 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   765
 (*SR_U11*)  forward_tac [Outpts_A_Card_form_10] 21 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   766
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   767
val parts_prepare_tac = 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   768
           prepare_tac THEN
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   769
 (*SR_U9*)   dresolve_tac [Gets_imp_knows_Spy_parts_Snd] 18 THEN 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   770
 (*SR_U9*)   dresolve_tac [Gets_imp_knows_Spy_parts_Snd] 19 THEN 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   771
 (*Oops1*) dresolve_tac [Outpts_B_Card_form_7] 25    THEN               
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   772
 (*Oops2*) dresolve_tac [Outpts_A_Card_form_10] 27 THEN                
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   773
 (*Base*)  Force_tac 1
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   774
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   775
val analz_prepare_tac = 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   776
         prepare_tac THEN
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   777
         dtac (Gets_imp_knows_Spy_analz_Snd) 18 THEN 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   778
 (*SR_U9*) dtac (Gets_imp_knows_Spy_analz_Snd) 19 THEN 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   779
         REPEAT_FIRST (eresolve_tac [asm_rl, conjE] ORELSE' hyp_subst_tac)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   780
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   781
*}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   782
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   783
method_setup prepare = {*
21588
cd0dc678a205 simplified method setup;
wenzelm
parents: 20048
diff changeset
   784
    Method.no_args (Method.SIMPLE_METHOD prepare_tac) *}
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   785
  "to launch a few simple facts that'll help the simplifier"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   786
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   787
method_setup parts_prepare = {*
21588
cd0dc678a205 simplified method setup;
wenzelm
parents: 20048
diff changeset
   788
    Method.no_args (Method.SIMPLE_METHOD parts_prepare_tac) *}
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   789
  "additional facts to reason about parts"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   790
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   791
method_setup analz_prepare = {*
21588
cd0dc678a205 simplified method setup;
wenzelm
parents: 20048
diff changeset
   792
    Method.no_args (Method.SIMPLE_METHOD analz_prepare_tac) *}
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   793
  "additional facts to reason about analz"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   794
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   795
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   796
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   797
lemma Spy_parts_keys [simp]: "evs \<in> srb \<Longrightarrow>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   798
  (Key (shrK P) \<in> parts (knows Spy evs)) = (Card P \<in> cloned) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   799
  (Key (pin P) \<in> parts (knows Spy evs)) = (P \<in> bad \<or> Card P \<in> cloned) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   800
  (Key (crdK C) \<in> parts (knows Spy evs)) = (C \<in> cloned) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   801
  (Key (pairK(A,B)) \<in> parts (knows Spy evs)) = (Card B \<in> cloned)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   802
apply (erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   803
apply parts_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   804
apply simp_all
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   805
apply (blast intro: parts_insertI)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   806
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   807
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   808
(*END rewrite rules for parts operator*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   809
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   810
(*BEGIN rewrite rules for analz operator*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   811
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   812
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   813
lemma Spy_analz_shrK[simp]: "evs \<in> srb \<Longrightarrow>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   814
  (Key (shrK P) \<in> analz (knows Spy evs)) = (Card P \<in> cloned)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   815
apply (auto dest!: Spy_knows_cloned)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   816
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   817
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   818
lemma Spy_analz_crdK[simp]: "evs \<in> srb \<Longrightarrow>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   819
  (Key (crdK C) \<in> analz (knows Spy evs)) = (C \<in> cloned)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   820
apply (auto dest!: Spy_knows_cloned)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   821
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   822
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   823
lemma Spy_analz_pairK[simp]: "evs \<in> srb \<Longrightarrow>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   824
  (Key (pairK(A,B)) \<in> analz (knows Spy evs)) = (Card B \<in> cloned)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   825
apply (auto dest!: Spy_knows_cloned)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   826
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   827
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   828
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   829
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   830
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   831
(*Because initState contains a set of nonces, this is needed for base case of
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   832
  analz_image_freshK*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   833
lemma analz_image_Key_Un_Nonce: "analz (Key`K \<union> Nonce`N) = Key`K \<union> Nonce`N"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   834
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   835
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   836
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   837
ML
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   838
{*
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   839
val knows_Spy_Inputs_secureM_srb_Spy = thm "knows_Spy_Inputs_secureM_srb_Spy"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   840
val knows_Spy_Outpts_secureM_srb_Spy = thm "knows_Spy_Outpts_secureM_srb_Spy"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   841
val shouprubin_assumes_securemeans = thm "shouprubin_assumes_securemeans"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   842
val analz_image_Key_Un_Nonce= thm "analz_image_Key_Un_Nonce"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   843
*}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   844
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   845
method_setup sc_analz_freshK = {*
20048
a7964311f1fb tactic/method simpset: maintain proper context;
wenzelm
parents: 18886
diff changeset
   846
    Method.ctxt_args (fn ctxt =>
21588
cd0dc678a205 simplified method setup;
wenzelm
parents: 20048
diff changeset
   847
     (Method.SIMPLE_METHOD
cd0dc678a205 simplified method setup;
wenzelm
parents: 20048
diff changeset
   848
      (EVERY [REPEAT_FIRST (resolve_tac [allI, ballI, impI]),
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   849
                          REPEAT_FIRST (rtac analz_image_freshK_lemma),
20048
a7964311f1fb tactic/method simpset: maintain proper context;
wenzelm
parents: 18886
diff changeset
   850
                          ALLGOALS (asm_simp_tac (Simplifier.context ctxt analz_image_freshK_ss
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   851
                                    addsimps [knows_Spy_Inputs_secureM_srb_Spy,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   852
                                              knows_Spy_Outpts_secureM_srb_Spy,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   853
                                              shouprubin_assumes_securemeans, 
20048
a7964311f1fb tactic/method simpset: maintain proper context;
wenzelm
parents: 18886
diff changeset
   854
                                              analz_image_Key_Un_Nonce]))]))) *}
18886
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   855
    "for proving the Session Key Compromise theorem for smartcard protocols"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   856
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   857
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   858
lemma analz_image_freshK [rule_format]: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   859
     "evs \<in> srb \<Longrightarrow>      \<forall> K KK.  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   860
          (Key K \<in> analz (Key`KK \<union> (knows Spy evs))) =  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   861
          (K \<in> KK \<or> Key K \<in> analz (knows Spy evs))"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   862
apply (erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   863
apply analz_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   864
apply sc_analz_freshK
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   865
apply spy_analz
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   866
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   867
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   868
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   869
lemma analz_insert_freshK: "evs \<in> srb \<Longrightarrow>   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   870
         Key K \<in> analz (insert (Key K') (knows Spy evs)) =  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   871
         (K = K' \<or> Key K \<in> analz (knows Spy evs))"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   872
apply (simp only: analz_image_freshK_simps analz_image_freshK)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   873
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   874
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   875
(*END rewrite rules for analz operator*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   876
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   877
(*BEGIN authenticity theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   878
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   879
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   880
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   881
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   882
lemma Na_Nb_certificate_authentic: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   883
     "\<lbrakk> Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace> \<in> parts (knows Spy evs);  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   884
         \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   885
         evs \<in> srb \<rbrakk>           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   886
     \<Longrightarrow> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key (sesK(Nb,pairK(A,B))),   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   887
                Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   888
                Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   889
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   890
apply parts_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   891
apply simp_all
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   892
(*Fake*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   893
apply spy_analz
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   894
(*SR_U7F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   895
apply clarify
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   896
(*SR_U8*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   897
apply clarify
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   898
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   899
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   900
lemma Nb_certificate_authentic:
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   901
      "\<lbrakk> Crypt (pairK(A,B)) (Nonce Nb) \<in> parts (knows Spy evs);  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   902
         B \<noteq> Spy; \<not>illegalUse(Card A); \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   903
         evs \<in> srb \<rbrakk>    
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   904
     \<Longrightarrow> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key (sesK(Nb,pairK(A,B))),  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   905
                             Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   906
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   907
apply parts_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   908
apply (case_tac [17] "Aa = Spy")
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   909
apply simp_all
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   910
(*Fake*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   911
apply spy_analz
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   912
(*SR_U7F, SR_U10F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   913
apply clarify+
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   914
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   915
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   916
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   917
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   918
(*Discovering the very origin of the Nb certificate...*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   919
lemma Outpts_A_Card_imp_pairK_parts: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   920
     "\<lbrakk> Outpts (Card A) A  \<lbrace>Agent B, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   921
                    Key K, Certificate\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   922
        evs \<in> srb \<rbrakk>   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   923
    \<Longrightarrow> \<exists> Na. Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace> \<in> parts (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   924
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   925
apply parts_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   926
apply simp_all
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   927
(*Fake*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   928
apply (blast dest: parts_insertI)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   929
(*SR_U7*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   930
apply force
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   931
(*SR_U7F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   932
apply force
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   933
(*SR_U8*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   934
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   935
(*SR_U10*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   936
apply (blast dest: Inputs_imp_knows_Spy_secureM_srb parts.Inj Inputs_A_Card_9 Gets_imp_knows_Spy elim: knows_Spy_partsEs)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   937
(*SR_U10F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   938
apply (blast dest: Inputs_imp_knows_Spy_secureM_srb [THEN parts.Inj] 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   939
                   Inputs_A_Card_9 Gets_imp_knows_Spy 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   940
             elim: knows_Spy_partsEs)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   941
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   942
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   943
               
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   944
lemma Nb_certificate_authentic_bis: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   945
     "\<lbrakk> Crypt (pairK(A,B)) (Nonce Nb) \<in> parts (knows Spy evs);  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   946
         B \<noteq> Spy; \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   947
         evs \<in> srb \<rbrakk>    
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   948
 \<Longrightarrow> \<exists> Na. Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key (sesK(Nb,pairK(A,B))),   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   949
                   Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   950
                   Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   951
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   952
apply parts_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   953
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   954
(*Fake*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   955
apply spy_analz
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   956
(*SR_U7*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   957
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   958
(*SR_U7F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   959
apply blast
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   960
(*SR_U8*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   961
apply force
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   962
(*SR_U10*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   963
apply (blast dest: Na_Nb_certificate_authentic Inputs_imp_knows_Spy_secureM_srb [THEN parts.Inj] elim: knows_Spy_partsEs)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   964
(*SR_U10F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   965
apply (blast dest: Na_Nb_certificate_authentic Inputs_imp_knows_Spy_secureM_srb [THEN parts.Inj] elim: knows_Spy_partsEs)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   966
(*SR_U11*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   967
apply (blast dest: Na_Nb_certificate_authentic Outpts_A_Card_imp_pairK_parts)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   968
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   969
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   970
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   971
lemma Pairkey_certificate_authentic: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   972
    "\<lbrakk> Crypt (shrK A) \<lbrace>Nonce Pk, Agent B\<rbrace> \<in> parts (knows Spy evs);    
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   973
         Card A \<notin> cloned; evs \<in> srb \<rbrakk>        
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   974
     \<Longrightarrow> Pk = Pairkey(A,B) \<and>              
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   975
         Says Server A \<lbrace>Nonce Pk,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   976
                        Crypt (shrK A) \<lbrace>Nonce Pk, Agent B\<rbrace>\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   977
           \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   978
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   979
apply parts_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   980
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   981
(*Fake*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   982
apply spy_analz
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   983
(*SR_U8*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   984
apply force
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   985
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   986
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   987
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   988
lemma sesK_authentic: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   989
     "\<lbrakk> Key (sesK(Nb,pairK(A,B))) \<in> parts (knows Spy evs);  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   990
         A \<noteq> Spy; B \<noteq> Spy; \<not>illegalUse(Card A); \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   991
         evs \<in> srb \<rbrakk>           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   992
      \<Longrightarrow> Notes Spy \<lbrace>Key (sesK(Nb,pairK(A,B))), Nonce Nb, Agent A, Agent B\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   993
           \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   994
apply (erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   995
apply parts_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   996
apply (simp_all)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   997
(*fake*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   998
apply spy_analz
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
   999
(*forge*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1000
apply (fastsimp dest: analz.Inj)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1001
(*SR_U7: used B\<noteq>Spy*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1002
(*SR_U7F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1003
apply clarify
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1004
(*SR_U10: used A\<noteq>Spy*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1005
(*SR_U10F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1006
apply clarify
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1007
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1008
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1009
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1010
(*END authenticity theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1011
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1012
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1013
(*BEGIN confidentiality theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1014
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1015
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1016
lemma Confidentiality: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1017
     "\<lbrakk> Notes Spy \<lbrace>Key (sesK(Nb,pairK(A,B))), Nonce Nb, Agent A, Agent B\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1018
           \<notin> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1019
        A \<noteq> Spy; B \<noteq> Spy; \<not>illegalUse(Card A); \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1020
        evs \<in> srb \<rbrakk>           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1021
      \<Longrightarrow> Key (sesK(Nb,pairK(A,B))) \<notin> analz (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1022
apply (blast intro: sesK_authentic)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1023
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1024
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1025
lemma Confidentiality_B: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1026
     "\<lbrakk> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, Cert1, Cert2\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1027
          \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1028
        Notes Spy \<lbrace>Key K, Nonce Nb, Agent A, Agent B\<rbrace> \<notin> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1029
        A \<noteq> Spy; B \<noteq> Spy; \<not>illegalUse(Card A); Card B \<notin> cloned; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1030
        evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1031
      \<Longrightarrow> Key K \<notin> analz (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1032
apply (erule rev_mp, erule rev_mp, erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1033
apply analz_prepare
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1034
apply (simp_all add: analz_insert_eq analz_insert_freshK pushes split_ifs)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1035
(*Fake*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1036
apply spy_analz
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1037
(*Forge*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1038
apply (rotate_tac 7)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1039
apply (drule parts.Inj)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1040
apply (fastsimp dest: Outpts_B_Card_form_7)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1041
(*SR_U7*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1042
apply (blast dest!: Outpts_B_Card_form_7)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1043
(*SR_U7F*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1044
apply clarify
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1045
apply (drule Outpts_parts_used)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1046
apply simp
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1047
(*faster than
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1048
  by (fast_tac (claset() addDs [Outpts_parts_used] addss (simpset())) 1)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1049
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1050
(*SR_U10*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1051
apply (fastsimp dest: Outpts_B_Card_form_7)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1052
(*SR_U10F - uses assumption Card A not cloned*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1053
apply clarify
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1054
apply (drule Outpts_B_Card_form_7, assumption)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1055
apply simp
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1056
(*Oops1*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1057
apply (blast dest!: Outpts_B_Card_form_7)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1058
(*Oops2*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1059
apply (blast dest!: Outpts_B_Card_form_7 Outpts_A_Card_form_10)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1060
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1061
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1062
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1063
(*END confidentiality theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1064
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1065
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1066
(*BEGIN authentication theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1067
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1068
lemma A_authenticates_B: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1069
     "\<lbrakk> Outpts (Card A) A  \<lbrace>Agent B, Nonce Nb, Key K, Certificate\<rbrace> \<in> set evs;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1070
        \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1071
        evs \<in> srb \<rbrakk>           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1072
 \<Longrightarrow> \<exists> Na. Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K,   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1073
                Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1074
                Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1075
apply (blast dest: Na_Nb_certificate_authentic Outpts_A_Card_form_10 Outpts_A_Card_imp_pairK_parts)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1076
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1077
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1078
lemma A_authenticates_B_Gets: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1079
     "\<lbrakk> Gets A \<lbrace>Nonce Nb, Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1080
           \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1081
         \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1082
         evs \<in> srb \<rbrakk>           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1083
    \<Longrightarrow> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key (sesK(Nb, pairK (A, B))),   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1084
                             Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1085
                             Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1086
apply (blast dest: Gets_imp_knows_Spy [THEN parts.Inj, THEN parts.Snd, THEN Na_Nb_certificate_authentic])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1087
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1088
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1089
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1090
lemma A_authenticates_B_bis: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1091
     "\<lbrakk> Outpts (Card A) A  \<lbrace>Agent B, Nonce Nb, Key K, Cert2\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1092
        \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1093
        evs \<in> srb \<rbrakk>           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1094
 \<Longrightarrow> \<exists> Cert1. Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, Cert1, Cert2\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1095
                \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1096
apply (blast dest: Na_Nb_certificate_authentic Outpts_A_Card_form_10 Outpts_A_Card_imp_pairK_parts)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1097
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1098
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1099
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1100
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1101
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1102
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1103
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1104
lemma B_authenticates_A: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1105
     "\<lbrakk> Gets B (Crypt (pairK(A,B)) (Nonce Nb)) \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1106
         B \<noteq> Spy; \<not>illegalUse(Card A); \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1107
         evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1108
      \<Longrightarrow> Outpts (Card A) A  \<lbrace>Agent B, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1109
         Key (sesK(Nb,pairK(A,B))), Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1110
apply (erule rev_mp)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1111
apply (erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1112
apply (simp_all (no_asm_simp))
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1113
apply (blast dest: Says_imp_knows_Spy [THEN parts.Inj] Nb_certificate_authentic)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1114
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1115
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1116
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1117
lemma B_authenticates_A_bis: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1118
     "\<lbrakk> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, Cert1, Cert2\<rbrace> \<in> set evs;
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1119
        Gets B (Cert2) \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1120
         B \<noteq> Spy; \<not>illegalUse(Card A); \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1121
         evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1122
      \<Longrightarrow> Outpts (Card A) A  \<lbrace>Agent B, Nonce Nb, Key K, Cert2\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1123
apply (blast dest: Outpts_B_Card_form_7 B_authenticates_A)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1124
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1125
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1126
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1127
(*END authentication theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1128
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1129
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1130
lemma Confidentiality_A: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1131
      "\<lbrakk> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1132
                       Key K, Certificate\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1133
         Notes Spy \<lbrace>Key K, Nonce Nb, Agent A, Agent B\<rbrace> \<notin> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1134
         A \<noteq> Spy; B \<noteq> Spy; \<not>illegalUse(Card A); \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1135
         evs \<in> srb \<rbrakk>           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1136
     \<Longrightarrow> Key K \<notin> analz (knows Spy evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1137
apply (drule A_authenticates_B)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1138
prefer 3
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1139
apply (erule exE)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1140
apply (drule Confidentiality_B)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1141
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1142
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1143
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1144
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1145
lemma Outpts_imp_knows_agents_secureM_srb: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1146
   "\<lbrakk> Outpts (Card A) A X \<in> set evs; evs \<in> srb \<rbrakk> \<Longrightarrow> X \<in> knows A evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1147
apply (simp (no_asm_simp) add: Outpts_imp_knows_agents_secureM)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1148
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1149
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1150
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1151
(*BEGIN key distribution theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1152
lemma A_keydist_to_B: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1153
   "\<lbrakk> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key K, Certificate\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1154
         \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1155
         evs \<in> srb \<rbrakk>           
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1156
     \<Longrightarrow> Key K \<in> analz (knows B evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1157
apply (drule A_authenticates_B)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1158
prefer 3
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1159
apply (erule exE)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1160
apply (rule Outpts_imp_knows_agents_secureM_srb [THEN analz.Inj, THEN analz.Snd, THEN analz.Snd, THEN analz.Fst])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1161
apply assumption+
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1162
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1163
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1164
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1165
lemma B_keydist_to_A: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1166
"\<lbrakk> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, Cert1, Cert2\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1167
   Gets B (Cert2) \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1168
   B \<noteq> Spy; \<not>illegalUse(Card A); \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1169
   evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1170
 \<Longrightarrow> Key K \<in> analz (knows A evs)"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1171
apply (frule Outpts_B_Card_form_7)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1172
apply assumption apply simp
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1173
apply (frule B_authenticates_A)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1174
apply (rule_tac [5] Outpts_imp_knows_agents_secureM_srb [THEN analz.Inj, THEN analz.Snd, THEN analz.Snd, THEN analz.Fst])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1175
apply simp+
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1176
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1177
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1178
(*END key distribution theorems*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1179
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1180
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1181
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1182
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1183
(*BEGIN further theorems about authenticity of verifiers - useful to cards,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1184
  and somewhat to agents *)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1185
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1186
(*MSG11
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1187
If B receives the verifier of msg11, then the verifier originated with msg7.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1188
This is clearly not available to B: B can't check the form of the verifier because he doesn't know pairK(A,B)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1189
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1190
lemma Nb_certificate_authentic_B: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1191
     "\<lbrakk> Gets B (Crypt (pairK(A,B)) (Nonce Nb)) \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1192
        B \<noteq> Spy; \<not>illegalUse(Card B); 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1193
        evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1194
     \<Longrightarrow> \<exists> Na. 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1195
            Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key (sesK(Nb,pairK(A,B))),   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1196
                Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1197
                Crypt (pairK(A,B)) (Nonce Nb)\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1198
apply (blast dest: Gets_imp_knows_Spy [THEN parts.Inj, THEN Nb_certificate_authentic_bis])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1199
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1200
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1201
(*MSG10
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1202
If A obtains the verifier of msg10, then the verifier originated with msg7:
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1203
A_authenticates_B. It is useful to A, who can check the form of the 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1204
verifier by application of Outpts_A_Card_form_10.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1205
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1206
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1207
(*MSG9
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1208
The first verifier verifies the Pairkey to the card: since it's encrypted
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1209
under Ka, it must come from the server (if A's card is not cloned).
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1210
The second verifier verifies both nonces, since it's encrypted under the
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1211
pairK, it must originate with B's card  (if A and B's cards not cloned).
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1212
The third verifier verifies Na: since it's encrytped under the card's key,
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1213
it originated with the card; so the card does not need to save Na
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1214
in the first place and do a comparison now: it just verifies Na through the
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1215
verifier. Three theorems related to these three statements.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1216
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1217
Recall that a card can check the form of the verifiers (can decrypt them),
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1218
while an agent in general cannot, if not provided with a suitable theorem.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1219
*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1220
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1221
(*Card A can't reckon the pairkey - we need to guarantee its integrity!*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1222
lemma Pairkey_certificate_authentic_A_Card: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1223
     "\<lbrakk> Inputs A (Card A)   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1224
             \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce Pk, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1225
               Crypt (shrK A) \<lbrace>Nonce Pk, Agent B\<rbrace>,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1226
               Cert2, Cert3\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1227
         A \<noteq> Spy; Card A \<notin> cloned; evs \<in> srb \<rbrakk>   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1228
     \<Longrightarrow> Pk = Pairkey(A,B) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1229
         Says Server A \<lbrace>Nonce (Pairkey(A,B)),  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1230
                  Crypt (shrK A) \<lbrace>Nonce (Pairkey(A,B)), Agent B\<rbrace>\<rbrace>   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1231
           \<in> set evs "
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1232
apply (blast dest: Inputs_A_Card_9 Gets_imp_knows_Spy [THEN parts.Inj, THEN parts.Snd] Pairkey_certificate_authentic)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1233
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1234
(*the second conjunct of the thesis might be regarded as a form of integrity 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1235
  in the sense of Neuman-Ts'o*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1236
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1237
lemma Na_Nb_certificate_authentic_A_Card: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1238
      "\<lbrakk> Inputs A (Card A)   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1239
             \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce Pk, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1240
          Cert1, Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, Cert3\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1241
      A \<noteq> Spy; \<not>illegalUse(Card B); evs \<in> srb \<rbrakk> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1242
   \<Longrightarrow> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key (sesK(Nb, pairK (A, B))),    
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1243
                             Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1244
                             Crypt (pairK(A,B)) (Nonce Nb)\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1245
           \<in> set evs "
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1246
apply (frule Inputs_A_Card_9)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1247
apply assumption+
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1248
apply (blast dest: Inputs_A_Card_9 Gets_imp_knows_Spy [THEN parts.Inj, THEN parts.Snd, THEN Na_Nb_certificate_authentic])
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1249
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1250
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1251
lemma Na_authentic_A_Card: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1252
     "\<lbrakk> Inputs A (Card A)   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1253
             \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce Pk, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1254
                Cert1, Cert2, Cert3\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1255
         A \<noteq> Spy; evs \<in> srb \<rbrakk>   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1256
     \<Longrightarrow> Outpts (Card A) A \<lbrace>Nonce Na, Cert3\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1257
           \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1258
apply (blast dest: Inputs_A_Card_9)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1259
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1260
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1261
(* These three theorems for Card A can be put together trivially.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1262
They are separated to highlight the different requirements on agents
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1263
and their cards.*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1264
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1265
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1266
lemma Inputs_A_Card_9_authentic: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1267
  "\<lbrakk> Inputs A (Card A)   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1268
             \<lbrace>Agent B, Nonce Na, Nonce Nb, Nonce Pk, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1269
               Crypt (shrK A) \<lbrace>Nonce Pk, Agent B\<rbrace>,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1270
               Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>, Cert3\<rbrace> \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1271
    A \<noteq> Spy; Card A \<notin> cloned; \<not>illegalUse(Card B); evs \<in> srb \<rbrakk>   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1272
    \<Longrightarrow>  Says Server A \<lbrace>Nonce Pk, Crypt (shrK A) \<lbrace>Nonce Pk, Agent B\<rbrace>\<rbrace>   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1273
           \<in> set evs  \<and> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1274
       Outpts (Card B) B \<lbrace>Nonce Nb, Agent A,  Key (sesK(Nb, pairK (A, B))),    
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1275
                             Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1276
                             Crypt (pairK(A,B)) (Nonce Nb)\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1277
           \<in> set evs  \<and> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1278
         Outpts (Card A) A \<lbrace>Nonce Na, Cert3\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1279
           \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1280
apply (blast dest: Inputs_A_Card_9 Na_Nb_certificate_authentic Gets_imp_knows_Spy [THEN parts.Inj, THEN parts.Snd] Pairkey_certificate_authentic)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1281
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1282
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1283
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1284
(*MSG8
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1285
Nothing to prove because the message is a cleartext that comes from the 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1286
network*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1287
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1288
(*Other messages: nothing to prove because the verifiers involved are new*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1289
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1290
(*END further theorems about authenticity of verifiers*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1291
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1292
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1293
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1294
(* BEGIN trivial guarantees on outputs for agents *)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1295
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1296
(*MSG4*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1297
lemma SR_U4_imp: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1298
     "\<lbrakk> Outpts (Card A) A \<lbrace>Nonce Na, Crypt (crdK (Card A)) (Nonce Na)\<rbrace> 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1299
           \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1300
         A \<noteq> Spy; evs \<in> srb \<rbrakk>                 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1301
     \<Longrightarrow> \<exists> Pk V. Gets A \<lbrace>Pk, V\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1302
apply (blast dest: Outpts_A_Card_4 Inputs_A_Card_3)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1303
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1304
(*weak: could strengthen the model adding verifier for the Pairkey to msg3*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1305
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1306
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1307
(*MSG7*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1308
lemma SR_U7_imp: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1309
     "\<lbrakk> Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1310
                      Crypt (pairK(A,B)) \<lbrace>Nonce Na, Nonce Nb\<rbrace>,  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1311
                      Cert2\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1312
         B \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1313
     \<Longrightarrow> Gets B \<lbrace>Agent A, Nonce Na\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1314
apply (blast dest: Outpts_B_Card_7 Inputs_B_Card_6)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1315
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1316
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1317
(*MSG10*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1318
lemma SR_U10_imp: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1319
     "\<lbrakk> Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1320
                           Key K, Crypt (pairK(A,B)) (Nonce Nb)\<rbrace>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1321
         \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1322
        A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1323
     \<Longrightarrow> \<exists> Cert1 Cert2.  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1324
                   Gets A \<lbrace>Nonce (Pairkey (A, B)), Cert1\<rbrace> \<in> set evs \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1325
                   Gets A \<lbrace>Nonce Nb, Cert2\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1326
apply (blast dest: Outpts_A_Card_10 Inputs_A_Card_9)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1327
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1328
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1329
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1330
(*END trivial guarantees on outputs for agents*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1331
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1332
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1333
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1334
(*INTEGRITY*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1335
lemma Outpts_Server_not_evs: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1336
      "evs \<in> srb \<Longrightarrow> Outpts (Card Server) P X \<notin> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1337
apply (erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1338
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1339
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1340
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1341
text{*@{term step2_integrity} also is a reliability theorem*}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1342
lemma Says_Server_message_form: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1343
     "\<lbrakk> Says Server A \<lbrace>Pk, Certificate\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1344
         evs \<in> srb \<rbrakk>                   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1345
     \<Longrightarrow> \<exists> B. Pk = Nonce (Pairkey(A,B)) \<and>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1346
         Certificate = Crypt (shrK A) \<lbrace>Nonce (Pairkey(A,B)), Agent B\<rbrace>"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1347
apply (erule rev_mp)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1348
apply (erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1349
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1350
apply (blast dest!: Outpts_Server_not_evs)+
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1351
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1352
(*cannot be made useful to A in form of a Gets event*)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1353
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1354
text{*
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1355
  step4integrity is @{term Outpts_A_Card_form_4}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1356
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1357
  step7integrity is @{term Outpts_B_Card_form_7}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1358
*}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1359
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1360
lemma step8_integrity: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1361
     "\<lbrakk> Says B A \<lbrace>Nonce Nb, Certificate\<rbrace> \<in> set evs;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1362
         B \<noteq> Server; B \<noteq> Spy; evs \<in> srb \<rbrakk>                   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1363
     \<Longrightarrow> \<exists> Cert2 K.   
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1364
    Outpts (Card B) B \<lbrace>Nonce Nb, Agent A, Key K, Certificate, Cert2\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1365
apply (erule rev_mp)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1366
apply (erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1367
prefer 18 apply (fastsimp dest: Outpts_A_Card_form_10)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1368
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1369
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1370
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1371
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1372
text{*  step9integrity is @{term Inputs_A_Card_form_9}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1373
        step10integrity is @{term Outpts_A_Card_form_10}.
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1374
*}
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1375
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1376
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1377
lemma step11_integrity: 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1378
     "\<lbrakk> Says A B (Certificate) \<in> set evs; 
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1379
         \<forall> p q. Certificate \<noteq> \<lbrace>p, q\<rbrace>;  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1380
         A \<noteq> Spy; evs \<in> srb \<rbrakk>  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1381
     \<Longrightarrow> \<exists> K Nb.  
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1382
      Outpts (Card A) A \<lbrace>Agent B, Nonce Nb, Key K, Certificate\<rbrace> \<in> set evs"
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1383
apply (erule rev_mp)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1384
apply (erule srb.induct)
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1385
apply auto
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1386
done
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1387
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1388
end
9f27383426db new and updated protocol proofs by Giamp Bella
paulson
parents:
diff changeset
  1389