  In this survey, we describe a general key exchange protocol based on
semidirect product of (semi)groups (more specifically, on extensions of
(semi)groups by automorphisms), and then focus on practical instances of this
general idea. This protocol can be based on any group or semigroup, in
particular on any non-commutative group. One of its special cases is the
standard Diffie-Hellman protocol, which is based on a cyclic group. However,
when this protocol is used with a non-commutative (semi)group, it acquires
several useful features that make it compare favorably to the Diffie-Hellman
protocol. The focus then shifts to selecting an optimal platform (semi)group,
in terms of security and efficiency. We show, in particular, that one can get a
variety of new security assumptions by varying an automorphism used for a
(semi)group extension.
