Vše, co potřebujete vědět o šifrování v Javě



Tento článek vám poskytne podrobné a komplexní znalosti o šifrování v Javě a o tom, jak ji používat s příklady.

Šifrování je metoda použití matematických algoritmů k maskování významu informace tak, aby ji mohly dešifrovat pouze oprávněné strany. V tomto článku se budeme zabývat šifrováním a dešifrováním v v následujícím pořadí:

Úvod do šifrování v Javě

Šifrování je implementováno za účelem ochrany našich dat (jako jsou texty, konverzace a hlas), ať už sedí na počítači, nebo je posíláno na internet. Nedávné šifrovací technologie jsou základními prvky každého zabezpečeného výpočetního prostředí.





Primární role zabezpečení šifrování spočívá ve schopnosti algoritmu generovat šifrovaný text (šifrovaný text), který je těžké vrátit do původního prostého textu. Používání klíčů také vytváří další úroveň zabezpečení metod ochrany našich informací. Klíčem jsou některé informace, které umožňují kódování a dekódování zprávy pouze těm, kteří ji drží.

java, co je skener

Šifrování a dešifrování v Javě



Symetrické šifrovací algoritmy

Symetrické algoritmy používají stejný klíč pro šifrování a dešifrování. Takové algoritmy mohou fungovat pouze v blokovém režimu (který funguje na blocích dat s pevnou velikostí) nebo v streamovém režimu (který funguje na bitech nebo bajtech dat). Takové algoritmyse také běžně používají pro aplikace, jako je šifrování dat, šifrování souborů a šifrování přenášených dat v komunikačních sítích (jako TLS, e-maily, rychlé zprávy atd.)

Asymetrické (nebo veřejný klíč) šifrovací algoritmy

Na rozdíl od symetrických algoritmů, které používají stejný klíč pro operace šifrování i dešifrování, asymetrické algoritmy používají pro tyto dva kroky dva identické klíče. Tyto algoritmy se používají pro výpočet digitálních podpisů a protokolů o založení klíče. To však také přichází s výzvou, že je třeba použít dva klíče, což dělá věci složitějšími.



Aby bylo možné bezpečně nakonfigurovat jakékoli základní schéma šifrování, je velmi důležité, aby všechny tyto parametry (minimálně) byly navrženy správně:

  • Výběr správného algoritmu je důležitý.
  • Výběr správného provozního režimu pro příslušnou úlohu
  • Výběr správného vycpávkového schématu podle požadavku
  • Odpovídající volba správných kláves a jejich velikostí
  • Správná inicializace pomocí kryptograficky zabezpečeného CSPRING.

Je velmi důležité si uvědomit bezpečnou konfiguraci všech těchto parametrů. I malá nesprávná konfigurace může ohrozit celý kryptosystém a otevřít jej útokům hackerů a dalšího malwaru. Aby byla tato diskuse jednoduchá, pojďme tedy diskutovat pouze o inicializaci šifry nezávislé na algoritmu. Místo toho, abyste si sami šifrovali, je vždy lepší nechat odborníky konfigurovat více konfigurací závislých na algoritmu, jako jsou hodnoty p a q algoritmu RSA atd. Pouhou konfigurací základních kryptografických parametrů nad více než půl používá se tucet tříd.

Zavedení hierarchií tříd, spousta přetížených konstruktorů / metod atd., Přidání mnoha složitostí, díky nimž je zbytečné. Přál bych si, aby Java nekomplikovala základní konfigurace a jednoduše by používala jednodušší architekturu, jako je Microsoft, kde jsou všechny takové parametry v obvodu jedné třídy SymmetricAlgorithm a AsymmetricAlgorithm. Pro zadání prvních tří parametrů (algoritmus, provozní režim a schéma výplně) používá objekt Cipher transformační řetězec.

  • Výběr správného algoritmu

Transformační řetězec nepochybně zahrnuje název kryptografického algoritmu. Mezi symetrickým a asymetrickým šifrováním existuje 11 algoritmů (bez ohledu na různé kombinace PBEWithAnd), které lze zadat podle standardní dokumentace názvu algoritmu. Z nich pouze dvě (jedno pro každé, symetrické a asymetrické šifrování) jsou skutečně plně zabezpečeny.

Zbývající algoritmy jsou buď nadměrně rozbité (DES, RC2 atd.), Nebo se začaly objevovat praskliny (RC5), což je při dostatečném výkonu procesoru rozbije - lze je již rozbít v době, kdy si to přečtete. Vývojář zaměřený na zabezpečení nemusí číst zprávy o specifikacích NIST ani sledovat nejnovější události a výzkum v kryptografické komunitě. Mohou zachytit rozbité nebo riskantní algoritmy, digest nebo pseudonáhodný generátor.

Vždy pro:

  1. Symetrický algoritmus: Je použita bloková šifra AES / AESWrap.

  2. Asymetrický algoritmus: Použije se RSA.

  • Provozní režim

Režim provozu je součástí transformace a je relevantní pouze pro blokové šifry. Když používáme asymetrické šifry, použijte jako provozní režim ECB, což je v podstatě hack za zákulisím, což znamená ignorovat tuto hodnotu. Poskytovatelé prostředí Java, jako je SunJCE, SunPKCS11, používají výchozí režim ECB pro symetrické a asymetrické algoritmy. Může to být dobrá věc pro asymetrické algoritmy, ale špatný nápad pro blokové šifry.

Poskytovatelům lze dát pokyn, aby na základě použitého algoritmu provedli bezpečné výchozí hodnoty. Použijte symetrické šifrování, které vás ochrání před útoky opakování nebo útoky známého prostého textu. Použijte také transformaci, která plně specifikuje algoritmus (tj. S jeho provozním režimem a polstrováním). Nikdy nikdy nedělejte něco jako ten, který je uveden níže.

Jak je uvedeno výše, algoritmus AES by byl použit s režimem provozu ECB, což by velmi usnadnilo útoky opakováním. Pokud u nového vývoje existuje sebemenší možnost předělat starou práci, měli bychom použít ověřené šifrování s režimem přidružených dat (AEAD) (například GCM a CCM). Máme ověřovací značku s plnou délkou 128 bitů. Pokud použijeme neověřený režim, použijeme CBC nebo CTR s MAC k ověření šifrovacího textu.

  • Výběr vhodného vycpávkového schématu

Běžné režimy blokové šifry vyžadují, aby délka prostého textu byla násobkem velikosti bloku základního šifrovacího algoritmu, což je zřídka případ. Proto vyžadujeme nějaké polstrování.Program Java nám poskytuje tři různá schémata pro symetrické šifrování, jedno je No Padding, což je nepřijatelné, a druhé je ISO10126Padding, které je od roku 2007 zrušeno).

Jedinou vhodnou možností je proto použití PKCS5Padding. Kombinace některých režimů provozu (například režim CBC) a polstrování PKCS5Padding může vést k výplňovým Oracle útokům. Nezmiňovat se o výplňovém schématu je mnohem nebezpečnější než poskytnout schéma, které je citlivé pouze na určité typy útoků. Nejlépe se doporučuje režim provozu AEAD, abyste se ujistili, že jste proti těmto útokům chráněni.

  • Asymetrické algoritmy

V asymetrických algoritmech máme možnost výběru ze dvou výplňových schémat. Je důležité zajistit, aby se používaly pouze schémata OAEPWithAndPadding. V případě digestu použijte buď SHA1 nebo SHA256 / 384/512. Pro funkci generování masky (MGF) použijte odsazení MGF1, jak je uvedeno. PKCS1Padding s RSA je od roku 1998 zranitelný vůči útokům Ciphertext [6].

Zde hovoříme o správném způsobu použití transformace metodou „Cipher.getInstance“.

  • Symetrické šifrování

  • Asymetrické šifrování

Úroveň zabezpečení jakéhokoli schématu šifrování je přímo úměrná velikosti jeho klíče. Délka klíče musí být dostatečně dlouhá, aby jakákoli hrubá síla útočí na to, že je zároveň neproveditelná, měla by být také dostatečně krátká, aby byla zajištěna výpočetní proveditelnost. Kromě toho se musíme pokusit zvážit, co ještě vydrží výpočetní pokrok pro příštích 30 let.

S tímto se dostáváme na konec článku Šifrování v Javě. Doufám, že máte představu o šifrování a dešifrování a proč se používá v Javě.

Podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Školicí a certifikační kurz Edureka Java J2EE a SOA je určen pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými rámci Java, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu „Šifrování v Javě“ a my se vám ozveme co nejdříve.