diff -r 6ff9bd353121 -r 4d68fbe6378b src/HOL/Auth/Shared.thy --- a/src/HOL/Auth/Shared.thy Fri Jan 17 11:50:09 1997 +0100 +++ b/src/HOL/Auth/Shared.thy Fri Jan 17 12:49:31 1997 +0100 @@ -8,13 +8,14 @@ Server keys; initial states of agents; new nonces and keys; function "sees" *) -Shared = Message + List + +Shared = Message + List + Finite + consts shrK :: agent => key (*symmetric keys*) rules - isSym_shrK "isSymKey (shrK A)" + (*ALL keys are symmetric*) + isSym_keys "isSymKey K" consts (*Initial states of agents -- parameter of the construction*) initState :: [agent set, agent] => msg set @@ -44,6 +45,23 @@ sees_Cons "sees lost A (ev#evs) = sees1 A ev Un sees lost A evs" +constdefs + (*Set of items that might be visible to somebody: complement of the set + of fresh items*) + used :: event list => msg set + "used evs == parts (UN lost B. sees lost B evs)" + + +rules + (*Unlike the corresponding property of nonces, this cannot be proved. + We have infinitely many agents and there is nothing to stop their + long-term keys from exhausting all the natural numbers. The axiom + assumes that their keys are dispersed so as to leave room for infinitely + many fresh session keys. We could, alternatively, restrict agents to + an unspecified finite number.*) + Key_supply_ax "KK: Fin UNIV ==> EX K. K ~: KK & Key K ~: used evs" + + (*Agents generate random (symmetric) keys and nonces. The numeric argument is typically the length of the current trace. An injective pairing function allows multiple keys/nonces to be generated @@ -63,6 +81,5 @@ inj_newK "inj newK" newK_neq_shrK "newK i ~= shrK A" - isSym_newK "isSymKey (newK i)" end