Allt du behöver veta om kryptering i Java



Den här artikeln ger dig en detaljerad och omfattande kunskap om kryptering i Java och hur man använder den med exempel.

Kryptering är metoden för att använda matematiska algoritmer för att kamouflera betydelsen av en bit information så att endast behöriga parter kan dechiffrera den. I den här artikeln kommer vi att diskutera kryptering och dekryptering i i följande ordning:

En introduktion till kryptering i Java

Kryptering implementeras för att skydda våra data (som texter, konversationer och röst), vare sig det sitter på en dator eller så skickas det på Internet. Senaste krypteringsteknologierna är viktiga inslag i alla säkra datormiljöer.





Den primära rollen för krypteringssäkerhet ligger i förmågan hos en algoritm att generera ciphertext (krypterad text) som är svår att återgå till sin ursprungliga klartext. Användningen av nycklar skapar också en annan säkerhetsnivå för metoder för att skydda vår information. En nyckel är viss information som gör att endast de som håller den kan koda och avkoda ett meddelande.

Kryptering och dekryptering i Java



Symmetriska krypteringsalgoritmer

Symmetriska algoritmer använder samma nyckel för kryptering och dekryptering. Sådana algoritmer kan bara fungera i blockläge (som fungerar på fasta datablock) eller strömläge (som fungerar på bitar eller byte av data). Sådana algoritmeranvänds ofta för applikationer som datakryptering, filkryptering och kryptering av överförda data i kommunikationsnätverk (som TLS, e-post, snabbmeddelanden etc.)

Asymmetriska (eller offentlig nyckel) krypteringsalgoritmer

Till skillnad från symmetriska algoritmer, som använder samma nyckel för både kryptering och dekryptering, använder de asymmetriska algoritmerna två identiska nycklar för dessa två steg. Dessa algoritmer används för beräkning av digitala signaturer och nyckelprotokoll. Detta kommer dock också med en utmaning att två tangenter måste användas vilket gör saker och ting mer komplexa.



För att konfigurera alla grundläggande krypteringsscheman säkert är det mycket viktigt att alla sådana parametrar (åtminstone) är utformade korrekt:

implementera prioritetskön c ++
  • Att välja rätt algoritm är viktigt.
  • Välja rätt driftsätt för lämplig uppgift
  • Välja rätt stoppning enligt krav
  • Att välja rätt tangenter och deras storlekar i enlighet därmed
  • Korrekt initialisering med kryptografiskt säker CSPRING.

Det är mycket viktigt att vara medveten om att konfigurera alla dessa parametrar säkert. Även en liten felkonfiguration kan äventyra ett helt krypto-system och öppna det för attacker från hackare och annan skadlig kod. För att hålla den här diskussionen enkel, låt oss därför bara diskutera algoritmoberoende initialiseringar av en chiffer. Istället för att göra sådana krypteringar själv är det alltid bättre att låta experter göra sitt jobb med att konfigurera fler algoritmberoende konfigurationer, som p- och q-värden för RSA-algoritmen, etc. Genom att bara konfigurera de rudimentära kryptografiska parametrarna över mer än en halv dussin, klasser används.

Införandet av klasshierarkier, massor av överbelastade konstruktörer / metoder och så vidare, vilket tillför många komplexiteter, vilket gör det onödigt. Jag önskar att Java inte komplicerade de grundläggande konfigurationerna och helt enkelt skulle använda en mer förenklad arkitektur som Microsoft, där alla sådana parametrar ligger inom omkretsen av en enda klass SymmetricAlgorithm och AsymmetricAlgorithm. För de tre första parametrarna som ska specificeras (algoritm, driftsätt och utfyllningsschema) använder ett krypteringsobjekt en transformationssträng.

  • Välja rätt algoritm

En transformationssträng innehåller utan tvekan namnet på en kryptografisk algoritm. Mellan symmetrisk och asymmetrisk kryptering finns det 11 algoritmer (gäller inte olika PBEWithAnd-kombinationer), som kan specificeras enligt Standard Algorithm Name Documentation. Av dem är bara två (en för vardera, symmetriska och asymmetriska kryptering) faktiskt helt säkrade.

De återstående algoritmerna är antingen överdrivna (DES, RC2, etc.) eller så har sprickor börjat dyka upp (RC5), vilket gör den brytbar med tillräcklig CPU-effekt - den kan redan brytas när du läser detta. En säkerhetsinriktad utvecklare får inte läsa information om NIST-specifikationer eller följa de senaste händelserna och forskningen i kryptografisamhället. De kan plocka upp trasiga eller riskabla algoritmer, smälta eller pseudoslumpgenerator.

Alltid för:

  1. Symmetrisk algoritm: AES / AESWrap block chiffer används.

  2. Asymmetrisk algoritm: RSA används.

  • Driftläge

Funktionsläget är en del av transformationen och är endast relevant för blockering av chiffer. När vi använder asymmetriska chifrar, använd ECB som driftsätt, vilket i huvudsak är ett hack bakom kulisserna, vilket innebär att ignorera detta värde. Java-leverantörer som SunJCE, SunPKCS11 är som standard ECB-läge för symmetriska och asymmetriska algoritmer. Det kan vara bra för asymmetriska algoritmer, men en dålig idé för blockkodningar.

Leverantörerna kan instrueras att göra säkra standardvärden baserat på den algoritm som används. Använd symmetrisk kryptering för att spara dig från attacker med omspelning eller attacker med känd klartext. Använd också en transformation som helt specificerar en algoritm (dvs. med dess driftsätt och stoppning). Gör aldrig någonting som det som nämns nedan.

Som ovan skulle AES-algoritmen användas med ECB-driftsätt, vilket gör omspelningsattacker mycket enkla. För ny utveckling, om det finns minsta möjlighet att modernisera gammalt arbete, bör vi använda autentiserad kryptering med tillhörande dataläge (AEAD) -läge (till exempel GCM och CCM). Vi har en autentiseringsbricka med hela 128 bitars längd. Om vi ​​använder ett oautentiserat läge använder vi CBC eller CTR med en MAC för att autentisera chiffertexten.

  • Välja lämpligt stoppningsschema

De vanliga blockkrypteringslägena behöver längden på vanlig text för att vara en multipel av blockstorleken för den underliggande krypteringsalgoritmen, vilket sällan är fallet. Således kräver vi lite stoppning.Java-programmet ger oss tre olika scheman för symmetrisk kryptering, ett är No Padding, vilket är oacceptabelt, och ett annat är ISO10126Padding som har dragits tillbaka sedan 2007).

Därför är det enda lämpliga alternativet att använda PKCS5Padding. Blandningen av vissa driftsätt (till exempel CBC-läge) och PKCS5Padding-stoppningsschema kan leda till utfyllnadsoracle-attacker. Att inte nämna ett stoppningsschema alls är farligare än att tillhandahålla ett system som endast är mottagligt för vissa typer av attacker. AEAD-driftsätt rekommenderas mest för att vara säker på att du är skyddad mot dessa attacker.

hur man klonar ett objekt i java
  • Asymmetriska algoritmer

I asymmetriska algoritmer har vi möjlighet att välja mellan två stoppscheman. Det är viktigt att se till att endast OAEPWithAndPadding-scheman används. Vid smältning, använd antingen SHA1 eller SHA256 / 384/512. För Mask Generation Function (MGF), använd MGF1-stoppningen enligt anvisningarna. PKCS1Padding med RSA har varit sårbart för Ciphertext-attacker [6] sedan 1998.

Här pratar vi om rätt sätt att använda en transformation i en 'Cipher.getInstance' -metod.

  • Symmetrisk kryptering

  • Asymmetrisk kryptering

En säkerhetsnivå för alla krypteringsscheman är direkt proportionell mot storleken på dess nyckel. Nyckellängden måste vara tillräckligt lång för att oavsett vilken brutal kraft som attackerar blir den omöjlig samtidigt att den också bör vara tillräckligt kort för att hålla beräknings genomförbarhet i åtanke. Dessutom måste vi försöka överväga vad som fortfarande tål beräkningsframsteg under de kommande 30 åren.

Med detta kommer vi till slutet av kryptering i Java-artikeln. Jag hoppas att du fick en uppfattning om kryptering och dekryptering och varför den används i Java.

Kolla in av Edureka, ett pålitligt inlärningsföretag online med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edurekas Java J2EE- och SOA-utbildning och certifieringskurs är utformad för studenter och yrkesverksamma som vill vara Java-utvecklare. Kursen är utformad för att ge dig ett försprång till Java-programmering och träna dig för både kärn- och avancerade Java-koncept tillsammans med olika Java-ramverk som Hibernate & Spring.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i den här 'Kryptering i Java' -bloggen så kommer vi tillbaka till dig så snart som möjligt.