Stále více komunikace se odehrává elektronicky a obzvláště při komunikaci s úřady či bankovními ústavy je otázka bezpečnosti primární. V tomto článku se seznámíte s tím, co vše v této oblasti je možné realizovat s použitím programovacího jazyka Java.

Článek se týká Javy verze 6, která byla vydána na podzim roku 2006. V této verzi přibylo mnoho vylepšení, která jsou zajímavá obzvláště v oblasti bezpečnosti.

Architektura rozhraní

Java definuje několik rozhraní, která pokrývají hlavní bezpečnostní funkcionalitu, a to kryptografii, infrastrukturu veřejných klíčů, autentizaci, bezpečnou komunikaci a kontrolu přístupu. Návrh těchto rozhraní se řídí následujícími principy:

  • nezávislost na implementaci – aplikace nemusí služby implementovat sama, může používat různé poskytovatele služeb
  • spolupráce mezi různými implementacemi – v rámci jedné aplikace je možno použít více poskytovatelů
  • rozšiřitelnost – je možno doinstalovat vlastního poskytovatele bezpečnostních služeb

Aplikace si může vyžádat službu, kterou potřebuje, bez uvedení jejího poskytovatele (v tom případě dostane první implementaci, kterou Java najde) nebo s uvedením konkrétního poskytovatele. Při potřebě využití nějaké zatím neimplementované služby je možné tuto službu implementovat a dále použít voláním standardního rozhraní.

Kryptografie

Kryptografický rámec obsahuje rozhraní k mnoha kryptografickým funkcím:

  • výpočet hashe zprávy (MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512)
  • digitální podpis (SHA1withDSA, MD2withRSA, MD5withRSA, SHA1withRSA, SHA256withRSA, SHA384withRSA, SHA512withRSA, XML Signature…)
  • symetrické šifry (AES, DES, ARCFOUR, Blowfish…)
  • asymetrické šifry (RSA, DSA)
  • kryptografie na bázi eliptických křivek
  • generování klíčů (RSA, DSA, AES, DES, ARCFOUR, Blowfish, RC2…)
  • dohoda na klíči (Diffie-Hellman)
  • generátory pseudonáhodných čísel
  • MAC kódy (autentizační kódy zpráv)

Základní funkce jsou implementovány poskytovateli od Sunu, podrobný popis naleznete v dokumentaci. Další funkce je možno použít přes rozhraní dle standardu PKCS#11. Tyto funkce mohou být implementované přímo v nějakém hardwarovém tokenu, nebo softwarovou knihovnou, například Network Security Services (NSS) od Mozilly.

Infrastruktura veřejných klíčů

Java podporuje digitální certifikáty X.509, CRL (seznam zneplatněných certifikátů) a tvorbu a validaci certifikačních cest dle PKIX. Dále obsahuje bezpečné úložiště kryptografických klíčů a certifikátů a veřejné úložiště certifikátů (obvykle nedůvěryhodných), kde je možno skladovat také seznamy CRL.

Java podporuje úložiště dle standardů PKCS#11 (standard pro hardwarové bezpečnostní tokeny) a PKCS#12 (standard pro přenos „digitální identity“ – soukromý klíč a certifikát) a také umožňuje používat LDAP úložiště. Dále obsahuje poskytovatele, který přistupuje k úložištím certifikátů operačního systému Microsoft Windows. Zajímavá je i možnost použití bezpečnostních služeb NSS od Mozilly, s nimiž lze přistupovat k úložištím certifikátů aplikací Thunderbird, Mozilla a Firefox.

Nástroje

K vytvoření a správě javového úložiště je možno použít nástroj keytool. Tento nástroj umožňuje tvorbu páru soukromého a veřejného klíče, zobrazení a import certifikátů typu X.509 uložených v souboru, vytvoření žádosti o certifikát a import odpovědi na tuto žádost od certifikační autority.

Nástroj jarsigner slouží k podpisu JAR souborů a ověření podpisů těchto souborů. Formát JAR je javový archív, do kterého (nebo eventuálně do více archivů) se balí soubory s programem aplikace a je v zájmu bezpečnosti použití aplikace, distribuovat ji pouze v podepsaných archívech. Podpis tímto nástrojem může volitelně obsahovat i časové razítko.

Autentizace

Při autentizaci probíhá ověření identity uživatele aplikace. Aplikace volá pouze standardní rozhraní, při jehož volání se dle konfigurace určí, který autentizační modul se opravdu použije. Tak je kód aplikace zcela nezávislý na implementaci autentizace uživatele.

Architektura autentizačního rámce
Architektura autentizačního rámce

Java obsahuje tyto vestavěné autentizační moduly:

  • Krb5LoginModule – autentizace s použitím protokolu Kerberos
  • JndiLoginModule – autentizace typu jméno/heslo s použitím databáze LDAP nebo NIST
  • KeyStoreLoginModule – autentizace na základě klíče

Bezpečná komunikace

Při přenosu zpráv obsahujících důvěrná data prostředím veřejné sítě je potřeba tato data zabezpečit jednak před přečtením třetí osobou a jednak před změnou, ať už záměrnou či náhodnou. K tomu slouží různé protokoly bezpečné komunikace postavené nad základními kryptografickými funkcemi.

Java poskytuje rozhraní a implementace několika protokolů týkajících se bezpečné komunikace:

  • SSL/TLS
  • SASL
  • GSS-API a Kerberos

Kontrola přístupu

Java obsahuje kontrolu přístupu k citlivým zdrojům (například lokální soubory) a k citlivému kódu aplikace (například vybrané metody třídy). Tuto kontrolu zajišťuje bezpečnostní manažer, který musí být nainstalovaný v javovém běhovém prostředí. Aplikace spouštěné s použitím Web Start a aplety mají bezpečnostního manažera nainstalovaného automaticky.

Po nahrání javového kódu zavaděčem třídy (class loader) jsou ke kódu automaticky připojeny informace o místě, odkud byl kód nahrán, kdo kód podepsal a jaká jsou výchozí oprávnění. Oprávnění se týkají například přístupu k síti nebo lokálním souborům. Administrátor může další oprávnění určit s použitím bezpečnostní politiky.

Žádný příspěvek v diskuzi

Odpovědět