Come memorizzare in modo sicuro le informazioni senza chiave o password?

1

Per una situazione ipotetica, immagina un programma che salva la password dell'utente, quindi li firma automaticamente senza chiedere nuovamente la password. La password deve essere protetta in qualche modo, ma se dovesse essere crittografato, non ci sarebbe quindi una password o una chiave non criptata da qualche parte?

Conosco molti programmi che fanno questo, ma come ho fatto ricerche non ho trovato alcun modo affidabile per proteggere questi dati. La sicurezza del computer è solitamente presa molto sul serio, con algoritmi matematicamente provati per la maggior parte delle crittografie, ssl, ecc. Ma con questo, la maggior parte dei consigli che ho trovato è di nasconderlo da qualche parte nel computer, o di provare a dividerlo o altrimenti renderlo "difficile" da trovare. Questo non sembra un consiglio molto sicuro.

Esiste un modo per un programma di memorizzare in modo sicuro una password, senza che nulla rimanga in testo semplice e senza richiedere all'utente di inserire una password? Mi dispiace se questa domanda è fin troppo aperta, ma sarei grato se qualcuno potesse almeno indicarmi la giusta direzione.

    
posta ins0maniac 23.11.2016 - 01:32
fonte

4 risposte

3

@Limit fornisce una buona risposta per le applicazioni web, ma mi piacerebbe rispondere alla tua domanda per il caso generale.

es. hai un'applicazione, che ti affidi alla tua password in modo che possa firmarti in altri servizi. Un buon esempio potrebbe essere il tuo client di posta (sul tuo smartphone o sul tuo pc desktop), che deve memorizzare nome utente e password per l'autenticazione con il server di posta. Un altro esempio di applicazioni che fanno questo sarebbe browser web in cui è possibile memorizzare le credenziali di accesso per vari siti Web.

Questi agenti software hanno bisogno di accedere alla tua password in testo semplice, quindi la soluzione standard per mantenere una password sicura (hashing della password) non può essere utilizzata.

La risposta breve alla tua domanda in questo caso: hai perfettamente ragione, questo non è sicuro e le tue credenziali non possono essere protette in modo affidabile ( supponendo che non ti venga chiesto dal client di posta / browser per fornire una password principale, cioè .

La risposta più lunga : alcuni sistemi operativi forniscono un tipo di password sicura, che in pratica è un file che contiene le password, ma il file viene crittografato prima di memorizzarlo su disco.

Per crittografare e decifrare, il sistema operativo ha bisogno di una chiave. Ne genera uno casuale e quindi crittografa questa chiave con la password che utilizzi per accedere all'account utente del sistema operativo. Ogni volta che si effettua l'accesso, la password inserita viene utilizzata per decrittografare la chiave casuale. Quindi questo aggiunge un livello di sicurezza (che può essere aggirato dal malware, ma almeno non è sufficiente guardare solo il file della password per rubare le password). Naturalmente, se non hai alcuna autenticazione di accesso configurata per il tuo account utente os, questo è inutile, perché il sistema operativo non avrà alcun segreto da parte tua per crittografare e decrittografare la chiave del file con password.

I sistemi operativi che forniscono questo servizio sicuro per le password per le applicazioni utente sono, per quanto ne so, in minoranza. Ma ci sono alcuni sistemi che funzionano quasi così. Ad esempio, l'ambiente desktop KDE su Linux fornisce tale password sicura; non è collegato alla password dell'account utente di sistema, quindi è necessario fornire una password aggiuntiva, ma solo una volta per sessione. Tutti gli agenti software che utilizzano la password sicura possono quindi accedere alle rispettive password.

(A parte: i sistemi operativi per smartphone come iOS e Android forniscono la crittografia trasparente di tutti i dati sul telefono. Se abiliti questo, funziona esattamente come il sistema che ho descritto per la crittografia della password sicura - il tuo segno- in segreto (es. pin code, password) viene utilizzato per crittografare la chiave master che crittografa e decrittografa i dati memorizzati)

    
risposta data 23.11.2016 - 08:53
fonte
2

Penso che tu stia confondendo la gestione delle sessioni con questo approccio.

I programmi che prendono la password dell'utente come input e quindi effettuano l'accesso la volta successiva senza richiedere la memorizzazione di un identificatore di sessione dell'utente nel client. In questo modo, quando l'utente fa una nuova richiesta, invia l'identificatore insieme a esso e l'identificatore viene aggiornato secondo la progettazione del sistema.

Per quanto riguarda il segreto, i siti Web di solito li memorizzano come cookie sicuri nel browser e assicurano che siano protetti contro lo scripting cross-site e il dirottamento dei cookie per garantire la sicurezza. Alcuni siti Web aggiornano questo token su ogni richiesta per ridurre al minimo l'impatto di un identificatore di sessione compromesso.

    
risposta data 23.11.2016 - 02:39
fonte
0

Per crittografare in modo sicuro qualcosa con una password nota solo a un'applicazione, devi utilizzare l'API speciale black_magic.AbrAcaDabrA(data_to_store) .

Più seriamente l'uso comune è avere una password principale che viene utilizzata per proteggere una chiave casuale strong utilizzata per crittografare i dati in modo simmetrico. A quel punto, i dati possono contenere qualsiasi cosa, incluse altre password e possono essere mantenuti in modo sicuro su disco tra sessioni . L'unico vincolo è che l'utente deve fornire la password principale all'avvio di una nuova sessione .

Ci sono diverse varianti di questo. Su Windows, la password di accesso può essere utilizzata come password principale per le cartelle crittografate native. Molti browser hanno questa nozione di password principale per archiviare in modo sicuro altre password e questa password principale viene richiesta una sola volta per qualsiasi esecuzione del browser e tutti i gestori di password che conosco agiscono in questo modo.

Ma c'è una strong limitazione a questo: dovresti usarlo solo su un sistema di cui ti puoi fidare. Durante la sessione, l'applicazione deve mantenere un segreto in memoria. Può essere la password principale, la chiave decodificata o i dati decrittografati. L'ultimo viene usato raramente perché sarà necessario chiedere nuovamente la password principale se i dati devono essere modificati. Ma poi, un altro programma con diritti di amministratore può leggere quella memoria per rubare il segreto e da lì l'intero dato. Certo, il segreto può essere offuscato con una trasformazione inversibile, ma è solo un'offuscamento, perché può essere rotto con il reverse engineering e tutti sappiamo che l'offuscamento non è la vera sicurezza.

Naturalmente, digitare un segreto su un sistema non sicuro lo compromette immediatamente. Ma qui la borsa password completa è compromessa ...

    
risposta data 23.11.2016 - 09:56
fonte
0

Non è possibile memorizzare in modo sicuro le password esclusivamente nel software. Ma se si dispone di un TPM o di un altro dispositivo hardware come il token USB, è possibile utilizzare un software che utilizza i dispositivi per crittografare i dati con una chiave quasi non estraibile. Vale la pena menzionare che Intel ha introdotto una tecnologia chiamata SGX in Skylake che può essere utilizzata per archiviare ed elaborare i dati in modo quasi sicuro. Questo "quasi" perché non è possibile proteggere i dati dal produttore del dispositivo, perché i produttori spesso pianificano (e spesso documentano) backdoor per guadagnare più denaro e soddisfare le richieste delle agenzie. Se i produttori, le agenzie e i loro dipendenti sono fidati, allora sei sicuro.

    
risposta data 23.11.2016 - 19:52
fonte

Leggi altre domande sui tag