Mark,
This can't happen by itself, there should be event causing this:
- user account, that signed a macro has been removed
- hash salt has been changed
- hash salt was not specified, so system used a connection string instead of hash salt and it has changed
- someone copied macro from another Kentico instance, so signature became invalid
- macro has been staged from the other instance, so signature became invalid
If you have a few environment, please make sure all they use the same hash salt.
You can always go to System -> Macro section -> Report and see information on all your macros across the site.
In case there are a lot of issue, especially with signatures, go to Signature section and re-sign all the macros.
Answering your question, I'd would say, that syncing hash salt across all the instances, checking and potentially re-signing all the macros should prevent you of having this issue in the future.
You may find more details here.