Come archiviare in modo sicuro le chiavi API

4

Ho bisogno di memorizzare le chiavi API per i miei utenti. Queste chiavi sono estremamente preziose in quanto sono utilizzate per acquistare e vendere oggetti. Alcuni utenti non vorranno dare queste chiavi a nessuno, e sto cercando di capire una soluzione migliore rispetto alla semplice memorizzazione in un database.

Sarebbe bello mantenere il controllo della chiave con l'utente. Considero di fare uno script open source che possono essere distribuiti su un server e la mia chiamata all'app o simili.

Somone ha suggerito che potrebbe essere possibile configurare un proxy per fare qualcosa senza alcun codice, ma questo è tutto al di là della mia esperienza.

Qualcuno ha altre idee?

modifica: per ulteriori chiarimenti

Il mio sistema è un'app Web. Ogni utente dà al mio sistema la sua chiave API, che consente all'applicazione web di scambiare per suo conto (comprare e vendere oggetti). L'essenza del sistema è che in determinate circostanze automatizzate il sistema vorrà negoziare per conto dell'utente.

Sto prendendo in considerazione un intervento manuale con 2FA, che a mio parere sarà abbastanza strong, ma è sub-ottimale in quanto l'utente non sarà in grado di reagire abbastanza velocemente tutto il tempo.

Considero di creare un codice partner leggero, open source, che l'utente può implementare sul proprio server da qualche parte. L'idea è che può essere verificato in modo indipendente come non dannoso e l'utente può archiviare le chiavi.

Non sono sicuro che qualcosa sia ottenuto da questo approccio oltre a un hacker che deve scoprire la posizione dello script, e anche se il mio server è compromesso, possono semplicemente inviare scambi usando il mio sistema a questo script allo stesso modo come se tutto fosse sul mio server.

Suppongo che l'idea di un server proxy sia qualcosa di simile a quanto sopra, ma qualcosa a un livello inferiore rispetto a un'app in esecuzione sul server. Temo di non avere una conoscenza sufficiente dell'amministratore del server per speculare su come potrebbe funzionare.

    
posta iKode 27.08.2018 - 17:17
fonte

1 risposta

3

Grande domanda, e una che viene spesso (anche se sempre con sfumature diverse, quindi non c'è una buona risposta generale). Una ricerca rapida ha trovato alcune domande correlate:

In generale, devi decidere a quale categoria di utilizzo appartengono le tue chiavi, che ti diranno quali opzioni hai a disposizione:

1. Accesso manuale

Con questo intendo che la chiave è necessaria solo quando c'è un umano alla tastiera. Questo scenario è abbastanza facile da risolvere: ad esempio è possibile crittografare la chiave con una password inserita dall'utente. Hai ancora bisogno di pensare a far rispettare le password forti per mitigare gli attacchi di forza bruta, ma è abbastanza standard; guarda come SSH protegge con password le chiavi ssh per ottenere ispirazione.

2. Accesso automatico

Se i tasti sensibili devono essere archiviati in modo tale che possano essere utilizzati da un processo automatizzato senza elementi umani sulla tastiera, si sta verificando un problema molto difficile a causa dei requisiti in conflitto che la macchina deve avere accesso, ma un utente malintenzionato che compromette la macchina non dovrebbe avere accesso.

Le soluzioni standard a questo problema includono:

  • Allegare una smart card USB al server o emetterne una per ciascun utente.
  • Archiviazione delle chiavi sul lato server in un deposito protetto che utilizzerà le chiavi per conto dell'utente e richiede agli utenti di autenticarsi utilizzando un'autenticazione a due fattori strong.
  • Se applicabile, Moduli di sicurezza hardware .

Chiaramente la soluzione applicabile dipende molto dall'architettura del tuo ambiente.

    
risposta data 27.08.2018 - 18:17
fonte

Leggi altre domande sui tag