cpsa-3.3.0: tst/iadh_um.scm
(herald "IADH: unified model (UM)" (bound 20) (algebra diffie-hellman))
(defprotocol iadh-um diffie-hellman
(defrole init
(vars (l e expn) (hl he base) (A B CA name) (key n data))
(trace
(recv (enc "cert" (exp (gen) l) A (privk CA)))
(recv (enc "cert" hl B (privk CA)))
(send (exp (gen) e))
(recv he)
(send key))
(non-orig (privk CA))
(fn-of (foo ((hash (exp hl l) (exp he e)) key)))
(neq (he (gen)) (hl (exp (gen) l))))
(defrole ltkgen
(vars (P name) (l expn))
(trace
(send (enc "cert-req" P (exp (gen) l) (privk P))))
(fn-of ("principal-of" (P (exp (gen) l)))))
(defrole ca-gen
(vars (P CA name) (h base))
(trace
(recv (enc "cert-req" P h (privk P)))
(send (enc "cert" h P (privk CA))))
(non-orig (privk P))
(neq (h (gen)))
(fn-of ("principal-of" (P h)))))
;; Implicit authentication: resp and init will agree on the resulting key
;; foo(key). Therefore they should agree on the names A and B.
(defskeleton iadh-um
(vars (key data) (e ep l lp expn))
(defstrand init 5 (key key) (e e) (l l))
(defstrand init 5 (key key) (e ep) (l lp))
(defstrand ltkgen 1 (l l))
(defstrand ltkgen 1 (l lp))
(uniq-gen e ep l lp)
)
;; Key privacy: all keys good
(defskeleton iadh-um
(vars (he base) (e l ep lp expn))
(defstrand init 4 (e e) (l l) (hl (exp (gen) lp)) (he he))
(defstrand ltkgen 1 (l l))
(defstrand ltkgen 1 (l lp))
(deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
(uniq-gen e lp l)
)
;; Key privacy: both long term keys good, own ephemeral key leaks.
(defskeleton iadh-um
(vars (he base) (e l ep lp expn))
(defstrand init 4 (e e) (l l) (hl (exp (gen) lp)) (he he))
(defstrand ltkgen 1 (l l))
(defstrand ltkgen 1 (l lp))
(deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
(uniq-gen lp l)
)
;; Participant's point of view: own LTK compromised, partner's good
(defskeleton iadh-um
(vars (he base) (e l ep lp expn))
(defstrand init 4 (e e) (hl (exp (gen) lp)) (he he))
(defstrand ltkgen 1 (l lp))
(deflistener (hash (exp (gen) (mul l lp)) (exp he e)))
(uniq-gen e lp)
)
;)
;; Participant's point of view: partner's LTK compromised, own good
(defskeleton iadh-um
(vars (he hl base) (e ep l lp expn))
(defstrand init 4 (e e) (l l) (hl hl) (he he))
(defstrand ltkgen 1 (l l))
(deflistener (hash (exp hl l) (exp he e)))
(uniq-gen e l)
)
;)
;; Participant's point of view: both LTKs compromised
(defskeleton iadh-um
(vars (he hl base) (e l ep lp expn))
(defstrand init 4 (e e) (l l) (he he) (hl hl))
(deflistener (hash (exp hl l) (exp he e)))
(uniq-gen e)
)
;)