Una domanda sulla memorizzazione delle password

5

Sto creando un programma (in C ++) che proteggerà con password il file del database dell'utente (.dat). Sono confuso su dove memorizzare la password? Nel file di database dell'utente o altrove.

Sono nuovo di questo concetto. Non so dove un programma dovrebbe memorizzare la password con hash. Ci ho pensato da molto tempo.

Anch'io ho una domanda. Se un programma memorizza la password hash nel file di database (insieme ai dati degli utenti) è possibile che un utente malintenzionato modifichi l'hash all'interno del file con un hash comune come l'hash del testo 'password' in modo che la password diventi 'password' ?

Modifica: Ok! Ho in qualche modo capito il concetto di memorizzazione della password. Questo è quello che ho capito:

Get the password from the user

Hash it (I will use SHA-512)

Store the hash in the database file

Done

Probabilmente, non ho capito il concetto di hash simmetrico. Per favore, spiegami in modo semplice. E la domanda che ho è ... lo spiegherò meglio con un esempio.

Supponiamo che questo sia il contenuto del file dell'utente

thisismydatabasefile

L'utente decide di aggiungere una password. Digita la password e l'abbiamo cancellata. L'hash generato è somerandomhash. Cifriamo il file con somerandomhash poiché la password e l'hash sono inclusi nel file crittografato. Quindi ora il contenuto del file è

encryptedfilesomerandomhash

Immagina che l'hacker abbia ottenuto il file di database crittografato. Sa che l'hash della password è "somerandomhash". Ora modifica l'hash della password 'somerandomhash' a qualcosa di comune come 'somehashthatheknows'. Quindi, qual è il modo migliore per memorizzare una password.

Per facilità, in che modo programmi come zip, 7z, rar etc memorizzano le password all'interno di un file di archivio?

    
posta Ranbir Kaif 14.09.2013 - 12:33
fonte

3 risposte

6

Hai identificato correttamente che l'archiviazione dell'hash ovunque sul disco rende la password vulnerabile ad attacchi come violazione del controllo di accesso ai file , attacchi con testo criptato noti o attacchi cypher-text scelti .

Soluzione di sicurezza: Non memorizzare una password con hash sul disco.

Poiché il tuo database è solo un file, possiamo usare il modo generale per proteggere con sicurezza un file su disco.

Algoritmo per proteggere in modo sicuro un file:

  1. Chiedi all'utente di immettere una password in fase di esecuzione per il file. (database nel tuo caso)
  2. Hash la password. (Io userei SHA-256 )
  3. Usa l'hash per ottenere una chiave simmetrica a 256 bit. (Io userei l'hash direttamente come chiave)
  4. Utilizzare la chiave a 256 bit per crittografare / decodificare il file di database sul disco. (Vorrei utilizzare l'algoritmo AES )

Major Pro: La chiave di crittografia del database viene generata in fase di esecuzione e mai memorizzata sul disco.

Minor Con: la crittografia e la derivazione delle chiavi diventano specifiche di implementazione e laboriose da implementare.

Si arriva a decidere se la sicurezza richiesta per l'applicazione vale il tempo di implementare correttamente i protocolli di sicurezza.

    
risposta data 14.09.2013 - 18:03
fonte
1

Sfrutta le funzionalità del sistema operativo per l'archiviazione delle password. Ad esempio, su Windows installeresti il tuo programma con un account utente dedicato e conosceresti la password per se stesso, quindi lo userai per decrittografare il tuo file di database. Qualsiasi utente malintenzionato dovrebbe quindi eseguire il programma come tale utente, o se avesse rubato il file DB, quindi non avrebbe avuto accesso alla password da nessuna parte - il programma stesso non ha accesso ad essa. La gestione delle password diventa quindi un'attività di amministrazione associata agli account utente, non qualcosa di unico per il tuo programma.

La decodifica della forza bruta ovviamente sarebbe ancora possibile i vettori di attacco, ma per farlo funzionare dovrebbero rubare il file DB e modificarlo "offline".

Ad esempio, pensa a come i server web danno accesso a un DB che richiede una password senza consentire a nessun altro di accedere. La password è memorizzata, normalmente in testo normale, in un file di testo su disco. Ma quel file non è accessibile a nessuno che non sia il server web che utilizza la protezione dei file fornita dal sistema operativo.

    
risposta data 15.09.2013 - 00:38
fonte
1

Perché mettere la password, in QUALSIASI forma, su un database accessibile esternamente su un computer accessibile dall'esterno?

Il protocollo RADIUS è stato specificamente progettato per, tra le altre cose, consentire a una macchina protetta di servire qualsiasi numero di macchine accessibili dall'esterno, che forniscono servizi di autenticazione e autorizzazione. Il computer accessibile dall'esterno riceve le credenziali di accesso dall'utente e lo inoltra al server RADIUS. Il server RADIUS sa perfettamente che è consentito SOLO gestire le richieste da macchine note. Quando riceve una richiesta correttamente autenticata da una fonte autorizzata, fa la sua cosa, e restituisce una risposta sì / inferno NO! risposta, o una più dettagliata che dice cosa questo utente è o non è autorizzato a fare.

    
risposta data 15.09.2013 - 18:18
fonte

Leggi altre domande sui tag