The magic box puzzle: How to implement a verifiable self-contained secret system? Imagine we have a magic box that will open only if we pronounce the secret words. Everybody at the beginning of the game have some verifiable proof of the correct secret words.
During the first phase all contestants will say their guesses for the secret words.
On a second phase the magic box will open if any of the contestants said the secret words. And using the proof provided and the beginning of the game you will be able to verify the secret words are the same, and the box is not trying to trick you. If none of the contestants guessed the secret words the box will tell the secret words and the game will start again resetting the secret words and offering a new proof.

My own guess
Based on my limited cryptography knowledge my implementation will be as follows: The proof provided at the beginning of the game would be a hash of the encrypted secret. When the secret is revealed on the second phase, a key and method to encrypt the secret is also provided, so contestants will be able to encrypt themselves the secret and compared the hash to the proof provided at the beginning. I would use a simple symmetric encryption method and a md5 hash for the proof.  

Please let me know of your thoughts and if you get a better approach of the problem.
HMAC is what you need:


The HMAC of the secret is provided at the start of the round
The box gives out the HMAC key at the end of the round
If someone guessed the word correctly in the round, then the box gives the HMAC key out to all the contestants, so everyone can verify that the box is telling the truth that a contestant was correct
If no-one gets the answer by the end of the round, then the box can share the key, and the contestants can then verify that the secret is in fact what the box claimed it to be, and that the box isn't lying.


HMAC is hash based, and relies on a symmetric key, which satisfies your requirements