Protezione delle informazioni sui tentativi di password

1

Diciamo che sto creando un programma che funziona offline, quindi le informazioni sulle password devono essere archiviate localmente (lo so, non ottimale, ma questo è solo un mio progetto personale). In termini di sicurezza della password, ho pensato di utilizzare un KDF come PBKDF2 o scrypt per ricavare due chiavi dalla password, una per l'autenticazione e un'altra per la crittografia / decrittografia per mantenere le informazioni sensibili all'interno del programma stesso.

Ora diciamo che volevo aggiungere una funzionalità aggiuntiva che l'utente potesse limitare i tentativi di password in modo tale che il superamento di questi limiti avrebbe bloccato un potenziale aggressore fuori dal programma per un certo periodo di tempo. La mia domanda sarebbe come mantenere informazioni come il numero di tentativi fatti con la password sicura? Ad esempio, il programma registrerà il numero di tentativi effettuati in un file in modo che se un potenziale aggressore dovesse chiudere e riaprire il programma, il numero di tentativi già effettuati è stato salvato. Quale sarebbe un metodo che potrei impiegare per proteggere questo registro in modo tale che un utente malintenzionato non sia in grado di entrare e modificare il numero di tentativi registrati per dire 0 e procedere per un numero illimitato di tentativi?

    
posta ERK 04.05.2017 - 17:26
fonte

1 risposta

3

Sei su un dispositivo ostile (il computer di un utente), quindi devi presumere che possano manipolare il tuo codice. Pertanto, non è possibile limitare in questo modo: è possibile garantire che le password utilizzate siano abbastanza lunghe da resistere a tentativi di forza bruta (ad esempio un hash SHA-256 significherebbe che un utente malintenzionato dovrebbe tentare milioni di tentativi al secondo per assicurati di decrittografare i dati nel corso della vita dell'universo, supponendo una perfetta implementazione della crittografia), puoi tentare di rilevare più tentativi, oppure puoi provare a confutare il numero di tentativi, ma ci saranno sempre modi per aggirare l'hacker questi.

Ad esempio, se un utente malintenzionato esegue il software in una VM, può eseguire il ripristino su uno snapshot eseguito prima di un tentativo di password quando è stata avviata la limitazione.

Per sconfiggerlo, devi controllare il livello di decodifica, su un dispositivo che controlli - potenzialmente un servizio basato su Internet, che restituisce dati decrittografati o un messaggio di errore. Non si può semplicemente restituire la password corretta, poiché ciò implicherebbe che ci sia un elemento locale in cui è possibile inserire una password. Non puoi confermare la password come corretta, per lo stesso motivo.

Un'alternativa a un servizio basato su Internet sarebbe un dispositivo hardware che è collegato al computer dell'utente e che agisce nello stesso modo: su una password corretta, restituisce i dati crittografati, altrimenti incrementa un contatore di errori e rifiuta ulteriori tentativi quando raggiunge un livello specifico. Questo dispositivo dovrebbe essere a prova di manomissione - non va bene se è possibile aprirlo e leggere direttamente la memoria. Questo è essenzialmente il metodo utilizzato da Apple con l'iPhone, in cui il dispositivo separato è integrato nel telefono, ma con un'interazione molto limitata con il resto del sistema.

    
risposta data 04.05.2017 - 17:52
fonte

Leggi altre domande sui tag