Bilateral Key Exchange with Public Key
Purpose
The two principals exchange their public key while encrypting the nonce of the other protocol to verify.
Informal Specification
- B -> A: B, E(Ka: Nb,B)
- A -> B: E(Kb: f(Nb),Na,A,K)
- B -> A: E(Kb: f(Na))
See Commonly Used Representations
MSR Specification
Click here to download
--- Author: Rishav Bhowmick
--- Date: 4 Oct 2007
--- Bilateral Key Exchange with Public Key
---
--- B -> A: B, E(Ka: Nb,B)
--- A -> B: E(Kb: f(Nb),Na,A,K)
--- B -> A: E(Kb: f(Na))
(reset)
(
module BKEPL
export * .
key : type.
skey : princ -> princ -> type. skey A B <: key. skey A B <: msg.
pubk : princ -> type. pubk A <: key.
nonce: type. nonce <: msg.
enc : key -> msg -> msg.
f : nonce -> msg.
net : msg -> state.
initiator:
forall B : princ.
{
exists LB : {A: princ} pubk A -> nonce -> state.
BKRule1:
forall A : princ.
forall Ka : pubk A.
empty
=> exists Nb : nonce.
net(B & enc Ka (Nb & B)), LB A Ka Nb.
BKRule3:
forall A : princ.
forall Nb : nonce.
forall Na : nonce.
forall Kb : pubk B.
forall Ka : pubk A.
forall K : skey A B.
net(enc Kb ((f Nb) & Na & A & K)), LB A Ka Nb
=> net(enc K (f Na)).
}
reciever:
forall A : princ.
{
exists LA : {B : princ} skey A B -> nonce -> nonce -> state.
BKRule2:
forall B : princ.
forall Nb : nonce.
forall Kb : pubk B.
forall Ka : pubk A.
net(B & enc Ka (Nb & B))
=> exists Na : nonce.
exists K : skey A B.
net(enc Kb ((f Nb) & Na & A & K)), LA B K Na Nb.
BKRule4:
forall B : princ.
forall Nb : nonce.
forall Na : nonce.
forall K : skey A B.
net(enc K (f Na)), LA B K Na Nb
=> empty.
}
)