Jump to content
nedo

[C++] Crypted IP to IP chat

Recommended Posts

Salut, va prezint o mica aplicatie la care lucrez de ceva vreme.

Inainte de toate tin sa multumesc lui Nytro si lui Python3 pentru ca mi-au raspuns la cateva intrebari.

In mare ce face programul asta al meu?

E un program de chat. Conectarea se face direct ip la ip.

Setezi catre ce ip vrei sa te conectezi, pe ce port asculta cel cu care vrei sa vorbesti si dai connect.

Simplu ca buna ziua.

The twist? Ceea ce se trimite este criptat cu o cheie publica - algoritmul utilizat? RSA.

De asemenea pentru siguranta transmisiei messajul este codat si cu base64 dupa cryptarea cu cheia publica.

Cheia publica si cea privata sunt generate la pornirea aplicatiei si cea publica este criptata in base64 si trimia catre persoana care vorbim atunci cand se initializeaza conexiunea catre aceasta.

Aviz totusi celor care folosesc routere - o sa va dea eroare ca portul este deja in utilizare, nu am avut cum sa testez dar tind sa cred ca trebuie facut port forwarding si totul ar trebui sa fie ok. Altfel puteti sa modificati programul sa nu mai porneasca serverul si doar sa il folositi sa va conectati la alte persoane :)

Va atasez atat un proiect pentru windows cat si pentru linux - testat pe debian, pe ambele sisteme s-a folosit IDE-ul code blocks.

Pentru versiunea de windows veti avea nevoie sa compilati libraria wxWidgets versiunea 2.8.12, librari statice, unicode, debug si release, si libraria crypo++ de asemena tot librarie statica, sau puteti direct folosi executabilul din folderul release alaturi de dll-ul de langa el.

Pentru linux am folosit libraria wxWidgets2.8.10 cea din repositoriy-ul debian, si librarya crypto++ tot din acelasi repository al debian 6(squeeze).

Atat proiectu de linux cat si cel de windows au deja compilate versiunea de release si de debug totusi pe linux s-ar putea sa nu il puteti rula daca nu aveti librariile wxWidgets si crypo++ instalate.

Link Proiect Windows RO

Link Proiect Linux RO

Link English windows project

Link English linux project

Sper sa va placa si sa va fie de folos.

Totusi o avertizare, la fel ca si ssl-ul aplicatia este vulnerabila unui atac man in the middle, totusi pentru siguranta de zi cu zi atat timp cat cineva nu incearca expre sa vada ce vorbiti, sunteti in siguranta. Din ce m-am documentat brutforce asupra unei key rsa este dificil de executat asa ca ar trebui sa fie ok. :)

Eng short vers:

I present you a simple ip to ip chat application. It connects by giving to the application the ip of the person you wish to talk to.

Above you have the links for the english version of the application.

The communication between the applications is done encrypted using a rather big RSA key.

Be aware that the application is vulnerable to a man in the middle attack.

Also if you have a router you will not be able to listen on any port without port forwarding. One way to work around this is to modify the project so that the mpSockServ is never initalized, this way you can only connect to other people, but you will be able to use the application behind a router.

To successfully compile the application you will need the wxWidgets library version 2.8.12 or above compiled with with unicode, as static link library, both release and debug, and crypto++ library also as static link library.

On linux the libraries from the debian squeeze repository ware used.

Le: Fixed, intrasem printr-un proxy online si a modificat link-ul. Acum ar trebui sa fie ok.

Le2: Am adaugat si proiectul pentru pentru interfata in limba engleza, atat versiune pentru windows cat si linux

Edited by nedo
  • Upvote 5
Link to comment
Share on other sites

Felicitari pentru proiect, ma bucur ca in sfarsit a finalizat cineva asa ceva.

Primesc asta la compilare, ai idee cum s-o fixez?


knight@knight-xxxxxxx ~/Downloads/Crypted ip2ip chat eng vers $ g++ Crypted_Ip2Ip_chatApp.cpp -o cc `wx-config --cxxflags` `wx-config --libs`
/tmp/ccooKF9C.o: In function `Crypted_Ip2Ip_chatApp::OnInit()':
Crypted_Ip2Ip_chatApp.cpp:(.text+0x25d): undefined reference to `Crypted_Ip2Ip_chatFrame::Crypted_Ip2Ip_chatFrame(wxWindow*, int)'
collect2: ld returned 1 exit status

Link to comment
Share on other sites

La utilizarea compilatorului din linia de comanda stau foarte prost, dar ce observ este ca, tu incerci sa compilezi doar Crypted_Ip2IpchatApp.cpp, trebuie inclus si Crypted_Ip2IpchatApp.h si CryptedIp2IpchatMain.h/cpp, in plus trebuie legata si libraria crypti++.

Ar fi mult mai simplu sa folosesci code::blocks si proiectul pe care l-am atasat.

Link to comment
Share on other sites

Felicitari, facusem si eu ceva asemanator (multi-user) :)), insa cred ca ar fi mai eficient (si cu scop universal) daca criptarea datelor s-ar face cu un algoritm simetric (AES testat, mult mai rapid), iar numai schimbul de chei (pentru a nu compromite securitatea conversatiei) s-ar face criptand cu un algoritm asimetric (RSA similar cum faceai pentru conversatii). Ce tine de base64 si orice alta forma de codare nu face decat sa mareasca cantitatea de date si sa o faca mai lizibila (in caz de octeti neprintabili), dar nu opreste pe nimeni sa dea un b64decode :).

Edited by cmiN
Link to comment
Share on other sites

Criptarea in base64 am utilizat-o doar pentru a fi sigur ca primesc datele cum trebuie, si ca nu am probleme la transformarea dintr-o parte in alta, exemplu cand trimiti unicode dupa linux si unicod dupa windows. Cand o sa am timp/chef o sa incerc sa aduc cateva imbunatatiri. Ce ziceti, poate trimitere fisiere intr-o maniera criptata? Cam ce alte optiuni ati mai dori. Eventual preluarea chei dintr-o cheie pgp, am inteles ca are la baza tot rsa.

Link to comment
Share on other sites

Ce idei ati avea in privinta sigurantei comunicarii? Se poate repara sistemul asta pentru a nu mai fi vulnerabil unui atac man in the midle? Din ce m-am documentat asta ar fi singura portita. In rest. De decripatat nu decripteaza nimeni, cel putin pentru inca 1-2 ani, o cheie rsa de marimea celei alese.

  • Downvote 1
Link to comment
Share on other sites

Foarte buna initiativa!

Daca pot sa-ti recomand ceva, acela sa implementezi pe langa algoritmul RSA sa mai adaugi si AES. Base64 este usor de spart, Eventual ai putea sa faci ceva de genul acesta (la alegerea utilizatorului bineinteles): RSA + AES + TWO Fish + Base64 + Serpent.

//EDIT:

Am uitat sa precizez un lucru.

Nu sunt priceput in Programare, insa cam cum functioneaza acest soft?

USER1: Scrie textul -> softul in cripteaza folosind RSA apoi BASE64 -> informatia criptata trece prin internet -> Ajunge la USER2 -> Softul de la USER2 primeste informatia criptata si foloseste algoritmul invers? BASE64 + RSA?

Edited by JaJe
Link to comment
Share on other sites

Foarte buna initiativa!

Daca pot sa-ti recomand ceva, acela sa implementezi pe langa algoritmul RSA sa mai adaugi si AES. Base64 este usor de spart, Eventual ai putea sa faci ceva de genul acesta (la alegerea utilizatorului bineinteles): RSA + AES + TWO Fish + Base64 + Serpent.

Informeaza-te despre RSA si ai sa afli ca e mai mult decat suficient pentru un chat. Fara base-ul acela.

+ diferenta dintre AES, Blow/two/alti fish, si base64

Cat despre un chat multi-user poti folosi un key-exchanger si AES Dar asta nu garanteaza ca un "man in the end" nu ar putea forta o autentificare si sa obtina si el cheia AES.

Cat despre man in the mid:

Cred ca poate fi combatut cu o criptare asimetrica. Am si inceput sa lucrez ceva javascript-php pentru a trimite datele de autentificare "sigur".

Cat despre chat (multi-user): mi se pare mai greu sa determini daca o persoana e legita decat sa criptezi informatia din chat.

O varianta buna ar fi Tuning (asemanator engimei) in care dispozitivele trebuie sa fie "sincronizate" cu serverul pentru a decripta informatia + ceva criptare asimetrica pentru a stabili sursa de postare a unui mesaj.

ON: topic mort si reinviat degeaba!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...