Tuesday, January 24, 2006

 

Arhitectura de criptografie JAVA

  • 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
          functienume metodaobs.
          interogarestatic Provider[] getProvider()ordinea in vector este data de ordinea de preferinta a furnizorilor
          interogarestatic Provider getProvider(Stirng providerName)
          adaugarestatic int addProvider(Provider provider)adauga la sfarsitul listei si returneaza ordine de preferinta sau -1 daca furnizorul exista deja
          adaugareinsertProviderAt(Provider provider , int position)insereaza in lista la pozitia "position", aluneca in jos restul listei si returneaza ordinea de preferinta
          stergerestatic 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

Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?