13 iul. 2012

crypper - criptare/decriptare text bazata pe un passphrase

Stateam aseara si mi-am dat seama ca sunt deci exist. Si atat. Doar sunt. Nu prea am facut ceva pentru omenirea asta, si cum mi s-a mai zis ca sunt egoist m-am gandit sa fac un mic programel.
Si asa ca aseara am avut eu o idee nebuneasca. Asa nebuneasca incat doar jumate din ea s-a realizat. Totusi eu zic ca e bine si atat.

Q&A.
Ce e pana la urma programelul?
E de fapt un script. De fapt sunt doua. Un script cripteaza, celalalt decripteaza, dupa un passphrase stabilit de voi.

De ce ai facut programele?
Sincer? Nu prea stiu! Just for fun? Pentru ca pot? De ce nu?

Care e faza cu passphrase-ul?
Scripturile citesc dintr-un fisier numit (intuitiv, zic eu) passphrase. Fisierul ar fi bine sa fie pe langa scripturi, atlfel s-ar putea sa nu mearga. Locatia se poate modifica in scripturi. Default ar fi bine sa ramana langa fisiere. El face smecheria posibila.

OK, si... cum functioneaza?
Pai e simplu. Creati passphrase-ul vostru. Trebuie sa aiba 16,24 sau 32 de caractere! Il scrieti in fisier, salvati fisierul, rulati programelele.

Bine, dar cum functioneaza?
E simplu. Ne folosim de hashlib. Ar trebui sa vine default in majoritatea distributiilor. Folosim si Python. Python 2.x. Eu am scris acolo la enviroment sa ruleze cu python. Daca va da eroare sau ceva, schimbati in python2. Sunt multe distributii pe piata si fiecare ambaleaza python cum vrea muschii developerilor. Trebuie sa stiti exact ce versiune aveti. Pe Python3 nu merge. Folosind hashlib, Python, AES (e rapid) si acel passphrase, generam un hash unic pentru un string. Pentru detalii mai multe accesati link-ul. Practic, acel passphrase e totul.
Stiti cu totii ca atunci cand erati mici aveati voi un limbaj secret. A=1, B=2, C=3, etc. Dar la fel de bine se putea ca 1=Z, Y=2, X=3, etc. In orice caz, ala era passphrase-ul vostru. Voi stiati cum sunt rotite literele si ce insemnau cand erau puse impreuna. La fel e si aici. Folosind stringul ala de 16,24 sau 32 de caractere, creati un mic secret. In functie de passphrase se "rotesc" literele. Ma rog, nu e chiar exact asa, dar v-ati facut o idee. Chestia interesanta e ca si o simpla interschimbare a doua caractere din passphrase schimba tot rezultatul. Practic posibilitatile de creare de passphrase-uri sunt de ordinul miliardelor. Aranjamente de 28+10, luand in calcul doar literele si cifrele, luate de cate 16, cat lungimea minima a passphrase-ului inseamna 465322312113382563840000 de passphrase-uri unice. Oricum, securitatea nu e neaparat importanta aici, de aia am si ales varianta cu citire din fisier. Fiind pe linux, puteti alege ca doar voi sa puteti citi fisierul, in caz ca aveti mai multi utilizatori pe PC si vreti neaparat intimitate. Cum am spus mai sus, e ceva just for fun!

La ce ma ajuta? Cum il utilizez?
Hai sa vedem caz real.
Vreti sa salvati un mesaj foarte important pe PC, dar nu vreti ca sotia,copilul,prietena sa stie de el. Sau sa stie, dar sa nu-l poata vedea!
Ce facem?
Criptam. Intai gandim un passphrase, schimbam defaultul de 1234567887654321 din fisier si salvam. Apoi deshidem un terminal si rulam encode.py. Ni se cere sa bagam textul, iar dupa ce terminam sa apasam enter si Ctrl+D. Ni se afiseaza hash-ul. Putem salva apoi hash-ul intr-un fisier. Eventual putem pune passphrase-ul ca numele fisierului, dar nu recommand :))
Important e sa tinem minte passphrase-ul, pentru ca il folosim si la decodare! Daca nu il mai tinem minte, putem deja sa ne stergem la fund cu hash-ul.
Acuma vrem sa decodam hash-ul.

Cum decodam?
Daca am sters fisierul sau passphrase-ul din fisier, avem grija sa-l punem la loc. Neaparat pe acelasi. Rulam fisierul decode.py din terminal, lipim hash-ul, apasam enter si ne apare textul in fata. Daca am schimbat passphrase-ul, textul decriptat va arata in genul asta:
Decrypted text:
�Du �S�L�u̫�pì �'dh���'��w H
In conditiile in care hash-ul criptat cu passphrase-ul original este
B9nbjWOjf31wqTPNlDL/XVt0OogxcZDnszxATEjuElk=
Ah, acuma, folosind passphrase-ul original puteti decoda hash-ul de mai sus. Ar trebui sa returneze "pac".
Banuiesc ca v-ati prins ca oricine are passphrase-ul poate decoda hash-ul, asa ca daca chiar aveti date importante si vreti sa folositi scripturile mele, aveti grija de passphrase!

Licenta?
GPL.

Sugestii?
Primesc.

Link?
Git users: git://github.com/StefanescuCristian/crypper.git
Restul: https://github.com/StefanescuCristian/crypper.git