I am wondering whether there is a general reformulation of perfect forward secrecy for 2 party key exchange in 2 messages using semigroups. I am looking for references, which would discuss such approach. I am trying to prove my probably misguided intuition, which tells me that every 2 party key exchange requires an underlying semigroup wrong, but so far I failed. The intuition is that if we want to work in 2 messages:
send message from A to B, B derives final key and sends a message from B to A and A derives the same final key we need a relationship like this.
We need a triple of operations
(opAinit,opB,opAfin) such that
opAinit : seed1 -> (shareA,msg1),
opB : seed2 -> msg1 -> (msg2,key),
opAfin : shareA -> msg2 -> key and the following to hold
opAfin (fst (opAinit(seed1)),fst(opbres)) = opB (snd(opbres)), where
opbres=opB(seed2,snd(opAinit(seed1)). Can this always be turned into an underlying semigroup? I am thinking that it should be possible to glue the different operations and domains/codomains into a semigroup action somehow.