ISO Public Key Two-Pass Parallel Mutual Authentication Protocol
Purpose
messages 1 and 2, 3 and 4 are sent parallely.
Informal Specification
- A -> B: CertA, Ra, Text1
- B -> A: Rb, Ra, A, Text6, E(Kb-1: Rb, Ra, A, Text5)
- B -> A: CertB, Rb, Text2
- A -> B: Ra, Rb, B, Text4, E(Kb-1: Rb, Ra, B, Text3)
See Commonly Used Representations
MSR Specification
Click here to download
--- Author: rishav
--- Date: 30 September 2007
--- ISO Public Key Two-Pass Parallel Mutual Authentication Protocol
---
--- A -> B: CertA, Ra, Text1
--- B -> A: Rb, Ra, A, Text6, E(Kb-1: Rb, Ra, A, Text5)
--- B -> A: CertB, Rb, Text2
--- A -> B: Ra, Rb, B, Text4, E(Kb-1: Rb, Ra, B, Text3)
(
module ISOTwoPassParr
export * .
key : type.
pvtk : princ -> type. pvtk A <: key.
nonce : type. nonce <: msg.
enc : key -> msg -> msg.
text: type. text <: msg.
net : msg -> state.
initiator:
forall A : princ.
{
exists LA : princ -> nonce -> pvtk A -> state.
ISO2PinitRule1:
forall B : princ.
forall Ka-1 : pvtk A.
forall text1 : text.
empty
=> exists Ra : nonce.
net (CertA & Ra & text1), LA B Ra Ka-1.
ISO2PinitRule3:
forall B : princ.
forall Ka-1 : pvtk A.
forall text5 : text.
forall text6 : text.
net (Rb & Ra & A & text6 & enc Kb-1 (Rb & Ra & A & text5)), LA B Ra Ka-1
=> empty.
}
recicever:
forall B : princ.
{
ISO3PinitRule2:
forall A : princ.
forall Kb-1 : pvtk B.
forall text5 : text.
forall text6 : text.
net (CertA & Ra & text1)
=> exists Rb : nonce.
net (Rb & Ra & A & text6 & enc Kb-1 (Rb & Ra & A & text5)).
}
initiator2:
forall B : princ.
{
exists LB : princ -> nonce -> pvtk B -> state.
ISO2PinitRule1:
forall A : princ.
forall Kb-1 : pvtk B.
forall text2 : text.
empty
=> exists Rb : nonce.
net (CertB & Rb & text2), LB A Rb Kb-1.
ISO2PinitRule3:
forall A : princ.
forall Kb-1 : pvtk B.
forall text3 : text.
forall text4 : text.
forall Rb : nonce.
net (Rb & Ra & B & text4 & enc Ka-1 (Rb & Ra & B & text3)), LB A Rb Kb-1
=> empty.
}
recicever2:
forall A : princ.
{
ISO3PinitRule2:
forall B : princ.
forall Ka-1 : pvtk A.
forall text3 : text.
forall text4 : text.
forall text2 : text.
net (CertB & Rb & text2)
=> exists Ra : nonce.
net (Rb & Ra & A & text4 & enc Ka-1 (Rb & Ra & B & text3)).
}
)