Všetko, čo potrebujete vedieť o šifrovaní v Jave



Tento článok vám poskytne podrobné a komplexné vedomosti o šifrovaní v jazyku Java a o tom, ako ho používať v príkladoch.

Šifrovanie je metóda využívajúca matematické algoritmy na maskovanie významu informácie tak, aby ju mohli dešifrovať iba oprávnené strany. V tomto článku sa budeme zaoberať šifrovaním a dešifrovaním v systéme Windows v nasledujúcom poradí:

Úvod do šifrovania v Jave

Šifrovanie je implementované na ochranu našich údajov (napríklad textov, konverzácií a hlasu), či už sediacich na počítači, alebo odosielaných na internet. Posledné šifrovacie technológie sú základnými prvkami každého zabezpečeného výpočtového prostredia.





Primárna úloha zabezpečenia šifrovania spočíva v schopnosti algoritmu generovať šifrovací text (šifrovaný text), ktorý je ťažké vrátiť do pôvodného holého textu. Používanie kľúčov tiež vytvára ďalšiu úroveň zabezpečenia metód ochrany našich informácií. Kľúčom sú niektoré informácie, ktoré umožňujú kódovanie a dekódovanie správy iba tým, ktorí ich obsahujú.

ako nastaviť php

Šifrovanie a dešifrovanie v Jave



Symetrické šifrovacie algoritmy

Symetrické algoritmy používajú rovnaký kľúč na šifrovanie a dešifrovanie. Takéto algoritmy môžu pracovať iba v blokovom režime (ktorý pracuje na blokoch dát s pevnou veľkosťou) alebo v streamovacom režime (ktorý funguje na bitoch alebo bytoch dát). Takéto algoritmysa tiež bežne používajú v aplikáciách ako šifrovanie dát, šifrovanie súborov a šifrovanie prenášaných údajov v komunikačných sieťach (ako TLS, e-maily, okamžité správy atď.)

Asymetrické (alebo verejný kľúč) šifrovacie algoritmy

Na rozdiel od symetrických algoritmov, ktoré využívajú rovnaký kľúč pre operácie šifrovania aj dešifrovania, asymetrické algoritmy používajú pre tieto dva kroky dva rovnaké kľúče. Tieto algoritmy sa používajú na výpočet digitálnych podpisov a protokolov o založení kľúča. To však zároveň prichádza s výzvou, že je potrebné použiť dva kľúče, čo robí veci zložitejšími.



Pre bezpečnú konfiguráciu všetkých základných schém šifrovania je veľmi dôležité, aby všetky tieto parametre (minimálne) boli navrhnuté správne:

  • Dôležitý je výber správneho algoritmu.
  • Výber správneho prevádzkového režimu pre príslušnú úlohu
  • Výber správnej schémy výplne podľa požiadavky
  • Podľa toho zvoliť správne klávesy a ich veľkosti
  • Správna inicializácia pomocou kryptograficky zabezpečeného CSPRING.

Je veľmi dôležité vedieť o bezpečnej konfigurácii všetkých týchto parametrov. Aj malá nesprávna konfigurácia môže ohroziť celý kryptosystém a otvoriť ho útokom hackerov a iného škodlivého softvéru. Preto, aby bola táto diskusia jednoduchá, poďme diskutovať iba o inicializáciách Šifry nezávislých od algoritmu. Namiesto toho, aby ste takéto šifrovanie robili sami, je vždy lepšie nechať expertov, aby vykonali svoju prácu s konfiguráciou viac konfigurácií závislých od algoritmu, ako sú napríklad hodnoty p a q algoritmu RSA atď. Konfiguráciou základných kryptografických parametrov nad viac ako pol používa sa tucet tried.

Zavedenie hierarchií tried, veľa preťažených konštruktérov / metód a tak ďalej, ktoré pridávajú mnoho zložitostí, vďaka čomu je zbytočný. Prial by som si, aby Java nekomplikovala základné konfigurácie a jednoducho by použila zjednodušenejšiu architektúru ako Microsoft, kde sú všetky tieto parametre v obvode jednej triedy SymmetricAlgorithm a AsymmetricAlgorithm. Pre prvé tri parametre, ktoré sa majú špecifikovať (algoritmus, prevádzkový režim a výplňová schéma), používa objekt Cipher transformačný reťazec.

  • Výber správneho algoritmu

Transformačný reťazec nepochybne obsahuje názov kryptografického algoritmu. Medzi symetrickým a asymetrickým šifrovaním existuje 11 algoritmov (bez ohľadu na rôzne kombinácie PBEWithAnd), ktoré je možné určiť podľa štandardnej dokumentácie názvu algoritmu. Z nich sú skutočne úplne zabezpečené iba dve (pre každé jedno, symetrické a asymetrické šifrovanie).

Zvyšné algoritmy sú buď nadmerne porušené (DES, RC2 atď.), Alebo sa začali objavovať praskliny (RC5), vďaka čomu sú pri dostatočnom výkone procesora rozbitné - môžu sa porušiť už v čase, keď si to prečítate. Bezpečnostne zameraný vývojár nemusí čítať klady špecifikácií NIST ani sledovať najnovšie udalosti a výskumy v kryptografickej komunite. Môžu zachytiť narušené alebo riskantné algoritmy, prehľad alebo pseudonáhodný generátor.

Vždy pre:

  1. Symetrický algoritmus: Používa sa bloková šifra AES / AESWrap.

  2. Asymetrický algoritmus: Používa sa RSA.

  • Režim prevádzky

Prevádzkový režim je súčasťou transformácie a je relevantný iba pre blokové šifry. Keď používame asymetrické šifry, použite ako prevádzkový režim ECB, čo je v podstate hack-in-the-scenes, čo znamená ignorovať túto hodnotu. Poskytovatelia Javy ako SunJCE, SunPKCS11 majú predvolený režim ECB pre symetrické a asymetrické algoritmy. Môže to byť dobrá vec pre asymetrické algoritmy, ale zlý nápad pre blokové šifry.

Poskytovatelia môžu byť vyzvaní, aby na základe použitého algoritmu zabezpečili predvolené hodnoty. Použite symetrické šifrovanie, aby ste sa zachránili pred útokmi opakovaného prehrávania alebo útokmi so známym holým textom. Použite tiež transformáciu, ktorá úplne špecifikuje algoritmus (tj. S jeho režimom činnosti a výplňou). Nikdy nikdy nerobte niečo také, ako je uvedené nižšie.

Ako je uvedené vyššie, algoritmus AES by sa používal v režime prevádzky ECB, čo by veľmi uľahčilo opakované útoky. Ak je v prípade nového vývoja najmenšia možnosť úpravy starej práce, mali by sme použiť overené šifrovanie s režimom asociovaných údajov (AEAD) (napríklad GCM a CCM). Máme overovaciu značku s plnou dĺžkou 128 bitov. Ak používame neautentizovaný režim, na autentifikáciu šifrového textu používame CBC alebo CTR s MAC.

  • Výber vhodnej schémy výplne

Bežné režimy blokovej šifry vyžadujú, aby dĺžka obyčajného textu bola násobkom veľkosti bloku základného šifrovacieho algoritmu, čo sa stáva zriedka. Preto vyžadujeme určité polstrovanie.Program Java nám poskytuje tri rôzne schémy symetrického šifrovania, z ktorých jedna je No Padding, čo je neprijateľné, a druhá je ISO10126Padding, ktorá je od roku 2007 zrušená).

Jedinou vhodnou možnosťou je preto použitie PKCS5Padding. Kombinácia niektorých režimov činnosti (napríklad režim CBC) a schémy výplne PKCS5Padding môže viesť k výplňovým Oracle útokom. To, že ste sa už vôbec nezmieňovali o výplňovej schéme, je nebezpečnejšie ako poskytnutie schémy, ktorá je citlivá iba na určité typy útokov. Najčastejšie sa odporúča prevádzkový režim AEAD, aby ste sa uistili, že ste chránení pred týmito útokmi.

  • Asymetrické algoritmy

V asymetrických algoritmoch máme možnosť výberu z dvoch výplňových schém. Je dôležité zabezpečiť, aby sa používali iba schémy OAEPWithAndPadding. V prípade digestu použite buď SHA1, alebo SHA256 / 384/512. Pre funkciu generovania masky (MGF) použite vypchávky MGF1, ako je uvedené. PKCS1Padding s RSA je od roku 1998 zraniteľné voči útokom Ciphertext [6].

Tu hovoríme o správnom spôsobe použitia transformácie v metóde „Cipher.getInstance“.

  • Symetrické šifrovanie

  • Asymetrické šifrovanie

Úroveň zabezpečenia ľubovoľnej šifrovacej schémy je priamo úmerná veľkosti jej kľúča. Dĺžka kľúča musí byť dostatočne dlhá, aby akákoľvek hrubá sila útočila na to, že je súčasne nerealizovateľná, mala by byť tiež dostatočne krátka na to, aby mala na pamäti výpočtovú realizovateľnosť. Okrem toho sa musíme pokúsiť zvážiť, čo ešte vydrží výpočtový pokrok počas nasledujúcich 30 rokov.

Týmto sa dostávame na koniec článku Šifrovanie v Jave. Dúfam, že ste získali predstavu o šifrovaní a dešifrovaní a o tom, prečo sa používa v prostredí Java.

Pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA je určený pre študentov a profesionálov, ktorí chcú byť vývojármi Java. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v jazyku Java a naučil vás základné aj pokročilé koncepty jazyka Java spolu s rôznymi rámcami Java, ako je Hibernate & Spring.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov v tomto blogu „Šifrovanie v Jave“ a my sa vám ozveme čo najskôr.