Kõik, mida peate teadma Java krüptimise kohta



See artikkel annab teile üksikasjalikud ja põhjalikud teadmised Java krüpteerimisest ja kuidas seda koos näidetega kasutada.

Krüptimine on meetod matemaatiliste algoritmide abil teabe tähenduse varjamiseks, nii et ainult volitatud osapooled saaksid selle dešifreerida. Selles artiklis käsitleme krüptimist ja dekrüpteerimist järgmises järjekorras:

Sissejuhatus Java krüptimisse

Krüpteerimist rakendatakse meie andmete (näiteks tekstide, vestluste ja reklaami häälte) kaitsmiseks, olgu see siis arvutis istumine või Interneti saatmine. Hiljutised krüptimistehnoloogiad on mis tahes turvalise arvutikeskkonna olulised elemendid.





Krüpteerimise turvalisuse peamine roll seisneb algoritmi võimes genereerida šifriteksti (krüpteeritud tekst), mida on raske taastada oma algtekstina. Võtmete kasutamine loob ka uue teabe turvalisuse tagamise taseme. Võti on osa teabest, mis võimaldab sõnumit kodeerida ja dekodeerida ainult neil, kes seda hoiavad.

Krüpteerimine ja dekrüpteerimine Java-s



Sümmeetrilised krüpteerimisalgoritmid

Sümmeetrilised algoritmid kasutavad krüptimiseks ja dekrüpteerimiseks sama võtit. Sellised algoritmid saavad töötada ainult plokirežiimis (mis töötab fikseeritud suurusega andmeplokkidel) või voogrežiimis (mis töötab andmete bittide või baitide korral). Sellised algoritmidkasutatakse tavaliselt ka selliste rakenduste jaoks nagu andmete krüptimine, failide krüptimine ja edastatud andmete krüptimine sidevõrkudes (nt TLS, e-kirjad, kiirsõnumid jne)

Asümmeetrilised (või avaliku võtme) krüpteerimisalgoritmid

Erinevalt sümmeetrilistest algoritmidest, mis kasutavad sama võtit nii krüpteerimiseks kui ka dekrüpteerimiseks, kasutavad asümmeetrilised algoritmid nende kahe etapi jaoks kahte identset võtit. Neid algoritme kasutatakse digitaalallkirjade ja võtmete loomise protokollide arvutamiseks. Sellega kaasneb aga ka väljakutse, et tuleb kasutada kahte võtit, mis muudab asja keerukamaks.



Mis tahes põhilise krüptimisskeemi turvaliseks konfigureerimiseks on väga oluline, et kõik sellised parameetrid (vähemalt) oleksid õigesti kujundatud:

  • Õige algoritmi valimine on oluline.
  • Sobiva tööülesande jaoks sobiva töörežiimi valimine
  • Õige polsterduskava valimine vastavalt nõudele
  • Õigete klahvide ja nende suuruste valimine vastavalt sellele
  • Õige lähtestamine krüptograafiliselt turvalise CSPRING-iga.

On väga oluline olla teadlik kõigi nende parameetrite turvalisest konfigureerimisest. Isegi väike vale konfiguratsioon võib ohustada tervet krüptosüsteemi ja avada selle häkkerite ja muu pahavara rünnakutele. Seega, et hoida seda arutelu lihtsana, arutagem ainult Ciferi algoritmidest sõltumatuid initsialiseeringuid. Selle asemel, et selliseid krüptimisi ise teha, on alati parem lasta ekspertidel oma ülesanne konfigureerida rohkem algoritmist sõltuvaid konfiguratsioone, näiteks RSA algoritmi p ja q väärtused jne. Konfigureerides lihtsalt algsed krüptograafilised parameetrid üle poole tosin, kasutatakse klasse.

mis on funktsioonid ruutmeetrites

Klasside hierarhiate, rohkete ülekoormatud konstruktorite / meetodite ja nii edasi tutvustamine, lisades palju keerukusi, mis muudavad selle tarbetuks. Ma soovin, et Java ei raskendaks põhikonfiguratsioone ja kasutaks lihtsalt lihtsamat arhitektuuri nagu Microsofti oma, kus kõik sellised parameetrid jäävad ühe klassi SymmetricAlgorithm ja AsymmetricAlgorithm perimeetritesse. Esimeseks kolmeks täpsustatavaks parameetriks (algoritm, töörežiim ja polsterdusskeem) kasutab Cipher objekt transformatsioonistringi.

  • Õige algoritmi valimine

Transformatsioonistring sisaldab kahtlemata krüptograafilise algoritmi nime. Sümmeetrilise ja asümmeetrilise krüptimise vahel on 11 algoritmi (mitte erinevate PBEWithAnd kombinatsioonide puhul), mille saab määrata vastavalt algoritmi standarddokumentatsiooni dokumentatsioonile. Neist ainult kaks (üks sümmeetriline ja asümmeetriline krüptimine) on tegelikult täielikult turvatud.

mis vahe on java ja c ++ vahel

Ülejäänud algoritmid on kas ülemäära katki (DES, RC2 jne) või on hakanud ilmnema praod (RC5), mistõttu on see piisava protsessori võimsusega purunev - selle lugemise ajaks võib see juba puruneda. Turvameelne arendaja ei tohi lugeda NIST-i spetsifikatsioonide lugusid ega jälgida krüptograafiakogukonna viimaseid sündmusi ja uuringuid. Nad võivad üles võtta katkised või riskantsed algoritmid, kokkuvõtte või pseudojuhusliku generaatori.

Alati:

  1. Sümmeetriline algoritm: kasutatakse plokkšifrit AES / AESWrap.

  2. Asümmeetriline algoritm: kasutatakse RSA-d.

  • Töörežiim

Töörežiim on osa teisendusest ja on asjakohane ainult plokksifrite jaoks. Kui kasutame asümmeetrilisi šifreid, kasutage töörežiimina EKP-d, mis on sisuliselt häkkimine telgitagustes, st ignoreerib seda väärtust. Java pakkujad, nagu SunJCE, SunPKCS11, on sümmeetriliste ja asümmeetriliste algoritmide vaikeseadeks EKP režiim. Asümmeetriliste algoritmide jaoks võib see olla hea, kuid plokksifrite jaoks halb idee.

Pakkujaid võiks õpetada kasutatavate algoritmide põhjal turvalisi vaikeväärtusi tegema. Kasutage sümmeetrilist krüpteerimist, et päästa teid kordusrünnakute või tuntud teksti abil rünnakute eest. Kasutage ka teisendust, mis määrab algoritmi täielikult (s.t selle töörežiimi ja polsterdusega). Ärge kunagi, kunagi tehke midagi sellist, nagu allpool mainitud.

Nagu ülalpool, kasutatakse AES-i algoritmi EKP töörežiimiga, mis muudab kordusrünnakud väga lihtsaks. Uue arenduse jaoks, kui on vähimatki võimalust vana töö uuendada, peaksime kasutama autentitud krüpteerimist seotud andmetega (AEAD) režiimis (näiteks GCM ja CCM). Meil on kogu bitti pikkusega autentimismärgend. Kui kasutame autentimata režiimi, kasutame šifri teksti autentimiseks CBC või CTR koos MAC-iga.

  • Sobiva polsterduskava valimine

Levinud plokkšifrirežiimid vajavad, et lihtteksti pikkus oleks aluseks oleva krüpteerimisalgoritmi ploki suuruse mitmekordne, mida juhtub harva. Seega vajame pehmendust.Java programm pakub meile sümmeetriliseks krüptimiseks kolme erinevat skeemi, millest üks on No Padding, mis on vastuvõetamatu, ja teine ​​on ISO10126Padding, mis on alates 2007. aastast tühistatud).

Seetõttu on ainus sobiv valik PKCS5Paddingi kasutamine. Mõne töörežiimi (näiteks CBC-režiim) ja PKCS5Padding-polsterdusskeemi segu võib põhjustada polaari-oraakli rünnakuid. Polsterdusskeemi üldse mainimata jätmine on ohtlikum kui skeemi pakkumine, mis on vastuvõtlik ainult teatud tüüpi rünnakutele. AEAD-režiim on kõige soovitatav, et olla kindel, et olete nende rünnakute eest kaitstud.

  • Asümmeetrilised algoritmid

Asümmeetrilistes algoritmides on meil võimalus valida kahe polsterdusskeemi vahel. Oluline on tagada, et kasutatakse ainult skeeme OAEPWithAndPadding. Kokkuvõtte korral kasutage palun kas SHA1 või SHA256 / 384/512. Maski genereerimise funktsiooni (MGF) jaoks kasutage palun MGF1 polsterdust vastavalt määratlusele. RKS-ga lisamine PKCS1 on alates 1998. aastast Ciphertext rünnakute suhtes haavatav.

Siinkohal räägime teisest teisest meetodi „Cipher.getInstance” kasutamisest.

kuidas tabelis parameetrit luua
  • Sümmeetriline krüptimine

  • Asümmeetriline krüptimine

Iga krüptimisskeemi turvatase on otseselt proportsionaalne selle võtme suurusega. Võtme pikkus peab olema piisavalt pikk, et ükskõik milline toore jõu rünnak muutub selle teostamatuks samal ajal, see peaks olema ka piisavalt lühike, et silmas pidada arvutuslikku teostatavust. Lisaks peame proovima kaaluda, mis veel järgmise 30 aasta arvutuslikele edusammudele vastu peavad.

Sellega jõuame Java-i krüptimise lõppu. Loodan, et saite aimu krüpteerimisest ja dekrüpteerimisest ning miks seda Java-s kasutatakse.

Vaadake Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik hõlmab üle 250 000 rahuloleva õppija, levinud üle kogu maailma. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud õpilastele ja spetsialistidele, kes soovivad olla Java arendajad. Kursus on loodud selleks, et anda teile Java programmeerimises edukas algus ja õpetada teid nii Java-põhiprogrammide kui ka edasijõudnute mõistete ning erinevate Java-raamistike, näiteks Hibernate & Spring, jaoks.

Kas teil on meile küsimus? Palun mainige seda selle ajaveebi “Krüptimine Java-s” kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.