Kaikki mitä sinun tarvitsee tietää Java-salauksesta



Tämä artikkeli antaa sinulle yksityiskohtaisen ja kattavan tiedon Java-salauksesta ja sen käytöstä esimerkkien kanssa.

Salaus on menetelmä, jolla matemaattisia algoritmeja käytetään naamioimaan tieton merkitys siten, että vain valtuutetut osapuolet voivat tulkita sen. Tässä artikkelissa käsitellään salausta ja salauksen purkamista seuraavassa järjestyksessä:

Johdatus Java-salaukseen

Salaus toteutetaan tietojemme (kuten tekstien, keskustelujen ja äänen) suojaamiseksi, olipa se sitten tietokoneella istuminen tai se lähetetään Internetiin. Viimeaikaiset salaustekniikat ovat olennaisia ​​elementtejä turvallisessa tietojenkäsittely-ympäristössä.





Salausturvallisuuden ensisijainen rooli on algoritmin kyvyssä tuottaa salakirjoitusta (salattua tekstiä), jota on vaikea palauttaa alkuperäiseen tekstinsä. Avainten käyttö luo myös uuden suojaustason tietojemme suojaamiseen. Avain on joitain tietoja, joiden avulla vain ne, jotka pitävät sitä, voivat koodata ja purkaa viestin.

Salaus ja salauksen purku Javassa



Symmetriset salausalgoritmit

Symmetriset algoritmit käyttävät samaa avainta salaukseen ja salauksen purkamiseen. Tällaiset algoritmit voivat toimia vain lohkotilassa (joka toimii kiinteän kokoisilla tietolohkoilla) tai virtaustilassa (joka toimii tietobitteillä tai tavuilla). Tällaiset algoritmitkäytetään myös yleisesti sovelluksissa, kuten datan salaus, tiedostojen salaus ja lähetettyjen tietojen salaus viestintäverkoissa (kuten TLS, sähköpostit, pikaviestit jne.)

Epäsymmetriset (tai julkisen avaimen) salausalgoritmit

Toisin kuin symmetriset algoritmit, jotka käyttävät samaa avainta sekä salaus- että salauksen purkuoperaatioissa, epäsymmetriset algoritmit käyttävät kahta identtistä avainta näissä kahdessa vaiheessa. Näitä algoritmeja käytetään digitaalisten allekirjoitusten ja avainten muodostusprotokollien laskemiseen. Tähän liittyy kuitenkin myös haaste, että on käytettävä kahta avainta, mikä tekee asioista monimutkaisempia.



Minkä tahansa perussalausjärjestelmän turvallisen konfiguroinnin kannalta on erittäin tärkeää, että kaikki tällaiset parametrit (vähintään) on suunniteltu oikein:

  • Oikean algoritmin valinta on tärkeää.
  • Oikean toimintatilan valitseminen tehtävää varten
  • Oikean pehmustemallin valitseminen vaatimuksen mukaan
  • Oikeiden näppäinten ja niiden koon valinta
  • Oikea alustus salauksella suojatulla CSPRING: llä.

On erittäin tärkeää olla tietoinen kaikkien näiden parametrien turvallisesta konfiguroinnista. Jopa pieni väärä määritys voi vaarantaa koko salauksen ja avata sen hakkereiden ja muiden haittaohjelmien hyökkäyksille. Siksi, jotta tämä keskustelu olisi yksinkertainen, keskustelkaamme vain Cipherin algoritmista riippumattomista alustuksista. Sen sijaan, että teet tällaisia ​​salauksia itse, on aina parempi antaa asiantuntijoiden tehdä työnsä konfiguroimalla enemmän algoritmista riippuvia kokoonpanoja, kuten RSA-algoritmin p- ja q-arvot jne. tusinaa, luokkia käytetään.

Luokkahierarkioiden käyttöönotto, runsaasti ylikuormitettuja rakentajia / menetelmiä ja niin edelleen, lisäämällä monia monimutkaisuuksia, jotka tekevät siitä tarpeetonta. Toivon, että Java ei vaikeuttanut peruskokoonpanoja ja yksinkertaisesti käyttäisi yksinkertaistettua arkkitehtuuria, kuten Microsoft, jossa kaikki tällaiset parametrit ovat yhden luokan SymmetricAlgorithm ja AsymmetricAlgorithm kehällä. Kolme ensimmäistä määriteltävää parametria (algoritmi, toimintatapa ja täytemalli) Cipher-objekti käyttää muunnosmerkkijonoa.

  • Oikean algoritmin valinta

Muunnosmerkkijono sisältää epäilemättä salauksen algoritmin nimen. Symmetrisen ja epäsymmetrisen salauksen välissä on 11 algoritmia (ei koske erilaisia ​​PBEWithAnd-yhdistelmiä), jotka voidaan määrittää normaalin algoritmin nimen dokumentaation mukaisesti. Niistä vain kaksi (yksi kullekin, symmetriset ja epäsymmetriset salaukset) on tosiasiallisesti täysin suojattu.

poikkeuksen käsittely oraakkeleille tallennetussa menettelyssä

Loput algoritmit ovat joko liian rikkoutuneita (DES, RC2 jne.) Tai halkeamia on alkanut pinnalle (RC5), mikä tekee siitä rikkoutuvan riittävällä suorittimen teholla - se voi olla jo rikkoutunut, kun luet tätä. Turvallisuusmielinen kehittäjä ei saa lukea NIST-spesifikaatioita eikä seurata viimeisimpiä tapahtumia ja tutkimuksia salausyhteisössä. He saattavat poimia rikki tai riskialttiita algoritmeja, sulattaa tai näennäissatunnaisgeneraattorin.

Aina:

  1. Symmetrinen algoritmi: AES / AESWrap-lohkosalausta käytetään.

  2. Epäsymmetrinen algoritmi: Käytetään RSA: ta.

  • Toimintamalli

Toimintatapa on osa muunnosta, ja sillä on merkitystä vain salakoodeille. Kun käytämme epäsymmetrisiä salauksia, käytä EKP: tä toimintatapana, joka on lähinnä hakkerointi kulissien takana, mikä tarkoittaa, että sivuutetaan tämä arvo. Java-palveluntarjoajat, kuten SunJCE, SunPKCS11, käyttävät symmetrisiä ja epäsymmetrisiä algoritmeja oletusarvoisesti EKP-tilassa. Se voi olla hyvä asia epäsymmetrisille algoritmeille, mutta huono idea lohkosalauksille.

Palveluntarjoajia voidaan kehottaa tekemään turvallisia oletusarvoja käytetyn algoritmin perusteella. Käytä symmetristä salausta säästääksesi uusintahyökkäyksiltä tai tunnettujen selkeiden tekstien hyökkäyksiltä. Käytä myös muunnosta, joka määrittää algoritmin täysin (ts. Sen toimintatavan ja täytteen kanssa). Älä koskaan, koskaan tee jotain alla mainitun kaltaista.

Kuten edellä, AES-algoritmia käytettäisiin EKP: n toimintatilassa, mikä toisto-iskut tekisi erittäin helpoksi. Jos vanhan työn uudistamiseen on pienintäkään mahdollisuutta uudelle kehitykselle, meidän on käytettävä todennettua salausta ja siihen liittyvää dataa (AEAD) -tilaa (esimerkiksi GCM ja CCM). Meillä on todentamistunniste, jonka pituus on 128 bittiä. Jos käytämme todentamatonta tilaa, käytämme salaustekstin todentamiseen CBC: tä tai CTR: tä MAC: n kanssa.

  • Sopivan pehmustemallin valitseminen

Yleiset lohkosalatilat edellyttävät pelkkän tekstin pituuden kerrannaisena taustalla olevan salausalgoritmin lohkon koosta, mikä on harvoin tapaus. Siksi tarvitsemme jonkin verran pehmustetta.Java-ohjelma tarjoaa meille kolme erilaista symmetrisen salauksen mallia, joista toinen on No Padding, jota ei voida hyväksyä, ja toinen on ISO10126Padding, joka on peruutettu vuodesta 2007).

Siksi ainoa sopiva vaihtoehto on käyttää PKCS5Paddingia. Joidenkin toimintatapojen (esimerkiksi CBC-tila) ja PKCS5Padding-pehmustemallin sekoitus voi johtaa täyte-oraakkelihyökkäyksiin. Pehmustemallin mainitsematta jättäminen on vaarallisempaa kuin sellaisen mallin tarjoaminen, joka on altis vain tietyntyyppisille hyökkäyksille. AEAD-toimintatilaa suositellaan eniten varmistaaksesi, että olet suojattu näiltä hyökkäyksiltä.

  • Epäsymmetriset algoritmit

Epäsymmetrisissä algoritmeissa meillä on mahdollisuus valita kahdesta täytemallista. On tärkeää varmistaa, että käytetään vain OAEPWithAndPadding-järjestelmiä. Jos kyseessä on katsaus, käytä joko SHA1 tai SHA256 / 384/512. Käytä Maskin luontitoimintoa (MGF) varten käyttämällä MGF1-täytettä määritetyllä tavalla. PKCS1Padding with RSA on ollut altis Ciphertext-hyökkäyksille [6] vuodesta 1998 lähtien.

Tässä puhumme muunnoksen oikeasta käyttötavasta ”Cipher.getInstance” -menetelmässä.

  • Symmetrinen salaus

  • Epäsymmetrinen salaus

Kaikkien salausmenetelmien suojaustaso on suoraan verrannollinen avaimen kokoon. Avaimen pituuden on oltava riittävän pitkä, jotta mitä tahansa raakaa voimaa hyökkäävä se muuttuu mahdottomaksi samalla, sen tulisi olla myös riittävän lyhyt laskennallisen toteutettavuuden huomioon ottamiseksi. Lisäksi meidän on yritettävä miettiä, mikä edelleen kestää laskennallista kehitystä seuraavan 30 vuoden ajan.

Tämän avulla olemme päässeet Java-salauksen artikkelin loppuun. Toivon, että sait käsityksen salauksesta ja salauksen purkamisesta ja miksi sitä käytetään Javassa.

Katso Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssit on suunniteltu opiskelijoille ja ammattilaisille, jotka haluavat olla Java-kehittäjiä. Kurssi on suunniteltu antamaan sinulle etumatka Java-ohjelmointiin ja kouluttamaan sekä ydin- että edistyneitä Java-konsepteja sekä erilaisia ​​Java-kehyksiä, kuten Hibernate & Spring.

Onko sinulla kysymys meille? Mainitse se tämän ”Encryption in Java” -blogin kommenttiosassa, niin otamme sinuun yhteyttä mahdollisimman pian.