packages feed

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