cpsa-2.2.2: tst/ns.tst
(herald "Needham-Schroeder Public-Key Protocol Variants")
(comment "CPSA 2.2.2")
(comment "All input read")
(defprotocol ns basic
(defrole init
(vars (a b name) (n1 n2 text))
(trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(defrole resp
(vars (b a name) (n2 n1 text))
(trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b)))))
(comment "Needham-Schroeder with no role origination assumptions"))
(defskeleton ns
(vars (n1 n2 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(non-orig (privk a) (privk b))
(uniq-orig n1)
(comment "Initiator point-of-view")
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(label 0)
(unrealized (0 1))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns
(vars (n1 n2 n2-0 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n1)
(operation nonce-test (added-strand resp 2) n1 (0 1)
(enc n1 a (pubk b)))
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
(label 1)
(parent 0)
(unrealized (0 1))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns
(vars (n1 n2 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n1)
(operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
(enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))))
(label 2)
(parent 1)
(unrealized)
(shape))
(comment "Nothing left to do")
(defprotocol ns basic
(defrole init
(vars (a b name) (n1 n2 text))
(trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(defrole resp
(vars (b a name) (n2 n1 text))
(trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b)))))
(comment "Needham-Schroeder with no role origination assumptions"))
(defskeleton ns
(vars (n1 n1-0 n2 n2-0 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand init 3 (n1 n1-0) (n2 n2-0) (a a) (b b))
(non-orig (privk a) (privk b))
(uniq-orig n1 n1-0)
(comment "Double initiator point-of-view")
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((send (enc n1-0 a (pubk b))) (recv (enc n1-0 n2-0 (pubk a)))
(send (enc n2-0 (pubk b)))))
(label 3)
(unrealized (0 1) (1 1))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns
(vars (n1 n2 n2-0 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n1)
(operation nonce-test (added-strand resp 2) n1 (1 1)
(enc n1 a (pubk b)))
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
(label 4)
(parent 3)
(unrealized (0 1))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns
(vars (n1 n2 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n1)
(operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
(enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))))
(label 5)
(parent 4)
(unrealized)
(shape))
(comment "Nothing left to do")
(defprotocol ns basic
(defrole init
(vars (a b name) (n1 n2 text))
(trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(defrole resp
(vars (b a name) (n2 n1 text))
(trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b)))))
(comment "Needham-Schroeder with no role origination assumptions"))
(defskeleton ns
(vars (n2 n1 text) (a b name))
(defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
(non-orig (privk a))
(uniq-orig n2)
(comment "Responder point-of-view")
(traces
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b)))))
(label 6)
(unrealized (0 2))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns
(vars (n2 n1 text) (a b b-0 name))
(defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
(precedes ((0 1) (1 1)) ((1 2) (0 2)))
(non-orig (privk a))
(uniq-orig n2)
(operation nonce-test (added-strand init 3) n2 (0 2)
(enc n1 n2 (pubk a)))
(traces
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b))))
((send (enc n1 a (pubk b-0))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b-0)))))
(label 7)
(parent 6)
(unrealized)
(shape))
(comment "Nothing left to do")
(defprotocol ns-role-origs basic
(defrole init
(vars (a b name) (n1 n2 text))
(trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
(non-orig (privk b))
(uniq-orig n1))
(defrole resp
(vars (b a name) (n2 n1 text))
(trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b))))
(non-orig (privk a))
(uniq-orig n2))
(comment
"Needham-Schroeder with role assumptions that are too strong"))
(defskeleton ns-role-origs
(vars (n1 n2 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(non-orig (privk b))
(uniq-orig n1)
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(label 8)
(unrealized (0 1))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns-role-origs
(vars (n1 n2 n2-0 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n1 n2-0)
(operation nonce-test (added-strand resp 2) n1 (0 1)
(enc n1 a (pubk b)))
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
(label 9)
(parent 8)
(unrealized (0 1))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns-role-origs
(vars (n1 n2 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n1 n2)
(operation nonce-test (contracted (n2-0 n2)) n1 (0 1)
(enc n1 n2 (pubk a)) (enc n1 a (pubk b)))
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))))
(label 10)
(parent 9)
(unrealized)
(shape))
(comment "Nothing left to do")
(defprotocol ns-role-origs basic
(defrole init
(vars (a b name) (n1 n2 text))
(trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
(non-orig (privk b))
(uniq-orig n1))
(defrole resp
(vars (b a name) (n2 n1 text))
(trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b))))
(non-orig (privk a))
(uniq-orig n2))
(comment
"Needham-Schroeder with role assumptions that are too strong"))
(defskeleton ns-role-origs
(vars (n2 n1 text) (b a name))
(defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
(non-orig (privk a))
(uniq-orig n2)
(traces
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b)))))
(label 11)
(unrealized (0 2))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns-role-origs
(vars (n2 n1 text) (b a b-0 name))
(defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
(precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
(non-orig (privk a) (privk b-0))
(uniq-orig n2 n1)
(operation nonce-test (added-strand init 3) n2 (0 2)
(enc n1 n2 (pubk a)))
(traces
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b))))
((send (enc n1 a (pubk b-0))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b-0)))))
(label 12)
(parent 11)
(unrealized (0 0) (0 2))
(comment "2 in cohort - 2 not yet seen"))
(defskeleton ns-role-origs
(vars (n2 n1 text) (a b name))
(defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(precedes ((0 1) (1 1)) ((1 0) (0 0)) ((1 2) (0 2)))
(non-orig (privk a) (privk b))
(uniq-orig n2 n1)
(operation nonce-test (contracted (b-0 b)) n1 (0 0)
(enc n1 a (pubk b)))
(traces
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b))))
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(label 13)
(parent 12)
(unrealized)
(shape))
(defskeleton ns-role-origs
(vars (n2 n1 n2-0 text) (b a b-0 name))
(defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b-0))
(defstrand resp 2 (n2 n2-0) (n1 n1) (b b-0) (a a))
(precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (0 0)))
(non-orig (privk a) (privk b-0))
(uniq-orig n2 n1 n2-0)
(operation nonce-test (added-strand resp 2) n1 (0 0)
(enc n1 a (pubk b-0)))
(traces
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b))))
((send (enc n1 a (pubk b-0))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b-0))))
((recv (enc n1 a (pubk b-0))) (send (enc n1 n2-0 (pubk a)))))
(label 14)
(parent 12)
(unrealized (0 0) (0 2))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns-role-origs
(vars (n2 n1 n2-0 text) (a b name))
(defstrand resp 3 (n2 n2) (n1 n1) (b b) (a a))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand resp 2 (n2 n2-0) (n1 n1) (b b) (a a))
(precedes ((0 1) (1 1)) ((1 0) (2 0)) ((1 2) (0 2)) ((2 1) (0 0)))
(non-orig (privk a) (privk b))
(uniq-orig n2 n1 n2-0)
(operation nonce-test (contracted (b-0 b)) n1 (0 0)
(enc n1 n2-0 (pubk a)) (enc n1 a (pubk b)))
(traces
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b))))
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n1 a (pubk b))) (send (enc n1 n2-0 (pubk a)))))
(label 15)
(parent 14)
(seen 13)
(unrealized)
(comment "1 in cohort - 0 not yet seen"))
(comment "Nothing left to do")
(defprotocol ns2 basic
(defrole init
(vars (a b name) (n1 n2 n3 text))
(trace (send (enc n1 n3 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(defrole resp
(vars (b a name) (n2 n1 text))
(trace (recv (enc n1 n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b))))
(note doubled nonce in the first message))
(note that this protocol is derived from Needham-Schroeder))
(defskeleton ns2
(vars (n1 n2 n3 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (n3 n3) (a a) (b b))
(non-orig (privk a) (privk b))
(uniq-orig n1)
(traces
((send (enc n1 n3 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(label 16)
(unrealized (0 1))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns2
(vars (n2 n3 n2-0 text) (a b name))
(defstrand init 3 (n1 n3) (n2 n2) (n3 n3) (a a) (b b))
(defstrand resp 2 (n2 n2-0) (n1 n3) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n3)
(operation nonce-test (added-strand resp 2) n3 (0 1)
(enc n3 n3 a (pubk b)))
(traces
((send (enc n3 n3 a (pubk b))) (recv (enc n3 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n3 n3 a (pubk b))) (send (enc n3 n2-0 (pubk a)))))
(label 17)
(parent 16)
(unrealized (0 1))
(comment "1 in cohort - 1 not yet seen"))
(defskeleton ns2
(vars (n3 n2 text) (a b name))
(defstrand init 3 (n1 n3) (n2 n2) (n3 n3) (a a) (b b))
(defstrand resp 2 (n2 n2) (n1 n3) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n3)
(operation nonce-test (contracted (n2-0 n2)) n3 (0 1)
(enc n3 n2 (pubk a)) (enc n3 n3 a (pubk b)))
(traces
((send (enc n3 n3 a (pubk b))) (recv (enc n3 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n3 n3 a (pubk b))) (send (enc n3 n2 (pubk a)))))
(label 18)
(parent 17)
(unrealized)
(shape))
(comment "Nothing left to do")
(defprotocol ns basic
(defrole init
(vars (a b name) (n1 n2 text))
(trace (send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b)))))
(defrole resp
(vars (b a name) (n2 n1 text))
(trace (recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))
(recv (enc n2 (pubk b)))))
(comment "Needham-Schroeder with no role origination assumptions"))
(defskeleton ns
(vars (n1 n2 text) (a b name))
(defstrand init 3 (n1 n1) (n2 n2) (a a) (b b))
(defstrand resp 2 (n2 n2) (n1 n1) (b b) (a a))
(precedes ((0 0) (1 0)) ((1 1) (0 1)))
(non-orig (privk a) (privk b))
(uniq-orig n1)
(traces
((send (enc n1 a (pubk b))) (recv (enc n1 n2 (pubk a)))
(send (enc n2 (pubk b))))
((recv (enc n1 a (pubk b))) (send (enc n1 n2 (pubk a)))))
(label 19)
(unrealized)
(shape))
(comment "Nothing left to do")
(defprotocol nsl-typeless basic
(defrole init
(vars (a b name) (n1 text) (n2 mesg))
(trace (send (enc a n1 (pubk b))) (recv (enc n1 n2 b (pubk a)))
(send (enc n2 (pubk b)))))
(defrole resp
(vars (b a name) (n2 text) (n1 mesg))
(trace (recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a)))
(recv (enc n2 (pubk b)))))
(comment "Needham-Schroeder-Lowe with untyped nonces"))
(defskeleton nsl-typeless
(vars (n1 mesg) (n2 text) (a b name))
(defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
(deflistener n2)
(non-orig (privk a) (privk b))
(uniq-orig n2)
(comment "Shows typeflaw in typeless NSL")
(traces ((recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a))))
((recv n2) (send n2)))
(label 20)
(unrealized (1 0)))
(defskeleton nsl-typeless
(vars (n1 mesg) (n2 text) (a b name))
(defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
(deflistener n2)
(precedes ((0 1) (1 0)))
(non-orig (privk a) (privk b))
(uniq-orig n2)
(traces ((recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a))))
((recv n2) (send n2)))
(label 21)
(parent 20)
(unrealized (1 0))
(comment "2 in cohort - 2 not yet seen"))
(defskeleton nsl-typeless
(vars (n2 n1 text) (a b name))
(defstrand resp 2 (n1 n1) (n2 n2) (b b) (a a))
(deflistener n2)
(defstrand init 3 (n2 n2) (n1 n1) (a a) (b b))
(precedes ((0 1) (2 1)) ((2 2) (1 0)))
(non-orig (privk a) (privk b))
(uniq-orig n2)
(operation nonce-test (added-strand init 3) n2 (1 0)
(enc n1 n2 b (pubk a)))
(traces ((recv (enc a n1 (pubk b))) (send (enc n1 n2 b (pubk a))))
((recv n2) (send n2))
((send (enc a n1 (pubk b))) (recv (enc n1 n2 b (pubk a)))
(send (enc n2 (pubk b)))))
(label 22)
(parent 21)
(unrealized (1 0))
(comment "empty cohort"))
(defskeleton nsl-typeless
(vars (n2 n2-0 text) (a b a-0 name))
(defstrand resp 2 (n1 a-0) (n2 n2) (b b) (a a))
(deflistener n2)
(defstrand resp 2 (n1 (cat n2 b)) (n2 n2-0) (b a) (a a-0))
(precedes ((0 1) (2 0)) ((2 1) (1 0)))
(non-orig (privk a) (privk b))
(uniq-orig n2)
(operation nonce-test (added-strand resp 2) n2 (1 0)
(enc a-0 n2 b (pubk a)))
(traces ((recv (enc a a-0 (pubk b))) (send (enc a-0 n2 b (pubk a))))
((recv n2) (send n2))
((recv (enc a-0 n2 b (pubk a)))
(send (enc (cat n2 b) n2-0 a (pubk a-0)))))
(label 23)
(parent 21)
(unrealized)
(shape))
(comment "Nothing left to do")