ISO Five-Pass Authentication protocol
Purpose
The server creates the shared key Kab and sends it to A and B. Meanwhile, B encrypts the random number with this shared key and sends it to A. A uses Kas to get Kab which then A uses to encrypt other text to be sent to B.
Informal Specification
- A -> B : Ra, Text1
- B -> S : R'b, Ra, A, Text2
- S -> B : Text5, E(Kbs: Kab, R'b, A, Text4), E(Kas : B, Kab, Ra, Text3)
- B -> A : Text7, E(Kas : B, Kab, Ra, Text3), E(Kab : Ra, Rb, Text6)
- A -> B : Text9, E(Kab : Ra, Rb, Text8)
See Commonly Used Representations
MSR Specification
Click here to download
--- Author: rishav
--- Date: 19 June 2007
--- ISO Five-Pass Authentication protocol
--- A -> B : Ra, Text1
--- B -> S : R'b, Ra, A, Text2
--- S -> B : Text5, E(Kbs: Kab, R'b, A, Text4), E(Kas : B, Kab, Ra, Text3)
--- B -> A : Text7, E(Kas : B, Kab, Ra, Text3), E(Kab : Ra, Rb, Text6)
--- A -> B : Text9, E(Kab : Ra, Rb, Text8)
(reset)
(
module ISO5pass
export * .
server : type. server <: princ.
key : type.
stk : princ -> princ -> type. stk A B <: msg. stk A B <: key.
ltk : princ -> princ -> type. ltk A B <: key.
---assuming random nos to be nonce
nonce : type. nonce <: msg.
text: type. text <: msg.
enc : key -> msg -> msg.
net : msg -> state.
initiator:
forall A : princ.
{
exists LA : nonce -> state.
IRule1:
forall Text1 : text.
empty
=> exists Ra : nonce.
net(Text1 & Ra), LA Ra.
IRule5:
forall Kab : stk A B.
forall Kas : ltk A S.
forall Kbs : ltk B S.
forall Text7 : text.
forall Text3 : text.
forall Text6 : text.
forall Text9 : text.
forall Text8 : text.
forall Ra : nonce.
forall Rb : nonce.
net(Text7 & enc Kas (B & Kab & Ra & Text3) & enc Kab (Ra & Rb & Text6)), LA Ra
=> net(Text9 & enc Kab (Ra & Rb & Text8)).
}
receiver:
forall B : princ.
{
exists LB1 : princ -> nonce -> nonce -> state.
exists LB2 : nonce -> nonce -> state.
IRule2:
forall A : princ.
forall Text1 : text.
forall Text2 : text.
forall Ra : nonce.
net(Text1 & Ra)
=> exists R'b : nonce.
net(Text2 & R'b & A & Ra), LB1 A Ra Rb.
IRule4:
forall Text7 : text.
forall Text3 : text.
forall Text6 : text.
forall Text4 : text.
forall Text5 : text.
forall Kab : stk A B.
forall Kas : ltk A S.
forall Kbs : ltk B S.
forall Ra : nonce.
forall R'b : nonce.
net(Text5 & enc Kas (B & Kab & Ra & Text3) & enc Kbs (A & Kab & R'b & Text4)), LB1 A Ra Rb
=> exists Rb : nonce.
net(Text7 & enc Kas (B & Kab & Ra & Text3) & enc Kab (Ra & Rb & Text6)), LB2 Ra Rb.
IRule6:
forall Text9 : text.
forall Text8 : text.
forall Kab : stk A B.
forall Rb : nonce.
forall Ra : nonce.
net(Text9 & enc Kab (Ra & Rb & Text8)), LB2 Ra Rb
=> empty.
}
server:
forall S : server.
{
IRule3:
forall Text3 : text.
forall Text4 : text.
forall Text2 : text.
forall Text5 : text.
forall Kas : ltk A S.
forall Kbs : ltk B S.
forall Ra : nonce.
forall R'b : nonce.
net(Text2 & R'b & A & Ra)
=> exists Kab : stk A B.
net(Text5 & enc Kas (B & Kab & Ra & Text3) & enc Kbs (A & Kab & R'b & Text4)).
}
)
 
Findings
It was found that the purpose of reconstruction was not met due to Ls because they require the exact type to be specified as it cant be derived.