Devo eseguire l'hash o crittografare le chiavi API prima di memorizzarle in un database?

4

Sto proteggendo le chiamate API a un servizio REST che sto costruendo utilizzando API Keys. Il piano è:

  1. Quando otteniamo un nuovo client, genera una chiave API (un UUID).
  2. Invia tramite email la chiave API a loro.
  3. Invia la chiave API su ogni chiamata al nostro servizio (su HTTPS). Cercheremo la chiave API nel nostro database (crittografandola o eseguendo prima l'hashing) e calcoleremo l'account per cui la chiave API è.

Alla fine, aggiungeremo account utente e un portale per tutto questo in modo che i clienti possano generare e disattivare le chiavi API senza che sia necessario coinvolgerle.

La mia domanda è sull'ultima parte. Devo eseguire l'hash o criptare (o lasciare non cifrato?) Le chiavi API prima di memorizzarle nel database? Sto cercando di capire le implicazioni. So che se li ho cancellati, allora sto proteggendo contro qualcuno che conosce tutte le chiavi API se ottengono l'accesso al DB. Ma quali sono le altre cose a cui dovrei pensare? Ad esempio, ci sono motivi di prestazioni per fare uno sopra l'altro?

    
posta Daniel Hipke 23.02.2018 - 00:53
fonte

2 risposte

1

Sì, dovresti assolutamente cancellare le tue chiavi API. In effetti, sono le tue password e dovrebbero essere trattate come tali. E nota che è hash - non crittografato. Non hai mai bisogno di decifrare le chiavi API, quindi non dovresti essere in grado di.

Poiché saghaulor dice, devi assicurarti di utilizzare un UUID versione 4 (uno casuale, quello è) e che tu usi una fonte di casualità crittograficamente sicura quando li generi. Poiché un UUID generato correttamente contiene 122 bit di entropia non è necessario preoccuparsi della salatura o dell'utilizzo di un hash lento funzione come bcrypt. Un singolo round di SHA-256 sarebbe sufficiente.

Una parte problematica del tuo design è che stai dando agli utenti "password" che vengono consegnate per posta e che non possono cambiare. Ciò potrebbe non essere sufficiente per gli utenti attenti alla sicurezza. Forse il portale che hai menzionato risolverà questo problema.

    
risposta data 23.02.2018 - 10:27
fonte
1

1) Assicurati di utilizzare un generatore casuale sicuro per generare il tuo UUID.

2) Non inviare per email la chiave API. L'e-mail non ha alcuna garanzia di trasporto sicuro, il che significa che probabilmente stai inviando la chiave in chiaro.

3) Il modo in cui implementate il meccanismo di autenticazione influenzerà il modo in cui è possibile memorizzare la chiave API.

Se intendi utilizzare la chiave API come chiave primaria, non puoi eseguire l'hash o crittografarlo poiché la ricerca è effettivamente impossibile se l'hash o la crittografia sono stati eseguiti correttamente.

Se ciò che fornisci all'utente è una combinazione di chiave primaria e chiave API, puoi quindi archiviare in modo sicuro la chiave API. Poiché la chiave è effettivamente una password, l'hashing dovrebbe essere sufficiente e raccomandato.

Ricordarsi di usare l'algoritmo correttamente. Generalmente, l'hashing richiede un sale per ogni record. Esistono diversi algoritmi di hashing. Alcuni, come bcrypt e scrypt, possono aggiungere latenza artificiale per rallentare la forzatura bruta. Questo potrebbe non essere adatto al tuo caso d'uso. Alcuni algoritmi non sono raccomandati, come MD5 e SHA1 in quanto si sono dimostrati insicuri.

Potresti cancellare la chiave senza sale e quindi puoi fare semplici ricerche. Ciò non sarà sicuro quanto l'hashing con il sale, ma la sicurezza di tale approccio potrebbe essere sufficiente per i tuoi scopi.

    
risposta data 23.02.2018 - 02:04
fonte

Leggi altre domande sui tag