Tot ce trebuie să știți despre criptarea în Java



Acest articol vă va oferi o cunoaștere detaliată și cuprinzătoare despre criptarea în Java și cum să o utilizați cu exemple.

Criptarea este metoda utilizării algoritmilor matematici pentru a camufla semnificația unei informații, astfel încât numai părțile autorizate să o poată descifra. În acest articol, vom discuta despre Criptare și Decriptare în în următoarea ordine:

Introducere în criptare în Java

Criptarea este implementată pentru a ne proteja datele (cum ar fi textele, conversațiile și vocea), fie că este așezat pe un computer, fie că este trimis pe internet. Tehnologiile recente de criptare sunt elemente esențiale ale oricărui mediu de calcul sigur.





Windows adaugă java la cale

Rolul principal al securității criptării constă în capacitatea unui algoritm de a genera text cifrat (text criptat), care este greu de revenit la textul său original original. Utilizarea cheilor creează, de asemenea, un alt nivel de securitate pentru metodele de protejare a informațiilor noastre. O cheie este o anumită informație, care permite doar celor care o dețin să codifice și să decodeze un mesaj.

Criptare și decriptare în Java



Algoritmi de criptare simetrică

Algoritmii simetrici utilizează aceeași cheie pentru criptare și decriptare. Astfel de algoritmi pot funcționa doar în modul bloc (care funcționează pe blocuri de date de dimensiuni fixe) sau în modul flux (care funcționează pe biți sau octeți de date). Astfel de algoritmisunt, de asemenea, utilizate în mod obișnuit pentru aplicații precum criptarea datelor, criptarea fișierelor și criptarea datelor transmise în rețelele de comunicații (cum ar fi TLS, e-mailuri, mesaje instantanee etc.)

Algoritmi de criptare asimetrică (sau cheie publică)

Spre deosebire de algoritmii simetrici, care utilizează aceeași cheie atât pentru operațiile de criptare, cât și pentru decriptare, algoritmii asimetrici folosesc două chei identice pentru acești doi pași. Acești algoritmi sunt utilizați pentru calculul semnăturilor digitale și a protocoalelor de stabilire a cheilor. Cu toate acestea, acest lucru vine și cu o provocare că trebuie folosite două chei, ceea ce face lucrurile mai complexe.



Pentru a configura în siguranță orice schemă de criptare de bază, este foarte important ca toți acești parametri (cel puțin) să fie proiectați corect:

  • Alegerea algoritmului corect este importantă.
  • Alegerea modului corect de operare pentru sarcina corespunzătoare
  • Alegerea schemei potrivite de umplutură conform cerințelor
  • Alegerea corespunzătoare a tastelor și a dimensiunilor acestora
  • Inițializare corectă cu CSPRING securizat criptografic.

Este foarte important să fiți conștienți de configurarea tuturor acestor parametri în siguranță. Chiar și o mică configurare greșită poate pune în pericol un întreg sistem criptografic și îl poate deschide atacurilor hackerilor și altor programe malware. Prin urmare, pentru a menține această discuție simplă, să discutăm numai inițializările independente de algoritmi ale unui cifru. În loc să faceți astfel de criptări de unul singur, este întotdeauna mai bine să lăsați experții să-și facă treaba de a configura mai multe configurații dependente de algoritm, cum ar fi valorile p și q ale algoritmului RSA, etc. Prin simpla configurare a parametrilor criptografici rudimentari peste mai mult de jumătate de zeci, se folosesc clase.

Introducerea ierarhiilor de clase, o mulțime de constructori / metode supraîncărcate și așa mai departe, adăugând multe complexități, care îl fac inutil. Mi-aș dori ca Java să nu complice configurațiile de bază și să folosească pur și simplu o arhitectură mai simplificată ca cea a Microsoft, unde toți acești parametri se află în perimetrul unei singure clase SymmetricAlgorithm și AsymmetricAlgorithm. Pentru a se specifica primii trei parametri (algoritm, mod de funcționare și schemă de umplere), un obiect Cipher folosește un șir de transformare.

  • Alegerea algoritmului potrivit

Un șir de transformare include, fără îndoială, numele unui algoritm criptografic. Între criptarea simetrică și asimetrică, există 11 algoritmi (care nu privesc diverse combinații PBEWithAnd), care pot fi specificate conform documentației standard a numelui algoritmului. Din ele doar două (una pentru fiecare, criptări simetrice și asimetrice) sunt de fapt complet securizate.

Algoritmii rămași sunt fie rupți excesiv (DES, RC2 etc.), fie au început să apară fisuri (RC5), făcându-l rupt cu o putere suficientă a procesorului - poate fi deja rupt până la citirea acestui lucru. Este posibil ca un dezvoltator de securitate să nu citească specificațiile NIST și nici să urmărească cele mai recente evenimente și cercetări din comunitatea criptografică. S-ar putea să preia algoritmii rupți sau riscanți, digestul sau generatorul pseudo-aleatoriu.

Întotdeauna pentru:

  1. Algoritm simetric: se utilizează cifrul blocului AES / AESWrap.

  2. Algoritm asimetric: se utilizează RSA.

  • Mod de operare

Modul de funcționare este o parte a transformării și este relevant doar pentru blocarea cifrelor. Când folosim cifre asimetrice, folosiți BCE ca mod de operare, care este în esență un hack din culise, adică ignorați această valoare. Furnizorii Java, cum ar fi SunJCE, SunPKCS11 implicit în modul ECB pentru algoritmi simetrici și asimetrici. Poate fi un lucru bun pentru algoritmii asimetrici, dar o idee proastă pentru cifrele bloc.

Furnizorii ar putea fi instruiți să facă valori implicite sigure pe baza algoritmului utilizat. Folosiți criptarea simetrică pentru a vă salva de atacuri de reluare sau de atacuri cu text clar. De asemenea, utilizați o transformare, care specifică pe deplin un algoritm (adică cu modul său de funcționare și umplere). Nu face niciodată, niciodată ceva de genul celui menționat mai jos.

La fel ca mai sus, algoritmul AES ar fi utilizat cu modul de funcționare BCE, făcând atacurile de redare foarte ușoare. Pentru noi dezvoltări, dacă există cea mai mică posibilitate de revigorare a lucrărilor vechi, ar trebui să folosim criptarea autentificată cu modul de date asociate (AEAD) (De exemplu, GCM și CCM). Avem o etichetă de autentificare cu o lungime completă de 128 de biți. Dacă folosim un mod neautentificat, folosim CBC sau CTR cu un MAC pentru a autentifica textul cifrat.

  • Alegerea schemei de umplere corespunzătoare

Modurile comune de cifrare a blocurilor au nevoie ca lungimea textului simplu să fie un multiplu al mărimii blocului algoritmului de criptare subiacent, ceea ce este rar cazul. Astfel, avem nevoie de ceva umplutură.Programul Java ne oferă trei scheme diferite pentru criptarea simetrică, una fiind Fără padding, ceea ce este inacceptabil, iar alta fiind ISO10126Padding care este retrasă din 2007).

Prin urmare, singura opțiune adecvată este utilizarea PKCS5Padding. Amestecul unor moduri de operare (de exemplu modul CBC) și schema de umplere PKCS5Padding poate duce la umplerea atacurilor oracolelor. A nu menționa deloc o schemă de căptușire este mai periculos decât a oferi o schemă susceptibilă doar la anumite tipuri de atacuri. Modul de funcționare AEAD este cel mai recomandat pentru a vă asigura că sunteți protejat împotriva acestor atacuri.

  • Algoritmi asimetrici

În algoritmii asimetrici, avem opțiunea de a alege dintre două scheme de umplere. Este important să vă asigurați că sunt utilizate doar schemele OAEPWithAndPadding. În cazul unui rezumat, vă rugăm să utilizați fie SHA1, fie SHA256 / 384/512. Pentru funcția de generare a măștilor (MGF), vă rugăm să utilizați căptușeala MGF1 așa cum este specificat. PKCS1Padding cu RSA a fost vulnerabil la atacurile Ciphertext [6] din 1998.

Aici vorbim despre modul corect de a utiliza o transformare într-o metodă „Cipher.getInstance”.

  • Criptare simetrică

  • Criptare asimetrică

Un nivel de securitate al oricărei scheme de criptare este direct proporțional cu dimensiunea cheii sale. Lungimea cheii trebuie să fie suficient de lungă pentru ca orice forță brută să o atace, devine irealizabilă în același timp, ar trebui să fie și suficient de scurtă pentru a ține cont de fezabilitatea calculului. În plus, trebuie să încercăm să luăm în considerare ceea ce rezistă încă progreselor de calcul pentru următorii 30 de ani.

Cu aceasta, ajungem la sfârșitul articolului Criptare în Java. Sper că ți-ai făcut o idee despre Criptare și Decriptare și de ce este folosit în Java.

diferența dintre aruncări și aruncări în java

Verificați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru studenți și profesioniști care doresc să fie dezvoltator Java. Cursul este conceput pentru a vă oferi un început avansat în programarea Java și pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog „Criptare în Java” și vă vom contacta cât mai curând posibil.