\begin{tikzpicture}[
  -latex,
  rrs/.style = {
    draw = gray!30,
    thick,
    rounded rectangle,
    fill = white,
    minimum width = 2cm,
    font = \fontsize{8}{8}\selectfont,
    text = white,
  },
  ls/.style = {
    font=\fontsize{6}{6}\selectfont,
  },
]
\draw (0, 1) node[rrs, fill=darkRed] (Log) {Log};
\draw (0, -1) node[rrs, fill=darkGreen] (Subject) {Subject};
\draw (3.5, 0) node[rrs, fill=darkBlue] (Endpoint) {Notifier};
\draw (-3.5, 0) node[rrs, fill=gray] (Monitor) {Monitor};


\path [draw, ->, rounded corners]
  (Log.north) |-
  ($ (Log.north) + (Log.west) - (Log) + (-0.25, 0.25) $)
    node[ls, above, pos=0.75]{
      STH with snapshot extension
    } |-
  (Log.west);

\path [draw, ->, rounded corners]
  (Monitor.south) |-
  ($ (Monitor.south) + (Monitor.west) - (Monitor) + (-0.25, -0.25) $)
    node[ls, below, pos=0.75]{
      verify STH extension
    } |-
  (Monitor.west);

\path [draw, ->, rounded corners]
  (Subject.south) |-
  ($ (Subject.south) + (Subject.east) - (Subject) + (0.25, -0.25) $)
    node[ls, below, pos=0.75]{
      verify notification
    } |-
  (Subject.east);

\path [draw, <-, dashed, rounded corners]
  (Endpoint.north) |-
  ($ (Endpoint.east) + (Endpoint.north) - (Endpoint) + (0.25, 0.25) $)
    node[ls, above, pos=0.75]{
      optional verify
    } |-
  (Endpoint.east);

\draw [->]
  (Log.south east) --
    node[ls, sloped, anchor=center, above]{%
      batch, STH
    }
  (Endpoint.north west);

\draw [->]
  (Endpoint.south west) --
    node[ls, sloped, anchor=center, above]{%
      notification
    }
  (Subject.north east);

\path [draw, ->]
  (Log.south west) --
    node[ls, sloped, anchor=center, above]{%
      batch, STH
    }
  (Monitor.north east);
\end{tikzpicture}
