- JCA (Java Cryptography Architecture)
- este un cadru de lucru ce permite accesarea si dezvoltarea de functiuni criptografice in platforma Java
obiective
- independenta implementarii si interoperabilitate
- independenta algoritmilor si extensibilitate
- serviciu criptografic
- un algoritm sau un tip care fie asigura operatii criptografice (ex: semnaturi digitale) fie genereaza sau furnizeaza informatie criptografica (ex: chei sau parametri) fie genereaza obiecte date (ex: magazii de chei sau certificate) care incapsuleaza chei
- furnizor de servicii criptografice
- un pachet care implementeaza o submultime a cerintelor prevazute in "Security Architecture" legate de criptografie
- furnizorul implicit de servicii criptografice - SunJCE
- este implementat de Sun si include implementari pentru:
- DSA
- MD5 si SHA-1
- generator de perechi de chei publica/privata prin algoritmul DSA
- generator de parametri prin algoritmul DSA
- gestionar de parametri generati prin algoritmul DSA
- generator de chei prin algoritmul DSA cu facilitate de conversie intre perechile de chei publica/privata si informatia de cheie
- generator de numere pseudoaleatoare conform cu IEEE-P1363
- constructor de cai de certificare (X.509) si validator pentru infrastructura de chei publice (cu revocare prin liste - CRL)
- stocarea si revocarea certificatelor prin CRL si LDAP
- generator de certificate X.509 si CRL
- stocare de chei pentru stocare proprietara - JKS
marimile implicite ale cheilor
- generator de cheie
- DES: 56 biti
- TripleDES: 112 biti
- Blowfish: 56 biti
- HmacMD5: 64 biti
- HmacSHA1: 64 biti
- generator de perechi de chei
Diffie-Hellman: 1024 biti
- generator parametri algoritm
Diffie-Hellman: 1024 biti
- clasa motor
- defineste un serviciu criptografic intr-o maniera abstracta; o asemenea clasa asigura o interfata (interfata abstracta SPI - Service Provider Interface) pentru un tip de serviciu criptografic specificat; o instanta a unei clase motor ( contine ca un camp membru privat o instanta a clasei SPI corespondente care are acelasi nume cu cel al clasei motor) se creeaza printr-un apel la metoda getInstance a clasei motor; clasele SPI sunt abstracte astfel ca un furnizor de servicii criptografice trebuie sa contina clase derivate si implementari ale metodelor abstracte
- JCA contine
-
- clasele din pachetul "Java SDK Security" legate de criptografie
- Provider
-
este interfata catre furnizorul de servicii criptografice
realizeaza inregistrarea serviciilor criptografice si poate fi folosita pentru a inregistra servicii de securitate
la crearea unei instante pentru o clasa motor se poate specifica optional furnizorul de servicii criptografice; daca nu se specifica, metoda getInstance cauta furnizorii care implementeaza serviciul criptografic cerut asociat cu numele algoritmului; Orice JVM are o lista de preferinte pentru aceasta cautare
instalarea unui furnizor de servicii criptografice
- instalarea
inserarea in "classpath" a cai unde se afla jar-ul sau zip-ul
- configurarea
se insereaza in fisierul java.security o linie "security.provider.n = masterClassName"
metode
- public String getName()
- public double getVersion()
- public String getInfo()
- Security
-
contine metode statice, nu se instantiaza si gestioneaza furnizorii de servicii criptografice si setarile generale de securitate care pot fi apelate numai in programe de incredere
un program de incredere este:
- o aplicatie locala care ruleaza sub un gestionar de securitate
- un applet sau o aplicatie care are drepturi de rulare a acestor metode
codul rulat are o sursa care poate fi URL-ul dar poate fi o referinta catre cheia publica corespunzatoare cheii private utilizate pentru semnarea codului; cheile publice sunt referite prin aliasuri din magazia de stocare
intr-un fisier de configurare a politicii, codul sursa este reprezentat prin URL si alias
ex:
grant codeBase "...", signedBy "..." (
- permission java.security.SecurityPermisssion "insertProvider.";
- permission java.security.SecurityPermisssion "removeProvider.";
- permission java.security.SecurityPermisssion "putProviderProperty.";
};
metode
- gestionarea furnizorilor
functie | nume metoda | obs. |
interogare | static Provider[] getProvider() | ordinea in vector este data de ordinea de preferinta a furnizorilor |
interogare | static Provider getProvider(Stirng providerName) | |
adaugare | static int addProvider(Provider provider) | adauga la sfarsitul listei si returneaza ordine de preferinta sau -1 daca furnizorul exista deja |
adaugare | insertProviderAt(Provider provider , int position) | insereaza in lista la pozitia "position", aluneca in jos restul listei si returneaza ordinea de preferinta |
stergere | static void removeProvider(String name) | dupa stergerea furnizorului componentele listei sunt alunecate in fata cu o pozitie |
- proprietati de securitate
- static String getProperty(String key)
- static String setProperty(String key , String datum)
- clase motor
- MessageDigest
- calcularea unei valori de hash
- crearea unui obiect MessageDigest
- static MessageDigest getInstance(String algorithm)
- static MessageDigest getInstance(String algorithm , String provider)
- static MessageDigest getInstance(String algorithm , Provider provider)
- incarcarea mesajului in obiectul creat
- void update(byte input)
- void update(byte[] input)
- void update(byte[] input , int offset , int len)
- calcularea valorii de hash
- byte[] digest()
- byte[] digest(byte[] input)
- byte[] digest(byte[] input , int offset , int len)
- Signature
- semnarea si verificarea digitala
un obiect Signature este modal (este intotdeauna intr-o stare data si poate face o singura operatie)
starile unui obiect Signature
- UNINITIALIZED - starea imediat la crearea obiectului
- SIGN - obiect pentru semnare
- VERIFY - obiect pentru verificare verificare
- crearea unui obiect Signature
- static Signature getInstance(String algorithm)
- static Signature getInstance(String algorithm , String provider)
- static Signature getInstance(String algorithm , Provider provider)
-
initializarea unui obiect Signature
- final void initSign(PrivateKey privateKey) - obiectul este pus in starea SIGN
- final void initVerify(PublicKey publicKey) - obiectul este pus in starea VERIFY
- final void initVerify(Certificate certificate) - obiectul este pus in starea VERIFY
acelasi obiect poate fi folosit si la semnare si la verificare
- semnarea
incarcarea cu date
- final void update(byte b)
- final void update(byte[] data)
- final void update(byte[] data , int off , int len)
generarea semnaturii
- final byte[] sign()
- final int sign(byte[] outbuf , int offset , int len)
- verificarea
incarcarea cu date
- final void update(byte b)
- final void update(byte[] data)
- final void update(byte[] data , int off , int len)
dupa apel obiectul ajunge in starea SIGN
generarea semnaturii
- final boolean verify(byte[] signature)
- final boolean verify(byte[] signature , int offset , int length)
dupa apel obiectul ajunge in starea VERIFY
- KeyPairGenerator
- generarea unei perechi de chei publica/privata
- crearea unui obiect KeyPairGenerator
- static KeyPairGenerator getInstance(String algorithm)
- static KeyPairGenerator getInstance(String algorithm , String provider)
- static KeyPairGenerator getInstance(String algorithm , Provider provider)
- initializarea unui obiect KeyPairGenerator
- independent de algoritm
- void initialize(int keysize , SecureRandom random)
- void initialize(int keysize)
este la latitudinea furnizorului ceea ce se intampla cu parametrii specifici algoritmului
- specific unui algoritm
- void initialize (AlgorithmParameterSpec params , SecureRandom random)
- void initialize (AlgorithmParameterSpec params)
- generarea unei perechi de chei
KeyPair generateKeyPair()
- KeyFactory
- conversia intre tipul criptografic Key si specificatiile de cheie care sunt reprezentari transparente ale informatiile de cheie
un asemenea obiect poate fi utilizat la conversia intre specificatii compatibile de chei
- crearea unui obiect KeyFactory
- static KeyFactory getInstance(String algorithm)
- static KeyFactory getInstance(String algorithm , String provider)
- static KeyFactory getInstance(String algorithm , Provider provider)
- conversia de la o specificatie de cheie la un obiect cheie
- PublicKey generatePublic(KeySpec keySpec)
- PrivateKey generatePrivate(KeySpec keySpec)
- conversia de la un obiect cheie la o specificatie de cheie
- KeySpec getKeySpec(Key key , Class keySpec)
- CertificateFactory
- crearea obiectelor certificate cu cheie publica si a listelor de revocare certificate (CRL) dintr-o codificarea adecvata
un asemenea obiect pentru X.509 returneaza o instanta a java.security.cert.X509Certificate si un CRL care este instanta a java.security.cert.X509CRL
- crearea unui obiect CertificateFactory
- static CertificateFactory getInstance(String type)
- static CertificateFactory getInstance(String type , String provider)
- static CertificateFactory getInstance(String type , Provider provider)
- generarea obiectelor certificat
- final Certificate generateCertificates(InputStream inStream)
- final Collection generateCertificates(InputStream inStream)
- generarea obiectelor CRL
- final CRL generateCRL(InputStream inStream)
- final Collection generateCRL(InputStream inStream)
- generarea obiectelor CertPath
- final CertPath generateCertPath(InputStream inStream)
- final CertPath generateCertPath(InputStream inStream , String encoding)
- final CertPath generateCertPath(List certificates)
- final Iterator getCertPathEncodings()
- KeyStore
- generarea si gestionarea unei baze de date a cheilor si stocarea certificatelor; cheile private au asociat un lant de certificare ceea ce autentifica cheile publice
aceasta clasa reprezinta o stocare in memorie a colectiilor de chei si certificate
- cheie
este secreta sau privata, stocata in format protejat
- certificat de incredere
certificat cu cheie publica
- crearea unui obiect KeyStore
- static KeyStore getInstance(String type)
- static KeyStore getInstance(String type , String provider)
- static KeyStore getInstance(String type , Provider provider)
- incarcarea in memorie a unui obiect KeyStore
pentru a putea fi utilizat o instanta a acestei clase trebuie incarcata in memorie
final void load( InputStream , char[] password)
parola este optionala si daca este furnizata se va face o verificare de integritate
- obtinerea unei liste a alias-uri dintr-un obiect KeyStore
final Enumeration aliases()
- determinarea tipurilor intrarilor stocat intr-un obiect KeyStore
- final boolean isKeyEntry( String alias)
- final boolean isCertificateEntry( String alias)
- adaugarea/modificarea si stergerea intrarilor dintr-un obiect KeyStore
- adaugare/modificare
- certificate
final void setCertificateEntry( String alias , Certificate entry)
- chei
- final void setKeyEntry( String alias , Key key , char[] password , Certificate[] chain)
- final void setKeyEntry( String alias , byte[] key , Certificate[] chain)
array-ul de octeti este in format protejat
- stergere
final void deleteEntry(String alias)
- obtinerea intrarilor stocate intr-un obiect KeyStore
- certificate
- final Certificate getCertificate(String alias)
- final Certificate[] getCertificate(String alias)
- final String getCertificateAlias(Certificate cert)
- chei
final Key getKey(String alias , char[] password)
- salvarea unui obiect KeyStore
final void store(OutputStream stream , char[] password)
- AlgorithmParameters
- gestionarea parametrilor unui algoritm
reprezentarea nu este trasnparenta, neobtinandu-se accesul direct la parametri ci numai numele algoritmului asociat multimiii parametrilor si o codificare a acestora
- crearea unui obiect AlgorithmParameters
- static AlgorithmParameters getInstance( String algorithm)
- static AlgorithmParameters getInstance( String algorithm , String provider)
- static AlgorithmParameters getInstance( String algorithm , Provider provider)
- initializarea unui obiect AlgorithmParameters
- void init(AlgorithmParameterSpec paramSpec)
- void init(byte[] params)
- void init(byte[] params , String format)
params este un array de octeti codificati, format este numele decodificarii (daca lipseste se utilizeaza formatul de decodificare primar care este ASN.1)
obiectul se initializeaza o singura data, nefiind reutilizabil
- obtinerea codificarii parametrilor
- codificarea in forma primara
byte[] getEncoded()
- cu specificarea codificarii
byte[] getEncoded( String format)
furnizorul implicit de servicii criptografice ignora formatul codificarii
- obtinerea parametrilor in mod transparent
AlgorithmParameterSpec getParameterSPec(Class paramSpec)
- AlgorithmParameterGenerator
- generarea unei multimi de parametri pentru un algoritm specificat
- crearea unui obiect AlgorithmParameterGenerator
- static AlgorithmParameterGenerator getInstance( String algorithm)
- static AlgorithmParameterGenerator getInstance( String algorithm , String provider)
- static AlgorithmParameterGenerator getInstance( String Provider , String provider)
- initializarea unui obiect AlgorithmParameterGenerator
- generarea parametrilor
o data creat si initializat obiectul poate genera parametrii
AlgorithmParameters generateParameters()
- SecureRandom
- generarea de numere pseudoaleatoare
- crearea unui obiect SecureRandom
- static SecureRandom getInstance( String algorithm)
- static SecureRandom getInstance( String algorithm , String provider)
- static SecureRandom getInstance( String algorithm , Provider provider)
- initializarea cheii de generare
- synchronized public void setSeed( byte[] seed)
- public void setSeed( long seed)
apelurile repetate conduc la o cheie de generare obtinuta din vechea cheie la care se adauga noua cheie
- uzul unui obiect SecureRandom
synchronized public void nextBytes( byte[] bytes)
- generarea de chei de generare
byte[] generateSeed ( int numBytes)
- CertPathBuilder
- construirea de cai de certificare
- instantierea clasei CertPathBuilder
- static CertPathBuilder getInstance( String algorithm)
- static CertPathBuilder getInstance( String algorithm , String provider)
- static CertPathBuilder getInstance( String algorithm , Provider provider)
- construirea unei cai de certificare
CertPathBuilderResult build (CertPathParameters params)
- interogari
- furnizor
Provider getProvider()
- algoritm
String getAlgoithm()
- tip
static String getDefaultType()
returneaza tipul asa cum este specificat in fisierul de configurare de securitate sau "PKIX" altfel
- CertPathValidator
- validarea lanturilor (cailor) de certificate
- creare obiect CertPathValidator
- static CertPathValidator getInstance( String algorithm)
- static CertPathValidator getInstance( String algorithm , String provider)
- static CertPathValidator getInstance( String algorithm , Provider provider)
- validarea unei cai de certificare
CertPathValidatorResult validate( CertPath certPath , CertPathParameters params)
- interogari
- String getAlgorithm()
- static String getDefaultType()
- Provider getProvider()
- CertStore
- obtinerea de certificate, care nu sunt de incredere, si CRL-uri (ex: CertStore implementat ca o implementare LDAP); utilizeaza o arhitectura specifica furnizorului de servicii criptografice;
- crearea unui obiect
- obtinerea unui certificat
- obtinerea ueni CRL
- interogari
- clase si interfete care implementeaza sau extind interfata Key (specificare opaca)
-
o reprezentare opaca a unei chei se face fara a avea acces la informatia de cheie
o reprezentare transparenta a unei chei permite accesul la informatia de cheie
interfata Key este radacina ierarhiei pentru specificarea opaca a cheilor, definind functionalitatile necesare
caracteristici
- algoritmul cheii
String getAlgorithm()
- forma codificata
care se foloseste atunci cand este nevoie de reprezentarea standard (ex: X.509, PKCS#8) a cheii in afara JVM
byte[] getEncoded()
- formatul
String getFormat()
mod de lucru
- obtinerea cheilor din
- generatoare de chei
- certificate
- specificatori de chei (prin KeyFactory)
- implementari ale KeyStore
- parsingul cheilor codificate, KeyFactory
- parsingul certificatelor, CertificateFactory
interfete care extind interfata Key (definita in pachetul java.security.interfaces)
- DHPrivateKey
- DHPublicKey
- DSAPrivateKey
- DSAPublicKey
- PBEKey
- PrivateKey
- PublicKey
- RSAMultiPrimePrivateCrtKey
- RSAPrivateCrtKey
- RSAPrivateKey
- RSAPublicKey
- SecretKey
- clase si interfete pentru specificarea parametrilor algoritmilor
-
- interfata AlgorithmParameterSpec
nu contine metode sau constante si are rolul de a grupa specificarile parametrilor
- clasa DSAParameterSpec
este o implementare a interfetei AlgorithmParameterSpec ce specifica multimea parametrilor utilizati de algoritmul DSA
- clase si interfete pentru specificarea cheii (specificare tansparenta)
-
- interfete
interfata KeySpec nu contine metode sau constante si are rolul de a grupa specificarile parametrilor
- clase
- DSAPrivateKeySpec
- DSAPublicKeySpec
- RSAPrivateKeySpec
- RSAPrivateCrtKeySpec
- RSAMultiPrimePrivateCrtKeySpec
- RSAPublicKeySpec
- EncodedKeySpec
# posted by Sorin Badescu @ 3:05 PM