Crittografia della comunicazione TCP?

0

Sto usando un'applicazione exe che comunica con un dispositivo Raspberry Pi con porte TCP configurate manualmente. L'applicazione invierà i dati dalla porta 1234 al Raspberry Pi che sta ascoltando il 19000. Ma la comunicazione non è crittografata. Qualcuno può suggerirmi come posso fare la crittografia tra queste due porte?

Ho navigato un po 'e ho avuto l'idea di implementare SSL su TCP. Se qualcuno ha una soluzione migliore mi piacerebbe sentirlo.

    
posta zappa 05.10.2018 - 08:56
fonte

3 risposte

6

I surfed a bit and got the idea that I can implement SSL over TCP

Utilizzare SSL / TLS su TCP è una buona idea.

Si tratta di un protocollo consolidato, ben noto e ben studiato in cui è possibile trovare numerose librerie e molta documentazione. E, correttamente utilizzato, offre una strong crittografia e anche protezione contro lo sniffing passivo e attacchi man-in-the-middle attivi.
Ma assicurati di utilizzare le recenti librerie TLS e di seguire la documentazione attuale e ampiamente pubblicata in modo da utilizzare effettivamente la sicurezza offerta da TLS. Inoltre, non provare a "imbrogliare" disabilitando la convalida dei certificati, ecc., Mentre sembra che funzioni, di solito non sarà sicuro.

Dato che non hai molta esperienza in quest'area, non dovresti in nessun modo cercare di creare il tuo livello di protezione in quanto è molto probabile che tu introduca problemi di cui non sarai a conoscenza - vedi anche Perché non dovremmo eseguire il rollover? .

    
risposta data 05.10.2018 - 12:48
fonte
1

Non hai menzionato quali sono i sistemi operativi coinvolti (presumo Linux sull'rPi) né se hai accesso / agio con la modifica del codice.

Sebbene sia possibile applicare la crittografia nel client e nel server, sarebbe molto più semplice implementare un tunnel tra i 2 dispositivi: si punta il client corrente su un nuovo servizio sull'host client e si limita il server ad ascoltare un servizio complementare in esecuzione su rPi. Tra i 2 nuovi servizi la connessione è crittografata.

Ci sono molte scelte per la tecnologia che usi i nuovi servizi, ma le scelte più pratiche sono basate su TLS o ssh. Per TLS puoi usare stunnel o perno (lo stesso servizio, configurato in modo diverso a ciascuna estremità) per ssh si usa port forwarding da un client ssh come putty / plink / ssh a opensshd sull'rPi. In entrambi i casi è necessario configurare il firewall sull'rPi per accettare solo le connessioni sulla porta 19000 da localhost.

Entrambi i metodi si basano su coppie di chiavi, ma il meccanismo basato sul TLS ha molte più scelte e una potenziale complessità. OTOH, se stai usando un client MSWindows, l'interfaccia utente di stunnel è forse più facile da vivere rispetto a stucco o plink.

    
risposta data 05.10.2018 - 13:11
fonte
-3

Ciao Zappa e benvenuto,

I miei suggerimenti sono che inizi con un semplice algoritmo come RC4, ad esempio, e mentre stai imparando puoi migliorare la tua soluzione e scegliere come TLS il tuo obiettivo finale. A seconda della lingua che stai usando ti consiglierò di utilizzare librerie che rendono la crittografia facile per te, non ha senso implementare AES da solo. Come librerie che puoi usare ti consiglierò di iniziare con openssl e libsodium, entrambi sono supportati nella maggior parte delle lingue e sarà facile integrarli nel tuo programma.

    
risposta data 05.10.2018 - 09:55
fonte

Leggi altre domande sui tag