Schema di convalida della password ad hoc semplice da implementare

2

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?

posta cardboard_box 11.08.2016 - 01:14
fonte

2 risposte

3

Il problema con il metodo che hai suggerito è che si tratta fondamentalmente di un'esposizione parziale di RSA. Stai esponendo alcuni pezzi di un fattore di semiprima. Il sondaggio sugli attacchi RSA di Dan Boneh elenca un teorema di Coppersmith che afferma che se il n / 4 i bit meno significativi o significativi di un fattore di N sono noti, quindi N può essere fattorizzato in modo efficiente. Dal momento che vuoi perdere molto più di n / 4, penso che il tuo metodo sarebbe suscettibile a quell'attacco.

La buona notizia è che Boneh fornisce alcune informazioni su qualcosa che potrebbe funzionare:

It is interesting that discrete log-based cryptosystems, such as the ElGamal public key system, do not seem susceptible to partial key exposure. Indeed, if g^x mod p and a constant fraction of the bits of x are given, there is no known polynomial-time algorithm to compute the rest of x.

Quindi, potresti scegliere un po 'casuale x, un grande primo (1024 bit) p e un generatore g (in pratica userei alcuni valori NIST standard per P e g). Calcola g ^ x mod p, memorizzalo nel tuo software. Memorizza un numero di bit di x nel tuo programma. L'utente deve fornire i bit rimanenti di x. Chiama i loro bit più i bit memorizzati x '. Calcola g ^ x 'mod p e vedi se corrisponde a ciò che hai memorizzato.

Credo che la dichiarazione di Boneh non sia cambiata da quando è stata pubblicata. Questo forse qualcosa che vuoi chiedere su Crypto.SE, insieme a consigli su quanti bit dovrebbero essere lasciati fuori dal codice sorgente.

    
risposta data 11.08.2016 - 19:55
fonte
-1

Non so se qualche gioco non richiede connessioni internet ora, perché non usare un server per fare l'autenticazione?

Indipendentemente dal modo in cui si cripta la password, finché viene salvata da qualche parte sul client, può essere interrotta. Soprattutto dopo che l'algoritmo che hai progettato è trapelato o incrinato, l'autenticazione diventerà praticamente inutile.

    
risposta data 11.08.2016 - 04:59
fonte

Leggi altre domande sui tag