I want to make a prediction about a future event, but only reveal that prediction after the event occurs lest knowledge of my prediction affect the outcome.
For example, suppose Alice predicts that Bob will drink the spill his glass of milk on April 24th at 9:17 AM. She writes to a text file:
Bob spills his glass of milk on April 24th at 9:17 AM.
Alice does not want Bob to know the specifics of the prediction before the event, otherwise Bob may avoid milk that day in order to prevent the outcome of Alice's prediction. However, if Alice only reveals the prediction after the event has occurred, Bob can claim that Alice fabricated the prediction after the event had already occurred.
Naturally, Alice should provide some verification of the authenticity of her prediction to Bob before the event -- a verification that does not reveal the specifics of the prediction until after the event, but which confirms that the prediction was made before the event.
I've come up with two possible verification methods:
- Alice applies a symmetric-key encryption algorithm (such as AES) on the text file
- Alice provides Bob with the encrypted file
- After the event occurs, Alice provides Bob with the secret password
- Bob decrypts the encrypted file and reads the prediction
- Alice applies a hashing algorithm (such as SHA-256) on the text file
- Alice provides Bob with the computed hash
- After the event occurs, Alice provides Bob with the original text file
- Bob applies the same hashing algorithm on the text file and verifies the hash
Which verification method is the most secure (i.e. which would theoretically be harder for Bob to overcome and thus discover the predicition before the event occurs)?
Which verification method is most practical (e.g. hashes take up significantly smaller space than an encrypted file)?