# HG changeset patch # User paulson # Date 1666623486 -3600 # Node ID 943f99825f397168b8663fb4909710067e23186f # Parent 3ace8ac64f20f4ef6a82abae6bb8cfe8bceb0a54 Replaced some ugly legacy proofs diff -r 3ace8ac64f20 -r 943f99825f39 src/HOL/Auth/NS_Public.thy --- a/src/HOL/Auth/NS_Public.thy Sat Oct 22 21:43:26 2022 +0200 +++ b/src/HOL/Auth/NS_Public.thy Mon Oct 24 15:58:06 2022 +0100 @@ -63,11 +63,11 @@ text \It is impossible to re-use a nonce in both {term NS1} and {term NS2}, provided the nonce is secret. (Honest users generate fresh nonces.)\ -lemma no_nonce_NS1_NS2 [rule_format]: - "evs \ ns_public - \ Crypt (pubEK C) \NA', Nonce NA, Agent D\ \ parts (spies evs) \ - Crypt (pubEK B) \Nonce NA, Agent A\ \ parts (spies evs) \ - Nonce NA \ analz (spies evs)" +lemma no_nonce_NS1_NS2: + "\evs \ ns_public; + Crypt (pubEK C) \NA', Nonce NA, Agent D\ \ parts (spies evs); + Crypt (pubEK B) \Nonce NA, Agent A\ \ parts (spies evs)\ + \ Nonce NA \ analz (spies evs)" by (induct rule: ns_public.induct) (auto intro: analz_insertI) @@ -107,12 +107,13 @@ text \Authentication for {term A}: if she receives message 2 and has used {term NA} to start a run, then {term B} has sent message 2.\ -lemma A_trusts_NS2_lemma [rule_format]: - "\A \ bad; B \ bad; evs \ ns_public\ - \ Crypt (pubEK A) \Nonce NA, Nonce NB, Agent B\ \ parts (spies evs) \ - Says A B (Crypt(pubEK B) \Nonce NA, Agent A\) \ set evs \ - Says B A (Crypt(pubEK A) \Nonce NA, Nonce NB, Agent B\) \ set evs" - by (erule ns_public.induct) (auto dest: Spy_not_see_NA unique_NA) +lemma A_trusts_NS2_lemma: + "\evs \ ns_public; + Crypt (pubEK A) \Nonce NA, Nonce NB, Agent B\ \ parts (spies evs); + Says A B (Crypt(pubEK B) \Nonce NA, Agent A\) \ set evs; + A \ bad; B \ bad\ + \ Says B A (Crypt(pubEK A) \Nonce NA, Nonce NB, Agent B\) \ set evs" + by (induct rule: ns_public.induct) (auto dest: Spy_not_see_NA unique_NA) theorem A_trusts_NS2: "\Says A B (Crypt(pubEK B) \Nonce NA, Agent A\) \ set evs; @@ -123,12 +124,12 @@ text \If the encrypted message appears then it originated with Alice in {term NS1}\ -lemma B_trusts_NS1 [rule_format]: - "evs \ ns_public - \ Crypt (pubEK B) \Nonce NA, Agent A\ \ parts (spies evs) \ - Nonce NA \ analz (spies evs) \ - Says A B (Crypt (pubEK B) \Nonce NA, Agent A\) \ set evs" - by (induction evs rule: ns_public.induct) (use analz_insertI in auto) +lemma B_trusts_NS1: + "\evs \ ns_public; + Crypt (pubEK B) \Nonce NA, Agent A\ \ parts (spies evs); + Nonce NA \ analz (spies evs)\ + \ Says A B (Crypt (pubEK B) \Nonce NA, Agent A\) \ set evs" + by (induct evs rule: ns_public.induct) (use analz_insertI in \auto split: if_split_asm\) subsection \Authenticity properties obtained from {term NS2}\ @@ -165,7 +166,7 @@ text \Authentication for {term B}: if he receives message 3 and has used {term NB} in message 2, then {term A} has sent message 3.\ -lemma B_trusts_NS3_lemma [rule_format]: +lemma B_trusts_NS3_lemma: "\evs \ ns_public; Crypt (pubEK B) (Nonce NB) \ parts (spies evs); Says B A (Crypt (pubEK A) \Nonce NA, Nonce NB, Agent B\) \ set evs; diff -r 3ace8ac64f20 -r 943f99825f39 src/HOL/Auth/NS_Public_Bad.thy --- a/src/HOL/Auth/NS_Public_Bad.thy Sat Oct 22 21:43:26 2022 +0200 +++ b/src/HOL/Auth/NS_Public_Bad.thy Mon Oct 24 15:58:06 2022 +0100 @@ -63,11 +63,11 @@ text \It is impossible to re-use a nonce in both {term NS1} and {term NS2}, provided the nonce is secret. (Honest users generate fresh nonces.)\ -lemma no_nonce_NS1_NS2 [rule_format]: - "evs \ ns_public - \ Crypt (pubEK C) \NA', Nonce NA\ \ parts (spies evs) \ - Crypt (pubEK B) \Nonce NA, Agent A\ \ parts (spies evs) \ - Nonce NA \ analz (spies evs)" +lemma no_nonce_NS1_NS2: + "\evs \ ns_public; + Crypt (pubEK C) \NA', Nonce NA\ \ parts (spies evs); + Crypt (pubEK B) \Nonce NA, Agent A\ \ parts (spies evs)\ + \ Nonce NA \ analz (spies evs)" by (induct rule: ns_public.induct) (auto intro: analz_insertI) @@ -107,12 +107,13 @@ text \Authentication for {term A}: if she receives message 2 and has used {term NA} to start a run, then {term B} has sent message 2.\ -lemma A_trusts_NS2_lemma [rule_format]: - "\A \ bad; B \ bad; evs \ ns_public\ - \ Crypt (pubEK A) \Nonce NA, Nonce NB\ \ parts (spies evs) \ - Says A B (Crypt(pubEK B) \Nonce NA, Agent A\) \ set evs \ - Says B A (Crypt(pubEK A) \Nonce NA, Nonce NB\) \ set evs" - by (erule ns_public.induct) (auto dest: Spy_not_see_NA unique_NA) +lemma A_trusts_NS2_lemma: + "\evs \ ns_public; + Crypt (pubEK A) \Nonce NA, Nonce NB\ \ parts (spies evs); + Says A B (Crypt(pubEK B) \Nonce NA, Agent A\) \ set evs; + A \ bad; B \ bad\ + \ Says B A (Crypt(pubEK A) \Nonce NA, Nonce NB\) \ set evs" + by (induct rule: ns_public.induct) (auto dest: Spy_not_see_NA unique_NA) theorem A_trusts_NS2: "\Says A B (Crypt(pubEK B) \Nonce NA, Agent A\) \ set evs; @@ -123,12 +124,12 @@ text \If the encrypted message appears then it originated with Alice in {term NS1}\ -lemma B_trusts_NS1 [rule_format]: - "evs \ ns_public - \ Crypt (pubEK B) \Nonce NA, Agent A\ \ parts (spies evs) \ - Nonce NA \ analz (spies evs) \ - Says A B (Crypt (pubEK B) \Nonce NA, Agent A\) \ set evs" - by (induction evs rule: ns_public.induct) (use analz_insertI in auto) +lemma B_trusts_NS1: + "\evs \ ns_public; + Crypt (pubEK B) \Nonce NA, Agent A\ \ parts (spies evs); + Nonce NA \ analz (spies evs)\ + \ Says A B (Crypt (pubEK B) \Nonce NA, Agent A\) \ set evs" + by (induct evs rule: ns_public.induct) (use analz_insertI in \auto split: if_split_asm\) subsection \Authenticity properties obtained from {term NS2}\ @@ -166,7 +167,7 @@ text \Authentication for {term B}: if he receives message 3 and has used {term NB} in message 2, then {term A} has sent message 3 (to somebody) \ -lemma B_trusts_NS3_lemma [rule_format]: +lemma B_trusts_NS3_lemma: "\evs \ ns_public; Crypt (pubEK B) (Nonce NB) \ parts (spies evs); Says B A (Crypt (pubEK A) \Nonce NA, Nonce NB\) \ set evs;