Katar ína Dudášová 4. roč., 2003/04
description
Transcript of 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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
Č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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-