Wednesday, January 25, 2006

 

Ex: criptare fisier sau sir cu AES128, CBC, PKCS5Padding


import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;
public class AES {
private byte functiune;
private Cipher cifrul;
SecretKey cheia;
byte[] IVul;
public AES(byte ceFunctiune , byte[] pCheia , byte[] PIVul) throws Exception{
functiune =ceFunctiune;
switch(functiune) {
case 'C': initCriptare();
break;
case 'D': initDecriptare( pCheia , PIVul );
break;
default: throw new Exception("apel gresit constructor AES");
}
}

private void initCriptare(){
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
cheia = kgen.generateKey();
//SecretKeyFactory fabrica = SecretKeyFactory.getInstance("AES");
cifrul = Cipher.getInstance("AES/CBC/PKCS5Padding");
cifrul.init(Cipher.ENCRYPT_MODE, cheia);
IVul = cifrul.getIV();
} catch ( NoSuchAlgorithmException e) {
System.out.println( "exceptie algoritm AES" );
} catch ( NoSuchPaddingException e ) {
System.out.println( "exceptie aliniere AES" );
} catch( InvalidKeyException e) {
System.out.println( "exceptie cheie AES" );
}
}

private void initDecriptare( byte[] pCheia , byte[] PIVul){
try {
cheia = new SecretKeySpec(pCheia, "AES");
IVul = PIVul.clone();
cifrul = Cipher.getInstance("AES/CBC/PKCS5Padding");
cifrul.init(Cipher.DECRYPT_MODE, cheia , new IvParameterSpec(IVul) );
} catch ( NoSuchAlgorithmException e) {
System.out.println( "exceptie algoritm AES" );
} catch ( NoSuchPaddingException e ) {
System.out.println( "exceptie aliniere AES" );
} catch( InvalidKeyException e) {
System.out.println( "exceptie cheie AES" );
} catch( InvalidAlgorithmParameterException e) {
System.out.println( "exceptie vector initializare AES" );
}

}

public byte[] getSpecificatiaCheii() {
return cheia.getEncoded();
}

public byte[] getIV() {
return IVul.clone();
}

public static String asHex (byte buf[]) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}

public String actioneaza(byte pTip , String sursa , String destinatie) throws Exception {
String result = null;
switch(pTip) {
case 'F': switch(functiune) {
case 'C': try {
FileInputStream fin = new FileInputStream(sursa);
FileOutputStream fout = new FileOutputStream(destinatie);
encryptStream(fin, fout);
result = new String("criptat fisierul "+sursa+" in fisierul"+destinatie);
} catch (FileNotFoundException e) {
System.out.println("fisere negasite la criptare AES");
};
break;
case 'D': try {
FileInputStream fin = new FileInputStream(sursa);
FileOutputStream fout = new FileOutputStream(destinatie);
decryptStream(fin, fout);
result = new String("decriptat fisierul "+sursa+" in fisierul"+destinatie);
} catch (FileNotFoundException e) {
System.out.println("fisere negasite la decriptare AES");
};
break;
};
break;
case 'S': switch(functiune) {
case 'C': result = encryptString(sursa);
result = new String("criptat sirul "+sursa+" cu reprezentarea "+
asHex(sursa.getBytes())+" in sirul cu reprezentarea "+
asHex(result.getBytes()));
break;
case 'D': result = decryptString(sursa);
result = new String("decriptat sirul cu reprezentarea "+
asHex(sursa.getBytes())+" in sirul"+result+
"cu reprezentarea "+
asHex(result.getBytes()));
break;
}
break;
default: throw new Exception("apel gresit actioneaza AES");
}
return result;
}

// metoda criptare String
private String encryptString(String sursa) {
String result = null;
try {
// Encode the string into bytes using utf-8
byte[] utf8 = sursa.getBytes("UTF8");

// Encrypt
byte[] enc = cifrul.doFinal(utf8);

// Encode bytes to base64 to get a string
return new sun.misc.BASE64Encoder().encode(enc);
} catch (javax.crypto.BadPaddingException e) {
System.out.println("eroare aliniere la criptare sir AES");
} catch (IllegalBlockSizeException e) {
System.out.println("eroare dimenisune bloc la criptare sir AES");
} catch (UnsupportedEncodingException e) {
System.out.println("eroare codificare la criptare sir AES");
} catch (java.io.IOException e) {
System.out.println("eroare IO la criptare sir AES");
}
return result;
}

// metoda decriptare String
private String decryptString(String sursa) {
String result = null;
try {
byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(sursa);
byte[] utf8 = cifrul.doFinal(dec);
return new String(utf8, "UTF8");
} catch (javax.crypto.BadPaddingException e) {
System.out.println("eroare aliniere la decriptare sir AES");
} catch (IllegalBlockSizeException e) {
System.out.println("eroare dimenisune bloc la decriptare sir AES");
} catch (UnsupportedEncodingException e) {
System.out.println("eroare codificare la decriptare sir AES");
} catch (java.io.IOException e) {
System.out.println("eroare IO la decriptare sir AES");
}
return result;
}

// metoda criptare Stream
private void encryptStream(InputStream in, OutputStream out) {
byte[] buf = new byte[1024];
try {
out = new CipherOutputStream(out, cifrul);
int numRead = 0;
while ((numRead = in.read(buf)) >= 0) {
out.write(buf, 0, numRead);
}
out.close();
} catch (java.io.IOException e) {
}
}

// metoda decriptare Stream
private void decryptStream(InputStream in, OutputStream out) {
byte[] buf = new byte[1024];
try {
in = new CipherInputStream(in, cifrul);
int numRead = 0;
while ((numRead = in.read(buf)) >= 0) {
out.write(buf, 0, numRead);
}
out.close();
} catch (java.io.IOException e) {
}
}

}
public class TestAES{
public static void main(String[] args){
if (args.length == 2) {
try{
AES criptor = new AES((byte)'C', new String("").getBytes() , new String("").getBytes());
System.out.println("Cheia utilizata: "+AES.asHex(criptor.getSpecificatiaCheii()));
System.out.println("Vectorul de initializare: "+AES.asHex(criptor.getIV()));
System.out.println( criptor.actioneaza((byte)'F' , args[0] , args[1]) );
System.out.println( criptor.actioneaza((byte)'S' , args[0] , new String("")) );

byte[] spec = criptor.getSpecificatiaCheii();
byte[] iv = criptor.getIV();
AES decriptor = new AES((byte)'D', spec , iv);
String numeFisNou = new String(args[0]+"copie");
System.out.println( decriptor.actioneaza((byte)'F' , args[1] , numeFisNou) );
} catch(Exception e) {
System.out.println(e.toString());
}
} else {
System.out.println("apelul este de forma: TestAES fisierIntrare fisierIesire");
}
}
}

 

Ex: listarea serviciilor


Tuesday, January 24, 2006

 

Extensia de criptografie Java (JCE)


 

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

Friday, January 20, 2006

 

Tehnici de gestionare a cheilor

  • cadru de lucru
    • context
      Gestionarea cheilor are loc in contextul politicii de securitate care defineste in mod implicit/explicit amenintarile la care trebuie sa faca fata un sistem si de aici cerintele criptografice.
      Politica de securitate defineste
      • proceduri privitoare la aspectele tehnnice si administrative ale gestionarii cheilor
      • responsabilitatile partilor
      • tipurile de inregistrari care sa permita rapoarte ulterioare unui eveniment de securitate
    • obiectiv
      pastrarea in siguranta a informatiilor referitoare la chei ai sa fie contracarate amenintari cum ar fi:
      • compromiterea confidentialitatii cheilor secrete
      • compromiterea autenticitatii cheilor secrete sau publice
      • utilizarea neautorizata a cheilor publice sau secrete
    • modele de distributie a cheilor
      • problema distributiei cheilor
        intr-un sistem cu chei simetrice cu n utilizatori, daca fiecare pereche de utilizatori partajeaza o cheie secreta distincta, numarul de chei este n ( n - 1 ) / 2, ceea ce pentru n mare conduce la un numar de chei inacceptabil de mare si de aici necesitatea unui server central
      • mecanisme
        • punct la punct
          A si B partajeaza a priori o cheie secreta
        • cu terta parte
          A si B partajeaza fiecare o cheie secreta cu serverul
          • centru de distributie a cheilor (KDC)
            KDC distirbuie chei utilizatorilor care partajeaza secrete cu acesta
          • centru de translatie a cheilor (KTC)
            functioneaza ca un KDC dar cheia de sesiune este generata de una dintre parti
        cheile partajate sunt distribuite prin tehnici necriptografice si garanteaza autenticitatea partilor
    • functii ale tertului, T
      • clasificare dupa criteriul interactiunii in timp real
        • in-line
          T este un intermediar ce are rolulu de mijloc de comunicatie intre A si B
        • on-line
          T este implicat in fiecare sesiune, comunicand cu o parte sau cu ambele, dar A si B comunica direct intre ei
        • off-line
          T nu este implicat in protocol in timp real dar pregateste a priori informatii care sunt disponibile lui A si/sau B care sunt utilizate in protocol
      • clasificare pentru tert intr-un sistem de certificate cu cheie publica
        • autoritate de certificare (CA)
          responsabila pentru distributia cheilor publice carora le garanteaza autenticitatea
          in sistemele bazate pe certificate, cheile publice sunt legate de nume prin certificate semnate; autoritatea gestioneaza numerele certificatelor si revocarea acestora
        • server de nume
          gestioneaza spatiul de nume
        • autoritate de inregistrare
          autorizeaza entitatile, care sunt identificate prin nume unice, ca membri ai domeniului de securitate
        • generator de chei
          creeaza perechi de chei publice/private
          poate fi parte a entitatii, a CA sau un sistem de infcredere independent
        • director de certificate
          gestionar al unei baze de date cu certificate ce este gestionata de CA sau de catre entitati
      • functii primare
        • server de autentificare
          realizeaza distributia cheilor intre entitati, inclusiv autentificarea acestora
        • gestionar de chei
          realizeaza stocarea cheilor, informatiilor de auditare, aplicarea cerintelor de ciclu de viata a cheilor
      • alte functii
        • agent de marcare timp
          valideaza existenta unui document la un moment de timp sua lipirea unei date calendaristice la o tranzactie sau mesaj digital
        • notar
          verifica o semnatura digitala la un moment dat de timp sau mai general, atesta o depozitie data intr-o anumita jurisdictie la un moment dat de timp
    • comparatie intre tehnicile, cu cheie publica si cele cu cheie simetrica, de gestionare a cheilor
        avantaje ale tehnicilor cu cheie publica
      • gestionare simplificata a cheilor
      • nu este necesar un server de incredere on-line
      • functiuni suplimentare
  • tehnici pentru distribuirea cheilor private si a cheilor secrete
    • clasificarea cheilor dupa modul de utilizare
      • chei sablon
        chei neprotejate criptografic ce sunt distribuite manual sau instalate initial si sunt protejate prin proceduri de control si/sau izolare fizica
      • chei de criptare a cheilor
        sunt chei simterice sau publice ce sunt folosite in protocoalele de transport ale cheilor; pot fi protejate prin alte chei
      • chei de date
        sunt utilizate in operatiile criptografice asupra datelor utilizatorului; in general sunt chei simetrice
    • criptoperioada unei chei
      este intervalul de timp in care o cheie este valida pentru folosire de catre partile indreptatite
    • clasificarea cheilor dupa criteriul temporalitatii
      • chei pe termne lung
        cheile sablon, deseori cheile de criptare a cheilor, cheile utilizate pentru acordul asupra cheilor
      • chei pe termen scurt
        cheile ce sunt stabilitate prin transport sau acord si deseori cheile de date sau cheile de sesiune
      • in general comunicatia se face cu chei de termen scurt in timp ce stocarea se face utilizand chei de termen lung
    • KTC si certificate cu cheie simetrica
      • protocol translatie mesaj prin KTC
          • A interactioneaza cu KTC si cu B
          • A transfera un mesaj secret, M sau o cheie de sesiune B
          1. E este un algoritm de criptare simetrica
          2. setare initiala: A si T partajeaza cheia KAT, B si T partajeaza cheia KBT
          3. mesaje
            • A → T: A, EKAT(B, M)
            • A ← T: A, EKBT(B, M)
            • A → B: A, EKBT(B, M)
          4. actiuni
            1. A cripteaza M sub KAT si trimite lui T impreuna cu identificatorul propriu
            2. T decripteaza M, determina destinatarul, cripteaza M cu cheia destinataruluiu
            3. T trimite lui A mesajul pe care acesta il va trimite lui B; T poate trimite direct lui B
      • certificate cu cheie simetrica
        pot constitui un mijloc prin care KTC evita necesitatea unei baze de date sigure cu secretele utilizatorilor
        cheia fiecarui utilizator este ambalata intr-un certificat, EKT(KBT , B), criptat cu o cheie sablon simetrica, KT, cunoscuta doar lui T astfel ca stocarea sigura este necesaraa doar pentru aceasta cheie
  • tehnici pentru distribuirea cheilor publice
    • obtinerea cheilor publice
      • livrarea punct la punct pe un canal de incredere
        cheile sunt obtinute direct de la alti utilizatori
      • accesul direct la un fisier public de incredere
        cheile sunt obtinute dintr-o baza de date publica a carei integritate este de incredere; o metoda poate fi autentificarea fisierului public prin autententificarea arborescenta a cheilor publice
      • utilizarea unui server on-line de incredere
        ce asigura accesul la echivalentul unui fisier public ce contine cheile publice autentice; transmisiile cheilor sunt semnate
      • utilizarea unui server off-line si acertificatelor
        entitatea A contacteaza CA pentru a-si inregistra cheia publica si obtine semnatura de verificare; CA certifica cheia publica a lui A legand-o de un sir care-l identifica pe A; partile obtin cheile publice autentice prin schimbarea certificatelor sau direct dintr-un director public
      • utilizarea unor sisteme care garanteaza implicit autenticitatea parametrilor publici
        utilizarea unor algoritmi ce permit ca o modificare a parametrilor publici sa conduca la un insucces, detectabil si necompromitatoar, al tehnicilor criptografice
        aceste sisteme includ sistemele bazate pe identitate
    • certificate cu cheie publica
      • certificat cu cheie publica
        o structura de date ce compusa dintr-o parte de date si o parte de semnatura; partea de date contine text in clar, cel putin o cheie publica si un sir de identificare a entitatii. Partea de semnatura contine semnatura digitala, emisa de CA, asupra partii de date.
        sirul de identificare a entitatii trebuie sa fie un nume unic in sistem pe care CA il asociaza ueni entiati reale
        CA poseda propria pereche semnatura-cheie, ce poate fi facuta disponibila prin mijloace necriptografice
        • crearea certificateleor
          • tertul creeaza perechea de chei
            , include identitatea entitaii si cheia publica intr-un certificat; entitatea obtine cheia privata pe un canal sigur (autentic si privat)
          • entitatea isi creeaza prorpia pereche de chei
            si transfera cheia publica tertului pe un canal sigur
        • utilizarea si verificarea certificatelor
            entitatea B utilizeaza un certificat pentru a obtine cheia publica autentica a lui A
          1. (o singura data) obtine cheia publica autentica a CA
          2. obtine un sir care identifica in mod unic entitatea A
          3. obtine un certificat cu cheie publica care corespunde entiatii A si care este in acord cu sirul de identificare
            1. verifica perioada de validitate a certificatului folosind data si ora curente obtinute de la un ceas de incredere
            2. verifica validitatea cheii publice a CA
            3. verifica semnatura din certificatul lui A folosind cheia publica a CA
            4. verifica daca certificatul nu a fost revocat
          4. daca toate verificarile au succes accepta cheia publica din certificat ca fiind cheia autentica a lui A
        • certificate de atribute
          sunt similare certificatelor cu chei publice dar au rolul de a permite specificarea altor informatii decat cheile publice
    • sisteme bazate pe identitate
      • sistem criptografic bazat pe identitate
        Sistem asimetric in care informatia publica de identificare a unei entitati joaca rolul cheii publice si este utilizata de catre tert pentru a calcula cheia privata
      • autentificarea in sisteme bazate pe identitate
        Motivatia este de a crea un sistem criptografic care modeleaza un sistem de posta ideal in care numele unei persoane este suficient pentru a trimite mesaje care pot fi citite doar de catre destinatar si care sa permita verificarea unei semnaturi pe care numai aceea persoana o poate emite. In asemenea sisteme:
        • utilizatori nu schmiba chei
        • nu sunt necesare directoare publice
        • serviciile unui tert sunt necesare doar in faza initiala
    • chei publice certificate implicit
      • caracteristici
        • cheile publice ale entitatilor pot fi reconstruite din informatii publice, care astfel inlocuiesc certificate;e
        • informatia publica include
          • informatii publice asociate tertului
          • identitatea entitatii (nume, adresa, etc.)
          • informatii publice suplimentare despre entitate
        • integritatea unei chei publice reconstruite nu este verificabila direct dar o cheie publica poate fi reconstruita doar din informatiile autentice despre o entitate
  • tehnici pentru controlul utilizarii cheilor
    • separarea cheilor
        Informatia care s-ar putea asocia cheilor:
      • proprietarul cheii
      • perioada de validitate
      • identificatorul cheii (referinte noncriptografice)
      • utilizarea destinata
      • algoritmul
      • numele entitatilor asociate generarii cheii, inregistrarii si certificarii
      • suma de control a cheii
      Principiul separarii cheilor: cheile utilizate in scopuri diferite trebuie sa fie separate criptografic
    • tehnici pentru controlul utilizarii cheilor simetrice
      • marcaje de chei si variante de chei
        Marcajele de cheie asigura o metoda simpla pentru specificarea utilizarilor permise ale cheilor
        Marcajul de cheie este un vector de biti sau un camp structurat care acompaniaza cheia pe intreaga sa durata de viata, fiind criptat impreuna cu aceasta
          Tehnici de separare
        • derivarea unor chei variante dntr-o cheie de baza utilizand parametri si o functie care nu sunt secrete
        • compensarea cheii: o cheie de criptare K este modificata ca o functie de un contor care se incrementeaza la fiecare utilizare
      • notarizarea cheilor
        este un mecanism pentru distribuirea cheiolor autentificate
        este o tehnica destinata prtevenirii substitutiei cheii prin specificarea explicita a identitatilor entitatilor implicate
        o cheie este autentificata in functie de identitatile partilor, prin modificarea unei chei de criptareai ai recuperarea cheii protejate se poate face doar specificand corect identitatile; cheia este sigilata cu aceste identitati
        notarizarea simpla a cheii: un server de incredere (notar) sau una dintre parti cripteaza cheia de sesiune, S, utilizand cheia de criptare, K, EK ⊕ ( A || B); cheia de sesiune S este destinata uzului entitatilor A si B; entitatea care doreste sa recupereze S trebuie sa partajeze K si sa specifice A si B in ordinea corecta
      • vectori de control
        este o metoda pentru controlul utilizarii cheilor ce combina marcajele de cheie cu mecanismul de notarizare
        fiecarei chei S ii este asociat un vector de control C, un camp de date, ce defineste utilizarile autorizate ale cheii; criptarea este EK ⊕ C(S)
        decriptarea necesita specificarea corecta a vectorului de control C si cheii de criptare, K
  • gestionarea cheilor intre domenii
    • domeniu de securitate
      Un sistem care este sub controlul unei singure autoritati si in care entitatile din domeniu au incredere
      fiecare entitate
      • partajeaza un secret sau o parola - in cazul simetric
      • detine cheia publica autentica a CA- in cazul asimetric
      ceea ce permite comunicatia pe un canal sigur cu autoritatea sau cu o alta entitate
    • increderea intre doua domenii
      • entitatile A si B apartinand domeniilor DA si DB ce au autoritatile TA si TB doresc sa comunice; A si B fie
        • partajeaza o cheie simetrica
        • partajeaza chei publice de incredere
        ambele fiind posibile daca TA si TB au o relatie de incredere
        A si B delega pe TA si TB prin intermediul canalelor sigure (A , TA) , (TA , TB ) , ( B , TB ) in stabilirea relatiei de incredere ( A , B)
        daca TA si TB nu au o relatie de incredre directa, vor face apel la TC in care au ambiele incredere
      • metode
        • cheie simetrica de incredere
          • A cere lui TA sa obtina o cheie pe care sa o partajeze cu B
          • TA si TB stabilesc o cheie de termen scurt KAB
          • TA si TB distribuie KAB lui A si B
          • A comunica direct cu B utilizand KAB
        • cheie publica de incredere
          • A cere lui TA cheia publica a lui B
          • TA o obtine de la TB care garanteaza autenticitatea
          • TA transfera aceasta cheie lui A
          • A comunica direct cu B utilizand KAB
      • certificat incrucisat
        un certificat creat de CA1 prin care se certifica cheia publica a CA2
    • modele de incredere cu mai multe CA-uri
      Relatiile de incredere intre CA-uri, in sisteme cu cheie publica, pot fi organizate in mai multe moduri
      • lanturi de certificate si cai de certificare
        o entitate doreste sa obtina o cheie publica autentica, verificand un certicat emis de o alta CA decat CA in care are incredere
        calea de certificare este un drum in graful ce contine CA-urile, pentru care nodul initial este CA-ul in care entitatea are incredere si cel final este CA-ul care a emis certificatul pe care entitatea doreste sa-l verificae
        un lant de certificate este secventa de certificate emise de CA-urile dintr-o cale de certificare
      • domenii separate
        CA-urile trebuie sa aiba relatii de incredere pentru ca o entitate dintr-un domeniu sa poata comunica criptografic cu o entitate din alt domeniu; implicit CA-urile definesc separate de securitate care nu au relatii de incredere ai entitatile dintr-un domeniu nu pot verifica autenticitatea certificatelor emise in alt domeniu
        CA-ul este radacina unui arbore in care entitatile sunt frunze
      • model de incredere strict ierarhic
        CA-urile sunt nodurile neterminale ale unui arbore la care radacina este un CA si entiatile sunt frunze
        CA-ul parinte emite certificate pentru CA-urile copil
        pot fi organizate in paduri pentru care radacinile arborilor au relatii de incredere
      • certificate inverse si modelul de incredere bigraf
        topologia este aceeasi ca in modelul strict ierarhic dar un CA copil poate emite certificate pentru CA-ul parinte
        tipurile de certificate
        • certificat direct
          este certificatul emis de CA parinte pentru CA copil
        • certificat invers
          este certificatul emis de CA copil pentru CA parinte
    • distribuirea si revocarea certificatelor
      • distribuirea certificatelor
        • modelul extragere
          este cel implementat print-un director de certificate, entitatile extragand certificatul de care au nevoie
        • modelul promovare
          toate certificatele sunt trnsmise periodic tututror entitatilor
      • retragerea certificatelor
        • expirarea datei din certificat
        • notificare manuala
          entitatile sunt informate pe un canal out-of-band asupra cheilor revocate
        • fisier public cu chei revocate
          ce contine cheile revocate si care trebuie consultat de catre entiati inainte de a folosi o cheie
        • liste de revocare a certificatelor (CRL)
        • certificate de revocare

        • certificate cu cheie publica ce contin un flag si un timp de revocare si care se folosesc pentru anularea certificatului corespondent

Tuesday, January 10, 2006

 

Protocoale de distribuire a cheilor

  • cadrul de lucru
    • protocol
      un algoritm ce specifica pasii prin care doua sau mai multe entitati conclucreaza pentru atingerea unui obiectiv
    • distribuirea cheilor
      un protocol prin care un secret partajat devine disponibil partilor spre uz criptografic viitor
        multe dintre protocoalele de distribuire a cheilor implica existenta unei entitati centrale sau a unei entitati de incredere. Aceasta entitate se poate intalni sub diferite denumiri
      • trusted third party
      • trusted server
      • authentication server
      • key distribution center (KDC)
      • key translation center (KTC)
      • certification authority (CA)
    • transportul cheilor
      un protocol prin care partile creeaza sau obtin un secret pe care il transfera intr-un mod sigur intre ele
    • acordul asupra cheilor
      un protocol prin care partile deduc un secret partajat in baza informatiilor asociate fiecarei parti ai nici una dintre parti nu poate prezice rezultatul
    • schema de predistribuire a cheilor
      un caz particular de distribuire a cheilor in care cheile sunt determinate a priori din informatia asociata partilor
    • distribuirea dinamica a cheilor
      un caz particular de distribuire a cheilor in care cheile variaza de la o sesiune la alta
    • autentificarea cheii
      o entitate se asigura ca nici o alta entitate in afara entitatii/entitatilor identificate nu are acces la o anumita cheie secreta
    • confirmarea cheii
      o entitate se asigura ca o alta entitate (posibil neidentificata) este in posesia unei anumite chei secrete
    • autentificarea explicita a cheii
      sunt simultan valabile autentificarea cheii si confirmarea cheii
    • distribuirea cheii autentificate
      un protocol care asigura autentificarea cheii
    • distribuirea cheilor bazata pe identitate
      un protocol de distribuire a cheilor in care informatia de identificare a entitatii se foloseste drept cheie publica
    • distribuirea independenta de mesaj a cheilor
      un protocol de distribuire a cheilor in care sunt implicate doar doua entitati si in care mesajele schimbate intre acestea nu depind de informatia de sesiune
    • caracteristici ale protocoalelor de distribuire a cheilor
      1. natura autentificarii
        o combinatie a urmatoarelor
        • autentificarea entitatii
        • autentificarea cheii
        • confirmarea cheii
      2. reciprocitatea autentificarii
        fiecare dintre autentificarile de mai sus pot fi unilaterale sau mutuale
      3. prospetimea cheii
        din punctul de vedere al unei entitati o cheie proaspata este o cheie ce nu a mai fost utilizata
      4. controlul cheii
        • o entitate alege o cheie
        • cheia este derivata din informatioa asociata partilor si nici o parte nu poate o poate prevedea
      5. eficienta
        1. numarul de mesaje schimbate intre parti
        2. latimea de banda necesara
        3. complexitatea calculelor
        4. posibilitatea de a face calcule off-line
      6. cerinte privitoare la o terta parte
        1. existenta, on-line sau off-line sau inexistenta unei terte parti
        2. gradul de incredere cerut unei terte parti
      7. tipul de certificat utilizat daca este cazul
        maniera de distributie a informatiei initiale
      8. nonrepudierea
        un protocol trebuie sa asigure o confirmare a primirii cheii
    • atac pasiv
      atacul realizat de catre un adversar care inregistreaza traficul si apoi incearca analiza
    • atac activ
      atacul realizat de catre un adversar ce modifica sau injecteaza mesaje
    • confidentialitate perfecta inainte
      se spune despre un protocol ca are aceasta proprietate daca compromiterea cheilor de lunga durata nu duce la compromiterea cheilor din sesiunile din trecut
    • vulnerabil la atac cu cheie cunoscuta
      se spune despre un protocol ca are aceasta proprietate daca compromiterea cheilor de sesiune din trecut permite unui adversar activ sa compromita cheile de sesiune din viitor sau impersonalizarea in viitor realizata de catre un adversar activ
  • distribuire prin criptare si tehnici simetrice
    • transportul cheilor prin criptare simetrica
      • derivarea si transportul cheilor in lipsa unui server
        • actualizarea punct-la-punct a cheii prin criptare simetrica
        • actualizarea punct-la-punct a cheii prin prin derivarea cheii si functii neinversabile
        • transportul cheii fara chei partajate initiale
      • Kerberos si protocoale cu server
        • protocolul de autentificare Kerberos
          • sunt implicate trei entitati: A(client), B(server si verificator) si T(server de autentificare Kerberos)
            initial A si B nu partajeaza nici un secret in timp ce T partajeaza cate un secret cu fiecare
            scopul lui B este acela de a verifica identitatea lui A si ca efect colateral, stabilirea unei chei partajate
            optional A si B se autentifica reciproc si stabilesc o cheie secreta care nu este cunoscuta de T
            A cere lui T referinte care sa-i permita sa se autentifice fata de B
            T returneaza lui A o cheie de sesiune criptata pentru A si un tichet criptat pentru B
            A transmite lui B tichetul si identitatea lui A
            A se autentifica fata de B print-un mesaj, ce contine un marcaj de timp, criptat cu cheia de sesiune
              • E este un algoritm de criptare simetrica
              • NA este o informatie aleasa de A; TA este un marcaj de timp dedus din ceasul local al lui A
              • L este durata de validitate
            1. A si T partajeaza cheia KAT iar B si T partajeaza cheia KBT; tichetB = EKBT(k, A, L); autentificator = Ek(A, TA, Asubcheie)
              • mesaje
              • A → T: A, B, NA
              • A ← T: tichetB, EKAT(k, NA, L, B)
              • A → B: tichetB, autentificator
              • A ← B: Ek(TA, Bsubcheie)
              1. actiunile
              2. A genereaza informatia NA si trimite lui T mesajul
              3. T genereaza o cheie de sesiuen k, defineste o perioada de validitate, L, a tichetului (timp de expirare, optional timp de incepere); cripteaza cheia, informatia primita de la A, durata de validitate si identitatea lui B utilizand cheia lui A; T creeaza un tichet criptat cu cheia lui B ce contine cheia,k, identitatea lui A si durata de validitate; ambele sunt transmise lui A
              4. A decripteaza partea de mesaj ce-i este adresata si recupreaza cheia, k, informatia transmisa initial, NA, durata de validitate, L si identitatea lui B; A verifica ca identitatea lui B si informatia, NA sunt cele transmisie initila lui T si salveaza L; T cripteaza propria identitate, un marcaj de timp si optional un secret, Asubcheie utilizand cheia de sesiune si transmite lui B
              5. B decripteaza tichetul utilizand cheia, KBT si recupreaza cheia de sesiuen, k pe care o foloseste pentru decriptarea autentificatorului si verifica
                1. ca identitatea lui A din tichet si din autentificator corespunf
                2. daca marcajul de timp din autentificator este valid
                3. daca timpul local propriu este in intervalul specificat prin L
              6. (optional autentificare mutuala) B cripteaza marcajul de timp al lui A si o subcheie (care sa permita o negociere ulterioara a unei subcehi de sesiune) cu cheia de sesiune, k, si trimite lui A
              7. A decripteza si recupereaza subcheia lui B, daca marcajul de timp corespunde
        • protocolul cu chei partajate Needham-Schroeder
        • protocolul Otway-Rees
    • acordul asupra cheilor prin tehnici simetrice
      • sistem de distribuire chei (KDS - key distribution system) este o metoda prin care, in timpul unei perioade de initializare, un server de incredere genereaza si distribuie date secrete utilizatorilor ai orice pereche de utilizatori poate sa calculeze o cheie partajata, necunoscuta altor utilizatori, exceptie facand serverul
        pentru o pereche de chei fixate, KDS este o scheme de predistributie
      • KDS j-sigur pentru o pereche de utilizatori, orice coalitie de j sau mai putin utilizatori ce partajeaza datele proprii nu pot calcula cheia partajata de perechea initiala mai bine decat simpla ghicire
      • limita Blom pentru KDS intr-un KDS j-sigur ce asigura perechi de chei pe m biti, datele secrete stocate de catre fiecare utilizator trebuie sa aiba cel putin m(j+1) biti
      • sistemul simetric Blom de predistribuire a cheii
  • distribuire prin criptare si tehnici asimetrice
    • transportul cheilor prin criptare cu cheie publica
      • protocoale fara semnaturi
        • Needham-Schroeder cu cheie publica
      • protocoale cu semnaturi
        • criptarea cheilor semnate
        • criptare si semnare separat
        • semnarea cheilor criptate
        • protocoale de autentificare X.509
          • este in categoria protocoalelor cu semneaza cheile criptate; recomandarea defineste protocoale de autentificare "strong two-way" si "strong three-way" (cu doua si trei treceri) cu autentificarea mutuala a entitatilor si transportul optional al cheilor, cu marcaje de timp si intrebare-raspuns ai sa raspunda urmatoarelor cerinte:
            • inf. criptografice primite de entitatea B au fost construite de catre entitatea A, care nu le poate altera ulterior
            • inf. criptografice primite de entitatea B sunt destinate lui B
            • inf. criptografice primite de entitatea B sunt proaspete
            • secretul mutual al cheilor transferate
          • protocol cu doua treceri
              A trimite lui B un mesaj si B raspunde cu un mesaj
              in caz de reusita, ambele entitati sunt mutual autentificate si se face transportul cheilor autentificate
            1. Notatie
              • PA(x) este rezultatul aplicarii cheii publice a lui A la datele x
              • SA(x) este rezultatul aplicarii cheii private de semnare a lui A la datele x
              • rA si rB sunt numere ce nu se refolosesc
              • certA este un certificat ce asociaza entitatea A la o cheie publica adecvata atat pentru criptare cat si pentru verificarea semnaturii
            2. initializarea sistemului
              1. fiecare entitate are propria pereche de chei pentru criptare si semnare
              2. entitatea A trebuie sa obtina si sa autentifice cheia publica de criptare a lui B
            3. mesajele protocolului
              fie DA = (tA, rA, B, date1, PB(k1)) si DB = (tb, rB, A, rA, date2, PA(k2))
              • A → B: certA, DA, SA(DA)
              • A ← B: certB, DB, SB(DB)
            4. actiunile
              1. A obtine marcajul de timp tA care indica timpul de expirare, genereaza rA si optional cheia simetrica k1; date1 sunt date optionale pentru care se doreste autentificarea originii
              2. B verifica autenticitatea lui certA, extrage cheia publica de semnare a lui A si verifica semnatura lui A pe blocul DA; B verifica ca el este destinatarul mesajului, ca marcajul de timp este valid si ca rA nu a fost inlocuit (rA contime o secventa pe care B o compara cu o informatie de stare locala in ceea ce priveste unicitatea pentru intervalul de validitate definit prin tA)
              3. daca verificarile au succes B dautentifica pe A, decripteaza k1 utilizand propria cheie privata si o salveaza; A este autentificat
                daca se doreste autentificare mutuala, B obtine tB, genereaza rB si trimite lui A un mesaj similar
              4. A parcurge aceeasi secventa de actiuni; A si B sunt mutual autentificate; A si B partajeaza sceretele mutual k1 si k2
            5. se foloseste aceeasi pereche de chei pentru semnare si criptare; deoarece nu se folosesc identificatori, DA = DA (... PB(...) ...) nu exista garantia ca entitatatea care semneaza, SA(DA) este sursa
          • protocol cu trei treceri
              A si B schimba 3 mesaje; protocolul difera de cel anterior dupa cum urmeaza:
            1. marcajele de timp tA si tB sunt setate la zero si nu se verifica
            2. A verifica ca rA este acelasi ca in primul mesaj
            3. A trimite un al treilea mesaj catre B
              A → B: (rB, B), SA(rB, B)
            4. B verifica semnatura cu mesajul in clar, corectitudinea identitatii B si ca rB este acelasi cu cel initial
      • protocoale hibride
          aceste protocoale aplica o criptare simetrica peste criptarea cu cheie publica si peste semnatura
        • protocolul Beller-Yacobi
          asigura autentificarea mutuala a entitatilor si autentificarea explicita a cheii
          a fost prioectat pentru aplicatiile in care exista un dezchilibru intre puterile de calcul ale celor doua parti pentru a minimiza cerintele de putere de calcul ale partii mai slabe; identitatea partii mai slabe ramane ascunsa adversarului
          fie A entitatea mai slaba si B entitatea mai puternica; A se autentifica lui B prim semnarea unei intraberi in timp ce B se autentifica lui A demonstrand cunoasterea unei chei pe care numai B insusi o poate recupera
    • acordul asupra cheilor prin tehnici asimetrice
      • Diffie-Helllman si protocoale inrudite
        • acordul Diffie-Hellman asupra cheilor
          a fost prima solutie practica la problema distributiei cheilor care a permis celor doua parti sa partajeze un secret fara a cunoaste a priori o alta informatie, pe un canal deschis
            A si B trimit cate un mesaj peste un canal deschis, la final A si B partajeaza secretul K
          1. pas premergator, o singura data
            se selecteaza un numar prim p si un generator α al lui Zp* si se publica
          2. mesaje
            • A → B: αx mod p
            • A ← B: αy mod p
          3. actiuni
            1. A selecteaza aleator un secret x, 1 ≦ x ≦ p-2 si trimite lui B
            2. B selecteaza aleator un secret x, 1 ≦ x ≦ p-2 si trimite lui A
            3. B calculeaza K = (αx)y mod p
            4. A calculeaza K = (αy)x mod p
        • acordul ElGamal intr-o singura trecere
        • protocoale MTI cu doua treceri
        • protocolul STS (Station-to-Station)
      • Chei publice certificate implicit
        • Gunther
        • Girault
      • Protocoale Diffie-Hellman cu chei certificate implicit

Friday, January 06, 2006

 

Algoritmi semnatura digitala

    majoritatea schemelor cu recuperarea mesajului sunt aplicate mesajelor de lungime fixa, in timp ce schemele cu anexa se aplica mesajelor de lungimi variabile
  • scheme cu anexa
      algoritmul de verificare primeste ca intrare mesajul
    • algoritmi generali
      • generarea cheii
          fiecare entitate creeaza o cheie privata pentru semnarea mesajelor si o cheie publica pentru verificare
        1. o entitatea A selecteaza o cheie privata ce defineste o multime a transformarilor de semnare SA = {SA,k/ k ∈ I} unde fiecare SA,k este o functie injectiva de la Ps la S
        2. SA defineste o transformare de verificare VA :Psx S → {adevarat, fals} ai
          adevaratdaca SA,k(p) = s*
          VA(p, s*) =
          falsaltfel
          pPh, s*S, p = h(p) cu p ∈ P
          VA poate fi calculata fara a cunoaste semnatura privata a emitentului
        3. cheia publica a lui A este VA si cheia privata este multimea SA
      • semnarea/verificarea
          o entitatea A produce o semnatura s ∈ S pentru un mesaj p ∈ P ce mai tarziu poate fi verificata de o alta entitate B
        1. semnarea
            entitatea A executa
          1. selecteaza un element k ∈ I
          2. calculeaza p = h(p) si s* = SA,k(p)
          3. semnatura lui A pentru p este s*; atat p cat si s* sunt puse la dispozitia entitatilor care doresc sa verifice semnatura
        2. verificarea
            entitatea B executa
          1. obtine cheia publica autentica, VA a lui A
          2. calculeaza p = h(p) si v = VA(p, s*)
          3. accepta semnatura daca si numai daca v = adevarat
    • ElGamal
    • DSA
      este o varianta a semnaturii ElGamal
      • generarea cheilor
        1. selecteaza un numar prim q ai 2159 < q < 2160
        2. alege t ai 0 ≦ t ≦ 8 si un numar prim p, 2511+64t < p < 2511+64t cu proprietatea q|(p-1)
        3. selecteaza un generator α al grupului ciclic de ord q din Zp*
          1. selecteaza un element g ∈ Zp* si calculeaza α = g(p-1)/q mod p
          2. daca α = 1 at reia de la pasul anterior
        4. selecteaza aleator un intreg a ai 1 ≦ a ≦ q-1
        5. calculeaza y = αa mod p
        6. cheia publica a lui A este (p, q, α, y) si cheia privata este a
      • semnarea/verificarea
        • semnarea
            entitatea A semneaza un mesaj, p, de lungime arbitrara
          1. selecteaza aleator un intreg k, 0 < k < q, k va ramane secret
          2. calculeaza r = (αk mod p) mod q
          3. calculeaza k-1 mod q
          4. calculeaza s = (k-1(h(p)+ar)) mod q
          5. semnatura lui A este (r, s)
          in standardul DSS functia h este SHA-1
        • verificarea
            entitatea B verifica semnatura lui A, (r, s) pentru mesajul p
          1. obtine cheia publica autentica a lui A, (p, q, α, y)
          2. verifica ca 0 < r < q si 0 < s < q, altfel respinge semnatura
          3. calculeaza w = s-1 mod q si h(p)
          4. calculeaza u1 = (wh(m)) mod q si u2 = (rw) mod q
          5. calculeaza v = ( (au1 yu2) ) mod q
          6. accepta semnatura daca v = r
    • PKCS#1
      aceasta schema nu utilizeaza caracteristica de recuperare a mesajului a schemei RSA si foloseste o functie de dispersie (MD-2 sau MD-5)
    • Schnorr
    • Feige-Fiat-Shamir
  • scheme cu recuperarea mesajului
      algoritmul de verificare nu necesita mesajul
    • algoritmi generali
      • generarea cheii
          fiecare entitate creeaza o cheie privata pentru semnarea mesajelor si o cheie publica pentru verificare
        1. o entitatea A selecteaza o cheie privata ce defineste o multime a transformarilor de semnare SA = {SA,k/ k ∈ I} unde fiecare SA,k este o functie injectiva de la Ps la S
        2. SA defineste o transformare de verificare VA :SPs ai ∀ pPs, ∀ k ∈ I, VA º SA,k = 1Ps
          VA poate fi calculata fara a cunoaste semnatura privata a emitentului
        3. cheia publica a lui A este VA si cheia privata este multimea SA
      • semnarea/verificarea
          o entitatea A produce o semnatura s ∈ S pentru un mesaj p ∈ P ce mai tarziu poate fi verificata de o alta entitate B; mesajul p este recuperat din s
        1. semnarea
            entitatea A executa
          1. selecteaza un element k ∈ I
          2. calculeaza p = r(p) si s* = SA,k(p)
          3. semnatura lui A este s*; s* este pus la dispozitia entitatilor care doresc sa verifice semnatura
        2. verificarea
            entitatea B executa
          1. obtine cheia publica autentica, VA a lui A
          2. calculeaza p = VA(s*)
          3. verifica ca pPr si in acest caz accepta semnatura
          4. recupereaza mesajul p din p calculand r-1(p)
        functia redundanta r si inversa sa sunt cunoscute public; selectia lui r este critica pentru securitatea sistemului
    • RSA
      atat spatiul de semnare Ps cat si spatiul semnaturilor S sunt reprezentate de Zn
      • generarea cheilor
          fiecare entitate creeaza o cheie publica RSA si o cheie privata corespondenta; o entitate A executa
        1. genereaza doua numere prime distincte, p si q, de acceasi marime
        2. calculeaza n = pq si φ = (p-1)(q-1)
        3. selecteaza aleator in intreg e, 1 < e < φ ai cmmdc(e, φ) = 1
        4. calculeaza intregul (Euclid extins) d, 1 < d < φ ai ed ≡ 1 mod φ
        5. cheia publica a lui A este (n, e) si cheia privata este d
      • semnarea/verificarea
          entitatea A semneaza un mesaj p ∈ P si oricare alta entitate B poate verifica smenatura lui A si recupera mesajul p din semnatura
        1. semnarea
            o entitate A executa
          1. calculeaza p = r(p) ca un intreg in intervalul [0, n-1]
          2. calculeaza s = pd mod n
          3. semnatura lui A pentru p este s
        2. verificarea
            o alta entitate B executa
          1. obtine cheia publica autentica a lui A, (n, e)
          2. calculeaza p = se mod n
          3. verifica ca p ∈ Pr si daca nu rejecteaza semnatura
          4. recupereaza mesajul p = r-1(p)
    • Rabin
    • Nyberg-Rueppel
DSS PKCS#1

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