Crittografia di messaggistica sicura

0

Vorrei sapere la tua opinione su quanto segue:

Sto sviluppando un messenger Android, in cui tutte le comunicazioni provengono dall'app - > php - > mysql, da dove verrà tirato dal ricevitore nell'ordine opposto. Quindi ho pensato a come renderlo sicuro e ho pensato a quanto segue:

La prima volta che l'app viene installata, una chiave viene generata dal server e inviata all'utente. La chiave viene quindi utilizzata per crittografare (forse con AES256) la successiva comunicazione al server. Quindi nella successiva comunicazione DAL server, una nuova chiave viene ricevuta nel pacchetto crittografato dalla chiave precedente, e in questo modo ogni messaggio viene crittografato da una nuova chiave. Quindi, se stai sniffando i pacchetti, devi essere lì la prima volta che l'app è stata installata per avere la possibilità di rompere la sicurezza. Dal lato PHP, ho diversi script, ma sto considerando di avere uno script di "entrata", che riceve un identificativo di quale degli altri script per cui la comunicazione è pensata, ma non il vero nome dell'altro script da affrontare. In questo modo gli hacker non conoscono il nome di nessuno degli script tranne che per lo script di "entrata". Ho già impostato tutto il codice negli script PHP con istruzioni PDO / preparate. Ho letto da qualche parte che i database mysql sono criptati per impostazione predefinita. C'è qualche ragione per cui dovrei prendere ulteriori provvedimenti per proteggere i dati nel database mysql?

Altre idee?

    
posta Corey Hart 07.07.2017 - 13:19
fonte

1 risposta

1

Lo schema di crittografia completo che hai proposto non è affatto sicuro dalla definizione di oggi; gli utenti di un messenger si aspettano "FORWARD SECRECY" - il che significa che il tuo server non deve mai essere in grado di leggere / decrittografare qualsiasi contenuto di messaggi che viene inviato da un client a un altro.

  • "Ho letto da qualche parte" non è una fonte valida per qualsiasi problema di sicurezza
  • mysql non è in grado di salvare direttamente il backend crittografato, puoi mantenere il backend su un disco crittografato ma il 99,99% dei possibili attacchi avverrà quando il sistema è attivo e funzionante, quando la crittografia del disco è inutile
  • la crittografia del back-end del database non aiuterà gli aggressori che hanno accesso ai dati privilegiati di accesso a mysql (come quelli utilizzati nel tuo script php)
  • anche la crittografia dei singoli campi del database anziché l'intero database non aiuta gli aggressori che hanno ottenuto l'accesso al codice php a meno che non sia mantenuta la corretta segretezza di tutti i messaggi

La crittografia simmetrica ("forse con AES256") è protetta solo quando le chiavi vengono scambiate e mantenute private, proponi di trasferire la chiave iniziale in testo semplice, facendo così affidamento sulla prima connessione per cercare di essere sicuro. Questo è un design orribile per applicazioni sicure / scambio di dati. Perché non utilizzare SSL / TLS per proteggere la connessione con il server? Fondamentalmente fa ciò che si voleva fare, ad eccezione del fatto che il pacchetto "iniziale" viene trasmesso su una connessione protetta utilizzando un metodo di crittografia asimmetrico per fornire le chiavi simmetriche utilizzate per il resto della connessione. E ora devi solo preoccuparti di implementare la corretta segretezza in avanti.

Per maggiori dettagli e corretta implementazione di SSL / TLS e segretezza di inoltro, consiglio di leggere la documentazione openSSL . OpenSSL offre tutte le funzioni crittografiche necessarie per implementare un messenger sicuro su Internet.

    
risposta data 07.07.2017 - 14:55
fonte

Leggi altre domande sui tag