Kryptering er metoden til at bruge matematiske algoritmer til at camouflere betydningen af et stykke information, så kun autoriserede parter kan dechifrere det. I denne artikel vil vi diskutere kryptering og dekryptering i i følgende rækkefølge:
- En introduktion til kryptering i Java
- Symmetriske krypteringsalgoritmer
- Asymmetriske krypteringsalgoritmer
En introduktion til kryptering i Java
Kryptering implementeres for at beskytte vores data (som tekster, samtaler og stemme), hvad enten det sidder på en computer, eller det sendes på Internettet. Nye krypteringsteknologier er vigtige elementer i ethvert sikkert computermiljø.
Den primære rolle som krypteringssikkerhed ligger i en algoritmes evne til at generere ciphertext (krypteret tekst), som er svært at vende tilbage til sin oprindelige almindelige tekst. Brug af nøgler skaber også et andet niveau af sikkerhed for metoder til beskyttelse af vores information. En nøgle er nogle oplysninger, som kun tillader dem, der holder den, at kode og afkode en besked.
Symmetriske krypteringsalgoritmer
De symmetriske algoritmer bruger den samme nøgle til kryptering og dekryptering. Sådanne algoritmer kan kun fungere i bloktilstand (som fungerer på faste datablokke) eller streamtilstand (som fungerer på bits eller bytes af data). Sådanne algoritmerbruges også ofte til applikationer som datakryptering, filkryptering og kryptering af transmitterede data i kommunikationsnetværk (som TLS, e-mails, onlinemeddelelser osv.)
marionet vs kok vs jenkins
Asymmetriske (eller offentlig nøgle) krypteringsalgoritmer
I modsætning til symmetriske algoritmer, der bruger den samme nøgle til både kryptering og dekryptering, bruger de asymmetriske algoritmer to identiske nøgler til disse to trin. Disse algoritmer bruges til beregning af digitale signaturer og nøgleprotokoller. Dette kommer dog også med en udfordring, at der skal bruges to nøgler, hvilket gør tingene mere komplekse.
For at konfigurere ethvert grundlæggende krypteringsskema sikkert er det meget vigtigt, at alle sådanne parametre (i det mindste) er designet korrekt:
- Det er vigtigt at vælge den rigtige algoritme.
- Valg af den rigtige driftsform til den relevante opgave
- Valg af det rigtige polstringsskema efter krav
- Vælg de rigtige taster og deres størrelser i overensstemmelse hermed
- Korrekt initialisering med kryptografisk sikker CSPRING.
Det er meget vigtigt at være opmærksom på at konfigurere alle disse parametre sikkert. Selv en lille fejlkonfiguration kan bringe et helt kryptosystem i fare og åbne det for angreb fra hackere og anden malware. Derfor, for at holde denne diskussion enkel, lad os kun diskutere algoritmeuafhængige initialiseringer af en kryptering. I stedet for at foretage sådanne krypteringer selv, er det altid bedre at lade eksperter gøre deres job med at konfigurere flere algoritmeafhængige konfigurationer, som p- og q-værdier i RSA-algoritmen osv. Ved blot at konfigurere de rudimentære kryptografiske parametre over mere end en halv dusin, klasser bruges.
Indførelsen af klassehierarkier, masser af overbelastede konstruktører / metoder og så videre, tilføjer mange kompleksiteter, hvilket gør det unødvendigt. Jeg ville ønske, at Java ikke komplicerede de grundlæggende konfigurationer og simpelthen ville anvende en mere forenklet arkitektur som Microsoft, hvor alle sådanne parametre ligger inden for omkredsen af en enkelt klasse SymmetricAlgorithm og AsymmetricAlgorithm. For de første tre parametre, der skal specificeres (algoritme, driftsform og polstringsplan), bruger et krypteringsobjekt en transformationsstreng.
- Valg af den rigtige algoritme
En transformationsstreng inkluderer utvivlsomt navnet på en kryptografisk algoritme. Mellem symmetrisk og asymmetrisk kryptering er der 11 algoritmer (ikke med hensyn til forskellige PBEWithAnd-kombinationer), som kan specificeres i henhold til Standard Algorithm Name Documentation. Ud af dem er kun to (en for hver, symmetriske og asymmetriske kryptering) faktisk fuldt sikret.
python konvertere decimal til binær
De resterende algoritmer er enten overdrevent ødelagte (DES, RC2 osv.), Eller der er begyndt at komme revner op (RC5), hvilket gør det knækkeligt med tilstrækkelig CPU-effekt - det kan allerede være brudt, når du læser dette. En sikkerhedsorienteret udvikler må muligvis ikke læse troves af NIST-specifikationer eller følge de seneste begivenheder og forskning i kryptografisamfundet. De samler muligvis de ødelagte eller risikable algoritmer, fordøjelse eller pseudo-tilfældig generator.
Altid til:
Symmetrisk algoritme: AES / AESWrap blok cipher bruges.
Asymmetrisk algoritme: RSA bruges.
- Driftstilstand
Driftstilstanden er en del af transformationen og er kun relevant for blokering af cifre. Når vi bruger asymmetriske chifre, skal du bruge ECB som driftsform, som i det væsentlige er et hack bag kulisserne, hvilket betyder at ignorere denne værdi. Java-udbydere som SunJCE, SunPKCS11 er som standard ECB-tilstand for symmetriske og asymmetriske algoritmer. Det kan være en god ting for asymmetriske algoritmer, men en dårlig idé til blokcifre.
Udbyderne kunne blive bedt om at foretage sikre standarder baseret på den anvendte algoritme. Brug symmetrisk kryptering for at redde dig fra gentagelsesangreb eller kendte almindelige tekstangreb. Brug også en transformation, der fuldt ud specificerer en algoritme (dvs. med dens driftsform og polstring). Gør aldrig nogensinde noget som det, der er nævnt nedenfor.
Som ovenfor ville AES-algoritmen blive brugt med ECB-driftsform, hvilket gør replayangreb meget lette. For nyudvikling, hvis der er den mindste mulighed for at modernisere gammelt arbejde, skal vi bruge godkendt kryptering med tilknyttet datatilstand (AEAD) -tilstand (for eksempel GCM og CCM). Vi har et godkendelsesmærke med en fuld længde på 128 bit. Hvis vi bruger en ikke-godkendt tilstand, bruger vi CBC eller CTR med en MAC til at godkende krypteringsteksten.
- Valg af passende polstringsordning
De almindelige blokcrypteringstilstande har brug for længden af almindelig tekst for at være et multiplum af blokstørrelsen for den underliggende krypteringsalgoritme, hvilket sjældent er tilfældet. Således kræver vi noget polstring.Java-programmet giver os tre forskellige ordninger for symmetrisk kryptering, den ene er No Padding, hvilket er uacceptabel, og en anden er ISO10126Padding, der er trukket tilbage siden 2007).
Derfor er den eneste egnede mulighed at bruge PKCS5Padding. Blandingen af nogle driftsformer (for eksempel CBC-tilstand) og PKCS5Padding-polstringsplan kan føre til polstring af oracleangreb. At nævne et polstringsprogram overhovedet er farligere end at tilbyde en ordning, der kun er modtagelig for visse typer angreb. AEAD-driftstilstand anbefales mest for at være sikker på, at du er beskyttet mod disse angreb.
- Asymmetriske algoritmer
I asymmetriske algoritmer har vi mulighed for at vælge mellem to polstringsplaner. Det er vigtigt at sikre, at kun OAEPWithAndPadding-ordninger bruges. I tilfælde af fordøjelse skal du bruge enten SHA1 eller SHA256 / 384/512. For MGF-funktionen (Mask Generation) skal du bruge MGF1-polstringen som angivet. PKCS1Padding med RSA har været sårbar over for Ciphertext-angreb [6] siden 1998.
Her taler vi om den korrekte måde at bruge en transformation på i en 'Cipher.getInstance' -metode.
hvordan man opretter en advarsel i javascript
- Symmetrisk kryptering
- Asymmetrisk kryptering
Et sikkerhedsniveau for enhver krypteringsplan er direkte proportional med størrelsen på dens nøgle. Nøgellængden skal være lang nok til, at uanset hvilken brutal kraft, der angriber, bliver den umulig på samme tid, skal den også være kort nok til at huske beregningsmæssig gennemførlighed. Derudover skal vi prøve at overveje, hvad der stadig modstår beregningsfremskridt i de næste 30 år.
Med dette kommer vi til slutningen af kryptering i Java-artiklen. Jeg håber, du har en idé om kryptering og dekryptering, og hvorfor den bruges i Java.
Tjek den af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-uddannelses- og certificeringskursus er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Spring.
Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne 'Kryptering i Java' -blog, og vi vender tilbage til dig hurtigst muligt.