Sistema di crittografia chat che evita lo sniffing del protocollo e quindi la ripetizione della chiave + decrittografia?

0

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

  1. 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).
  2. 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).
  3. Così ora ho una chiave pubblica (a123456789b) e una chiave privata (DEADBEEF). Posso usare entrambi per crittografare un messaggio e inviarlo.

Ricezione:

  1. 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).
  2. 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.

    
posta Alemar 28.09.2014 - 00:55
fonte

1 risposta

1

not just HTTPS with SSL since I've read it can be sniffed and decrypted with a few tools

Questo non è vero.

In generale (e nel caso di SSL / TLS) gli attacchi di replay sono impediti usando un "numero usato solo una volta" (ad es. nonce). Se l'altra parte riceve il nonce due volte, è ovviamente un attacco di replay.

Per quanto riguarda il post sul blog hai collegato:

To do so, it dynamically generates a certificate and signs it with a the private key of a CA certificate that the client must trust.

Affinché ciò avvenga correttamente, un utente malintenzionato deve avere fisicamente ottenuto l'accesso alla macchina e installato un nuovo certificato CA attendibile (oppure ha compromesso la chiave privata di una già affidabile, che molto probabilmente sarebbe un problema di sicurezza globale). Questo attacco non funzionerebbe se tu fossi semplicemente un man-in-the-middle (senza avere anche un certificato CA per firmare i certificati contraffatti con).

    
risposta data 28.09.2014 - 02:35
fonte