Sto scrivendo un livello per un gioco in cui il giocatore ha un vantaggio se conosce una password. Voglio che sia impossibile trovare la password guardando il codice sorgente del livello.
Il problema è che i livelli della lingua sono scritti in un linguaggio di scripting ad-hoc senza alcuna libreria crittografica, quindi devo implementare tutto da solo.
Inoltre, l'inserimento di password all'interno del gioco è un po 'scomodo, quindi vorrei che la password non fosse più grande di un numero casuale a 64 bit, che dovrebbe fornire abbastanza entropia per evitare un attacco di forza bruta.
Una possibilità che ho considerato è quella di memorizzare un semiprime di grandi dimensioni e la password deve essere uno dei suoi fattori. La validazione è molto facile da implementare, ma i semiprimes devono avere fattori molto più grandi di 64 bit per essere sicuri. Ho considerato di archiviare i primi 448 bit di un fattore di 512 bit e di avere la password i rimanenti 64 bit, ma non ho idea se questo sia sicuro.
Un'altra possibilità è implementare SHA-256 e memorizzare l'hash della password. Ciò sarebbe ovviamente molto più difficile da implementare.
Quindi le mie domande sono:
-
Se un semiprime a 1024 bit viene memorizzato insieme ai primi 448 bit di uno dei suoi fattori, è possibile trovare i restanti 64 bit di quel fattore?
-
Esiste un altro schema di convalida della password facile da implementare ma difficile da usare che potrei usare?