Come implementare un servizio Web sicuro?

0

Voglio creare un servizio web in cui possiamo effettuare il login in questo sistema con nome utente e password. Dopo che l'utente seleziona un file dal suo computer e invia questo file sul server. Voglio crittografare questo file per un gruppo di utenti (io voglio usare la crittografia ABE). Ora quali sono i passaggi per crearli?

La mia idea è: Accedi al sistema con nome utente e password di base. Memorizzo il nome utente e la password nel mio database in una tabella.

Dopo con la crittografia ABE, dove posso salvare la chiave privata principale e la chiave pubblica principale? Nel mio database?

Dopo l'accesso, il sistema crea una chiave segreta dell'utente. Ho salvato la mia chiave segreta nel mio database. Dopo aver usato la chiave pubblica principale per crittografare il file (lo recupero da una query SQL) e caricarlo sul mio server e quando ripristino il file, lo decrypt con la mia chiave segreta (l'ho recuperato con la query SQL).

Questo approccio è corretto? C'è un approc nella maniera più corretta?

    
posta JLo 14.09.2016 - 09:34
fonte

3 risposte

3

In primo luogo, il tuo approccio per username / password - mostra che sei un principiante alla sicurezza, il che va bene, ma significa che probabilmente non dovresti progettare un archivio sicuro. Tuttavia, ecco alcuni commenti più costruttivi:

1) NON memorizzi MAI password utente. Punto. Quello che fai è memorizzare una versione salata e hash della loro password. Quando tentano di accedere, salt e hash, confrontarli con l'hash memorizzato. Da OWASP: link

2) Non c'è motivo di usare la crittografia asimmetrica qui - puoi semplicemente crittografare e decifrare dal tuo archivio dati. Memorizza la tua chiave (e IV) in un luogo sicuro: tradizionalmente, questo è un file accessibile solo alla tua applicazione sul server, in cui ti assicuri che l'applicazione sia in esecuzione come utente isolato. Tuttavia, i sistemi più moderni per l'archiviazione delle chiavi comprendono HSM (moduli hardware, molto costosi) o sistemi come Keywhiz o Hashicorp's Vault: complicati ma economici. Questo è meglio se si desidera la rotazione delle chiavi (buona!) E la ridondanza nei server delle applicazioni.

Seriamente, se questa è una vera applicazione, queste sono cose che hanno bisogno di esperti al di là di quelle casuali su Internet - ci sono molti errori sottili che puoi fare che svaluteranno tutte le altre misure di sicurezza che prenderai. Devi fare tutto bene, ottenere un aiuto professionale.

    
risposta data 14.09.2016 - 17:29
fonte
0

Is this approch correct ?

Troppo ampio - come chiedere se è "sicuro". Questo dovrebbe guadagnare un voto per chiudere. Ma hai anche posto la domanda:

where can I save the Master Private Key

(Dove si salva la chiave pubblica non è un problema di sicurezza oltre a garantire la sua disponibilità).

Una soluzione è un HSM, ma che protegge solo l'acquisizione della chiave - sono necessarie misure aggiuntive per fermare l'abuso della chiave.

In alternativa .... Non puoi davvero cambiare la chiave frequentemente. Ma puoi inserire una passphrase su di essa / crittografarla usando un algoritmo asimmetrico e cambiare regolarmente la passphrase. E la domanda su come memorizzare le credenziali di sicurezza all'interno di un'applicazione web è stata sollevata un sacco di volte prima di qui:

  • memorizzarlo sul client, non sul server
  • memorizza solo in memoria sul server
  • assicurati che ci sia una separazione dei privilegi tra le parti dell'applicazione che devono usare la chiave e tutto il resto sul server
risposta data 14.09.2016 - 14:29
fonte
0

In base alle tue domande, sei molto più bravo nell'usare alcuni schemi esistenti invece di inventare i tuoi. Più in particolare, dovresti evitare di usare cose come la crittografia basata su attributi - è stata proposta abbastanza di recente, e, sebbene sembri molto semplice, non ci sono molti esempi a livello di libro da seguire, ed essere ingannati dalla semplicità del metodo, potrebbero implementare qualcosa completamente irrilevante.

A parte questo noioso brontolio, l'obiettivo funzionale e le garanzie di sicurezza del sistema non sono descritte abbastanza bene da proporre una soluzione.

Sarebbe molto utile se spiegassi quali garanzie di sicurezza e aspettative funzionali. Che cosa fa il sistema con i dati, chi dovrebbe vederli e regolati in base a quali requisiti dovrebbero vederli?

Che tipo di accesso hanno gli utenti al sistema, ecc.

    
risposta data 15.09.2016 - 15:16
fonte

Leggi altre domande sui tag