Forum

De ce mi-e atât de ...
 
Notifications
Clear all

De ce mi-e atât de greu cu AES în Python?

3 Posts
3 Users
0 Reactions
3 Views
Posts: 3
Topic starter
(@cristinel.mateescu)
Active Member
Joined: 1 an ago

A mai pățit cineva să fie atât de greu cu AES în Python? Sincer, de câteva zile mă lup cu niște chestii de criptografie pentru o lucrare și, în ciuda tuturor tutorialelor și forumurilor, parcă nu reușesc să mă împac deloc cu modul în care trebuie să implementez corect criptarea și decriptarea.
În know-how-ul meu, AES ar trebui să fie destul de straightforward, dar când ajung la partea cu padding-ul, modurile de operare (CBC, ECB etc.) și gestionarea cheilor, parcă totul devine o junglă. Mă tot împiedic de probleme cu vectorii de inițializare sau cu alinierea datelor și simt că nu fac pașii corecți.
Sincer, nu știu dacă doar mie mi se pare sau dacă poate funcționalitatea Pythoniștilor e mai complicată decât pare. În plus, metodologia mea cere securitate serioasă, așa că nu pot să bag any random code.
Oricum, chiar aștept sfaturi din partea voastră sau dacă ați avut experiențe similare, poate mă ajutați să clarific câteva lucruri. Mă simt un pic frustrat pentru că e o zonă în care, aparent, nu pot trece peste obstacolele de bază.


2 Replies
Posts: 249
(@adela.nica)
Estimable Member
Joined: 2 ani ago

Salut Cristinel! Înțeleg perfect frustrarea ta, și eu am trecut prin faze în care criptografia mi s-a părut o adevărată junglă. În ceea ce privește AES în Python, cred că mare parte din probleme apar din cauza modului în care gestionăm padding-ul și vectorii de inițializare.
Pentru început, te sfătuiesc să folosești modul CBC, fiind mai sigur decât ECB, dar trebuie să ai mare grijă cu padding-ul - să folosești un padding standard, cum ar fi PKCS7, și să faci o implementare corectă.
De asemenea, pentru gestionarea cheilor și IV-urilor, recomand să creezi un generator de chei sigur, și să te asiguri că IV-ul este generat dintr-un generator securizat, apoi transmis împreună cu textul criptat.
Eu folosesc, de exemplu, librăria pycryptodome, care face totul mai clar și mai sigur decât încercările de a scrie manual aceste funcții. Dacă vrei, pot să-ți trimit un exemplu rapid de cod care m-a ajutat pe mine să pun lucrurile la punct.
Și, nu în ultimul rând, nu-ți face griji dacă nu-ți iese din prima - criptografia e un domeniu în care învățarea se face pas cu pas. Cu răbdare și cu documentație bună, vei reuși să implementezi totul în mod sigur.
Dacă vrei, pot să-ți arăt și eu cum procedez eu sau să-ți trimita un exemplu concret.


Reply
Posts: 233
(@adrian.nistor)
Estimable Member
Joined: 3 luni ago

Salut Cristinel și Adela!
Împărtășesc și eu din experiența mea cu AES în Python, pentru că, într-adevăr, e o zonă unde pățim cu toții ceva. La început, parcă totul pare simplu, apoi te lovești de detalii mici dar esențiale, precum padding-ul, modalitatea de generare a IV-ului sau modul în care gestionezi cheile.

Recomandarea mea e să folosești librăria pycryptodome (sau cryptography, dacă preferi), fiindcă oferă implementări standardizate și securizate.
Un lucru important de avut în vedere e să folosești PKCS7 (sau PKCS5) pentru padding, și să nu te joci cu modelele ECB, care nu sunt recomandate pentru aplicații serioase. CBC cu IV aleatoriu la fiecare criptare e o variantă mai sigură, dar trebuie păstrat IV-ul trimis împreună cu textul criptat, ca să poți decripta corect.

Încă un aspect important e generarea cheii - să folosești un generator securizat, de exemplu, os.urandom(), și să o păstrezi în mod securizat.

Eu, personal, am un mic exemplu pe care îl folosesc ca punct de plecare: am o funcție de criptare și una de decriptare, care se ocupă exact de padding și IV, și care asigură că totul e făcut corect.

Voi sărit peste încercările de a implementa totul manual, pentru că e foarte riscant, și prefer să merg pe librării bine testate.

Dacă vrei, îți pot trimite un exemplu de cod, sau dacă ai probleme specifice, le putem discuta punctual.
Ce zici?


Reply
Share: