Alt du trenger å vite om kryptering i Java



Denne artikkelen vil gi deg en detaljert og omfattende kunnskap om kryptering i Java og hvordan du bruker den med eksempler.

Kryptering er metoden for å bruke matematiske algoritmer for å kamuflere betydningen av et stykke informasjon slik at bare autoriserte parter kan tyde det. I denne artikkelen vil vi diskutere kryptering og dekryptering i i følgende rekkefølge:

En introduksjon til kryptering i Java

Kryptering er implementert for å beskytte dataene våre (som tekster, samtaler og stemme), enten det sitter på en datamaskin eller det sendes på Internett. Nylig krypteringsteknologi er viktige elementer i ethvert sikkert databehandlingsmiljø.





Den viktigste rollen som sikkerhet for kryptering ligger i muligheten til en algoritme for å generere krypteringstekst (kryptert tekst) som er vanskelig å gå tilbake til sin opprinnelige klartekst. Bruk av nøkler skaper også et annet sikkerhetsnivå for metoder for å beskytte informasjonen vår. En nøkkel er litt informasjon, som bare tillater de som holder den å kode og dekode en melding.

Kryptering og dekryptering i Java



Symmetriske krypteringsalgoritmer

Symmetriske algoritmer bruker samme nøkkel for kryptering og dekryptering. Slike algoritmer kan bare fungere i blokkmodus (som fungerer på faste datablokker) eller i strømmodus (som fungerer på bit eller byte med data). Slike algoritmerbrukes også ofte til applikasjoner som datakryptering, filkryptering og kryptering av overførte data i kommunikasjonsnettverk (som TLS, e-post, direktemeldinger, etc.)

Asymmetriske (eller offentlig nøkkel) krypteringsalgoritmer

I motsetning til symmetriske algoritmer, som bruker samme nøkkel for både kryptering og dekryptering, bruker de asymmetriske algoritmene to identiske nøkler for disse to trinnene. Disse algoritmene brukes til databehandling av digitale signaturer og viktige etableringsprotokoller. Dette kommer imidlertid også med en utfordring at to nøkler må brukes som gjør ting mer komplekse.



qlikview tutorial trinnvis

For å konfigurere ethvert grunnleggende krypteringsskjema trygt, er det veldig viktig at alle slike parametere (i det minste) er utformet riktig:

  • Å velge riktig algoritme er viktig.
  • Velge riktig driftsmåte for den aktuelle oppgaven
  • Velge riktig polstringsskjema etter behov
  • Velge de riktige tastene og størrelsene deres deretter
  • Riktig initialisering med kryptografisk sikker CSPRING.

Det er veldig viktig å være klar over å konfigurere alle disse parametrene på en sikker måte. Selv en liten feilkonfigurasjon kan sette et helt kryptosystem i fare og åpne det for angrep fra hackere og annen skadelig programvare. For å holde denne diskusjonen enkel, la oss derfor bare diskutere algoritmeuavhengige initialiseringer av en kryptering. I stedet for å gjøre slike krypteringer selv, er det alltid bedre å la eksperter gjøre jobben sin med å konfigurere flere algoritmeavhengige konfigurasjoner, som p- og q-verdier for RSA-algoritmen, etc. Ved å bare konfigurere de rudimentære kryptografiske parametrene over mer enn en halv dusin, brukes klasser.

Innføringen av klassehierarkier, mange overbelastede konstruktører / metoder og så videre, og tilfører mange kompleksiteter, noe som gjør det unødvendig. Jeg skulle ønske Java ikke kompliserte de grunnleggende konfigurasjonene og ganske enkelt ville benytte en mer forenklet arkitektur som Microsoft, der alle slike parametere ligger innenfor omkretsen av en enkelt klasse SymmetricAlgorithm og AsymmetricAlgorithm. For de tre første parameterne som skal spesifiseres (algoritme, driftsmåte og polstringsskjema), bruker et krypteringsobjekt en transformasjonsstreng.

  • Velge riktig algoritme

En transformasjonsstreng inkluderer utvilsomt navnet på en kryptografisk algoritme. Mellom symmetrisk og asymmetrisk kryptering er det 11 algoritmer (ikke angående forskjellige PBEWithAnd-kombinasjoner), som kan spesifiseres i henhold til Standard Algorithm Name Documentation. Av dem er bare to (en for hver, symmetriske og asymmetriske kryptering) faktisk helt sikret.

De gjenværende algoritmene er enten for ødelagte (DES, RC2 osv.), Eller sprekker har begynt å overflate (RC5), noe som gjør det ødeleggende med tilstrekkelig CPU-kraft - det kan allerede være ødelagt når du leser dette. En sikkerhetsinnstilt utvikler kan ikke lese trover av NIST-spesifikasjoner, og heller ikke følge de siste hendelsene og forskningen i kryptografisamfunnet. De kan plukke opp ødelagte eller risikable algoritmer, fordøye eller pseudo-tilfeldig generator.

Alltid for:

  1. Symmetrisk algoritme: AES / AESWrap block chiffer brukes.

  2. Asymmetrisk algoritme: RSA brukes.

  • Driftsmåte

Driftsmåten er en del av transformasjonen og er bare relevant for å blokkere kryptering. Når vi bruker asymmetriske siffer, bruk ECB som driftsmåte, som egentlig er et hack bak kulissene, som betyr at du ignorerer denne verdien. Java-leverandørene som SunJCE, SunPKCS11 er som standard ECB-modus for symmetriske og asymmetriske algoritmer. Det kan være bra for asymmetriske algoritmer, men en dårlig idé for blokkodere.

Tilbyderne kan bli bedt om å lage sikre standarder basert på algoritmen som brukes. Bruk symmetrisk kryptering for å redde deg fra angrep på nytt eller kjent-tekst. Bruk også en transformasjon som fullt ut spesifiserer en algoritme (dvs. med driftsmåte og polstring). Aldri, aldri gjør noe som det som er nevnt nedenfor.

Som ovenfor vil AES-algoritmen bli brukt med ECB-modus, noe som gjør replayangrep veldig enkle. For ny utvikling, hvis det er den minste muligheten for å modernisere gammelt arbeid, bør vi bruke autentisert kryptering med tilknyttet data (AEAD) -modus (for eksempel GCM og CCM). Vi har en autentiseringsmerke med hele 128 bits lengde. Hvis vi bruker en uautentisert modus, bruker vi CBC eller CTR med en MAC for å autentisere krypteringsteksten.

  • Velge riktig polstringsplan

De vanlige blokkrypteringsmodusene trenger lengden på ren tekst for å være et multiplum av blokkstørrelsen til den underliggende krypteringsalgoritmen, noe som sjelden er tilfelle. Dermed krever vi litt polstring.Java-programmet gir oss tre forskjellige ordninger for symmetrisk kryptering, en er No Padding, noe som er uakseptabelt, og et annet er ISO10126Padding som er trukket tilbake siden 2007).

Derfor er det eneste egnede alternativet å bruke PKCS5Padding. Blandingen av noen driftsmåter (for eksempel CBC-modus) og PKCS5Padding-polstringsskjema kan føre til polstring av orakelangrep. Å ikke nevne et polstringsopplegg i det hele tatt er farligere enn å tilby et opplegg som bare er utsatt for visse typer angrep. AEAD-driftsmodus anbefales mest for å være sikker på at du er beskyttet mot disse angrepene.

  • Asymmetriske algoritmer

I asymmetriske algoritmer har vi muligheten til å velge mellom to polstringsoppsett. Det er viktig å sikre at bare OAEPWithAndPadding-ordninger brukes. Ved fordøyelse, bruk enten SHA1 eller SHA256 / 384/512. For maskegenerasjonsfunksjonen (MGF), bruk MGF1-polstringen som spesifisert. PKCS1Padding med RSA har vært sårbar for Ciphertext-angrep [6] siden 1998.

Her snakker vi om den riktige måten å bruke en transformasjon i en 'Cipher.getInstance' -metode.

  • Symmetrisk kryptering

  • Asymmetrisk kryptering

Et sikkerhetsnivå for et krypteringsopplegg er direkte proporsjonalt med størrelsen på nøkkelen. Nøkkellengden må være lang nok til at uansett hvilken brutal kraft som angriper den blir umulig samtidig, bør den også være kort nok til å huske beregningsmessig gjennomførbarhet. I tillegg må vi prøve å vurdere hva som fremdeles tåler beregningsfremskritt de neste 30 årene.

Med dette kommer vi til slutten av kryptering i Java-artikkelen. Jeg håper du fikk en ide om kryptering og dekryptering og hvorfor den brukes i Java.

Sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for studenter og fagpersoner som ønsker å være Java-utvikler. Kurset er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne 'Kryptering i Java' -bloggen, så kommer vi tilbake til deg så snart som mulig.