Viskas, ką reikia žinoti apie „Java“ šifravimą

Šis straipsnis suteiks jums išsamių ir išsamių žinių apie „Java“ šifravimą ir kaip jį naudoti su pavyzdžiais.

Šifravimas yra matematinių algoritmų metodas, skirtas užmaskuoti informacijos reikšmę, kad ją iššifruoti galėtų tik įgaliotos šalys. Šiame straipsnyje aptarsime šifravimą ir iššifravimą tokia tvarka:

„Java“ šifravimo įvadas

Šifravimas įgyvendinamas siekiant apsaugoti mūsų duomenis (pvz., Tekstus, pokalbius ir balso balsus), nesvarbu, ar jie sėdi kompiuteryje, ar siunčiami internetu. Naujausios šifravimo technologijos yra esminiai bet kurios saugios kompiuterinės aplinkos elementai.





Pagrindinis šifravimo saugumo vaidmuo tenka algoritmo gebėjimui generuoti šifruotą tekstą (šifruotą tekstą), kurį sunku grąžinti į pradinį paprastą tekstą. Raktų naudojimas taip pat sukuria dar vieną mūsų informacijos apsaugos metodų saugumo lygį. Svarbiausia yra tam tikra informacija, leidžianti tik ją turintiems užkoduoti ir iššifruoti pranešimą.

Šifravimas ir iššifravimas „Java“



Simetriniai šifravimo algoritmai

Simetriniai algoritmai naudoja tą patį raktą šifravimui ir iššifravimui. Tokie algoritmai gali veikti tik blokiniu režimu (kuris veikia fiksuoto dydžio duomenų blokuose) arba srauto režimu (kuris veikia duomenų bitais ar baitais). Tokie algoritmaitaip pat dažnai naudojamos tokioms programoms kaip duomenų šifravimas, failų šifravimas ir perduodamų duomenų šifravimas ryšių tinkluose (pvz., TLS, el. laiškai, tiesioginiai pranešimai ir kt.)

Asimetriniai (arba viešojo rakto) šifravimo algoritmai

Skirtingai nuo simetriškų algoritmų, kurie naudoja tą patį raktą tiek šifravimo, tiek iššifravimo operacijoms, asimetriniai algoritmai šiems dviem žingsniams naudoja du identiškus raktus. Šie algoritmai naudojami skaičiuojant skaitmeninius parašus ir raktų nustatymo protokolus. Tačiau tai taip pat yra iššūkis, kad reikia naudoti du raktus, o tai daro viską sudėtingesnį.



Norint saugiai sukonfigūruoti bet kurią pagrindinę šifravimo schemą, labai svarbu, kad visi tokie parametrai (bent jau) būtų tinkamai suprojektuoti:

  • Svarbu pasirinkti teisingą algoritmą.
  • Tinkamo darbo režimo pasirinkimas atitinkamai užduočiai atlikti
  • Tinkamos paminkštinimo schemos pasirinkimas pagal reikalavimą
  • Tinkamai pasirinkti raktus ir jų dydžius
  • Teisingas inicijavimas naudojant kriptografiškai saugų CSPRING.

Labai svarbu žinoti, kaip saugiai sukonfigūruoti visus šiuos parametrus. Net maža neteisinga konfigūracija gali pakenkti visai kriptografinei sistemai ir atverti ją įsilaužėlių ir kitų kenkėjiškų programų atakoms. Taigi, norėdami, kad ši diskusija būtų paprasta, aptarkime tik nuo algoritmų nepriklausomus šifro inicijavimus. Užuot atlikę tokias šifruotes patys, visada geriau leisti ekspertams atlikti savo darbą konfigūruojant daugiau nuo algoritmų priklausančių konfigūracijų, pvz., RSA algoritmo p ir q reikšmes ir pan. Tiesiog sukonfigūruodami elementarius kriptografinius parametrus, viršijančius daugiau nei pusę naudojama keliolika klasių.

Klasių hierarchijų įvedimas, daugybė perkrautų konstruktorių / metodų ir pan., Pridedant daug sudėtingumo, dėl ko to nereikia. Norėčiau, kad „Java“ neapsunkintų pagrindinių konfigūracijų ir paprasčiausiai naudotų supaprastintą architektūrą, tokią kaip „Microsoft“, kur visi tokie parametrai yra vienos klasės „SymmetricAlgorithm“ ir „AsymmetricAlgorithm“ perimetruose. Kad būtų nurodyti pirmieji trys parametrai (algoritmas, veikimo būdas ir užpildymo schema), Cipher objektas naudoja transformacijos eilutę.

  • Tinkamo algoritmo pasirinkimas

Transformacijos eilutėje neabejotinai yra kriptografinio algoritmo pavadinimas. Tarp simetriško ir asimetrinio šifravimo yra 11 algoritmų (nesusiję su įvairiais PBEWithAnd deriniais), kuriuos galima nurodyti pagal Standartinio algoritmo pavadinimo dokumentaciją. Iš jų tik dvi (po vieną kiekvienai, simetriškos ir asimetrinės šifruotės) yra visiškai apsaugotos.

Likę algoritmai yra arba per daug sugedę (DES, RC2 ir kt.), Arba įtrūkimai atsirado (RC5), todėl jie gali būti sulaužomi turint pakankamą procesoriaus galią - jau gali būti sugadinti, kol perskaitysite. Saugiai besidomintis kūrėjas negali skaityti NIST specifikacijų rinkinių ir nesekti naujausių įvykių bei tyrimų kriptografijos bendruomenėje. Jie gali paimti sugadintus ar rizikingus algoritmus, sujungti ar pseudo-atsitiktinius generatorius.

Visada:

  1. Simetrinis algoritmas: naudojamas AES / AESWrap blokinis šifras.

  2. Asimetrinis algoritmas: naudojamas RSA.

  • Veikimo būdas

Veikimo režimas yra transformacijos dalis ir yra aktualus tik blokiniams šiframs. Kai mes naudojame asimetrinius šifrus, naudokite ECB kaip darbo režimą, kuris iš esmės yra nulaužimas užkulisiuose, ty ignoruokite šią vertę. „Java“ teikėjai, pvz., „SunJCE“, „SunPKCS11“, pagal simetriškų ir asimetrinių algoritmų numatytuosius nustatymus naudoja ECB režimą. Asimetriniams algoritmams tai gali būti naudinga, bet bloko šiframs - bloga idėja.

Teikėjams galėtų būti nurodyta atlikti saugius numatytuosius nustatymus pagal naudojamą algoritmą. Naudokite simetrišką šifravimą, kad sutaupytumėte nuo pakartotinių atakų ar žinomų atviro teksto atakų. Taip pat naudokite transformaciją, kuri visiškai nurodo algoritmą (t. Y. Su jo veikimo režimu ir užpildymu). Niekada, niekada nedarykite kažko panašaus į toliau paminėtą.

Kaip ir aukščiau, AES algoritmas būtų naudojamas su ECB darbo režimu, todėl pakartojimo atakos būtų labai lengvos. Naujiems kūriniams, jei yra menkiausia galimybė atnaujinti seną darbą, turėtume naudoti autentifikuotą šifravimą su susietų duomenų (AEAD) režimu (pvz., GCM ir CCM). Mes turime autentifikavimo žymą, kurios ilgis yra 128 bitai. Jei mes naudojame neautentifikuotą režimą, šifruotam tekstui autentifikuoti naudojame CBC arba CTR su MAC.

  • Tinkamos paminkštinimo schemos pasirinkimas

Paprastiems bloko šifro režimams reikalingas paprasto teksto ilgis, kuris yra pagrindinio šifravimo algoritmo bloko dydžio kartotinis, o taip būna retai. Taigi, mums reikia šiek tiek paminkštinti.„Java“ programa pateikia tris skirtingas simetriško šifravimo schemas, viena yra „No Padding“, kuri yra nepriimtina, o kita - „ISO10126Padding“, kuri panaikinta nuo 2007 m.).

Todėl vienintelis tinkamas variantas yra PKCS5Padding naudojimas. Kai kurių veikimo būdų (pavyzdžiui, CBC režimas) ir „PKCS5Padding“ užpildymo schemos derinys gali sukelti „Oracle“ išpuolius. Visai nepaminėti užpildymo schemos yra pavojingiau nei pateikti schemą, kuri yra jautri tik tam tikrų rūšių atakoms. AEAD veikimo režimas yra labiausiai rekomenduojamas, kad būtumėte tikri, jog esate apsaugotas nuo šių atakų.

  • Asimetriniai algoritmai

Asimetriniuose algoritmuose mes galime rinktis iš dviejų užpildymo schemų. Svarbu užtikrinti, kad būtų naudojamos tik OAEPWithAndPadding schemos. Santraukos atveju naudokite SHA1 arba SHA256 / 384/512. Norėdami naudoti kaukės generavimo funkciją (MGF), naudokite MGF1 užpildą, kaip nurodyta. „PKCS1Padding with RSA“ nuo 1998 m. Buvo pažeidžiamas šifruoto teksto atakų [6].

Čia mes kalbame apie teisingą transformacijos naudojimo būdą „Cipher.getInstance“ metodu.

  • Simetrinis šifravimas

java klasės krautuvo interviu klausimai
  • Asimetriškas šifravimas

Bet kurios šifravimo schemos saugumo lygis yra tiesiogiai proporcingas jos rakto dydžiui. Rakto ilgis turi būti pakankamai ilgas, kad bet kokia žiauri jėga jį užpultų, tuo pačiu metu tampa neįmanoma, jis taip pat turėtų būti pakankamai trumpas, kad būtų atsižvelgta į skaičiavimo galimybes. Be to, turime pabandyti apsvarstyti, kas vis dar atlaiko skaičiavimo pažangą per ateinančius 30 metų.

Tai pasiekėme „Java“ šifravimo pabaigos. Tikiuosi, kad jūs supratote apie šifravimą ir iššifravimą ir kodėl jis naudojamas „Java“.

Patikrinkite sukūrė „Edureka“ - patikima internetinė mokymosi įmonė, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą. „Edureka“ mokymai ir sertifikavimo kursai „Java J2EE“ ir „SOA“ skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti žaisti „Java“ programavimą ir išmokyti pagrindinių bei pažangių „Java“ koncepcijų kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šio tinklaraščio „Encryption in Java“ komentarų skyriuje, ir mes kuo greičiau susisieksime su jumis.