Utilizzo dei certificati per la sicurezza

10

Sto lavorando a un'applicazione che comprende WebAI C # (su siti Web di Azure) e un'app mobile nativa. In sostanza, un client crea una serie di messaggi utilizzando un'interfaccia Web e questi possono essere sfogliati nell'app mobile. Al momento, non ci sono restrizioni su questi dati.

Una nuova funzione richiede che alcuni client possano proteggere i loro dati, quindi solo le persone autorizzate possono accedere. Non vogliamo usare un nome utente / password poiché l'overhead sarebbe troppo grande. I nostri clienti potrebbero avere centinaia o migliaia di persone che vogliono sfogliare i loro messaggi.

Il mio approccio sarebbe stato:

  1. L'utente crea un servizio tramite il nostro portale web.
  2. L'utente carica una chiave pubblica in questo servizio, che archiviamo.
  3. L'utente distribuisce la chiave privata corrispondente utilizzando un MDM a tutti i dispositivi che desiderano sfogliare i messaggi.
  4. Le richieste HTTP per questi messaggi richiedono la presentazione del certificato.
  5. L'API convalida la richiesta utilizzando la chiave pubblica.

Ci sono due cose che mi infastidiscono.

Non useremo una CA per verificare la catena di certificati. I certificati del cliente potrebbero essere autofirmati. Non vedo questo come un grosso problema dal momento che sappiamo chi sono i nostri clienti.

Avere la chiave privata distribuita su molti dispositivi potrebbe essere considerata una cosa negativa, anche se credo che questo scenario sia piuttosto comune, ad es. autenticazione a MS Exchange. La responsabilità di proteggere la chiave privata risiederà con il cliente.

Quindi, alla mia domanda: Questo approccio sembra valido?

Inoltre, i siti Web di Azure supportano solo una configurazione on / off dei certificati client, rendendo impossibile l'unione di chiamate sia pubbliche che private. Avere due endpoint dovrebbe considerare una buona pratica, ad es.

Richiederebbe informazioni di intelligence nell'app per sapere dove andare, ma renderebbe la configurazione delle app molto più semplice poiché hanno il certificato del client o non lo fanno.

La mia domanda bonus: L'uso di due endpoint è una pratica comune?

    
posta Tomas McGuinness 13.12.2015 - 11:10
fonte

2 risposte

1

Le chiavi private dovrebbero esistere solo in un posto. Se si distribuisce la chiave privata a "utenti autorizzati", gli "utenti autorizzati" hanno tutti accesso all'originale e non possono essere revocati.

Il metodo corretto sarebbe:

  • Tutti i dispositivi condividono la loro chiave pubblica, mai la loro chiave privata.
  • La chiave pubblica è approvata dal titolare dell'account.
  • Tutte le modifiche registrate devono includere la chiave pubblica che è stata utilizzata, incluso il processo di approvazione sopra.
  • Se vuoi che i dati siano condivisi tra i nodi, ma non permettere al server / hacker di accedervi, generare una chiave casuale, criptare il pezzo di dati con la chiave casuale e memorizzarlo; quindi, crittografare la chiave casuale con ciascuna chiave pubblica a turno e memorizzarle. Quindi getta via la chiave casuale. Ogni utente autorizzato può prendere la chiave casuale crittografata, decodificarla con la sua chiave privata per ottenere la chiave casuale e usarla per decrittografare i dati.
risposta data 15.04.2016 - 04:44
fonte
0

Sto mettendo questo come una risposta separata, per attirare l'attenzione su di esso.

La domanda di cui sopra è un problema molto comune: "Voglio sicurezza, ma non voglio lo sforzo di sicurezza, quindi ho intenzione di ridurre la sicurezza"

Il tuo sistema sarà insicuro.

Il sovraccarico di gestione delle chiavi dei clienti sarà all'incirca lo stesso del sovraccarico di gestione delle password. Le persone perderanno le loro chiavi, così come perderanno la password. Le persone avranno le loro chiavi compromesse, molto più facili, dal momento che non hanno inserito una password. Se un dispositivo viene rubato, fai clic su un segnalibro e ti trovi.

La pratica di archiviare il loro certificato e verificare il certificato da un database, piuttosto che seguire la catena di CA, va bene - si sta essenzialmente verificando la chiave pubblica. Questo è tutto ciò che devi fare. Distribuire le stesse chiavi su più dispositivi è una cattiva idea.

    
risposta data 14.06.2016 - 23:39
fonte

Leggi altre domande sui tag