Needham-Schroeder Public Key Protocol
Purpose
Same as Needham Schroeder protocol but with public keys.
Informal Specification
- A -> S : A, B
- S -> A : E(Ks-1 : Kb, B)
- A -> B : E(Kb : Na, A)
- B -> S : B, A
- S -> B : E(Ks-1 : Ka, A)
- B -> A : E(Ka: Na, Nb)
- A -> B : E(Kb: Nb)
See Commonly Used Representations
MSR Specification
Click here to download
--- Author: rishav
--- Date: 11 October 2007
--- Needham-Schroeder Public Key Protocol
--- A -> S : A, B
--- S -> A : E(Ks-1 : Kb, B)
--- A -> B : E(Kb : Na, A)
--- B -> S : B, A
--- S -> B : E(Ks-1 : Ka, A)
--- B -> A : E(Ka: Na, Nb)
--- A -> B : E(Kb: Nb)
(reset)
(
module NSP
export * .
server : type. server <: princ.
key : type.
ltk : princ -> type. ltk A <: key. ltk A <: msg.
ltks : princ -> type. ltks S <: key.
nonce : type. nonce <: msg.
enc : key -> msg -> msg.
net : msg -> state.
initiator:
forall A : princ.
{
exists LA : princ -> state.
exists LA2 : nonce -> {B : princ} ltk B -> state.
NSPRule1:
forall B : princ.
empty
=> net(A & B), LA B.
NSPRule3:
forall B : princ.
forall Ks-1 : ltks S.
forall Kb : ltk B.
net(enc Ks-1 (B & Kb)), LA B
=> exists Na : nonce.
net(enc Kb (A & Na)), LA2 Na B Kb.
NSPRule7:
forall B : princ.
forall Kb : ltk B.
forall Ka : ltk A.
forall Na : nonce.
forall Nb : nonce.
net(enc Ka (Nb & Na)), LA2 Na B Kb
=> net(enc Kb Nb).
}
receiver:
forall B : princ.
{
exists LB : princ -> nonce -> state.
exists LB2 : nonce -> state.
NSPRule4:
forall A : princ.
forall Na : nonce.
forall Kb : ltk B.
net(enc Kb (A & Na))
=> net(B & A), LB A Na.
NSPRule6:
forall A : princ.
forall Na : nonce.
forall Ks-1 : ltks S.
forall Ka : ltk A.
net(enc Ks-1 (A & Ka)), LB A Na
=> exists Nb : nonce.
net(enc Ka (Nb & Na)), LB2 Nb.
NSPRule8:
forall Nb : nonce.
forall Kb : ltk B.
net(enc Kb Nb), LB2 Nb
=> empty.
}
server:
forall S : server.
{
exists LS : princ -> princ -> state.
NSPRule2:
forall A : princ.
forall B : princ.
forall Ks-1 : ltks S.
forall Kb : ltk B.
net(A & B)
=> net(enc Ks-1 (B & Kb)), LS A B.
NSPRule5:
forall A : princ.
forall B : princ.
forall Ks-1 : ltks S.
forall Ka : ltk A.
net(B & A), LS A B
=> net(enc Ks-1 (A & Ka)).
}
)