La sicurezza di questo schema dipende in gran parte da quanto è buona la tua generazione di chiavi. Se un attaccante osserva due scambi di chiavi, può calcolare lo xor delle due chiavi non offuscate:
I valori k a e k b sono due chiavi non offuscate. k A e k B sono le chiavi offuscate associate. o è la chiave di offuscamento statico.
k A = k a ^ o
k B = k b ^ o
k A ^ k B = k a ^ o ^ k b ^ < em> o
Le due istanze di o si annullano, dandoci k a ^ k b . Funziona con due chiavi di sessione scelte.
Ciò potrebbe consentire a un utente malintenzionato di sfruttare i punti deboli del generatore di numeri casuali, eliminando gli stati interni che non possono produrre output consecutivi che mostrano tale modello.
Naturalmente, se un utente malintenzionato scopre il valore non offuscato di una chiave, con qualsiasi mezzo, allora può semplicemente xor la chiave offuscata con la chiave non offuscata per trovare o , e quindi interrompere tutte le comunicazioni future.
In realtà, questo è un pessimo modo di farlo, perché un utente malintenzionato è probabilmente in grado di accedere alla tua applicazione. Semplicemente eseguendo il reverse engineering del tuo binario, l'hacker può scoprire questa chiave codificata e interrompere tutte le comunicazioni. Stai facendo affidamento sull'oscurità per la tua sicurezza, che va contro Principio di Kerckhoff - cioè "il nemico sa il sistema ".
Recentemente ho fatto qualcosa di simile con un'applicazione che richiedeva quasi esattamente la stessa strada, e mi ci è voluta solo un'ora per interrompere completamente la crittografia e il reverse engineering del loro formato di pacchetto interno. Da lì ho scritto uno script Python che decrittografa automaticamente l'intera sessione da un file di cattura del pacchetto pcap.
Se stai cercando la sicurezza delle comunicazioni end-to-end, vai per qualcosa come SSL. La maggior parte delle lingue dispone di librerie per l'implementazione, quindi non dovrebbe essere troppo difficile.
Se non hai il protocollo SSL, dovrai gestire quanto segue:
- Generazione della chiave per la forza crittografica.
- Scambio chiave (ad esempio Diffie-Hellman o chiave pubblica RSA codificata)
- crittografia e decrittografia 3DES con una modalità operativa appropriata e scambio IV.
- Autenticazione e controllo dell'integrità, ad es. via HMAC.
- Difesa contro attacchi a tempo e altri attacchi laterali.
- Corretta gestione degli errori.