tamarin-prover-0.1.0.0: data/examples/csf12/SignedDH_PFS.spthy
theory SignedDH
begin
section{* The Signed Diffie-Hellman Protocol *}
/*
* Protocol: Signed Diffie-Hellman
* Modeler: Simon Meier, Benedikt Schmidt
* Date: January 2012
*
* Status: working
*/
builtin: diffie-hellman, signing
// Public key infrastructure
rule Register_pk:
[ Fr(~ltk) ]
-->
[ !Ltk($A, ~ltk), !Pk($A, pk(~ltk)) ]
rule Get_pk:
[ !Pk(A, pk) ]
-->
[ Out(pk) ]
rule Reveal_ltk:
[ !Ltk(A, ltk) ]
--[ LtkReveal(A) ]->
[ Out(ltk) ]
// Protocol
rule Init_1:
[ Fr(~ekI), !Ltk($I, ltkI) ]
-->
[ Init_1( $I, $R, ~ekI )
, Out( <$I, $R, 'g' ^ ~ekI, sign{'1', $I, $R,'g' ^ ~ekI }ltkI> ) ]
rule Init_2:
[ Init_1( $I, $R, ~ekI )
, !Pk($R, pk(ltkR))
, In( <$R, $I, Y, sign{'2', $R, $I, Y }ltkR> )
]
--[ SessionKey($I,$R, Y ^ ~ekI) ]->
[]
rule Resp:
[ !Pk($I, pk(ltkI))
, !Ltk($R, ltkR)
, Fr(~ekR)
, In( <$I, $R, X, sign{'1', $I, $R, X }ltkI> )
]
--[ SessionKey($I,$R, X ^ ~ekR) ]->
[
Out( <$R, $I, 'g' ^ ~ekR, sign{'2', $R, $I, 'g' ^ ~ekR }ltkR> )
]
lemma Perfect_Forward_Secrecy:
"All I R sessKey #i #k.
SessionKey(I,R,sessKey) @ i &
K(sessKey) @ k
==>
( (Ex #r. LtkReveal(I) @ r & r < i)
| (Ex #r. LtkReveal(R) @ r & r < i)
)
"
end