Condividi una chiave pubblica da un'app per verificare l'autenticità dei dati inviati

2

Sono abbastanza nuovo per gli argomenti di sicurezza delle informazioni e sono alla ricerca di una guida per implementare la trasmissione sicura di dati statistici da un'app a un server. Inoltre, non voglio alcuna conoscenza dei dati memorizzati sul server.

Questo è il mio approccio:

  1. Uno sviluppatore crea una coppia di chiavi e inserisce la chiave pubblica nell'app.
  2. L'app genera una chiave pubblica e una privata all'avvio per la prima volta. Invia la chiave pubblica al server e ottiene in cambio un ID utente. Quindi scarta la chiave pubblica generata.
  3. Ogni volta che l'app invia dati, lo fa crittografando i dati con la chiave pubblica dal server e firmandoli con la propria chiave privata.
  4. Lo sviluppatore può quindi recuperare i dati per ciascun ID utente dal server e verificare l'autenticità con la chiave pubblica archiviata con l'ID utente.

E qui ci sono le mie domande:

  1. È sufficiente inviare la chiave pubblica generata sul dispositivo una volta o dovrei utilizzare uno schema più sofisticato per verificare che i dati vengano inviati da questo utente esatto? Non c'è accesso e non mi interessa chi sia l'utente. Ma voglio assicurarmi che un utente malintenzionato non possa inviare dati errati falsificando l'ID utente senza essere rilevato.
  2. Che cosa devo fare per rilevare i dati mancanti? Va bene se alcuni dati vengono persi a causa di problemi di rete. Sto considerando l'utilizzo di numeri interi crescenti nei dati crittografati. Questo rivelerebbe se qualcuno ruba la chiave privata e il numero corrente dall'app e invia dati errati.
  3. Infine, ci sono alcune implementazioni concrete che un utente inesperto come me può usare senza fare confusione?
posta Paul 08.09.2017 - 17:34
fonte

1 risposta

1

Domanda 1

I tipi di attacco MiTM possono essere facilmente evitati implementando la crittografia e la firma digitale. Dato che si cripta e si firmano i dati inviati, e supponendo che il dispositivo del cliente non sia compromesso, è giusto dire che anche i dati sono stati modificati, lo saprete se implementate queste cose nel modo giusto. Puoi rafforzare il tuo sistema utilizzando TLS e la chiave pubblica, in questo modo, anche se qualcuno vuole intercettarlo, il client lo saprà perché il certificato è diverso.

Domanda 2

Non puoi fare molto su di esso se usi solo crittografia asimmetrica e firma digitale, per maggiori dettagli, guarda il link . Tuttavia, se si desidera chiedere al cliente di digitare un OTP che la chiave master conoscerà solo da entrambe le parti e scambiato in modo sicuro. È possibile rilevare tale attacco anche se la chiave privata è trapelata poiché l'OTP può cambiare nel tempo o aumentando i contatori, dipende da quale OTP si utilizza. Dai un'occhiata a RFC 4226 e RFC 6238 per avere qualche idea. Nota: la macchina generatrice OTP dovrebbe essere diversa dalla periferica di comunicazione e nessuna connessione tra di loro.

Domanda 3

Dipende dal linguaggio del computer che stai usando, puoi provare a trovare un'API o un framework OpenPGP, questo è l'unico software che so che può fare ciò che vuoi senza molta conoscenza (richiede ancora un po 'di apprendimento, non tanto come farlo da zero). Se non ci riesci, sei sfortunato dal momento che fare cose crittografiche in modo corretto richiede un sacco di passaggi e un lungo apprendimento. Per esempio. dovresti prima criptare i dati, poi calcolare l'hash di esso, firmarlo con la chiave privata, mettere tutto in un unico pacchetto, infine inviarlo al server. Questi passaggi sono per lo più separati in un framework che è necessario chiamare ciascuno di loro individualmente.

    
risposta data 14.09.2017 - 15:17
fonte

Leggi altre domande sui tag