Dear Tamarin group,
I have a simple Diffie-Hellman model with symmetric encryption, where an initiator sends a fresh request and a responder replies with a fresh response. Both messages symmetrically encrypted with DH established keys.
The responder has a long-term DH key initialized in rule Resp_1 rule, and receives requests encrypted with a session key generated with this long-term key and the initiator's DH key.
In the following rule, the responder receives a request encrypted with the public key of the initiator and long-term key of the responder. Then, generates a fresh DH key and uses it to encrypt the response along with the initiator's public key (received in the premises). However, when I include the received request (req) in the response sent in the following rule, the executability lemma fails and the initiator does not receive the response. If I remove the request, it works fine. Could you please provide some guidance on what I might be doing wrong in this scenario?
rule Resp_2:
[
!Rltk($R, ltk) // Responder has access to its private long-term DH key used for request encryption
, In(< epkI, senc( <$I, $R, req>, epkI ^ ltk ) >) // Received from Init_1
, Fr(~resp) //Fresh response
, Fr(~ephR) //Fresh DH key
]
--[
NS_Responds(req, ~resp, epkI ^ ltk, epkI ^ ~ephR)
]->
[
Out(< 'g' ^ ~ephR, senc(< $R, $I, req, ~resp>, epkI ^ ~ephR) >)
]
// Initiator receives the response
rule Init_2:
[
Init_Waiting_Response($I, $R, req, ephI)
, In(< epkR, senc(<$R, $I, req, resp>, epkR ^ ephI) >)
]
--[
Init_resp( req, resp, epkR ^ ephI )
]->
[
]
Many thanks for your time and attention,
Ali