Creeaza.com - informatii profesionale despre


Cunostinta va deschide lumea intelepciunii - Referate profesionale unice
Acasa » scoala » informatica » java
Semnatura digitala Java-XML

Semnatura digitala Java-XML


DESCRIEREA APLICATIEI

Organizarea aplicatiei

Semnatura digitala Java-XML

Extensible Markup Language (XML) - Limbaj extensibil de marcare - este momentan o parte integrala a tehnologiei web de aplicatii pentru afaceri. Aceste aplicatii necesita o structura sigura pentru a indeplinii conditiile de securitate, confidentialitate, punctul de autentificare, integritatea mesajului. Semnatura XML, criptarea XML, XML Key Management Specification (XKMS), SAML Securitz Assertion Markup Language si XML Access Control Markup Language (XAXML) sunt standardele XML care definesc vocabularul XML si proceseaza regulile pentru a indeplini cerintele securitatii.

Vom prezenta urmatoarele:

introducerea in semnatura digitala XML si in Java XML semnatura digitala APIs (Advanced Programing Interface)



informatii despre cum putem sa acceleram Java XML digital signature, performanta utilizand criptografia acceleratoarelor hardware cu concentrare asupra  UltraSPARC T1 procesor criptografic pentru accelerare.

Public Key Crzprography ( keie publica de criptare)

Propunerea unei semnaturi digitale se refera la o entitate legata de identitate ei la o bucatica de informatie. Semnaturile digitale utilizeaza PKC, un algoritm care utilizeaza 2 chei matematice diferite: una pentru crearea semnaturii digitale si cealalta pentru verificarea semnaturii digitale.

Nu la fel ca cheile simetrice conventionale de criptare, care utilizeaza aceiasi cheie secreta pentru criptare si decriptare, PKC utilizeaza o pereche de chei, o cheie privata si una publica, pentru criptare si decriptare. (Figura. 1).


Figura 1.

Cheia publica este disponibila pentru toata lumea, dar cheia privata este protejata si niciodata vizibila. Fiecare pereche de chei dispune de o relatie matematica care leaga cele 2 chei una de cealalta si nu au nici o legatura cu alte chei.

O transformare criptografica efectuata cu o cheie poate fi rezolvata numai cu cealalta cheie. Calculabil nu este posibil sa deducem cheia privata din cheia publica si nici sa deducem cheia publica din cheia privata. Aceasta definire a PKC presupune urmatoarele:

confidentialitate. Un mesaj criptat cu o cheie publica poate fi decriptat cu cheia privata corespunzatoare

endpoint authentication. Destinatarul poate determina identitatea expeditorului

integritatea mesajului. Destinatarul poate usor sa identifice daca a intervenit ceva in timpul transmiterii mesajului

nonrepudiation. Expeditorul nu poate nega transmiterea mesajului sau a actiunilor comise

Protocolul de semnare digitala

PKC activeaza mesajele electronice cu un mecanism analogic pentru semnarea pe hartie, cunoscut ca digital signature (semnatura digitala). O semnatura digitala verifica autenticitatea documentului electronic si prevede securitate maxima cand se realizeaza semnarea documentului.

Cum se creaza o semnatura digitala (Figura. 2), expeditorul genereaza pentru inceput o mica si unic stampila pe document, chemata hash sau digest. Chiar si cea mai mica modificare a documentului original cauzeaza valoarea hash sa se modifice. Prin compararea hash-ului carea a fost receptionat cu acel hash care a fost calculat de documentul receptionat, destinatarul poate sa verifice daca documentul a fost afectat.


Figura. 2

Hash (amestecul) documentului semnat sau criptat cu cheia primara a expeditorului actioneaza ca o semnatura digitala pentru acest document si poate fi transmisa impreuna cu documentul destinatarului. Destinatarul poate sa verifice sau sa decripteze semnatura prin luarea hash (amsestecului) din mesaj si verificarea lui cu semnatura care acompaniaza mesajul si cheia publica a expeditorului(Figura. 3).


Figura. 3

Protocolul de semnare digitala ajuta la :

autenticitatea semnaturi; cand destinatarul verifica mesajul cu cheia publica a expeditorului, destinatarul stie ca expeditorul a semnat

semnatura nu poate fi contrafacuta; numai expeditorul stie cheia ei primara

semnatura nu este reusable; semnatura este o functie a documentului si nu poate fi transferata la oricare alt document

semnarea documentului este inalterabila; daca exista orice alterare a documentului, verificarea semnaturi fa fi eronata la destinatar deoarece valoarea de hash (amestecului) va fi recompusa si va fi diferita fata de valoarea originala a hash-lui (amestecului)

semnatura nu poate fi negata; expeditorul nu poate nega actiunile facute si destinatarul nu are nevoie de ajutorul expeditorului pentru a verifica semnatura lui

Semnatura digitala XML

Semnatura digitala XML va valida criptarea facuta de expeditor asupra datei care se semneaza si semnatura poate fi utilizata pentru a verifica autenticitatea si integritatea datei.


Semnatura XML poate fi aplicata oricarei surse XML cum ar fi XML, HTML, date in cod binar cum ar fi fisiere gif, date codate XML. Punctul forte al semnaturi digitale XML este abilitatea la semnare care specifica doar portiuni din documentul XML.

Cele 3 tipuri de semnatura XML:

Enveloped

Enveloping

Detached

Semnatura Enveloped (plic, invelitoare)

O semnatura plic este semnatura aplicata peste continutul XML care contine semnatura ca un element. Elementul Signature este exclus din calcul la valoarea semnaturi. Elementul semnat XML prezentat in fig de mai jos reprezinta fragmentul de resursa al semnaturi XML.(Figura. 4)


Figura.4

Semnatura Enveloping

O semnatura enveloping este semnatura aplicata asupra continutului gasit intre un obiect element a aceiasi semnaturi. Obiectul sau continutul lui este identificat ca un element de referinta Reference de catre Uniform Resource Identifier (URI) fragment de identificare sau o transformata. Elementul semnat XML este prezentat in figura de mai jos.(Figura. 5)


Figura. 5

Semnatura Detached (desprinsa, detasata)

O semnatura detasata(desprinsa) este semnatura aplicata asupra continutului exterior al elementului Signature si poate fi identificata de catre URI sau o transformata. Resursa de semnare XML poate fi prezentata in acelasi document ca un element Signature, sau poate fi exterior la un document XML.(Figura. 6)


Figura. 6

Generarea unei semnaturi digitale XML

In ordine pentru a genera o semnatura XML, asimilarea elementelor tinta ale canonicalizari identificate de referinta sunt compuse dupa cum urmeaza in figura urmatoare.(Figura. 7)


Figura. 7

Cream un fisier text cu numele de GenSig.java, in interiorul fisierului generam a key pair (pereche de chei) cu:

KeyPairGenerator The KeyPairGenerator class is used to generate pairs of public and private keys.

In continuare cream un obiect de semnare si il initializam cu cheia privata, dupa care updatam si senam data, datele care trebuie semnate au fost citite, generam semnarea pentru ele, salvare fisier, salvare cheie publica in fisier, daca avem o eroare aceasta este incrementata si o testam in interfata, returnam eroarea interfetei.

Validarea unei semnaturi XML

Validarea semnaturi XML se face in 2 pasi. Primul pas este de a verifica digerarea fiecarei referinte. Al doilea pas este cel de verificarea a operatiei de criptarea a semnaturi asupra elementului SignedInfo.

Asa cum este aratat in figura de mai jos, data identificata de elementul de referinta este canonicalizata si apoi digerata. In pasul 2 valoarea de digerare este comparata cu valoarea de digerare prezenta langa elementul de referinta (Reference). Acest lucru asigura ca elementele tinta nu sunt mesterite (falsificate)(Figura. 8).


Figura. 8

In pasi 3 si 4, valoarea de digest a canonicalizari SignedInfo este calculata. Biti rezultati sunt verificati impreuna cu semnatura peste elementul SignedInfo, exemplu in pasul 5, utilizand cheia primara a expeditorului. Daca ambele semnaturi asupra elementului SignedInfo si fiecare Reference de valoare de digest este corecta, atunci semnatura XML este valida.

Pachetul folosit package java.security.spec (Provides classes and interfaces for key specifications and algorithm parameter specifications.), crearea unui fisier VerSig.java. In interiorul programului importam o cheie publica encoded, cu FileInputStream incarcam Suepk-ul generat de GenSig.

X509EncodedKeySpec This class represents the ASN.1 encoding of a public key, encoded according to the ASN.1 type SubjectPublicKeyInfo

Incarcam sig generat de GenSig, cream un obiect de semnare si il initializam cu cheia publica, abdatam si verificam data, incarcam fisierul XML, citim fisierul, incarcam mesajul de verificare, incarcare mesajul exceptiilor si returnam mesajul catre interfata.

Interfata pentru generarea si verificarea semnaturi digitale XML

Am creat o interfata simpla in care am folosit trei butoane si doua campuri de text. Am instantiat un obiect din clasa GenSig si unul din clasa VerSig. In interiorul programului am apelat constructorul cu initializateComponent(), in continuare facem vizibila fereastra this.setVisible(true), initializam componentele (butoanele si campurile de text). Avem trei functii, de ascultarea a butonului de generarea a semnaturi ,de ascultare a butonului de validare a semnaturi , de ascultarea a butonului de incarcarea a fisierului XML. Incarcam fisierul XML cale=jTextField1.getText(); jTextField1.setEditable(false). Urmeaza functia de test care testeaza daca verificarea semnaturi s-a facut corect.

Interfata test semnatura digitala (Figura.9)

Figura. 9

Introducerea in semnarea digitala Java-XML APIs

Sun Microszstems a produs un standard de tehnologii APIs Java pentru semnare si verificare XML si documente binare. Java Community Process (JCP) programul defineste aceste APIs (program de aplicati interfete) cu am fi JSR 105. Sun inglobeaza aceste APIs cu Java Web Services Developer Pack (JWSDP), proiectul GlassFish si platforma Java SE v6.

Implementarea de referinta a semnaturi digitale XML de la compania Sun este un cadru tampon construit pe Java Cryptographic Arhitecture (JCA), cum este prezentat in figura de mai jos. Produce suport pentru implementatii de algoritmi de semnare digitala si transformate specificate de W3C XML sintaxa de semnare si procesare specificate.(Figura.10)

Figura. 10

Java XML Digital Signature APIs defineste urmatoarele pachete:

  • javax.xml.crypto
  • javax.xml.crypto.dsig
  • javax.xml.crypto.dsig.keyinfo
  • javax.xml.crypto.dsig.spec
  • javax.xml.crypto.dom
  • javax.xml.crypto.dsig.dom

Javax.xml.crypto pachetul contine clase comune care sunt folosite pentru a executa operatii de criptare XML, cum ar fi generarea si verificarea semnaturii XML.

Cele mai importante interfete din acest pachet sunt: KeySelector, URIDereferencer si Data.

Interfata KeySelector lasa utilizatorii sa localizeze si optonal sa valideze chei folosindu-se de informatia continuta intr-un obiect KeyInfo.

Interfata URIDereferencer ne lasa sa cream si sa specificam propriul nostru URIDereferencer de implementare. Avem optiunea sa prevedem propria noastra implementare de KeySelector si URIDereferencer.

Interfata Data reprezinta forme variate de date alese pentru semnare, clasele ei: NodeSetData si OctetStreamData.

NodeSetData - reprezentarea abstracta a DataType

OctetStreamData - reprezinta data binara aleasa pentru semnare

Javax.xml.crypto.dsig pachetul contine interfete care contin elemente miez definite in W3C XML specificatii de semnatura digitala. Cele mai importante interfete din acest pachet sunt: XMLSignature, SignedInfo, CanonicalizationMethod, SignatureMethod, Reference si DigestMethod.

Clasa XMLSignatureFactory este procurata din javax.xml.crypto.dsig si poate fi utilizata pentru a crea si a aseza obiectele semnaturii.

Clasa XMLSignature reprezinta elementul Signature definit de standardul W3C.

Metodele de sign si validate din aceasta clasa pot fi folosite pentru a proteja si a valida data respectiva.

Clasa SignedInfo reprezinta elementul SignedInfo definit de standardul W3C.

SignedInfo contine CanonicalizationMethod, SignatureMethod si Reference.

CanonicalizationMethod este algoritmul aplicat lui SignedInfo si SignatureMethod reprezinta algoritmul folosit pentru a semna si valida operatiile.

Clasa SignedInfo poate sa aiba una sau mai multe referinte. Fiecare referinta identifica tinta care trebuie protejata si de asemenea ofera o lista cu algoritmi aplicati asupra tintei inainte de calcularea amestecului (digest).

Javax.xml.crypto.dsig.keyinfo contine interfete care reprezinta structura KeyInfo definita in W3XML digital signature. Utilizatori pot folosi KeyInfoFactory class provenita din javax.xml.crypto.dsig.keyinfo pentru a crea obiecte ale clasei KeyInfo.

Javax.xml.cypto.dsig.spec contine interfete si clase care reprezinta parametrii de inaintare pentru amestec (digest), semnatura, transformata, sau algoritmi de canonicalizare folositi in procesul de semnatura XML.

Javax.xml.crypto.dom si Javax.xml.crypto.dsig.dom contin clase specifice DOM (Document Object Model) pentru javax.xml.cypto si javax.xml.dsig pachete respective.

Numai dezvoltatorii si utilizatorii care creaza sau folosesc DOM-based XMLSignatureFactory sau KeyInfoFactory trebuie sa folosesca aceste pachete.

3.6. Accelerarea performantelor semnaturi digitale Java-XML

APIs de semnatura digitala Java-XML operatiile de sign si validate sunt expensive : pot sa ia mai mult de 30% din timpul de executie al CPU. PKCS#11, standardul de interfata token (jeton) defineste programarea interfetelor pentru criptarea jetoanelor, cum ar fi criptarea criptografica cum ar fi acceleratorii de criptarea hardware si smart cardurile.

PKCS#11 inbunatateste performanta si scaleaza prin acces transparent de accelerare criptografica hardwarw fara a modifica codul de aplicatie existent.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.