Deci, dacă aveți un site web și un utilizator se înscrie, îi stocați parola ca hash. Când se conectează, site-ul dvs. preia parola trimisă, o face hash și compară trimiterea hashing cu hash-ul stocat, nu?
Da, cu trei detalii suplimentare în modul modern standard de a face acest lucru:
- Parola ajunge pe site-ul web criptată TLS; este decriptat înainte de hashing.
- Salt (trasă aleatoriu la înregistrarea parolei sau/și numele de utilizator/e-mail) este hashing împreună cu parola și stocat de-a lungul hash-ului parolei de către server.
- Este folosit un hash repetat intenționat lent, sperăm că dur de memorie, conceput pentru parole, cum ar fi Argon2. Acesta este conceput ca o protecție în cazul în care serverul lasă lista de hashe-uri și scurgeri de sare (astfel de scurgeri se întâmplă în mod obișnuit). Această precauție face mai dificilă găsirea parolei (sau mai exact, o parolă acceptabilă cel mai probabil cea originală) într-un dicționar de parole obișnuite, prin hashing parolele candidaților și sare și comparând cu hashul parolei, la fel cum face serverul pentru a verifica o parolă la conectare.
Să presupunem că ai hash o propoziție folosind SHA-256, decriptezi VODATA un astfel de hash sau chiar ai capacitatea de a o face?
Nu. În primul rând, „decriptarea” nu este termenul corect pentru găsirea intrării unei funcții hash, având în vedere rezultatul acesteia; termenul corect este „revers”. Și, un hash este conceput pentru a fi ireversibil în funcționarea normală. Dacă intrarea hash-ului este necunoscută și aleasă aleatoriu într-un set mare, iar designul hash-ului este bun, practic nu este posibil să inversați hash-ul.
Whatsapp spune că mesajele mele sunt criptate. Deci, dacă le criptez pe măsură ce le trimit, cum le decriptează dispozitivul celorlalte persoane?
Hashingul nu este același lucru cu criptarea. Hashingul transformă un mesaj într-un mod care este conceput pentru a fi ireversibil și nu utilizează o cheie. Criptarea transformă un mesaj conform unei chei de criptare, într-un mod reversibil de unul cu cheia de decriptare.
Cheia de decriptare trebuie să fie secretă, altfel obiectivul criptării (ascunderea a ceea ce a fost criptat pentru adversarii care nu cunosc cheia de decriptare) nu este îndeplinit. În criptarea simetrică (de exemplu, AES-GCM), cheile de criptare și de decriptare sunt aceleași. În criptarea asimetrică (de exemplu, RSA, ECIES), acestea sunt diferite: cheia de criptare poate fi făcută publică și se numește cheie publică; cheia de decriptare este cheia privată.
Când trimiteți un mesaj cu o aplicație modernă care utilizează criptare asimetrică (cum ar fi Whatsapp), iată imaginea de ansamblu:
- Aplicația dvs. desenează o cheie unică de mesaj simetrică aleatorie.
- Aplicația dvs. criptează mesajul folosind criptarea simetrică cu această cheie unică pentru mesaj, iar rezultatul este trimis.
- Aplicația dvs. criptează în mod repetat cheia unică pentru mesaj către fiecare destinatar vizat, folosind criptarea asimetrică (de exemplu, ECIES) și fiecare cheie publică a destinatarului vizat, iar rezultatele sunt trimise.
- Când un destinatar trebuie să decripteze mesajul, aplicația sa primește mai întâi cheia unică pentru mesaj criptată criptată sub cheia publică și o descifrează (prin decriptare asimetrică) folosind cheia privată, obținând cheia unică a mesajului.
- Aplicația destinatarului primește mesajul criptat, îl decriptează prin decriptare simetrică folosind cheia unică pentru mesaj, apoi afișează mesajul decriptat.
Mecanismul principal care protejează confidențialitatea mesajului este criptarea simetrică. Criptarea asimetrică protejează confidențialitatea cheii unice pentru mesaj, astfel protejează indirect confidențialitatea mesajului. Hashingul este de obicei folosit intern ca element de bază în unii dintre pași, dar nu este mecanismul care criptează mesajul sau cheia unică a mesajului.