Cercherò di essere il più breve possibile al più presto possibile, sono nuovo di così, per favore, spogliati con me! Potrei commettere un errore enorme e nemmeno realizzato! Per favore aiuto! [facepalm emoji]
Requisiti dell'applicazione:
- Il frontend deve essere un sito web
- L'utente deve fornire la propria API TOKEN e SECRET a un'API di terze parti
- Mentre sei loggato sul sito web, l'utente può attivare manualmente azioni su tale 3rd API attraverso l'interfaccia utente della mia applicazione
- Mentre l'utente è disconnesso, il mio servizio deve effettuare chiamate programmate al servizio di terze parti (leggi come: un server deve essere in grado di leggere e inviare le sue chiavi tramite POST a un servizio di terze parti in testo semplice)
Ecco i passaggi che sto prendendo per ridurre il mio attacco di superficie:
-
Distribuisci un micro-servizio che sarà responsabile solo della memorizzazione delle chiavi e dei processi in background
-
Genera una chiave RSA per il mio micro-servizio
-
Nascondi il micro-servizio da parte dell'utente avendo solo l'url sul lato back-end (usa il mio server http come proxy)
Quando l'utente esegue manualmente un'azione tramite la mia interfaccia utente:
-
Genererò una chiave RSA sul lato client usando la sua password (deve essere strong) come passphrase e genererò una chiave a 1024 bit, invierò la chiave pubblica al server HTTP che la invierà al SECRETS SERVER
-
Sul server segreto se l'utente non è mai stato registrato salverò questo id_utente e la chiave pubblica associata
-
Quando l'utente inserisce le sue chiavi, crittograferò le chiavi con il tasto PUB del mio SECRETS SERVER e firmo con la chiave privata dell'utente
-
Pubblicalo sul mio SERVER HTTP che pubblicherà sul mio SECRETS SERVER
-
Il mio server segreto controlla se il messaggio è stato firmato da pub_key che esclude e se lo è, salva i dati utente crittografati con le proprie chiavi private (server) sul database
Quando deve essere eseguito un processo in background:
- Il SECRETS SERVER legge la chiave dal database, decrittografa l'API KEYS, esegue l'HTTP POST e rimuove il testo in chiaro dalla memoria
Cosa potrebbe andare storto? (per quanto ho capito!)
-
Qualcuno accede al mio server HTTP, scopre il mio SECRET SERVER, vi entra, legge le credenziali del database e la chiave privata, prendo le chiavi API e scappa.
-
Qualcuno ha accesso alle mie credenziali, trova il computer server segreto, riesce a scaricare il database, trova la chiave privata, ottiene i tasti API e scappa.
Domande chiave:
-
Cos'altro potrebbe andare storto?
-
Generare una chiave RSA sul lato client utilizzando la password dell'utente come passphrase è "abbastanza buono"?
-
La chiave RSA generata sul client sarà costantemente identica indipendentemente dal computer che accedono?
-
Questo ha senso?
-
On questo thread se ho capito bene, è consigliabile "allungare" la passphrase prima di generare la chiave, ma dato che un utente può decodificare il file .js sul mio sito web, scoprirà anche come viene estesa la chiave, giusto?
Grazie per aver letto tutto! Apprezzo molto ogni consiglio.