[Nota: questa domanda è stata ripubblicata su crypto.SE .]
Analizziamo il problema in due parti:
Il primo problema è che vuoi qualcosa di apparentemente casuale ad un attaccante esterno (cioè imprevedibile ), ma può essere calcolato da chiunque nel sapere .
Sembra molto simile a un generatore di numeri pseudocasuali crittograficamente sicuro (CPRNG) in cui tutti i nodi utilizzano lo stesso seme. Quindi ogni ora (o ogni minuto) puoi prendere il numero successivo nella sequenza casuale - cioè current_nonce = cprng.getSequence()[ numberOfHoursSinceLaunch() ];
.
Il problema che deve essere risolto è il problema di distribuzione delle chiavi - o in questo caso, il problema di distribuzione dei semi (poiché il seme agisce come segreto condiviso ).
Puoi consultare i Protocolli di accordi chiave :
In cryptography, a key-agreement protocol is a protocol whereby two or more parties can agree on a key in such a way that both influence the outcome. ... Protocols that are useful in practice also do not reveal to any eavesdropping party what key has been agreed upon.
Oppure potresti andare a un livello inferiore di tecnologia e fare in modo che un amministratore inserisca il seme su ogni nodo con un metodo sicuro (SSH, chiave USB, ecc.). Oppure puoi configurare una rete TLS autenticata dal client dove ogni nodo ha un certificato cliente che possono essere utilizzati per richiedere il seme. Ci sono molti modi per skinare questo particolare gatto.
EDIT in risposta a re-post su crypto.se :
Il secondo problema è che vuoi un sistema in cui anche se un nodo ha tutto il materiale delle sementi, non può calcolare il segreto fino a qualche tempo fisso in futuro. Questa è in realtà una domanda comune su Security.SE e Crypto.SE. Il nome generico per questo è Crittografia Time-Capsule, su un Puzzle Time-Lock. Ecco un post famoso sull'argomento . Ci sono soluzioni a questo, ma hanno tutte il sapore di "se si esegue il processore al massimo, ci vorranno almeno X giorni per calcolare il segreto. Non penso che sia quello che vuoi.
Una soluzione pratica a questo problema sarebbe quella di assegnare a ciascun nodo un certificato SSL client. Avere un server master che genera i nonces, quindi fare in modo che i nodi accedano al master usando i loro certificati per recuperare il nonce giornaliero.