Sto lavorando su un sistema di chat e voglio aggiungere un qualche tipo di sicurezza (non solo HTTPS con SSL poiché l'ho letto può essere sniffato e decrittografato con alcuni strumenti). Ora, le mie conoscenze in crittografia sono scarse, ma sono disposto a imparare, fornendo ciò che sto chiedendo è possibile fare:
Tenendo conto c'è un intercettatore (cliente C) che ignora HTTPS all'inizio di tutte le connessioni (diciamo MITM, proxy, firewall, ecc.) e che ho i miei concetti, questa è la procedura che ho in mente:
Invia
- Il client A si connette a un'interfaccia web che contiene all'interno del codice di risposta (javascript) una chiave pubblica (ad esempio, a123456789b) generata casualmente su intervalli (la rinegoziazione delle chiavi può avvenire in seguito).
- La password dell'utente viene cancellata localmente e l'hash viene inviato per verificare che sia uguale nel server. Se lo è, continua (ad esempio, DEADBEEF).
- Così ora ho una chiave pubblica (a123456789b) e una chiave privata (DEADBEEF). Posso usare entrambi per crittografare un messaggio e inviarlo.
Ricezione:
- Il client B si connette al server e ottiene la stessa chiave pubblica (a123456789b) e ottiene un altro hash (poiché la sua password è diversa, ad esempio, FACEFEED).
- Il client B riceve un messaggio dal client A e ...
Ecco il mio show-stopper: Qualunque cosa B riceva, C può vederlo e riprodurlo dato che ha la chiave pubblica e l'hash (e riproducendo voglio dire riprodurre i dati invece di inviare nuovamente le richieste al mio server (che sarebbe invalidarli, ovviamente)).
Come vedo, non importa se il messaggio può essere decodificato con DEADBEEF (se è inviato insieme al messaggio crittografato) o con FACEFEED, poiché C sta guardando l'intero protocollo e può decifrare ciò che B riceve (ma non cosa invia?)
Sono qui perplesso. So che C può hackerare il codice client inserendo la propria chiave pubblica o funzioni, ma riceverà e invierà solo rifiuti dall'altra parte. Se è così, sono contento di questo perché poi posso mostrare un avvertimento e quant'altro. Ciò che mi preoccupa è come evitare C per riprodurre i pacchetti e quindi decifrare i messaggi, poiché per decrittografarlo ho bisogno della chiave pubblica e di FACEFEED o DEADBEEF, e quei 3 sono inviati sullo stesso canale?
Qualsiasi aiuto è benvenuto! per favore ricorda che non conosco gran parte della crittografia, ho vagato attraverso molti link di Wikipedia, (scambio di chiavi DH, PFS, MTProto, ecc) ma ho capito solo circa il 50% di tutti e questo è quello che ho scoperto con ma ora ho bisogno di aiuto.