Katar ína Dudášová 4. roč., 2003/04

76
BEZPEČNOSŤ INFORMAČNÝCH SYSTÉMOV Security extensions Security extensions in JAVA in JAVA (JAAS, JCE, JSSE) (JAAS, JCE, JSSE) Katar Katar ína ína Dudášová Dudášová 4. roč., 4. roč., 2003/04 2003/04

description

KATEDRA POČÍTAČOV A INFORMATIKY BEZPEČNOSŤ INFORMAČNÝCH SYSTÉMOV Security extensions in JAVA (JAAS, JCE, JSSE). Katar ína Dudášová 4. roč., 2003/04. Java Authentication & Authorization Service (JAAS). Motivácia. - PowerPoint PPT Presentation

Transcript of Katar ína Dudášová 4. roč., 2003/04

Page 1: Katar ína Dudášová               4. roč., 2003/04

KATEDRA POČIacuteTAČOV A INFORMATIKYKATEDRA POČIacuteTAČOV A INFORMATIKYBEZPEČNOSŤ INFORMAČNYacuteCH SYSTEacuteMOV

Security extensions in JAVASecurity extensions in JAVA(JAAS JCE JSSE)(JAAS JCE JSSE)

KatarKatariacutena Dudaacutešovaacuteiacutena Dudaacutešovaacute 4 roč 2003044 roč 200304

Java Authentication Java Authentication ampamp Authorization Authorization Service (JAAS)Service (JAAS)

MotivaacuteciaMotivaacutecia JAAS rozširuje existujuacutecu bezpečnostnuacute JAAS rozširuje existujuacutecu bezpečnostnuacute

architektuacuteru (Java2 platform) ktoraacute je architektuacuteru (Java2 platform) ktoraacute je zameranaacute na koacuted ndash zameranaacute na koacuted ndash code-centriccode-centric

ndash Praacuteva boli prideleneacute na zaacuteklade koacuteduPraacuteva boli prideleneacute na zaacuteklade koacutedu odkiaľ koacuted pochaacutedzaodkiaľ koacuted pochaacutedza či bol digitaacutelne podpiacutesanyacute a ak aacuteno tak kyacutemči bol digitaacutelne podpiacutesanyacute a ak aacuteno tak kyacutem

Použitiacutem JAAS mocircže byť kontrola priacutestupu Použitiacutem JAAS mocircže byť kontrola priacutestupu rozšiacuterenaacute ndash zaujiacutema naacutes nielen to akyacute koacuted rozšiacuterenaacute ndash zaujiacutema naacutes nielen to akyacute koacuted bdquobežiacuteldquo ale aj kto ho spuacutešťabdquobežiacuteldquo ale aj kto ho spuacutešťa

Java Authentication Java Authentication ampamp Authorization Authorization Množina API ktoraacute umoňuje službaacutem Množina API ktoraacute umoňuje službaacutem

autentifikaacuteciu a riadenie priacutestupu použiacutevateľov autentifikaacuteciu a riadenie priacutestupu použiacutevateľov

Implementuje java verziu štandardu PAM Implementuje java verziu štandardu PAM (Pluggable Authentication Module) a podporuje (Pluggable Authentication Module) a podporuje autorizaacuteciu na zaacuteklade použiacutevateľa (user-based autorizaacuteciu na zaacuteklade použiacutevateľa (user-based authorization)authorization)

Použiacuteva sa na Použiacuteva sa na

autentifikaacuteciuautentifikaacuteciu - spoľahliveacute a bezpečneacute určenie kto - spoľahliveacute a bezpečneacute určenie kto praacuteve vykonaacuteva java koacuted (bez ohľadu na to či ide praacuteve vykonaacuteva java koacuted (bez ohľadu na to či ide o aplikaacuteciu applet servlet)o aplikaacuteciu applet servlet)

autorizaacuteciuautorizaacuteciu ndash či použiacutevateľ maacute požadovaneacute praacuteva ndash či použiacutevateľ maacute požadovaneacute praacuteva (acces control rightspermissions) pre vykonanie (acces control rightspermissions) pre vykonanie priacuteslušnej činnostipriacuteslušnej činnosti

CharakteristikaCharakteristika JAAS autentifikaacutecia je vykonaacutevana ako JAAS autentifikaacutecia je vykonaacutevana ako

pripojiteľnyacute modulpripojiteľnyacute modul

Toto dovoľuje aplikaacuteciaacutem zostať Toto dovoľuje aplikaacuteciaacutem zostať nezaacutevislyacutemi od autentifikačnej technoloacutegie nezaacutevislyacutemi od autentifikačnej technoloacutegie (noveacute alebo updatovaneacute technoloacutegie mocircžu (noveacute alebo updatovaneacute technoloacutegie mocircžu byť pripojeneacute bez potreby modifikaacutecie byť pripojeneacute bez potreby modifikaacutecie samotnej aplikaacutecie)samotnej aplikaacutecie)

Poskytuje flexibilitu pri kontrole priacutestupu ndash Poskytuje flexibilitu pri kontrole priacutestupu ndash autorizaacutecia mocircže byťautorizaacutecia mocircže byť

user-baseduser-based group-basedgroup-based role-basedrole-based

Zaacutekladneacute triedy JAASZaacutekladneacute triedy JAAS

Common Classes Common Classes Subject Principal CredentialSubject Principal Credential

Authentication Classes Authentication Classes LoginContext LoginModule LoginContext LoginModule CallbackHandler CallbackCallbackHandler Callback

Authorization Classes Authorization Classes Policy AuthPermission Policy AuthPermission PrivateCredentialPermissionPrivateCredentialPermission

Common classesCommon classes

suacute využiacutevaneacute autentifikaacuteciou aj suacute využiacutevaneacute autentifikaacuteciou aj autorizaacuteciouautorizaacuteciou

kľuacutečovou triedou je kľuacutečovou triedou je SubjektSubjekt ndash ndash reprezentuje zoskupenie informaacuteciiacute reprezentuje zoskupenie informaacuteciiacute pre entitu ako napr osobu ktoraacute pre entitu ako napr osobu ktoraacute spuacutešťa koacutedspuacutešťa koacuted

Subjects and PrincipalsSubjects and Principals JAAS použiacuteva termiacutenJAAS použiacuteva termiacuten

ndash SubjectSubject ndash ndash na odkazovanie sa na akeacutehokoľvek na odkazovanie sa na akeacutehokoľvek použiacutevateľa vyacutepočtovyacutech služieb (to použiacutevateľa vyacutepočtovyacutech služieb (to

znamenaacute že znamenaacute že aj samotnaacute vyacutepočtovaacute služba je aj samotnaacute vyacutepočtovaacute služba je subject)subject)Na idetifikovanie subjektu s ktoryacutem prichaacutedza Na idetifikovanie subjektu s ktoryacutem prichaacutedza

služba do styku sa použiacuteva služba do styku sa použiacuteva meno subjekumeno subjeku ndash to ndash to však mocircže byť pre jeden subjekt a inuacute službu však mocircže byť pre jeden subjekt a inuacute službu rocirczne pretorocirczne preto

ndash principalprincipal reprezentuje meno spojeneacute so reprezentuje meno spojeneacute so

subjektom Keďže subjekt mocircže mať niekoľko subjektom Keďže subjekt mocircže mať niekoľko mien subjekt zahŕňa množinu principalsmien subjekt zahŕňa množinu principals

Je to akaacutesi identifikaacutecia subjektu odliacutešenie od Je to akaacutesi identifikaacutecia subjektu odliacutešenie od ostatnyacutech subjektovostatnyacutech subjektov

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 2: Katar ína Dudášová               4. roč., 2003/04

Java Authentication Java Authentication ampamp Authorization Authorization Service (JAAS)Service (JAAS)

MotivaacuteciaMotivaacutecia JAAS rozširuje existujuacutecu bezpečnostnuacute JAAS rozširuje existujuacutecu bezpečnostnuacute

architektuacuteru (Java2 platform) ktoraacute je architektuacuteru (Java2 platform) ktoraacute je zameranaacute na koacuted ndash zameranaacute na koacuted ndash code-centriccode-centric

ndash Praacuteva boli prideleneacute na zaacuteklade koacuteduPraacuteva boli prideleneacute na zaacuteklade koacutedu odkiaľ koacuted pochaacutedzaodkiaľ koacuted pochaacutedza či bol digitaacutelne podpiacutesanyacute a ak aacuteno tak kyacutemči bol digitaacutelne podpiacutesanyacute a ak aacuteno tak kyacutem

Použitiacutem JAAS mocircže byť kontrola priacutestupu Použitiacutem JAAS mocircže byť kontrola priacutestupu rozšiacuterenaacute ndash zaujiacutema naacutes nielen to akyacute koacuted rozšiacuterenaacute ndash zaujiacutema naacutes nielen to akyacute koacuted bdquobežiacuteldquo ale aj kto ho spuacutešťabdquobežiacuteldquo ale aj kto ho spuacutešťa

Java Authentication Java Authentication ampamp Authorization Authorization Množina API ktoraacute umoňuje službaacutem Množina API ktoraacute umoňuje službaacutem

autentifikaacuteciu a riadenie priacutestupu použiacutevateľov autentifikaacuteciu a riadenie priacutestupu použiacutevateľov

Implementuje java verziu štandardu PAM Implementuje java verziu štandardu PAM (Pluggable Authentication Module) a podporuje (Pluggable Authentication Module) a podporuje autorizaacuteciu na zaacuteklade použiacutevateľa (user-based autorizaacuteciu na zaacuteklade použiacutevateľa (user-based authorization)authorization)

Použiacuteva sa na Použiacuteva sa na

autentifikaacuteciuautentifikaacuteciu - spoľahliveacute a bezpečneacute určenie kto - spoľahliveacute a bezpečneacute určenie kto praacuteve vykonaacuteva java koacuted (bez ohľadu na to či ide praacuteve vykonaacuteva java koacuted (bez ohľadu na to či ide o aplikaacuteciu applet servlet)o aplikaacuteciu applet servlet)

autorizaacuteciuautorizaacuteciu ndash či použiacutevateľ maacute požadovaneacute praacuteva ndash či použiacutevateľ maacute požadovaneacute praacuteva (acces control rightspermissions) pre vykonanie (acces control rightspermissions) pre vykonanie priacuteslušnej činnostipriacuteslušnej činnosti

CharakteristikaCharakteristika JAAS autentifikaacutecia je vykonaacutevana ako JAAS autentifikaacutecia je vykonaacutevana ako

pripojiteľnyacute modulpripojiteľnyacute modul

Toto dovoľuje aplikaacuteciaacutem zostať Toto dovoľuje aplikaacuteciaacutem zostať nezaacutevislyacutemi od autentifikačnej technoloacutegie nezaacutevislyacutemi od autentifikačnej technoloacutegie (noveacute alebo updatovaneacute technoloacutegie mocircžu (noveacute alebo updatovaneacute technoloacutegie mocircžu byť pripojeneacute bez potreby modifikaacutecie byť pripojeneacute bez potreby modifikaacutecie samotnej aplikaacutecie)samotnej aplikaacutecie)

Poskytuje flexibilitu pri kontrole priacutestupu ndash Poskytuje flexibilitu pri kontrole priacutestupu ndash autorizaacutecia mocircže byťautorizaacutecia mocircže byť

user-baseduser-based group-basedgroup-based role-basedrole-based

Zaacutekladneacute triedy JAASZaacutekladneacute triedy JAAS

Common Classes Common Classes Subject Principal CredentialSubject Principal Credential

Authentication Classes Authentication Classes LoginContext LoginModule LoginContext LoginModule CallbackHandler CallbackCallbackHandler Callback

Authorization Classes Authorization Classes Policy AuthPermission Policy AuthPermission PrivateCredentialPermissionPrivateCredentialPermission

Common classesCommon classes

suacute využiacutevaneacute autentifikaacuteciou aj suacute využiacutevaneacute autentifikaacuteciou aj autorizaacuteciouautorizaacuteciou

kľuacutečovou triedou je kľuacutečovou triedou je SubjektSubjekt ndash ndash reprezentuje zoskupenie informaacuteciiacute reprezentuje zoskupenie informaacuteciiacute pre entitu ako napr osobu ktoraacute pre entitu ako napr osobu ktoraacute spuacutešťa koacutedspuacutešťa koacuted

Subjects and PrincipalsSubjects and Principals JAAS použiacuteva termiacutenJAAS použiacuteva termiacuten

ndash SubjectSubject ndash ndash na odkazovanie sa na akeacutehokoľvek na odkazovanie sa na akeacutehokoľvek použiacutevateľa vyacutepočtovyacutech služieb (to použiacutevateľa vyacutepočtovyacutech služieb (to

znamenaacute že znamenaacute že aj samotnaacute vyacutepočtovaacute služba je aj samotnaacute vyacutepočtovaacute služba je subject)subject)Na idetifikovanie subjektu s ktoryacutem prichaacutedza Na idetifikovanie subjektu s ktoryacutem prichaacutedza

služba do styku sa použiacuteva služba do styku sa použiacuteva meno subjekumeno subjeku ndash to ndash to však mocircže byť pre jeden subjekt a inuacute službu však mocircže byť pre jeden subjekt a inuacute službu rocirczne pretorocirczne preto

ndash principalprincipal reprezentuje meno spojeneacute so reprezentuje meno spojeneacute so

subjektom Keďže subjekt mocircže mať niekoľko subjektom Keďže subjekt mocircže mať niekoľko mien subjekt zahŕňa množinu principalsmien subjekt zahŕňa množinu principals

Je to akaacutesi identifikaacutecia subjektu odliacutešenie od Je to akaacutesi identifikaacutecia subjektu odliacutešenie od ostatnyacutech subjektovostatnyacutech subjektov

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 3: Katar ína Dudášová               4. roč., 2003/04

MotivaacuteciaMotivaacutecia JAAS rozširuje existujuacutecu bezpečnostnuacute JAAS rozširuje existujuacutecu bezpečnostnuacute

architektuacuteru (Java2 platform) ktoraacute je architektuacuteru (Java2 platform) ktoraacute je zameranaacute na koacuted ndash zameranaacute na koacuted ndash code-centriccode-centric

ndash Praacuteva boli prideleneacute na zaacuteklade koacuteduPraacuteva boli prideleneacute na zaacuteklade koacutedu odkiaľ koacuted pochaacutedzaodkiaľ koacuted pochaacutedza či bol digitaacutelne podpiacutesanyacute a ak aacuteno tak kyacutemči bol digitaacutelne podpiacutesanyacute a ak aacuteno tak kyacutem

Použitiacutem JAAS mocircže byť kontrola priacutestupu Použitiacutem JAAS mocircže byť kontrola priacutestupu rozšiacuterenaacute ndash zaujiacutema naacutes nielen to akyacute koacuted rozšiacuterenaacute ndash zaujiacutema naacutes nielen to akyacute koacuted bdquobežiacuteldquo ale aj kto ho spuacutešťabdquobežiacuteldquo ale aj kto ho spuacutešťa

Java Authentication Java Authentication ampamp Authorization Authorization Množina API ktoraacute umoňuje službaacutem Množina API ktoraacute umoňuje službaacutem

autentifikaacuteciu a riadenie priacutestupu použiacutevateľov autentifikaacuteciu a riadenie priacutestupu použiacutevateľov

Implementuje java verziu štandardu PAM Implementuje java verziu štandardu PAM (Pluggable Authentication Module) a podporuje (Pluggable Authentication Module) a podporuje autorizaacuteciu na zaacuteklade použiacutevateľa (user-based autorizaacuteciu na zaacuteklade použiacutevateľa (user-based authorization)authorization)

Použiacuteva sa na Použiacuteva sa na

autentifikaacuteciuautentifikaacuteciu - spoľahliveacute a bezpečneacute určenie kto - spoľahliveacute a bezpečneacute určenie kto praacuteve vykonaacuteva java koacuted (bez ohľadu na to či ide praacuteve vykonaacuteva java koacuted (bez ohľadu na to či ide o aplikaacuteciu applet servlet)o aplikaacuteciu applet servlet)

autorizaacuteciuautorizaacuteciu ndash či použiacutevateľ maacute požadovaneacute praacuteva ndash či použiacutevateľ maacute požadovaneacute praacuteva (acces control rightspermissions) pre vykonanie (acces control rightspermissions) pre vykonanie priacuteslušnej činnostipriacuteslušnej činnosti

CharakteristikaCharakteristika JAAS autentifikaacutecia je vykonaacutevana ako JAAS autentifikaacutecia je vykonaacutevana ako

pripojiteľnyacute modulpripojiteľnyacute modul

Toto dovoľuje aplikaacuteciaacutem zostať Toto dovoľuje aplikaacuteciaacutem zostať nezaacutevislyacutemi od autentifikačnej technoloacutegie nezaacutevislyacutemi od autentifikačnej technoloacutegie (noveacute alebo updatovaneacute technoloacutegie mocircžu (noveacute alebo updatovaneacute technoloacutegie mocircžu byť pripojeneacute bez potreby modifikaacutecie byť pripojeneacute bez potreby modifikaacutecie samotnej aplikaacutecie)samotnej aplikaacutecie)

Poskytuje flexibilitu pri kontrole priacutestupu ndash Poskytuje flexibilitu pri kontrole priacutestupu ndash autorizaacutecia mocircže byťautorizaacutecia mocircže byť

user-baseduser-based group-basedgroup-based role-basedrole-based

Zaacutekladneacute triedy JAASZaacutekladneacute triedy JAAS

Common Classes Common Classes Subject Principal CredentialSubject Principal Credential

Authentication Classes Authentication Classes LoginContext LoginModule LoginContext LoginModule CallbackHandler CallbackCallbackHandler Callback

Authorization Classes Authorization Classes Policy AuthPermission Policy AuthPermission PrivateCredentialPermissionPrivateCredentialPermission

Common classesCommon classes

suacute využiacutevaneacute autentifikaacuteciou aj suacute využiacutevaneacute autentifikaacuteciou aj autorizaacuteciouautorizaacuteciou

kľuacutečovou triedou je kľuacutečovou triedou je SubjektSubjekt ndash ndash reprezentuje zoskupenie informaacuteciiacute reprezentuje zoskupenie informaacuteciiacute pre entitu ako napr osobu ktoraacute pre entitu ako napr osobu ktoraacute spuacutešťa koacutedspuacutešťa koacuted

Subjects and PrincipalsSubjects and Principals JAAS použiacuteva termiacutenJAAS použiacuteva termiacuten

ndash SubjectSubject ndash ndash na odkazovanie sa na akeacutehokoľvek na odkazovanie sa na akeacutehokoľvek použiacutevateľa vyacutepočtovyacutech služieb (to použiacutevateľa vyacutepočtovyacutech služieb (to

znamenaacute že znamenaacute že aj samotnaacute vyacutepočtovaacute služba je aj samotnaacute vyacutepočtovaacute služba je subject)subject)Na idetifikovanie subjektu s ktoryacutem prichaacutedza Na idetifikovanie subjektu s ktoryacutem prichaacutedza

služba do styku sa použiacuteva služba do styku sa použiacuteva meno subjekumeno subjeku ndash to ndash to však mocircže byť pre jeden subjekt a inuacute službu však mocircže byť pre jeden subjekt a inuacute službu rocirczne pretorocirczne preto

ndash principalprincipal reprezentuje meno spojeneacute so reprezentuje meno spojeneacute so

subjektom Keďže subjekt mocircže mať niekoľko subjektom Keďže subjekt mocircže mať niekoľko mien subjekt zahŕňa množinu principalsmien subjekt zahŕňa množinu principals

Je to akaacutesi identifikaacutecia subjektu odliacutešenie od Je to akaacutesi identifikaacutecia subjektu odliacutešenie od ostatnyacutech subjektovostatnyacutech subjektov

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 4: Katar ína Dudášová               4. roč., 2003/04

Java Authentication Java Authentication ampamp Authorization Authorization Množina API ktoraacute umoňuje službaacutem Množina API ktoraacute umoňuje službaacutem

autentifikaacuteciu a riadenie priacutestupu použiacutevateľov autentifikaacuteciu a riadenie priacutestupu použiacutevateľov

Implementuje java verziu štandardu PAM Implementuje java verziu štandardu PAM (Pluggable Authentication Module) a podporuje (Pluggable Authentication Module) a podporuje autorizaacuteciu na zaacuteklade použiacutevateľa (user-based autorizaacuteciu na zaacuteklade použiacutevateľa (user-based authorization)authorization)

Použiacuteva sa na Použiacuteva sa na

autentifikaacuteciuautentifikaacuteciu - spoľahliveacute a bezpečneacute určenie kto - spoľahliveacute a bezpečneacute určenie kto praacuteve vykonaacuteva java koacuted (bez ohľadu na to či ide praacuteve vykonaacuteva java koacuted (bez ohľadu na to či ide o aplikaacuteciu applet servlet)o aplikaacuteciu applet servlet)

autorizaacuteciuautorizaacuteciu ndash či použiacutevateľ maacute požadovaneacute praacuteva ndash či použiacutevateľ maacute požadovaneacute praacuteva (acces control rightspermissions) pre vykonanie (acces control rightspermissions) pre vykonanie priacuteslušnej činnostipriacuteslušnej činnosti

CharakteristikaCharakteristika JAAS autentifikaacutecia je vykonaacutevana ako JAAS autentifikaacutecia je vykonaacutevana ako

pripojiteľnyacute modulpripojiteľnyacute modul

Toto dovoľuje aplikaacuteciaacutem zostať Toto dovoľuje aplikaacuteciaacutem zostať nezaacutevislyacutemi od autentifikačnej technoloacutegie nezaacutevislyacutemi od autentifikačnej technoloacutegie (noveacute alebo updatovaneacute technoloacutegie mocircžu (noveacute alebo updatovaneacute technoloacutegie mocircžu byť pripojeneacute bez potreby modifikaacutecie byť pripojeneacute bez potreby modifikaacutecie samotnej aplikaacutecie)samotnej aplikaacutecie)

Poskytuje flexibilitu pri kontrole priacutestupu ndash Poskytuje flexibilitu pri kontrole priacutestupu ndash autorizaacutecia mocircže byťautorizaacutecia mocircže byť

user-baseduser-based group-basedgroup-based role-basedrole-based

Zaacutekladneacute triedy JAASZaacutekladneacute triedy JAAS

Common Classes Common Classes Subject Principal CredentialSubject Principal Credential

Authentication Classes Authentication Classes LoginContext LoginModule LoginContext LoginModule CallbackHandler CallbackCallbackHandler Callback

Authorization Classes Authorization Classes Policy AuthPermission Policy AuthPermission PrivateCredentialPermissionPrivateCredentialPermission

Common classesCommon classes

suacute využiacutevaneacute autentifikaacuteciou aj suacute využiacutevaneacute autentifikaacuteciou aj autorizaacuteciouautorizaacuteciou

kľuacutečovou triedou je kľuacutečovou triedou je SubjektSubjekt ndash ndash reprezentuje zoskupenie informaacuteciiacute reprezentuje zoskupenie informaacuteciiacute pre entitu ako napr osobu ktoraacute pre entitu ako napr osobu ktoraacute spuacutešťa koacutedspuacutešťa koacuted

Subjects and PrincipalsSubjects and Principals JAAS použiacuteva termiacutenJAAS použiacuteva termiacuten

ndash SubjectSubject ndash ndash na odkazovanie sa na akeacutehokoľvek na odkazovanie sa na akeacutehokoľvek použiacutevateľa vyacutepočtovyacutech služieb (to použiacutevateľa vyacutepočtovyacutech služieb (to

znamenaacute že znamenaacute že aj samotnaacute vyacutepočtovaacute služba je aj samotnaacute vyacutepočtovaacute služba je subject)subject)Na idetifikovanie subjektu s ktoryacutem prichaacutedza Na idetifikovanie subjektu s ktoryacutem prichaacutedza

služba do styku sa použiacuteva služba do styku sa použiacuteva meno subjekumeno subjeku ndash to ndash to však mocircže byť pre jeden subjekt a inuacute službu však mocircže byť pre jeden subjekt a inuacute službu rocirczne pretorocirczne preto

ndash principalprincipal reprezentuje meno spojeneacute so reprezentuje meno spojeneacute so

subjektom Keďže subjekt mocircže mať niekoľko subjektom Keďže subjekt mocircže mať niekoľko mien subjekt zahŕňa množinu principalsmien subjekt zahŕňa množinu principals

Je to akaacutesi identifikaacutecia subjektu odliacutešenie od Je to akaacutesi identifikaacutecia subjektu odliacutešenie od ostatnyacutech subjektovostatnyacutech subjektov

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 5: Katar ína Dudášová               4. roč., 2003/04

CharakteristikaCharakteristika JAAS autentifikaacutecia je vykonaacutevana ako JAAS autentifikaacutecia je vykonaacutevana ako

pripojiteľnyacute modulpripojiteľnyacute modul

Toto dovoľuje aplikaacuteciaacutem zostať Toto dovoľuje aplikaacuteciaacutem zostať nezaacutevislyacutemi od autentifikačnej technoloacutegie nezaacutevislyacutemi od autentifikačnej technoloacutegie (noveacute alebo updatovaneacute technoloacutegie mocircžu (noveacute alebo updatovaneacute technoloacutegie mocircžu byť pripojeneacute bez potreby modifikaacutecie byť pripojeneacute bez potreby modifikaacutecie samotnej aplikaacutecie)samotnej aplikaacutecie)

Poskytuje flexibilitu pri kontrole priacutestupu ndash Poskytuje flexibilitu pri kontrole priacutestupu ndash autorizaacutecia mocircže byťautorizaacutecia mocircže byť

user-baseduser-based group-basedgroup-based role-basedrole-based

Zaacutekladneacute triedy JAASZaacutekladneacute triedy JAAS

Common Classes Common Classes Subject Principal CredentialSubject Principal Credential

Authentication Classes Authentication Classes LoginContext LoginModule LoginContext LoginModule CallbackHandler CallbackCallbackHandler Callback

Authorization Classes Authorization Classes Policy AuthPermission Policy AuthPermission PrivateCredentialPermissionPrivateCredentialPermission

Common classesCommon classes

suacute využiacutevaneacute autentifikaacuteciou aj suacute využiacutevaneacute autentifikaacuteciou aj autorizaacuteciouautorizaacuteciou

kľuacutečovou triedou je kľuacutečovou triedou je SubjektSubjekt ndash ndash reprezentuje zoskupenie informaacuteciiacute reprezentuje zoskupenie informaacuteciiacute pre entitu ako napr osobu ktoraacute pre entitu ako napr osobu ktoraacute spuacutešťa koacutedspuacutešťa koacuted

Subjects and PrincipalsSubjects and Principals JAAS použiacuteva termiacutenJAAS použiacuteva termiacuten

ndash SubjectSubject ndash ndash na odkazovanie sa na akeacutehokoľvek na odkazovanie sa na akeacutehokoľvek použiacutevateľa vyacutepočtovyacutech služieb (to použiacutevateľa vyacutepočtovyacutech služieb (to

znamenaacute že znamenaacute že aj samotnaacute vyacutepočtovaacute služba je aj samotnaacute vyacutepočtovaacute služba je subject)subject)Na idetifikovanie subjektu s ktoryacutem prichaacutedza Na idetifikovanie subjektu s ktoryacutem prichaacutedza

služba do styku sa použiacuteva služba do styku sa použiacuteva meno subjekumeno subjeku ndash to ndash to však mocircže byť pre jeden subjekt a inuacute službu však mocircže byť pre jeden subjekt a inuacute službu rocirczne pretorocirczne preto

ndash principalprincipal reprezentuje meno spojeneacute so reprezentuje meno spojeneacute so

subjektom Keďže subjekt mocircže mať niekoľko subjektom Keďže subjekt mocircže mať niekoľko mien subjekt zahŕňa množinu principalsmien subjekt zahŕňa množinu principals

Je to akaacutesi identifikaacutecia subjektu odliacutešenie od Je to akaacutesi identifikaacutecia subjektu odliacutešenie od ostatnyacutech subjektovostatnyacutech subjektov

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 6: Katar ína Dudášová               4. roč., 2003/04

Zaacutekladneacute triedy JAASZaacutekladneacute triedy JAAS

Common Classes Common Classes Subject Principal CredentialSubject Principal Credential

Authentication Classes Authentication Classes LoginContext LoginModule LoginContext LoginModule CallbackHandler CallbackCallbackHandler Callback

Authorization Classes Authorization Classes Policy AuthPermission Policy AuthPermission PrivateCredentialPermissionPrivateCredentialPermission

Common classesCommon classes

suacute využiacutevaneacute autentifikaacuteciou aj suacute využiacutevaneacute autentifikaacuteciou aj autorizaacuteciouautorizaacuteciou

kľuacutečovou triedou je kľuacutečovou triedou je SubjektSubjekt ndash ndash reprezentuje zoskupenie informaacuteciiacute reprezentuje zoskupenie informaacuteciiacute pre entitu ako napr osobu ktoraacute pre entitu ako napr osobu ktoraacute spuacutešťa koacutedspuacutešťa koacuted

Subjects and PrincipalsSubjects and Principals JAAS použiacuteva termiacutenJAAS použiacuteva termiacuten

ndash SubjectSubject ndash ndash na odkazovanie sa na akeacutehokoľvek na odkazovanie sa na akeacutehokoľvek použiacutevateľa vyacutepočtovyacutech služieb (to použiacutevateľa vyacutepočtovyacutech služieb (to

znamenaacute že znamenaacute že aj samotnaacute vyacutepočtovaacute služba je aj samotnaacute vyacutepočtovaacute služba je subject)subject)Na idetifikovanie subjektu s ktoryacutem prichaacutedza Na idetifikovanie subjektu s ktoryacutem prichaacutedza

služba do styku sa použiacuteva služba do styku sa použiacuteva meno subjekumeno subjeku ndash to ndash to však mocircže byť pre jeden subjekt a inuacute službu však mocircže byť pre jeden subjekt a inuacute službu rocirczne pretorocirczne preto

ndash principalprincipal reprezentuje meno spojeneacute so reprezentuje meno spojeneacute so

subjektom Keďže subjekt mocircže mať niekoľko subjektom Keďže subjekt mocircže mať niekoľko mien subjekt zahŕňa množinu principalsmien subjekt zahŕňa množinu principals

Je to akaacutesi identifikaacutecia subjektu odliacutešenie od Je to akaacutesi identifikaacutecia subjektu odliacutešenie od ostatnyacutech subjektovostatnyacutech subjektov

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 7: Katar ína Dudášová               4. roč., 2003/04

Common classesCommon classes

suacute využiacutevaneacute autentifikaacuteciou aj suacute využiacutevaneacute autentifikaacuteciou aj autorizaacuteciouautorizaacuteciou

kľuacutečovou triedou je kľuacutečovou triedou je SubjektSubjekt ndash ndash reprezentuje zoskupenie informaacuteciiacute reprezentuje zoskupenie informaacuteciiacute pre entitu ako napr osobu ktoraacute pre entitu ako napr osobu ktoraacute spuacutešťa koacutedspuacutešťa koacuted

Subjects and PrincipalsSubjects and Principals JAAS použiacuteva termiacutenJAAS použiacuteva termiacuten

ndash SubjectSubject ndash ndash na odkazovanie sa na akeacutehokoľvek na odkazovanie sa na akeacutehokoľvek použiacutevateľa vyacutepočtovyacutech služieb (to použiacutevateľa vyacutepočtovyacutech služieb (to

znamenaacute že znamenaacute že aj samotnaacute vyacutepočtovaacute služba je aj samotnaacute vyacutepočtovaacute služba je subject)subject)Na idetifikovanie subjektu s ktoryacutem prichaacutedza Na idetifikovanie subjektu s ktoryacutem prichaacutedza

služba do styku sa použiacuteva služba do styku sa použiacuteva meno subjekumeno subjeku ndash to ndash to však mocircže byť pre jeden subjekt a inuacute službu však mocircže byť pre jeden subjekt a inuacute službu rocirczne pretorocirczne preto

ndash principalprincipal reprezentuje meno spojeneacute so reprezentuje meno spojeneacute so

subjektom Keďže subjekt mocircže mať niekoľko subjektom Keďže subjekt mocircže mať niekoľko mien subjekt zahŕňa množinu principalsmien subjekt zahŕňa množinu principals

Je to akaacutesi identifikaacutecia subjektu odliacutešenie od Je to akaacutesi identifikaacutecia subjektu odliacutešenie od ostatnyacutech subjektovostatnyacutech subjektov

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 8: Katar ína Dudášová               4. roč., 2003/04

Subjects and PrincipalsSubjects and Principals JAAS použiacuteva termiacutenJAAS použiacuteva termiacuten

ndash SubjectSubject ndash ndash na odkazovanie sa na akeacutehokoľvek na odkazovanie sa na akeacutehokoľvek použiacutevateľa vyacutepočtovyacutech služieb (to použiacutevateľa vyacutepočtovyacutech služieb (to

znamenaacute že znamenaacute že aj samotnaacute vyacutepočtovaacute služba je aj samotnaacute vyacutepočtovaacute služba je subject)subject)Na idetifikovanie subjektu s ktoryacutem prichaacutedza Na idetifikovanie subjektu s ktoryacutem prichaacutedza

služba do styku sa použiacuteva služba do styku sa použiacuteva meno subjekumeno subjeku ndash to ndash to však mocircže byť pre jeden subjekt a inuacute službu však mocircže byť pre jeden subjekt a inuacute službu rocirczne pretorocirczne preto

ndash principalprincipal reprezentuje meno spojeneacute so reprezentuje meno spojeneacute so

subjektom Keďže subjekt mocircže mať niekoľko subjektom Keďže subjekt mocircže mať niekoľko mien subjekt zahŕňa množinu principalsmien subjekt zahŕňa množinu principals

Je to akaacutesi identifikaacutecia subjektu odliacutešenie od Je to akaacutesi identifikaacutecia subjektu odliacutešenie od ostatnyacutech subjektovostatnyacutech subjektov

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 9: Katar ína Dudášová               4. roč., 2003/04

public interface Principal public interface Principal

public String getName() public String getName()

public final class Subject public final class Subject

public Set getPrincipals() public Set getPrincipals()

Principal sa mocircže pripojiť k subjektu po uacutespešnej Principal sa mocircže pripojiť k subjektu po uacutespešnej

autentifikaacutecii k službeautentifikaacutecii k službe Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt Autentifikaacutecia reprezentuje proces v ktorom jeden subjekt

overiacute identituoveriacute identitu druheacuteho druheacuteho bezpečnyacutem spocircsobombezpečnyacutem spocircsobom (inak by (inak by mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za mohol ziacuteskať priacutestup do systeacutemu tak že sa vydaacuteva za niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) niekoho ineacuteho) ndash informaacutecia ktoruacute mocircže vedieť (heslo) alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute alebo mať (odtlačok prsta) len subjekt priacutepadne ktoruacute mocircže produkovať len subjekt (podpiacutesať data privaacutetnym mocircže produkovať len subjekt (podpiacutesať data privaacutetnym kľuacutečom)kľuacutečom)

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 10: Katar ína Dudášová               4. roč., 2003/04

Credentials (1) - Credentials (1) - security related attributessecurity related attributes

Niektoreacute služby potrebujuacute pripojiť k menu Niektoreacute služby potrebujuacute pripojiť k menu ďalšie ďalšie bezpečnostneacute atribuacutetybezpečnostneacute atribuacutety na ktoreacute sa na ktoreacute sa JAAS odkazuje ako na JAAS odkazuje ako na credentialscredentials ktoreacute ktoreacute mocircžu obsahovať info potrebneacute na mocircžu obsahovať info potrebneacute na autentifikaacuteciu subjektu pre novuacute službuautentifikaacuteciu subjektu pre novuacute službu

passwordspasswords kerberos ticketskerberos tickets public key certificatespublic key certificates

Mocircžu taktiež obsahovať daacuteta ktoreacute Mocircžu taktiež obsahovať daacuteta ktoreacute subjektu umožňujuacute vykonaacutevať určiteacute subjektu umožňujuacute vykonaacutevať určiteacute aktivity aktivity (napr (napr kryptografickyacute kľuacutečkryptografickyacute kľuacuteč umožňuje subjektu umožňuje subjektu podpiacutesaťpodpiacutesať alebo alebo zašifrovaťzašifrovať daacuteta) daacuteta)

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 11: Katar ína Dudášová               4. roč., 2003/04

Credentials (2)Credentials (2) JAAS neobsahuje žiadne knižičneacute triedy JAAS neobsahuje žiadne knižičneacute triedy

ktoreacute reprezentujuacute credentialsktoreacute reprezentujuacute credentials mocircže ich reprezentovať akaacutekoľvek triedamocircže ich reprezentovať akaacutekoľvek trieda ich existujuacutece implementaacutecie ich existujuacutece implementaacutecie

((javasecuritycertCertificatejavasecuritycertCertificate) mocircžu byť ) mocircžu byť ľahko pripojeneacute k JAASľahko pripojeneacute k JAAS

takisto aj ineacute implementaacutecie mocircžu byť takisto aj ineacute implementaacutecie mocircžu byť zakomponovaneacutezakomponovaneacute

implemetaacutecia nemusiacute nevyhnutne implemetaacutecia nemusiacute nevyhnutne obsahovať daacuteta mocircže to byť odkaz na neobsahovať daacuteta mocircže to byť odkaz na ne

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 12: Katar ína Dudášová               4. roč., 2003/04

JAAS rozdeľuje credentials do JAAS rozdeľuje credentials do dvoch množiacuten dvoch množiacuten

verejneacuteverejneacute (public) ndash na priacutestup nie suacute (public) ndash na priacutestup nie suacute potrebneacute žiadne praacuteva naprpotrebneacute žiadne praacuteva napr

public key certificatespublic key certificatesKerberos ticketsKerberos tickets

suacutekromneacutesuacutekromneacute (private) ndash priacutestup je (private) ndash priacutestup je bezpečnostne kontrolovanyacute naprbezpečnostne kontrolovanyacute napr

private keysprivate keys encryption keysencryption keys passwords etcpasswords etc

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 13: Katar ína Dudášová               4. roč., 2003/04

public final class Subject public final class Subject

public Set getpublic Set getPublicCredentialsPublicCredentials() ()

not security checked not security checked

public Set getpublic Set getPrivateCredentialsPrivateCredentials() ()

security checkedsecurity checked

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 14: Katar ína Dudášová               4. roč., 2003/04

Subjekt sa vytvaacutera použitiacutem tyacutechto Subjekt sa vytvaacutera použitiacutem tyacutechto konštruktorovkonštruktorov

public Subject() public Subject()

vytvoriacute subjekt s praacutezdnou množinou principals vytvoriacute subjekt s praacutezdnou množinou principals a a credentialscredentials

public Subject(boolean readOnly public Subject(boolean readOnly

Set principals Set pubCredentials Set Set principals Set pubCredentials Set privCredentials)privCredentials)

vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) vytvoriacute subjekt s danyacutemi (špecifikovanyacutemi) množinami principals a credentialsmnožinami principals a credentials

boolean argument zaručuje že subjekt je len na boolean argument zaručuje že subjekt je len na čiacutetanie (nezameniteľnosť)čiacutetanie (nezameniteľnosť)

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 15: Katar ína Dudášová               4. roč., 2003/04

Ak subjekt nebol vytvorenyacute ako readonly je tak Ak subjekt nebol vytvorenyacute ako readonly je tak možne učiniť volaniacutem metoacutedy možne učiniť volaniacutem metoacutedy

public void public void setReadOnly()setReadOnly() ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať ak je subjekt určenyacute len na čiacutetanie pokus pridaacutevať

alebo meniť principals alebo credentials vyuacutesti do alebo meniť principals alebo credentials vyuacutesti do

IllegalStateExceptionIllegalStateException public boolean public boolean isReadOnly()isReadOnly() sluacuteži na zistenie sluacuteži na zistenie

stavustavu Na ziacuteskanie množNa ziacuteskanie množiiny principals suacute metoacutedyny principals suacute metoacutedy

public Setpublic Set getPrincipals()getPrincipals() allall

public Set public Set getPrincipals(Class c)getPrincipals(Class c)

len tie ktoreacute suacute inštanciou triedy c len tie ktoreacute suacute inštanciou triedy c

ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna ak subjekt nemaacute asociovaneacute tieto množiny vraacuteti sa praacutezdna množinamnožina

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 16: Katar ína Dudášová               4. roč., 2003/04

Podobne na ziacuteskanie množiacuten obsahujuacutecich data Podobne na ziacuteskanie množiacuten obsahujuacutecich data tyacutekajuacutece sa bezpečnosti sluacutežia metoacutedytyacutekajuacutece sa bezpečnosti sluacutežia metoacutedy

public Setpublic Set getPublicCredentials() getPublicCredentials() public Setpublic Set getPublicCredentials(Class c) getPublicCredentials(Class c)

verejne dostupneacute verejne dostupneacute

public Set public Set getPrivateCredentials()getPrivateCredentials()

public Set public Set getPrivateCredentials(Class c)getPrivateCredentials(Class c) dostupneacute len pre autentifikovanyacutech dostupneacute len pre autentifikovanyacutech

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 17: Katar ína Dudášová               4. roč., 2003/04

Trieda Subject obsahuje nasledovneacute metoacutedy Trieda Subject obsahuje nasledovneacute metoacutedy (zdedeneacute od (zdedeneacute od javalangObjectjavalangObject))

public boolean public boolean equalsequals(Object o) (Object o)

public String public String toStringtoString() ()

public int public int hashCodehashCode() ()

Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute Na praacutecu s konkreacutetnym subjektom sluacutežia nasledovneacute metoacutedymetoacutedy

static Object static Object doAsdoAs(Subject subject (Subject subject PrivilegedAction action)PrivilegedAction action)

static Object static Object doAsPrivilegeddoAsPrivileged(Subject subject (Subject subject PrivilegedAction action AccessControlContext acc) PrivilegedAction action AccessControlContext acc)

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 18: Katar ína Dudášová               4. roč., 2003/04

Obidve metoacutedyObidve metoacutedy spoja subjekt s AccessControlContext-om spoja subjekt s AccessControlContext-om

aktuaacutelneho vlaacuteknaaktuaacutelneho vlaacutekna Vykonajuacute akciu ndash actionVykonajuacute akciu ndash action Action bežiacute v podstate ako subjektAction bežiacute v podstate ako subjekt Prvaacute metoacuteda mocircže vyvolať vyacutenimku Prvaacute metoacuteda mocircže vyvolať vyacutenimku

(runtime exception) ale normaacutelnym (runtime exception) ale normaacutelnym vykonaniacutem vraacuteti Objectvykonaniacutem vraacuteti Object

Na volanie metoacuted doAs sa vyžaduje Na volanie metoacuted doAs sa vyžaduje AuthPermission(doAs)AuthPermission(doAs)

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 19: Katar ína Dudášová               4. roč., 2003/04

Authentication ClassesAuthentication Classes Pre autentifikaacuteciu subjektu sa vykonajuacute Pre autentifikaacuteciu subjektu sa vykonajuacute

nasledovneacute krokynasledovneacute kroky

11 Aplikaacutecia vytvoriacute Aplikaacutecia vytvoriacute LoginContextLoginContext

22 LoginContext sa dotazuje na konfiguraacuteciu LoginContext sa dotazuje na konfiguraacuteciu ConfigurationConfiguration (trieda (trieda javaxsecurityauthloginConfigurationjavaxsecurityauthloginConfiguration) ndash ) ndash obsahuje info o tom ktoreacute login moduly obsahuje info o tom ktoreacute login moduly (LoginModules) sa majuacute použiť pre konkreacutetnu (LoginModules) sa majuacute použiť pre konkreacutetnu aplikaacuteciu a v akom poradiacute sa majuacute vykonaťaplikaacuteciu a v akom poradiacute sa majuacute vykonať

33 Aplikaacutecia vyvolaacute LoginContext metoacutedu Aplikaacutecia vyvolaacute LoginContext metoacutedu loginlogin

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 20: Katar ína Dudášová               4. roč., 2003/04

4 login metoacuteda vyvolaacute priacuteslušneacute login moduly 4 login metoacuteda vyvolaacute priacuteslušneacute login moduly Každyacute z nich sa bude pokuacutešať autentifikovať Každyacute z nich sa bude pokuacutešať autentifikovať Subject Subject V priacutepade uacutespechu login modul V priacutepade uacutespechu login modul asociuje so subjektom priacuteslušneacute principals a asociuje so subjektom priacuteslušneacute principals a credentialscredentials

5 5 LoginContext LoginContext vraacuteti aplikaacutecii vyacutesledok vraacuteti aplikaacutecii vyacutesledok autentifikaacutecie (autentification status)autentifikaacutecie (autentification status)

6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od 6 Ak bola autentifikaacutecia uacutespešnaacute aplikaacutecia ziacuteska od LoginContextu autentifikovanyacute LoginContextu autentifikovanyacute SubjectSubject

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 21: Katar ína Dudášová               4. roč., 2003/04

Interface LoginModuleInterface LoginModule javaxsecurityauthspijavaxsecurityauthspi

popisuje rozhranie implementovaneacute popisuje rozhranie implementovaneacute poskytovateľmi autentifikačnyacutech poskytovateľmi autentifikačnyacutech technoloacutegiiacutetechnoloacutegiiacute

LoginModules suacute pripojeneacute k aplikaacutecii ndash LoginModules suacute pripojeneacute k aplikaacutecii ndash poskytujuacute konkreacutetny typ autentifikaacutecieposkytujuacute konkreacutetny typ autentifikaacutecie

Configuration Configuration špecifikuje ktoryacute modul špecifikuje ktoryacute modul (moduly) majuacute byť použiteacute s danou (moduly) majuacute byť použiteacute s danou aplikaacuteciou ndash preto ich mocircže byť aplikaacuteciou ndash preto ich mocircže byť pripojenyacutech viac bez toho aby bolo nutneacute pripojenyacutech viac bez toho aby bolo nutneacute modifikovať aplikaacuteciumodifikovať aplikaacuteciu

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 22: Katar ína Dudášová               4. roč., 2003/04

Pluggable Authentication ModulePluggable Authentication Module

S tS tyacutemto modulom mocircže byť pridanyacutech niekoľko yacutemto modulom mocircže byť pridanyacutech niekoľko autentifikačnyacutech technoloacutegiiacute bez potreby meniť autentifikačnyacutech technoloacutegiiacute bez potreby meniť login službulogin službu ( (login servicelogin service))

Mocircže byť použityacute na integraacuteciu rocircznych login Mocircže byť použityacute na integraacuteciu rocircznych login služiebslužieb ndash RSA DCE Kerberos SKey ndash RSA DCE Kerberos SKey

Umožňuje vytvoriť heterogeacutenne prostredie v Umožňuje vytvoriť heterogeacutenne prostredie v ktorom je umiestnenyacutech niekoľko ktorom je umiestnenyacutech niekoľko bezpečnostnyacutech mechanizmovbezpečnostnyacutech mechanizmov

PAM API ndash standard API for unified loginPAM API ndash standard API for unified login

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 23: Katar ína Dudášová               4. roč., 2003/04

LoginContext classLoginContext class reprezentuje implementaacuteciu PAM v Javereprezentuje implementaacuteciu PAM v Jave

public final class LoginContext public final class LoginContext public LoginContext(String name) public LoginContext(String name) public void public void login()login() two phase process two phase process public void public void logout()logout() public Subject getSubject() public Subject getSubject()

get the authenticated Subject get the authenticated Subject

public interface LoginModule public interface LoginModule boolean boolean login()login() 1st authentication phase 1st authentication phase boolean boolean commit()commit() 2nd authentication phase 2nd authentication phase boolean boolean abort()abort() boolean logout() boolean logout()

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 24: Katar ína Dudášová               4. roč., 2003/04

JAAS zabezpečujeJAAS zabezpečuje uacutespešneacute vykonanie všetkyacutech login modulov uacutespešneacute vykonanie všetkyacutech login modulov

alebo ani jedneacutehoalebo ani jedneacuteho LoginContext vykonaacuteva autentifikaacuteciu v dvoch LoginContext vykonaacuteva autentifikaacuteciu v dvoch

krokochkrokoch loginlogin ndash pokus o autentifikaacuteciu Ak prebehne ndash pokus o autentifikaacuteciu Ak prebehne

uacutespešne prejde sa do druhej faacutezyuacutespešne prejde sa do druhej faacutezycommitcommit ndash potvrdenie procesu autentifikaacutecie ndash potvrdenie procesu autentifikaacutecie

tu sa asociujuacute credentials a principals so tu sa asociujuacute credentials a principals so subjektomsubjektom

ak niektoraacute z tyacutechto faacutez neprebehne ak niektoraacute z tyacutechto faacutez neprebehne uacutespešne potom sa spustiacuteuacutespešne potom sa spustiacute

abortabort ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a ndash bdquovyčistiacuteldquo sa prostredie od začatyacutech a nedokončenyacutech zaacuteležitostiacutenedokončenyacutech zaacuteležitostiacute

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 25: Katar ína Dudášová               4. roč., 2003/04

Autorizaacutecia (authorization) Autorizaacutecia (authorization)

Po uacutespešnej autentifikaacutecii JAAS ponuacuteka Po uacutespešnej autentifikaacutecii JAAS ponuacuteka možnosť možnosť kontroly priacutestupukontroly priacutestupu nad množinou nad množinou principals prisluacutechajuacutecich konkreacutetnemu principals prisluacutechajuacutecich konkreacutetnemu subjektu ndash subjektu ndash principal-based access controlsprincipal-based access controls (kontrola priacutestupu na zaacuteklade toho kto (kontrola priacutestupu na zaacuteklade toho kto spuacutešťa koacuted)spuacutešťa koacuted)

JAAS sleduje nasledovnyacute modelJAAS sleduje nasledovnyacute modelndash existujuacute bezpečneacute zdroje (existujuacute bezpečneacute zdroje (security resourcessecurity resources))ndash suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k suacute definovaneacute požiadavky na zaacuteklade ktoryacutech k

nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) nim mocircžu pristupovať priacuteslušneacute (autorizovaneacute) pomenovaneacute subjekty (principals)pomenovaneacute subjekty (principals)

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 26: Katar ína Dudášová               4. roč., 2003/04

PolicyPolicy Abstraktnaacute trieda ktoraacute reprezentuje kontrolu Abstraktnaacute trieda ktoraacute reprezentuje kontrolu

priacutestupu (priacutestupu (access control policyaccess control policy)) Defaultne JAAS poskytuje implementaacuteciu kontroly Defaultne JAAS poskytuje implementaacuteciu kontroly

priacutestupu založenuacute na suacuteboroch (priacutestupu založenuacute na suacuteboroch (file-basedfile-based)) Každaacute podtrieda musiacute implementovať nasledujuacutece Každaacute podtrieda musiacute implementovať nasledujuacutece

metoacutedymetoacutedy

public abstract PermissionCollection public abstract PermissionCollection getPermissionsgetPermissions (Subject subject CodeSource codesource) (Subject subject CodeSource codesource)

ndash vraacuteti Permissions prisluacutechajuacutece subjektu a koacuteduvraacuteti Permissions prisluacutechajuacutece subjektu a koacutedundash vvyžadujeyžaduje AuthPermssion(getPolicy)AuthPermssion(getPolicy)

public abstract void public abstract void refreshrefresh()() ndash updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute updatuje runtime Policy modifikaacuteciami ktoreacute boli uskutočneneacute

od vtedy ako bol poslednyacute čas načiacutetanyacute od vtedy ako bol poslednyacute čas načiacutetanyacute

ndash vvyžaduje yžaduje AuthPermission(refreshPolicy)AuthPermission(refreshPolicy)

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 27: Katar ína Dudášová               4. roč., 2003/04

PrPraacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovneaacuteva prideleneacute bežiacemu koacutedu zistiacuteme nasledovnePolicy policy = PolicyPolicy policy = PolicygetPolicygetPolicy() () PermissionCollection perms = PermissionCollection perms = policypolicygetPermissionsgetPermissions(subject codeSource) (subject codeSource)

Každyacute zaacuteznam v Policy je reprezentovanyacute ako Každyacute zaacuteznam v Policy je reprezentovanyacute ako grantgrant

grant grant CodeBaseCodeBase [URL] [URL] SignedbySignedby [signers] [signers] PrincipalPrincipal

[Principal_Class]Principal_Name [Principal_Class]Principal_Name PermissionPermission Permission_Class [Target_Name]Permission_Class [Target_Name] [ Permission_Actions] [ Permission_Actions] [ signedBy SignerName][ signedBy SignerName]

VyacuteznamVyacuteznamndash Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu Praacuteva (permissions) buduacute prideleneacute akeacutemukoľvek koacutedu

stiahnutom z stiahnutom z CodeBaseCodeBase ktoryacute je podpiacutesanyacute ktoryacute je podpiacutesanyacute signers signers ak ak subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute subjekt spuacutešťajuacuteci koacuted maacute špecifikovaneacute PrincipalsPrincipals vo svojej vo svojej množine principalsmnožine principals

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 28: Katar ína Dudášová               4. roč., 2003/04

PriacutekladPriacutekladgrant CodeBase foocom Signedby foogrant CodeBase foocom Signedby foo

Principal comsunsecurityauthSolarisPrincipal duke Principal comsunsecurityauthSolarisPrincipal duke

permission javaioFilePermission homeduke read permission javaioFilePermission homeduke read write write

ndash Koacuted z Koacuted z foocomfoocom podpiacutesanyacute podpiacutesanyacute foofoo bude bude bežať ako SolarisPrincipal s menom bežať ako SolarisPrincipal s menom dukeduke s povoleniacutem čiacutetaťzapisovať v s povoleniacutem čiacutetaťzapisovať v homedukehomeduke

ndash bežať ako Principal znamenaacute že bude bežať ako Principal znamenaacute že bude vyvolanaacute metoacuteda vyvolanaacute metoacuteda SubjectdoAs()SubjectdoAs()

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 29: Katar ína Dudášová               4. roč., 2003/04

AuthPermissionAuthPermission Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre Taacuteto trieda zahŕňa zaacutekladneacute priacutestupoveacute praacuteva pre

JAASJAAS Objekt tejto triedy priradzuje praacuteva pristupovať k Objekt tejto triedy priradzuje praacuteva pristupovať k

objektom triedobjektom tried PolicyPolicy SubjectSubject LoginContextLoginContext ConfigurationConfiguration

Obsahuje meno ndash target name ktoreacute Obsahuje meno ndash target name ktoreacute reprezentuje priacutestupoveacute praacutevoreprezentuje priacutestupoveacute praacutevo

KonštruktorKonštruktorndash public public AuthPermissionAuthPermission((String name)String name)

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 30: Katar ína Dudášová               4. roč., 2003/04

Skupiny (groups) a role (roles)Skupiny (groups) a role (roles)

an administrator an administrator rolerole can access user passwords can access user passwords

grant Principal foogrant Principal fooRoleRole administrator administrator permission javaioFilePermission permission javaioFilePermission

passwords- read write passwords- read write

a basketball team (a basketball team (groupgroup) can read its directory) can read its directory grant Principal foogrant Principal fooTeamTeam SlamDunk SlamDunk permission javaioFilePermission permission javaioFilePermission

teamsSlamDunk- read teamsSlamDunk- read

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 31: Katar ína Dudášová               4. roč., 2003/04

PožiadavkyPožiadavky

JAAS 10 požaduje mať nainštalovaneacuteJAAS 10 požaduje mať nainštalovaneacute JavaTM 2 SDK Standard Edition v 13JavaTM 2 SDK Standard Edition v 13 alebo alebo

JavaTM 2 Runtime Environment v 13JavaTM 2 Runtime Environment v 13

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 32: Katar ína Dudášová               4. roč., 2003/04

Java Cryptography ArchitectureJava Cryptography Architecture(JCA)(JCA)

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 33: Katar ína Dudášová               4. roč., 2003/04

JCA princiacutepyJCA princiacutepy Nezaacutevislosť implementaacutecieNezaacutevislosť implementaacutecie

ndash implementaacutecia služby sa ziacuteska od poskytovateľa (služba implementaacutecia služby sa ziacuteska od poskytovateľa (služba mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni mocircže mať viacero implementaacuteciiacute ktoreacute poskytujuacute rocirczni provideri) rovnakyacutem spocircsobom provideri) rovnakyacutem spocircsobom

InteroperabilitaInteroperabilitandash rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute rocirczne implementaacutecie navzaacutejom spolupracujuacute ndash použiacutevajuacute

kľuacuteče overujuacute podpisykľuacuteče overujuacute podpisy

Nezaacutevislosť algoritmovNezaacutevislosť algoritmovndash dosahuje sa definovaniacutem cryptographic dosahuje sa definovaniacutem cryptographic engines (služieb) engines (služieb)

a definovaniacutem tried ktoreacute ich implementujuacute ndash a definovaniacutem tried ktoreacute ich implementujuacute ndash engine engine classes classes (napr (napr MessageDigestMessageDigest SignatureSignature KeyFactoryKeyFactory KeyPairGeneratorKeyPairGenerator ))

Rozšiacuteriteľnosť algoritmovRozšiacuteriteľnosť algoritmovndash Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu Novyacute algoritmus ktoryacute spadaacute do niektoreacuteho enginu

mocircže byť ľahko pridanyacutemocircže byť ľahko pridanyacute

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 34: Katar ína Dudášová               4. roč., 2003/04

ArchitektuacuteraArchitektuacutera Cryptographic Service ProvidersCryptographic Service Providers

ndash baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu baliacutek (množina baliacutekov) ktoreacute poskytujuacute konkreacutetnu implementaacuteciu niektorej časti Security APIimplementaacuteciu niektorej časti Security API

ndash program mocircže požiadať o objekt pre nejakuacute službu a program mocircže požiadať o objekt pre nejakuacute službu a ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech ziacuteska tak implementaacuteciu od jedneacuteho z nainštalovanyacutech providerov (poskytovateľov)providerov (poskytovateľov)

ndash Runtime mocircže byť nainštalovanyacute s rozličnyacutemi Runtime mocircže byť nainštalovanyacute s rozličnyacutemi providermi ktoriacute majuacute nastavenuacute prioriu (poradie v providermi ktoriacute majuacute nastavenuacute prioriu (poradie v ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je ktorom majuacute byť prehľadaacutevaniacute pre danuacute službu ak nie je zadanyacute jeden konkreacutetny)zadanyacute jeden konkreacutetny)

Key ManagementKey Management

ndash Databaacuteza nazyacutevanaacute Databaacuteza nazyacutevanaacute keystore keystore sa použiacuteva na skladovanie sa použiacuteva na skladovanie kľuacutečov a certifikaacutetovkľuacutečov a certifikaacutetov

ndash Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely Keystore je priacutestupnyacute aplikaacuteciaacutem pre uacutečely autentifikaacutecie podpisovania prostredniacutectvom triedy autentifikaacutecie podpisovania prostredniacutectvom triedy KeyStoreKeyStore

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 35: Katar ína Dudášová               4. roč., 2003/04

KonceptKoncept engine class popisuje šifrovaciu službu engine class popisuje šifrovaciu službu

abstraktne ndash bez konkreacutetnej implementaacutecieabstraktne ndash bez konkreacutetnej implementaacutecie

šifrovacia služba je spojenaacute sšifrovacia služba je spojenaacute sndash nejakyacutem algoritmomnejakyacutem algoritmomndash operaacuteciouoperaacuteciou

generovania al poskytovania šifrovacieho materiaacutelu generovania al poskytovania šifrovacieho materiaacutelu (kľuacuteče parametre)(kľuacuteče parametre)

generovania objektov (keystores certificates)generovania objektov (keystores certificates)

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 36: Katar ína Dudášová               4. roč., 2003/04

V Java 2 SDK suacute definovaneacute nasledujuacutece V Java 2 SDK suacute definovaneacute nasledujuacutece engine classesengine classes

MessageDigestMessageDigest ndash vypočiacuteta message digest (hash) zo špecifikovanyacutech daacutetvypočiacuteta message digest (hash) zo špecifikovanyacutech daacutet

static MessageDigest getInstance(String static MessageDigest getInstance(String algorithm)algorithm)

MessageDigestgetInstance(SHA-1)MessageDigestgetInstance(SHA-1) SignatureSignature

ndash Napodpisovanie daacutet a overovanie digitaacutelnych podpisovNapodpisovanie daacutet a overovanie digitaacutelnych podpisov

KeyPairGeneratorKeyPairGeneratorndash Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč Sluacuteži na vygenerovania paacuteru suacutekromnyacute ndash verejnyacute kľuacuteč

vhodnyacute pre danyacute šifrovaciacute algoritmusvhodnyacute pre danyacute šifrovaciacute algoritmus

KeyFactoryKeyFactoryndash Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho Sluacuteži na konverziu šifrovacieho kľuacuteča na jeho

špecifikaacuteciu a naopakšpecifikaacuteciu a naopak

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 37: Katar ína Dudášová               4. roč., 2003/04

CertificateFactoryCertificateFactoryndash Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče Použiacuteva sa na vytvaacuteranie certifikaacutetov pre verejneacute kľuacuteče

(public key certifikates) a Certificate Revocation Lists (public key certifikates) a Certificate Revocation Lists (CRLs)(CRLs)

KeyStoreKeyStorendash Vytvorenie a spraacuteva Vytvorenie a spraacuteva keystorukeystoru

AlgorithmParametersAlgorithmParameters ndash Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka Sluacuteži na spraacutevu parametrov konkreacutetneho algoritmu (tyacuteka

sa koacutedovania aj dekoacutedovania)sa koacutedovania aj dekoacutedovania)ndash Priacutestup k parametrom nie je transparentnyacute ndash je možneacute Priacutestup k parametrom nie je transparentnyacute ndash je možneacute

len ziacuteskať algoritmus zviazanyacute s množinou parametrov len ziacuteskať algoritmus zviazanyacute s množinou parametrov alebo typ koacutedovania pre množinu parametrov (existuje alebo typ koacutedovania pre množinu parametrov (existuje aj transuacutearentnaacute reprezentaacutecia kde je možneacute aj transuacutearentnaacute reprezentaacutecia kde je možneacute pristupovať k jednotlivyacutem hodnotaacutem parametrov)pristupovať k jednotlivyacutem hodnotaacutem parametrov)

AlgorithmParameterGeneratorAlgorithmParameterGeneratorndash Generuje parametre pre konkreacutetny algoritmusGeneruje parametre pre konkreacutetny algoritmus

SecureRandomSecureRandomndash Generuje naacutehodneacute alebo pseudonaacutehodneacute čiacuteslaGeneruje naacutehodneacute alebo pseudonaacutehodneacute čiacutesla

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 38: Katar ína Dudášová               4. roč., 2003/04

Vo verzii 14 Java 2 SDK boli pridaneacute Vo verzii 14 Java 2 SDK boli pridaneacute nasledujuacutece enginynasledujuacutece enginy

CertPathBuilderCertPathBuilderndash Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate Sluacuteži na vytvaacuteranie cerifikačnyacutech ciest ndash certificate

paths (tiež certificate chain)paths (tiež certificate chain)

CertPathValidatorCertPathValidatorndash Sluacuteži pre potvrdenie platnosti certifikačnyacutech ciestSluacuteži pre potvrdenie platnosti certifikačnyacutech ciest

static static CertPathValidatorCertPathValidator getInstancegetInstance((StringString alg) alg)

CertPathValidatorResultCertPathValidatorResult validatevalidate(CertPath certPath (CertPath certPath CertPathParameters params)CertPathParameters params)

CertStoreCertStore ndash Použiacuteva sa ziacuteskanie certifikaacutetov (Použiacuteva sa ziacuteskanie certifikaacutetov (CertificatesCertificates) a ) a

CRLs zo skladuCRLs zo skladu

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 39: Katar ína Dudášová               4. roč., 2003/04

Java Cryptography Extension Java Cryptography Extension (JCE)(JCE)

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 40: Katar ína Dudášová               4. roč., 2003/04

Java Cryptography Extension (JCE)Java Cryptography Extension (JCE) Rozširuje JCA (Java Cryptography Architecture)Rozširuje JCA (Java Cryptography Architecture) Pocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDKPocircvodne voliteľnyacute baliacutek ndash rozšiacuterenie k Java 2 SDK

JCE 12xJCE 12x JCE 13xJCE 13x

Teraz je suacutečasťou Java 2 SDK v14Teraz je suacutečasťou Java 2 SDK v14 Zahŕňa prostriedky pre vynuacutetenie dodržania Zahŕňa prostriedky pre vynuacutetenie dodržania

vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech vymedzeniacute tyacutekajuacutecich sa kryptografickyacutech algoritmov a šifrovacej sily priacutepustnej v algoritmov a šifrovacej sily priacutepustnej v appletochaplikaacuteciaacutech v rocircznych praacutevnych appletochaplikaacuteciaacutech v rocircznych praacutevnych systeacutemochsysteacutemoch

Kocircli praacutevnym obmedzeniam v niektoryacutech Kocircli praacutevnym obmedzeniam v niektoryacutech krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie krajinaacutech je v Java 2 SDK v14 použiteacute šifrovanie s obmedzenou silou je priacutestupnaacute aj bdquos obmedzenou silou je priacutestupnaacute aj bdquounlimited unlimited stregthstregthldquo versionldquo version

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 41: Katar ína Dudášová               4. roč., 2003/04

JCE je množina baliacutekov ktoraacute poskytuje JCE je množina baliacutekov ktoraacute poskytuje implementaacuteciu preimplementaacuteciu pre

šifrovanie ndash encryptionšifrovanie ndash encryption generovanie kľuacutečov ndash key generationgenerovanie kľuacutečov ndash key generation vybratie kľuacuteča ndash key agreementvybratie kľuacuteča ndash key agreement Message Authentication Code (MAC) algoritmyMessage Authentication Code (MAC) algoritmy

JCE je navrhnuteacute tak aby mohli byť JCE je navrhnuteacute tak aby mohli byť pripojeneacute ďalšie knižnice pre šifrovanie pripojeneacute ďalšie knižnice pre šifrovanie (ako service providers) taktiež noveacute (ako service providers) taktiež noveacute algoritmy mocircžu byť pridaneacute jednoduchoalgoritmy mocircžu byť pridaneacute jednoducho

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 42: Katar ína Dudášová               4. roč., 2003/04

SunJCE podporuje nasledovneacute algoritmySunJCE podporuje nasledovneacute algoritmy

ndash DES DES ndash DESede DESede ndash AES (with Java 2 SDK v 142) AES (with Java 2 SDK v 142) ndash Blowfish Blowfish ndash PBEWithMD5AndDES PBEWithMD5AndDES ndash PBEWithMD5AndTripleDES PBEWithMD5AndTripleDES ndash Diffie-Hellman key agreement among multiple Diffie-Hellman key agreement among multiple

parties parties ndash HmacMD5 HmacMD5 ndash HmacSHA1 HmacSHA1

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 43: Katar ína Dudášová               4. roč., 2003/04

Rozšiacuterenie oproti JCA spočiacutevaRozšiacuterenie oproti JCA spočiacuteva

vo vaumlčšom počte šifrovaciacutech algoritmov

v možnosti šifrovania symetrickyacutemi kľuacutečmi

v pridaniacute implementaacutecie KeyAgreement protokolu

v pridaniacute šifrovanej praacutece s pruacutedmi uacutedajov

v možnosti šifrovať akyacutekoľvek objekt

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 44: Katar ína Dudášová               4. roč., 2003/04

Core classesCore classes

CipherCipher CipherInputStream CipherOutputStream CipherInputStream CipherOutputStream KeyGeneratorKeyGenerator SecretKeyFactory SecretKeyFactory

ndash Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z Použiacuteva sa na konvertovanie tajnyacutech kľuacutečov z transparentnej reprezentaacutecie na netransparnetnuacute a transparentnej reprezentaacutecie na netransparnetnuacute a naopaknaopak

SealedObject SealedObject KeyAgreement KeyAgreement Mac Mac

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 45: Katar ína Dudášová               4. roč., 2003/04

CipherCipher

Tvoriacute jadro JCETvoriacute jadro JCE Poskytuje funkcionality pre šifrovanie a dešifrovaniePoskytuje funkcionality pre šifrovanie a dešifrovanie Inštanciu vytvoriacuteme pomocou statickej metoacutedyInštanciu vytvoriacuteme pomocou statickej metoacutedy

public static Cipher getInstance(String transformation)public static Cipher getInstance(String transformation)

public static Cipher getInstance(String transformation public static Cipher getInstance(String transformation

String provider)String provider)

transformation transformation ndash opisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby saopisuje operaacutecie ktoreacute sa vykonajuacute nad vstupom aby sa

vyprodukoval vystupvyprodukoval vystupndash je to vždy meno šifrovacieho algoritmu (napr DES)je to vždy meno šifrovacieho algoritmu (napr DES)

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 46: Katar ína Dudášová               4. roč., 2003/04

Cipher objekt je potrebneacute inicializovať do jedneacuteho zo Cipher objekt je potrebneacute inicializovať do jedneacuteho zo štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute štyroch moacutedov ktoreacute suacute definovaneacute ako celočiacuteselneacute konštanty v tejto triede Odkazuje sa na ne pomocou konštanty v tejto triede Odkazuje sa na ne pomocou symbolickyacutech miensymbolickyacutech mien

ENCRYPT_MODE ndash ENCRYPT_MODE ndash šifrovanie daacutetšifrovanie daacutet

DECRYPT_MODE ndash DECRYPT_MODE ndash dešifrovanie daacutetdešifrovanie daacutet

WRAP_MODE ndash WRAP_MODE ndash zaobalenie kľuacuteča do bajtov aby zaobalenie kľuacuteča do bajtov aby mohol byť bezpečne prenesenyacutemohol byť bezpečne prenesenyacute

UNWRAP_MODE ndash UNWRAP_MODE ndash opak ndash ziacuteska sa opak ndash ziacuteska sa javasecurityKey objektjavasecurityKey objekt

Na inicializaacuteciu sa sluacuteži metoacutedaNa inicializaacuteciu sa sluacuteži metoacuteda

public void public void initinit(int opmode Key key (int opmode Key key

AlgorithmParameters params SecureRandom random)AlgorithmParameters params SecureRandom random) ndash mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute mocircže mať rocirczny počet parametrov ak niektoreacute potrebneacute

pre algoritmus nie suacute uvedeneacute provider zabezpečiacute pre algoritmus nie suacute uvedeneacute provider zabezpečiacute vlastneacutevlastneacute

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 47: Katar ína Dudášová               4. roč., 2003/04

Koacutedovanie a dekoacutedovanieKoacutedovanie a dekoacutedovanie mocircže prebiehaťmocircže prebiehať

ndash v jednom kroku v jednom kroku ((single-part operationsingle-part operation))ndash v niekoľkyacutech krokoch (v niekoľkyacutech krokoch (multi-part operationmulti-part operation))

vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo vhodneacute vtedy ak nevieme akeacute veľkeacute buduacute data alebo ak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumltiak suacute priacuteliš veľkeacute na to aby boli naraz v pamaumlti

Pre jednokrokoveacute šifrovaniedešifrovaniePre jednokrokoveacute šifrovaniedešifrovanie public byte[] public byte[] doFinaldoFinal(byte[] input) (byte[] input)

Pre viackrokoveacute šifrovaniedešifrovaniePre viackrokoveacute šifrovaniedešifrovanie public byte[] public byte[] updateupdate(byte[] input) (byte[] input) a musiacute byť ukončeneacute doFinal() metoacutedoua musiacute byť ukončeneacute doFinal() metoacutedou

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 48: Katar ína Dudášová               4. roč., 2003/04

Spraacuteva parametrov potrebnyacutech pre Spraacuteva parametrov potrebnyacutech pre algoritmusalgoritmus

Parametre sa buďParametre sa buďndash explicitne určia v init()explicitne určia v init() metoacutede v aplikaacutecii metoacutede v aplikaacuteciindash vygenerujevygeneruje ich sama implementaacutecia algoritmu ich sama implementaacutecia algoritmu

Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať Parametre použiteacute pri šifrovaniacute je možneacute ziacuteskať pomocou Cipher objektu volaniacutem metoacutedy pomocou Cipher objektu volaniacutem metoacutedy getParameters()getParameters() ktoraacute vraacuteti objekt ktoraacute vraacuteti objekt javasecurityAlgorithmParameters javasecurityAlgorithmParameters alebo alebo null null ak nie suacute použiacutevaneacute žiadne ak nie suacute použiacutevaneacute žiadne

tie isteacute parametretie isteacute parametre ktoreacute boli použiteacute pri šifrovaniacute ktoreacute boli použiteacute pri šifrovaniacute musia byť použiteacute musia byť použiteacute aj pri dešifrovaniacuteaj pri dešifrovaniacute (ziacuteskajuacute sa a (ziacuteskajuacute sa a inicializuje sa nimi Cipher objekt pre inicializuje sa nimi Cipher objekt pre dekoacutedovanie)dekoacutedovanie)

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 49: Katar ína Dudášová               4. roč., 2003/04

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie Cipher objektu pre password based encrziacuteskanie Cipher objektu pre password based encr Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializaacutecia bez poskytnutia parametrovinicializaacutecia bez poskytnutia parametrov ccinitinit(CipherENCRYPT_MODE myKey)(CipherENCRYPT_MODE myKey)

zašifrovanie daacutetzašifrovanie daacutet byte[] cipherText = cdoFinal(This is just an byte[] cipherText = cdoFinal(This is just an

examplegetBytes()) examplegetBytes())

ziacuteskanie použityacutech parametrovziacuteskanie použityacutech parametrov AlgorithmParameters algParams = cgetParameters()AlgorithmParameters algParams = cgetParameters()

parametre sa zakoacutedujuacute pre neskoršie použitieparametre sa zakoacutedujuacute pre neskoršie použitiebyte[] encodedAlgParams = algParamsgetEncoded()byte[] encodedAlgParams = algParamsgetEncoded()

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 50: Katar ína Dudášová               4. roč., 2003/04

import javaxcrypto import javaxcrypto import javasecurityAlgorithmParameters import javasecurityAlgorithmParameters

ziacuteskanie objektu reprezentujuacuteceho parametreziacuteskanie objektu reprezentujuacuteceho parametre pre password based encodingpre password based encoding AlgorithmParameters algParams AlgorithmParameters algParams algParams = algParams = AlgorithmParametersAlgorithmParametersgetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa parametrami použityacutemi pri šifrovaniacuteinicializuje sa parametrami použityacutemi pri šifrovaniacute algParamsalgParamsinitinit(encodedAlgParams)(encodedAlgParams)

ziacuteska sa cipher objekt pre password-basedziacuteska sa cipher objekt pre password-based encryptionencryption Cipher c = CipherCipher c = CiphergetInstancegetInstance(PBEWithMD5AndDES)(PBEWithMD5AndDES)

inicializuje sa pre dekoacutedovanie pomocou init metoacutedyinicializuje sa pre dekoacutedovanie pomocou init metoacutedy aj s parametramiaj s parametrami ccinitinit(CipherDECRYPT_MODE myKey algParams)(CipherDECRYPT_MODE myKey algParams)

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 51: Katar ína Dudášová               4. roč., 2003/04

Cipher Stream classesCipher Stream classes JCE predstavuje koncept bezpečnyacutech JCE predstavuje koncept bezpečnyacutech

streamov (streamov (secure streamssecure streams)) Je to kombinaacutecia Input a Output Streamov Je to kombinaacutecia Input a Output Streamov

s Cipher objektoms Cipher objektom CipherInputStreamCipherInputStream CipherOutputStreamCipherOutputStream

Pred ich použitiacutem potrebujem Pred ich použitiacutem potrebujem inicializovanyacute objekt triedy Cipherinicializovanyacute objekt triedy Cipher

ndash napr ak ho inicializujeme na dešifrovanie napr ak ho inicializujeme na dešifrovanie potom CipherInputStream sa pokuacutesi dešifrovať potom CipherInputStream sa pokuacutesi dešifrovať data ktoreacute čiacuteta zo streamu predtyacute ako ich data ktoreacute čiacuteta zo streamu predtyacute ako ich poskytne aplikaacuteciiposkytne aplikaacutecii

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 52: Katar ína Dudášová               4. roč., 2003/04

ExampleExample Predpokladajme ze maacuteme objekt triedy Cipher Predpokladajme ze maacuteme objekt triedy Cipher cipher1 cipher1

inicializovanyacute na šifrovanieinicializovanyacute na šifrovanie Koacuted ukazuje použitie Koacuted ukazuje použitie CipherInputStreamCipherInputStream a a

FileInputStreamFileInputStream na zakoacutedovanie vstupneacuteho pruacutedu daacutet na zakoacutedovanie vstupneacuteho pruacutedu daacutet

FileInputStream fis FileInputStream fis FileOutputStream fos FileOutputStream fos CipherInputStreamCipherInputStream cis cis

fis = new FileInputStream(tmpatxt) fis = new FileInputStream(tmpatxt) cis = new cis = new CipherInputStreamCipherInputStream(fis cipher1)(fis cipher1)fos = new FileOutputStream(tmpbtxt) fos = new FileOutputStream(tmpbtxt) byte[] b = new byte[8]byte[] b = new byte[8]

int i = cisread(b)int i = cisread(b)while (i = -1) while (i = -1)

foswrite(b 0 i)foswrite(b 0 i)i = cisread(b) i = cisread(b)

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 53: Katar ína Dudášová               4. roč., 2003/04

KeyGeneratorKeyGenerator Sluacuteži na generovanie tajnyacutech kľuacutečov pre Sluacuteži na generovanie tajnyacutech kľuacutečov pre

symetrickeacute algoritmy symetrickeacute algoritmy Vytvorenie inštancieVytvorenie inštancie

public static KeyGenerator public static KeyGenerator getInstancegetInstance(String (String algorithm String provider)algorithm String provider)

InicializaacuteciaInicializaacutecia

ndash Algorithm-Independent InitializationAlgorithm-Independent Initialization public void public void initinit(int keysize SecureRandom random)(int keysize SecureRandom random)

ndash Algorithm-Specific InitializationAlgorithm-Specific Initialization public void public void initinit(AlgorithmParameterSpec params)(AlgorithmParameterSpec params)

Vytvorenie tajneacuteho kľuacutečaVytvorenie tajneacuteho kľuacuteča

public SecretKey public SecretKey generateKeygenerateKey()()

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 54: Katar ína Dudášová               4. roč., 2003/04

SealedObject classSealedObject class Umožňuje programaacutetorovi vytvoriť objekt a Umožňuje programaacutetorovi vytvoriť objekt a

chraacuteniť jeho chraacuteniť jeho docircvernosťdocircvernosť šifrovaciacutem algoritmom šifrovaciacutem algoritmom

z objektu ktoryacute implementuje rozhranie z objektu ktoryacute implementuje rozhranie javaioSerializablejavaioSerializable možno vytvoriť možno vytvoriť SealedObject SealedObject ktoryacute ktoryacute zapuacutezdruje pocircvodnyacute objektzapuacutezdruje pocircvodnyacute objekt v serializovateľnej (bdquodeep copyldquo) a zašifrovanej v serializovateľnej (bdquodeep copyldquo) a zašifrovanej podobe použitiacutem niektoreacuteho šifrovacieho podobe použitiacutem niektoreacuteho šifrovacieho algoritmualgoritmu

Neskocircr mocircže byť Neskocircr mocircže byť spaumltnespaumltne dešifrovanyacute a dešifrovanyacute a deserializovanyacute ndash ziacuteska sa deserializovanyacute ndash ziacuteska sa pocircvodnyacute objektpocircvodnyacute objekt

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 55: Katar ína Dudášová               4. roč., 2003/04

Example Example TamTam

create Cipher objectcreate Cipher object

Note sKey is assumed to refer to anNote sKey is assumed to refer to an

already-generated secret DES keyalready-generated secret DES key

Cipher c =Cipher c = CiphergetInstance CiphergetInstance(DES) (DES) ccinitinit(CipherENCRYPT_MODE sKey)(CipherENCRYPT_MODE sKey)

do the sealing SealedObjectdo the sealing SealedObject

so=so=new SealedObjectnew SealedObject(This is a secret c)(This is a secret c)

NaspaumlťNaspaumlť

cinit(Ciphercinit(CipherDECRYPT_MODEDECRYPT_MODE sKey) sKey)

try try

String s = (String)soString s = (String)sogetObjectgetObject(c) (c)

catch(Exception e) do something catch(Exception e) do something

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 56: Katar ína Dudášová               4. roč., 2003/04

KeyAgreement classKeyAgreement class Poskytuje funkcionalitu key agreement protokolu Ide o spocircsob

ako si dve a viac osocircb mocircže vytvoriť spoločnyacute kľuacuteč ktoryacute je rovnakyacute bez toho aby si tento kľuacuteč museli medzi sebou priamo vymeniť

Každaacute strana musiacute vytvoriť KeyAgreement objekt public static KeyAgreement getInstance(String alg)

InicializaacuteciaInicializaacutecia svojho objektu privaacutetnymi informaacuteciami podľa svojho objektu privaacutetnymi informaacuteciami podľa typu algoritmutypu algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec params)params) KeyAgreement phaseKeyAgreement phase

ndash Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez Každyacute key agreement protocol pozostaacuteva z niekoľkyacutech faacutez ktoreacute musia byť vykonaneacute každou zuacutečastnenou ktoreacute musia byť vykonaneacute každou zuacutečastnenou stranoustranou stranoustranou

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 57: Katar ína Dudášová               4. roč., 2003/04

Nasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedyNasledujuacuteca faacuteza sa vykonaacuteva volaniacutem metoacutedy public Key public Key doPhasedoPhase(Key key boolean lastPhase)(Key key boolean lastPhase)

ndash keykey ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok ndash verejnyacute kľuacuteč niektorej strany alebo vyacutesledok predchaacutedzajuacuteceho volania doPhase() predchaacutedzajuacuteceho volania doPhase()

ndash vracia bdquovracia bdquomedzikľuacutečmedzikľuacutečldquo ktoryacute sa pošle ďalšej strane a tak sa ldquo ktoryacute sa pošle ďalšej strane a tak sa pokračuje v procesepokračuje v procese

ndash lastPhaselastPhase ndash špecifikuje či vykonanie doPhase() metoacutedy je ndash špecifikuje či vykonanie doPhase() metoacutedy je posledneacute v danom key agreementeposledneacute v danom key agreemente

ndash pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet pri dvoch stranaacutech sa doPhase() volaacute raz pri troch dvakraacutet atďatď

Generovanie zdieľaneacuteho tajneacuteho kľuacutečaGenerovanie zdieľaneacuteho tajneacuteho kľuacutečandash Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na Po vykonaniacute potrebnyacutech faacutez sa zavolaacute funkcia na

vytvorenie zdieľaneacuteho tajneacuteho kľuacutečavytvorenie zdieľaneacuteho tajneacuteho kľuacuteča

byte[] byte[] generateSecretgenerateSecret() () int int generateSecretgenerateSecret(byte[] sharedSecret int offset)(byte[] sharedSecret int offset)

SecretKey SecretKey generateSecretgenerateSecret(String algorithm)(String algorithm)

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 58: Katar ína Dudášová               4. roč., 2003/04

Mac classMac class Poskytuje funkcionalitu pre Message Authetication CodePoskytuje funkcionalitu pre Message Authetication Code VytvorenieVytvorenie Mac objektu Mac objektu

public static Mac public static Mac getInstancegetInstance(String algorithm)(String algorithm) InicializaacuteciaInicializaacutecia

ndash Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v Vždy pomocou kľuacuteča a niekedy aj množinou parametrov v zaacutevislosti od použiteacuteho algoritmuzaacutevislosti od použiteacuteho algoritmu

public void public void initinit(Key key AlgorithmParameterSpec (Key key AlgorithmParameterSpec

params)params)

Vyacutepočet MACVyacutepočet MACndash Single-part operationSingle-part operation

public byte[] public byte[] doFinaldoFinal(byte[] input)(byte[] input) ndash Multi-part operation Multi-part operation

public void public void updateupdate(byte[] input)(byte[] input)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 59: Katar ína Dudášová               4. roč., 2003/04

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 60: Katar ína Dudášová               4. roč., 2003/04

Java Secure Socket ExtensionJava Secure Socket Extension (JSSE)(JSSE)

Sada balSada baliacutekov umožňujuacutecich iacutekov umožňujuacutecich bezpečnuacute bezpečnuacute internetovuacute komunikaacuteciuinternetovuacute komunikaacuteciu pri použitiacute pri použitiacute akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP akeacutehokoľvek aplikačneacuteho protokolu nad TCPIP (HTTP Telnet FTP)(HTTP Telnet FTP)

Implementuje java technoloacutegiu protokolov Implementuje java technoloacutegiu protokolov prepre

Secure Sockets Layer (SSL)Secure Sockets Layer (SSL) Transport Layer Security(TLS)Transport Layer Security(TLS)

Obsahuje funkcionality preObsahuje funkcionality prendash Koacutedovanie daacutet (data encryption)Koacutedovanie daacutet (data encryption)ndash Autentifikaacuteciu servera Autentifikaacuteciu servera ndash Integritu spraacutev (message integrity)Integritu spraacutev (message integrity)ndash Autentifikaacuteciu klienta - optionalAutentifikaacuteciu klienta - optional

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 61: Katar ína Dudášová               4. roč., 2003/04

Kam zaradiť JSSE v TCPIPKam zaradiť JSSE v TCPIP

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 62: Katar ína Dudášová               4. roč., 2003/04

Črty JSSEČrty JSSE

API podpora pre API podpora pre SSLSSL verzie 2030 verzie 2030 implementaacutecia SSL 30implementaacutecia SSL 30

API podpora a implementaacutecia API podpora a implementaacutecia TLSTLS 10 10 Obsahuje triedy ktoryacutech inštancie Obsahuje triedy ktoryacutech inštancie

vytvaacuterajuacute bezpečneacute kanaacutely (vytvaacuterajuacute bezpečneacute kanaacutely (SSLSocketSSLSocket SSLServerSocketSSLServerSocket))

Podpora pre autentifikaacuteciu servra a klienta Podpora pre autentifikaacuteciu servra a klienta ndash časť SSL handshakingndash časť SSL handshaking

Podpora HTTPSPodpora HTTPS Obsahuje licencovaneacute koacutedy RSA Data Obsahuje licencovaneacute koacutedy RSA Data

Security Inc ako Security Inc ako RSARSA a a RC4RC4

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 63: Katar ína Dudášová               4. roč., 2003/04

Obsahuje podporu pre niekoľko šifrovaciacutech Obsahuje podporu pre niekoľko šifrovaciacutech algoritmovalgoritmov

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 64: Katar ína Dudášová               4. roč., 2003/04

HandshakeHandshakendash faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť faacuteza kedy sa dva sockety bdquodohodnuacuteldquo použiť

novuacute alebo existujuacutecu sessionnovuacute alebo existujuacutecu session

Handshake protocolHandshake protocolndash vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech vyacutemena niekoľkyacutech spraacutev vyacutesledkom ktoryacutech

je je generovanie kľuacutečovgenerovanie kľuacutečov na zabezpečenie na zabezpečenie integrity a bezpečnosti na zaacuteklade Key integrity a bezpečnosti na zaacuteklade Key AgreementuAgreementu

Key AgreementKey Agreementndash Protocol pomocou ktoreacuteho sa dve alebo viac Protocol pomocou ktoreacuteho sa dve alebo viac

straacuten dohodnuacute na rovnakyacutech šifrovaciacutech straacuten dohodnuacute na rovnakyacutech šifrovaciacutech kľuacutečoch bez toho aby si vymienali tajneacute kľuacutečoch bez toho aby si vymienali tajneacute nešifrovaneacute informaacutecie (RSA Diffie-Hellman)nešifrovaneacute informaacutecie (RSA Diffie-Hellman)

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 65: Katar ína Dudášová               4. roč., 2003/04

Key ManagerKey Managerndash spravuje sklad kľuacutečov (spravuje sklad kľuacutečov (keystorekeystore) a dodaacuteva ) a dodaacuteva

verejneacute kľuacuteče v priacutepade potrebyverejneacute kľuacuteče v priacutepade potrebyndash rozhoduje o tom ktoreacute credentials poslať rozhoduje o tom ktoreacute credentials poslať

vzdialeneacutemu hostuvzdialeneacutemu hostu

Trust ManagerTrust Managerndash rozhoduje o tom komu docircverovať a to na rozhoduje o tom komu docircverovať a to na

zaacuteklade informaacuteciiacute v sklade (zaacuteklade informaacuteciiacute v sklade (truststoretruststore) ktoryacute ) ktoryacute spravujespravuje

ndash zaacutekladnyacutem trust managerom je X509zaacutekladnyacutem trust managerom je X509ndash vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie vo verzii 142 Java 2 bolo pridaneacute rozšiacuterenie

jednoducheacuteho X509 ndash nazyacuteva sa jednoducheacuteho X509 ndash nazyacuteva sa SunPKIX SunPKIX

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 66: Katar ína Dudášová               4. roč., 2003/04

Message Authentication CodeMessage Authentication Code

Poskytuje spocircsob ako overiť integritu Poskytuje spocircsob ako overiť integritu informaacuteciiacute na zaacuteklade tajneacuteho kľuacutečainformaacuteciiacute na zaacuteklade tajneacuteho kľuacuteča

MAC mechanizmus založenyacute na hash MAC mechanizmus založenyacute na hash funkcii ndash HMACfunkcii ndash HMACndash Mocircže použiacutevať akuacutekoľvek kryptografickuacute Mocircže použiacutevať akuacutekoľvek kryptografickuacute

hash funkciu (MD5 SHA) v kombinaacutecii so hash funkciu (MD5 SHA) v kombinaacutecii so zdieľanyacutem tajnyacutem kľuacutečomzdieľanyacutem tajnyacutem kľuacutečom

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 67: Katar ína Dudášová               4. roč., 2003/04

Client helloClient hello ndash klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL klient pošle serveru informaacuteciu akuacute najvyššiu verziu SSL

podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted podporuje a zoznam podporovanyacutech šifrovaciacutech saacuted (algoritmus + veľkosť kľuacutečov) (algoritmus + veľkosť kľuacutečov)

Server helloServer hellondash server si vyberie najvyšiu verziu SSL a najlepšiu server si vyberie najvyšiu verziu SSL a najlepšiu

šifrovaciu sadu ktoruacute podporuje aj klient aj server a šifrovaciu sadu ktoruacute podporuje aj klient aj server a pošle tuacuteto informaacuteciu klientovipošle tuacuteto informaacuteciu klientovi

CertificateCertificatendash Autentifikaacutecia servera ndash server pošle klientovi certifikaacutetAutentifikaacutecia servera ndash server pošle klientovi certifikaacutet

Certificate requestCertificate requestndash V priacutepade že server požaduje autentifikaacuteciu od klienta V priacutepade že server požaduje autentifikaacuteciu od klienta

(staacuteva sa to zriedkavo)(staacuteva sa to zriedkavo) Server key exchangeServer key exchange

ndash Ak nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteciAk nie je zaslanyacute verejnyacute kľuacuteč postačujuacuteci Server hello doneServer hello done

ndash Horiacute klientovi že začiatočnyacute hello proces je ukončenyacuteHoriacute klientovi že začiatočnyacute hello proces je ukončenyacute

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 68: Katar ína Dudášová               4. roč., 2003/04

CertificateCertificatendash Ak server požadoval od klienta certifikaacutet ten ho pošleAk server požadoval od klienta certifikaacutet ten ho pošle

Client key exchangeClient key exchangendash Klient vygeneruje informaacutecie potrebneacute pre vytvorenie Klient vygeneruje informaacutecie potrebneacute pre vytvorenie

kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info kľuacuteča pre symetrickeacute šifrovanie Pri RSA potom tieto info zašifruje verejnyacutem kľuacutečom od servera a pošle serveruzašifruje verejnyacutem kľuacutečom od servera a pošle serveru

Certificate verifyCertificate verifyndash Umožňuje serveru dokončiť proces autentifikaacutecie klientaUmožňuje serveru dokončiť proces autentifikaacutecie klienta

Change cipher specChange cipher specndash Klient pošle tuacuteto spraacutevu servru aby sa začala Klient pošle tuacuteto spraacutevu servru aby sa začala

komunikaacutecia v kryptovanom režimekomunikaacutecia v kryptovanom režime FinishedFinished

ndash Server oznaacutemi klientovi že je pripravenyacute začať Server oznaacutemi klientovi že je pripravenyacute začať zabezpečenuacute komunikaacuteciu Toto je koniec SSL zabezpečenuacute komunikaacuteciu Toto je koniec SSL handshakuhandshaku

Encrypred dataEncrypred datandash Klient a server komunikujuacute s použitiacutem vybraneacuteho Klient a server komunikujuacute s použitiacutem vybraneacuteho

symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča symetrickeacuteho šifrovania hash funkcie a tajneacuteho kľuacuteča ktoreacute boli zvoleneacute počas SSL handshakuktoreacute boli zvoleneacute počas SSL handshaku

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 69: Katar ína Dudášová               4. roč., 2003/04

Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL Logickaacute hierarchia tried použiacutevanyacutech na vytvorenie SSL socketusocketu

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 70: Katar ína Dudášová               4. roč., 2003/04

SSLSocketSSLSocket sa vytvoriacute buď pomocou sa vytvoriacute buď pomocou SSLSocketFactorySSLSocketFactory (metoacuteda createSocket()) (metoacuteda createSocket()) SSLServerSocketSSLServerSocket (akceptovaniacutem vyacutezvy na (akceptovaniacutem vyacutezvy na

komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou komunikaacuteciu) ktoryacute je zasa vytvorenyacute pomocou SSLServerSocketFactorySSLServerSocketFactory

SSLSocketFactory SSLSocketFactory ajaj SSLServerSocketFactory SSLServerSocketFactory suacute vytvoreneacute suacute vytvoreneacute SSLContextSSLContext ndashom ktoryacute mocircžeme ziacuteskať a ndashom ktoryacute mocircžeme ziacuteskať a inicializovať dvoma spocircsobmiinicializovať dvoma spocircsobmi

11 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getDefault() getDefault() nad nad SSLSocketFactorySSLSocketFactory alebo alebo SSLServerSocketFactorySSLServerSocketFactory

22 Volaniacutem statickej metoacutedy Volaniacutem statickej metoacutedy getInstance()getInstance() triedy triedy SSLContext ndash SSLContext ndash tento sposocircb umožňuje vaumlčšiu tento sposocircb umožňuje vaumlčšiu kontrolu nad kontextom kontrolu nad kontextom

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 71: Katar ína Dudášová               4. roč., 2003/04

11 V priacutepade že použijeme getDefault() V priacutepade že použijeme getDefault() SSLContextSSLContext je inicializovanyacute je inicializovanyacute

defaultnyacutem defaultnyacutem KeyManageromKeyManagerom a a TrustManageromTrustManagerom (defaultnyacute keystore je (defaultnyacute keystore je praacutezdny ndash daacute sa však nastaviť praacutezdny ndash daacute sa však nastaviť system propertysystem property aby nebol aby nebol))

truststore je defaultne truststore je defaultne ltjava-homegtlibsecurityjssecacertsltjava-homegtlibsecurityjssecacerts

(viac info o defaultnyacutech nastaveniach na (viac info o defaultnyacutech nastaveniach na The Installation Directory ltjava-homegtThe Installation Directory ltjava-homegt ))

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 72: Katar ína Dudášová               4. roč., 2003/04

2 pomocou triedy SSLContext2 pomocou triedy SSLContext Najskocircr treba vytvoriť inštanciu pomocou metoacutedy Najskocircr treba vytvoriť inštanciu pomocou metoacutedy static static SSLContextSSLContext getInstancegetInstance(String protocol)(String protocol)

V druhom kroku je potrebneacute inicializovať ho pomocou V druhom kroku je potrebneacute inicializovať ho pomocou metoacutedy metoacutedy

voidvoid initinit((KeyManagerKeyManager[] km [] km TrustManagerTrustManager[] tm [] tm

SecureRandomSecureRandom random) random) km ndash pole objektov typu KeyManagerkm ndash pole objektov typu KeyManager tm ndash pole objektov typu TrustManagertm ndash pole objektov typu TrustManager random ndash zdroj nahodneacuteho generovaniarandom ndash zdroj nahodneacuteho generovania

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 73: Katar ína Dudášová               4. roč., 2003/04

Ako ziacuteskať polia km tmAko ziacuteskať polia km tm Pomocou Pomocou nnaasledovnsledovnyacuteyacutech ch triedtried a ich metoacuteda ich metoacuted

KeyManagerFactoryKeyManagerFactory

static KeyManagerFactory getInstance(String alg)static KeyManagerFactory getInstance(String alg) TrustManagerFactoryTrustManagerFactory

static TrustManagerFactory getInstance(String alg)static TrustManagerFactory getInstance(String alg)

Obidve tieto triedy mocircžu byť inicializovaneacuteObidve tieto triedy mocircžu byť inicializovaneacute voidvoid initinit((KeyStoreKeyStore ks char[] password) ks char[] password)

ndash metoacuteda KeyManagerFactorymetoacuteda KeyManagerFactory void void initinit((KeyStoreKeyStore ks) ks)

ndash metoacuteda TrustManagerFactorymetoacuteda TrustManagerFactory

Potom je potrebneacute zavolať metoacutedyPotom je potrebneacute zavolať metoacutedy KeyManagerKeyManager[] [] getKeyManagersgetKeyManagers()() TrustManagerTrustManager[] [] getTrustManagersgetTrustManagers()()

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 74: Katar ína Dudášová               4. roč., 2003/04

Druhyacute spocircsob ako si vytvoriť vlastnyacute Druhyacute spocircsob ako si vytvoriť vlastnyacute KeyManagerTrustManager je KeyManagerTrustManager je implementovať rozhraniaimplementovať rozhrania ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager ndash javaxnetsslX509KeyManagerjavaxnetsslX509KeyManager

po vytvoreniacute vlastneacuteho managera je po vytvoreniacute vlastneacuteho managera je potrebneacute spojiť ho s potrebneacute spojiť ho s SSLContextomSSLContextom pomocou pomocou init()init() metoacutedy metoacutedy

Sockety vytvoreneacute v buduacutecnosti buduacute Sockety vytvoreneacute v buduacutecnosti buduacute použiacutevať tento TrustManager pri svojich použiacutevať tento TrustManager pri svojich rozhodnutiachrozhodnutiach

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
Page 75: Katar ína Dudášová               4. roč., 2003/04

Použitaacute literatuacuteraPoužitaacute literatuacutera httphttpjavasuncomproductsjaasindex-10htmljavasuncomproductsjaasindex-10html httphttpjavasuncomsecurityjaasdocacsachtmljavasuncomsecurityjaasdocacsachtml httpjavasuncomsecurityjaasdocapihtmlhttpjavasuncomsecurityjaasdocapihtml httpjavasuncomdocsbookstutorialsecurity12overviewihttpjavasuncomdocsbookstutorialsecurity12overviewi

ndexhtmlndexhtml httpjavasuncomj2se142docsguidesecurityjsseJSSERhttpjavasuncomj2se142docsguidesecurityjsseJSSER

efGuidehtmlefGuidehtml httpjavasuncomproductsjsseJavaOne00_JSSEpdfhttpjavasuncomproductsjsseJavaOne00_JSSEpdf httpjavasuncomsecurityjavaone2001httpjavasuncomsecurityjavaone2001

javaone01certpath_jce_jsse_bofpdfjavaone01certpath_jce_jsse_bofpdf httpjavasuncomj2se142docsguidesecurityhttpjavasuncomj2se142docsguidesecurity

CryptoSpechtmlDesignCryptoSpechtmlDesign httpjavasuncomj2se142docsguidesecurityjcehttpjavasuncomj2se142docsguidesecurityjce

JCERefGuidehtmlJCERefGuidehtml

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76