Minden, amit tudnia kell a Java titkosításáról

Ez a cikk részletes és átfogó ismereteket nyújt a Java titkosításáról és a példákkal történő használatáról.

A titkosítás az a módszer, amellyel matematikai algoritmusokat használnak egy információ jelentésének álcázására, hogy csak az arra felhatalmazott felek tudjanak megfejteni. Ebben a cikkben a titkosítást és a visszafejtést tárgyaljuk a következő sorrendben:



Bevezetés a Java titkosításába

A titkosítás az adataink (például szövegek, beszélgetések és hangok) védelme érdekében valósul meg, legyen az számítógépen ülve vagy az interneten küldve. A legújabb titkosítási technológiák elengedhetetlen elemei a biztonságos számítástechnikai környezetnek.



A titkosítás biztonságának elsődleges szerepe abban rejlik, hogy egy algoritmus képes rejtjelszöveget (titkosított szöveget) létrehozni, amelyet nehéz visszaállítani az eredeti sima szövegére. A kulcsok használata egy újabb biztonsági szintet teremt az információink védelmének módszereiben is. A kulcs bizonyos információk, amelyek csak azok számára engedélyezik az üzenet kódolását és dekódolását.

Titkosítás és visszafejtés Java-ban



Szimmetrikus titkosítási algoritmusok

A szimmetrikus algoritmusok ugyanazt a kulcsot használják a titkosításhoz és a visszafejtéshez. Az ilyen algoritmusok csak blokk módban (amely rögzített méretű adatblokkokon működik) vagy stream módban (biteken vagy adatbájtokon) működhetnek. Ilyen algoritmusok gyakran használják olyan alkalmazásokban is, mint az adatok titkosítása, a fájlok titkosítása és az átvitt adatok titkosítása a kommunikációs hálózatokban (például TLS, e-mailek, azonnali üzenetek stb.)

Aszimmetrikus (vagy nyilvános kulcsú) titkosítási algoritmusok

A szimmetrikus algoritmusoktól eltérően, amelyek ugyanazt a kulcsot használják mind a titkosításhoz, mind a visszafejtéshez, az aszimmetrikus algoritmusok két azonos kulcsot használnak e két lépéshez. Ezeket az algoritmusokat digitális aláírások és kulcs létrehozási protokollok kiszámításához használják. Ez azonban egy olyan kihívással is jár, hogy két kulcsot kell használni, ami bonyolultabbá teszi a dolgot.



Bármely alapvető titkosítási séma biztonságos konfigurálása érdekében nagyon fontos, hogy az összes ilyen paramétert (legalábbis) helyesen tervezzék meg:

  • Fontos a helyes algoritmus kiválasztása.
  • A megfelelő működési mód kiválasztása a megfelelő feladathoz
  • A megfelelő párnázási séma kiválasztása a követelményeknek megfelelően
  • Megfelelő gombok és méretük kiválasztása
  • Helyes inicializálás kriptográfiailag biztonságos CSPRING segítségével.

Nagyon fontos tisztában lenni mindezen paraméterek biztonságos konfigurálásával. Még egy apró téves konfiguráció is veszélyeztetheti az egész kriptorendszert, és megnyithatja a hackerek és más rosszindulatú programok támadásai előtt. Ezért, hogy ez a vita egyszerű maradjon, csak egy Cipher algoritmustól független inicializálását vitassuk meg. Ahelyett, hogy ilyen titkosításokat végezne egyedül, mindig jobb, ha hagyja, hogy a szakértők több algoritmustól függő konfiguráció konfigurálásával végezzék munkájukat, például az RSA algoritmus p és q értékeit stb. tucatnyi osztályt használnak.

Osztályhierarchiák bevezetése, rengeteg túlterhelt konstruktor / módszer és így tovább, sok bonyolultság hozzáadásával, amelyek szükségtelenné teszik. Szeretném, ha a Java nem bonyolítaná az alapkonfigurációkat, és egyszerűen egy egyszerűbb architektúrát alkalmazna, mint például a Microsoft, ahol az összes ilyen paraméter egy osztály SymmetricAlgorithm és AsymmetricAlgorithm kerületén belül van. Az első három paraméter megadásához (algoritmus, működési mód és kitöltési séma) egy Cipher objektum transzformációs karakterláncot használ.

  • A megfelelő algoritmus kiválasztása

Egy transzformációs karakterlánc kétségtelenül tartalmazza a kriptográfiai algoritmus nevét. A szimmetrikus és az aszimmetrikus titkosítás között 11 algoritmus található (nem a különféle PBEWithAnd kombinációkra vonatkoztatva), amelyeket a Standard Algorithm Name Documentation szerint lehet megadni. Közülük csak kettő (egyenként szimmetrikus és aszimmetrikus titkosítás) van tulajdonképpen teljes biztonságban.

A fennmaradó algoritmusok vagy túlságosan megszakadtak (DES, RC2 stb.), Vagy repedések kezdenek felszínre kerülni (RC5), ami megfelelő CPU-energiával megtörhetővé teszi - már el is törhet, mire ezt elolvassa. Biztonsági gondolkodású fejlesztő nem olvashatja el a NIST specifikációk sokaságát, és nem követheti a kriptográfiai közösség legújabb eseményeit és kutatásait. Előfordulhatnak a törött vagy kockázatos algoritmusok, emésztés vagy ál-véletlenszerű generátorok.

Mindig:

  1. Szimmetrikus algoritmus: AES / AESWrap blokkos titkosítást használunk.

  2. Aszimmetrikus algoritmus: RSA-t használunk.

  • Üzemmód

A működési mód az átalakítás része, és csak a blokkos rejtjelezők számára releváns. Amikor aszimmetrikus rejtjeleket használunk, akkor az EKB-t használja működési módként, ami lényegében a kulisszák mögötti hack, vagyis figyelmen kívül hagyja ezt az értéket. A Java szolgáltatók, mint például a SunJCE, a SunPKCS11, alapértelmezetten az ECB módot használják szimmetrikus és aszimmetrikus algoritmusok esetén. Lehet, hogy ez jó dolog aszimmetrikus algoritmusoknál, de rossz ötlet a blokkos rejtjeleknél.

a c ++ prioritási sor megvalósítása

A szolgáltatókat arra utasíthatják, hogy a használt algoritmus alapján végezzenek biztonságos alapértelmezéseket. Szimmetrikus titkosítással mentse meg a visszajátszási támadásoktól vagy az ismert sima szövegű támadásoktól. Használjon olyan transzformációt is, amely teljes mértékben meghatározza egy algoritmust (vagyis annak működési módjával és kitöltésével). Soha, soha ne tegyen olyat, mint az alábbiakban.

A fentiekhez hasonlóan az AES algoritmust az EKB működési módjával együtt lehetne használni, ami nagyon megkönnyíti az ismétlési támadásokat. Új fejlesztéshez, ha a legkisebb lehetőség van a régi munka átalakítására, hitelesített titkosítást kell használnunk a kapcsolódó adatokkal (AEAD) (például GCM és CCM). Van egy teljes 128 bites hosszúságú hitelesítési címke. Ha nem hitelesített módot használunk, akkor a rejtjelszöveg hitelesítéséhez CBC-t vagy CTR-t használunk MAC-mal.

  • A megfelelő párnázási séma kiválasztása

A közös blokkos titkosítási módokhoz a sima szöveg hosszának meg kell felelnie az alapul szolgáló titkosítási algoritmus blokkméretének, ez ritkán fordul elő. Ezért szükségünk van párnázásra.A Java program három különböző sémát kínál a szimmetrikus titkosításhoz, az egyik a No Padding, ami elfogadhatatlan, a másik pedig az ISO10126Padding, amelyet 2007 óta visszavontak).

Ezért az egyetlen megfelelő lehetőség a PKCS5Padding használata. Egyes működési módok (például CBC mód) és a PKCS5Padding párnázási séma keveréke oracle támadásokhoz vezethet. A kitöltési séma egyáltalán nem megemlítése veszélyesebb, mint egy olyan séma biztosítása, amely csak bizonyos típusú támadásokra hajlamos. Az AEAD működési mód ajánlott, hogy megbizonyosodjon arról, hogy védve van ezekkel a támadásokkal szemben.

  • Aszimmetrikus algoritmusok

Az aszimmetrikus algoritmusokban lehetőségünk van két kitöltési séma közül választani. Fontos biztosítani, hogy csak OAEPWithAndPadding sémákat használjanak. Összevonás esetén kérjük, használja az SHA1 vagy az SHA256 / 384/512 alkalmazást. A Maszkgenerálás funkcióhoz (MGF) használja az MGF1 kitöltést a megadott módon. Az RSA-val végzett PKCS1Padding 1998 óta sérülékeny a Ciphertext támadásokkal szemben [6].

Itt beszélünk az átalakítás helyes használatáról a „Cipher.getInstance” módszerben.

  • Szimmetrikus titkosítás

  • Aszimmetrikus titkosítás

Bármely titkosítási séma biztonsági szintje közvetlenül arányos a kulcsa méretével. A kulcs hosszának elég hosszúnak kell lennie ahhoz, hogy bármi is legyen a durva erő támadása, megvalósíthatatlanná válik, ugyanakkor elég rövidnek kell lennie a számítási megvalósíthatóság szem előtt tartása érdekében is. Ezenkívül meg kell próbálni mérlegelni, hogy mi áll még ellen a számítási fejlődésnek a következő 30 évben.

Ezzel a Titkosítás a Java-ban végére értünk. Remélem, van ötlete a titkosításról és a visszafejtésről, és arról, hogy miért használják a Java-ban.

Nézze meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát olyan hallgatók és szakemberek számára tervezték, akik Java fejlesztők szeretnének lenni. A tanfolyamot úgy tervezték meg, hogy előrelépést nyújtson a Java programozásban, és képezze mind az alapvető, mind a fejlett Java koncepciókhoz, valamint a különböző Java keretrendszerekhez, például a Hibernate & Spring.

Van egy kérdésünk? Kérjük, említse meg a „Titkosítás Java-ban” blog megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.