Ho pensato al seguente caso d'uso: alcune istituzioni vogliono organizzare le scommesse su un risultato che è di propria scelta. La timeline è la seguente:
- L'organizzazione sceglie il risultato al momento T. Le scommesse sono aperte su quale sia il risultato.
- All'istante T + N, la decisione presa dall'istituto al tempo T viene risolta, risolvendo le scommesse.
Ad esempio, possiamo immaginare un canale televisivo che ospita una piattaforma di gioco su quali personaggi moriranno nella prossima stagione, che è già stato scritto ma non ancora trasmesso.
Il problema è trovare un modo per dimostrare che le informazioni rilasciate al momento T + N sono state effettivamente scelte, e non modificate da allora, tempo T. Ovviamente, senza rilasciare le informazioni stesse a time T. Ciò garantisce, in particolare, che l'organizzazione non può scegliere retroattivamente il risultato per trarre profitto in qualche modo dalla tendenza delle scommesse.
La mia proposta è la seguente:
-
All'istante T, l'organizzazione sceglie una chiave casuale che mantiene segreta. Calcola un HMAC del risultato con la chiave segreta e lo pubblica.
-
All'istante in cui T + N, l'organizzazione pubblica sia l'esito che la chiave segreta.
Le persone possono verificare che l'HMAC sia corretto, ed è assicurato che l'esito pubblicato sia effettivamente quello scelto al tempo T perché sarebbe
Questo suono è corretto? Soprattutto l'ultima parte in grassetto? Mi sembra che questo sia fondamentalmente equivalente a un attacco preimage sulla funzione hash con un prefisso noto per il preimage?