Hydra is a secretive organization. It is comprised of several Directors at the top, and many Agents underneath them.
A Director sends Agents on secret missions. During these missions, communication is spotty and unreliable. Agents rely on untrusted messengers to deliver messages back to the Directors. Messages include the # of the agent (33, etc.). The content of these messages are not secret, but it is crucial that they are not faked.
Before the Agent leaves, the Director issues him secret key that Agent "signs" his messages with to verify authenticity. Agents have different keys, and should not be able to fake messages as other Agents. These keys are good for six months. Directors reject any messages signed with a key issued more than 6 months ago.
Directors maintain very minimal communication among each other. They do not know when the others issue keys to Agents, though they each must be able to independently verify the authenticity of messages received from these Agents.
Directors share a top-secret key that they can use to create keys for the Agents.
I need to implement this system.
Are there certain terms for what is happening?
What cryptographic primitives should be used, and how and where are they applied?
I believe I will be using an HMAC, but the multiple levels of keys in play makes things less clear to me.