Lucrare Prezentare Generala Privind Semnaturile Digitale

  • Nota 10.00
  • 0 comentarii
  • Publicat pe 07 August 2021

Descriere Lucrare

EXTRAS DIN DOCUMENT

    1.1. Problematica semnării digitale
    Înainte de a putea discuta despre semnătura digitală trebuie să explicăm noţiunea de semnătură şi rolul pe care aceasta îl are în cadrul relaţiilor inter-umane. De obicei, semnătura este o versiune stilizată a numelui unei persoane, scrisă pe documente şi acţionând ca o dovadă a identităţii persoanei respective, un fel de sigiliu personal, obţinut prin scrierea de mână. O semnătură are rolul de a fi o probă privind provenienţa unui anumit document şi privind intenţiile persoanei care a semnat realativ la respectivul document. 
    Însă o semnătură nu este suficientă, dacă cel care semneză nu poate să facă asocierea între caligrafia semnăturii şi identitatea persoanei care a semnat. Această asociere poate fi făcută direct (dacă cele doi se cunosc şi îşi pot recunoaşte scrisul unul altuia) sau indirect, prin utilizarea unei a treia persoane, de încredere (de obiecei un notar public), care prin semnătura sa confirmă legătura dintre o persoană şi semnătura acelei persoane.
    Odată cu dezvoltarea industriei calculatoarelor a început să se pună probleme găsirii unei metode de a putea asocia şi un document creat cu ajutorul unui editor de texte cu autorul său, fără a mai folosi suportul de hârtie.
    Mai mult, după apariţia Internetului şi a posibilităţii de a stabili relaţii de afaceri la mare distanţă, de cele mai multe ori fără a-l întâlni fizic pe cel cu care se realizează repectiva afacere, a condus şi mai mult la dorinţa de eliminare a suportului de hârtie la încheierea contractelor. A rămas însă aceeaşi necesitate de a putea stabili o relaţie între identitatea unei persoane şi intenţia sa privind un anume document în format electronic. Deci, problema a rămas aceeaşi, doar contextul în care ea se manifestă s-a schimbat.
    Cu alte cuvinte, semnătura digitală reprezintă mutarea unei vechi probleme, cea a ‚aplicării sigiliului’ în noua lume a calculatoarelor, a documentelor electronice şi a Internet-ului. Modalitatea de rezolvare este şi ea tot o traducere în format electronic a soluţiilor aplicate cu succes de-a lungul timpului.

    1.2. Problematica descrierii unitare a datelor
    Una din marile probleme ale transmiterii datelor între două sisteme informatice constă în modalitatea de prezentare a datelor respective. Deoarece lumea calculatoarelor este una eterogenă, trebuie ales formatul de prezentare care să conducă la aceeaşi interpretare a datelor indiferent de sistemul care face acea interpretare. 
    Mai mult chiar, un anumit şir de biţi, deci o informaţie, poate avea o semnificaţie diferită chiar pe acelaşi calculator; să nu uităm că un număr întreg poate fi scris pe 1, 2, 4 sau 8 octecţi.
    Aproape singurul mod de reprezentare a informaţiei care este interpretat în acelaşi fel de toate sistemele informatice este modul text. Un caracter este văzut la fel de toate calculatoarele, indiferent de arhitectura pe care se bazează sau de sistemul de operare care există pe acel calculator.
    Însă în lumea calculatorelor un şir de caractere nu are o înţeles decât dacă se ştie semnificaţia care trebuie acordată acelui text. Cu alte cuvinte, atunci când se doreşte mai mult decât simpla afişare a unui text, datelor reprezentate de un şir de caractere trebuie să li se dea o anumită semnificaţie, calculatorului trebuie să i se explice cum anume trebuie să transforme şirul de caractere în informaţii pe care să le poată prelucra. 
    Următorul pas logic este acela de a sugera existenţa unui şir de caractere care să explice semnificaţia, ajungându-se în final la date care se auto-descriu. Astfel după citirea unui document text, un calculator şi-ar putea extrage informaţiile pe care trebuie să le proceseze şi ar şti şi ce modalităţi de procesare pot fi aplicate.
    Deci, şirul de caractere nu are decât rolul de purtător al informaţiilor, calculatoarele lucrând cu tipuri interne de date. Este treaba calculatorului sursă să genereze şirul de caractere astfel încât sarcina decodării informaţiei să nu fie prea complicată sau să poată conduce la interpretări diferite.

    2. Prezentare generală XML
    EXtensible Markup Language, abreviat XML, este un limbaj de tip markup, folosit pentru descrierea datelor. El descrie o clasă de obiecte, numite documente XML, şi modul în care un calculator ar trebui să proceseze informaţiile din aceste documente XML.
XML poate fi descris ca un subset al SGML – Standard Generalized Markup Language. Spre deosebire de SGML, XML este mai simplu de implementat (un procesor de XML este mult mai simplu de construit si implementat decât un procesor de SGML) şi din acest motiv poate fi folosit pentru transmiterea datelor în mediul web (implementarea unui procesor de SGML într-un browser web ar fi făcut procesarea informaţilor greoaie datorită complexităţii acestuia).
    XML este tot un limbaj de tip markup ca şi HTML. Însă spre deosebire de acesta din urmă, nu îşi propune să ofere o modalitate de prezentare a datelor ci îşi propune să ofere chiar datele. Tag-urile HTML sunt folosite numai pentru a oferi instrucţiuni despre cum trebuie prezentate informaţiile dintr-o pagină web. Tag-urile din XML pot descrie datele. Dacă în HTML există un număr fix de tag-uri care pot fi folosite, in XML autorul documentului îşi crează propriile tag-uri, după cum consideră necesar pentru a face descrierea datelor pe care le conţine documentul XML.

    2.1. Cerinţele de proiectare
    XML a fost dezvoltat de un grup de lucru aflat sub auspiciile World Wide Web Consortium (W3C) în 1996. Vom prezenta în continuare principalele cerinţe de proiectare ale acestui limbaj şi modalitatea prin care fiecare din aceste cerinţe este îndeplinită de versiunea actuală de XML.
- posibilitatea de utilizare directă în Internet (fiind bazat tot pe tag-uri, ca şi HTML, a fost uşor pentru dezvoltatorii de browsere să scrie procedurile care să parseze acest nou limbaj), 
- oferirea de suport pentru o gamă largă de aplicaţii (XML este un limbaj bazat pe text şi cu reguli de sintaxă simple, iar astăzi o mulşime de aplicaţii folosesc documente XML pentru operaţiile de schimb de date), 
- uşurinţa de a scrie programe care să proceseze documentele XML (datorită regulilor de sintaxă simple a fost foarte uşor să se scrie aplicaţii care să parseze documente XML)
- uşurinţa de fi citite de oameni si claritatea documentelor XML (este un limbaj text şi cu o structură arborescentă, singurul impediment în calea înţelegerii de către oameni poate fi doar inabilitatea autorilor de a alege tag-uri semnificative)
- uşurinţa de a crea documente XML (documentele XML pot fi realizate cu orice editor de texte, dar există şi multe aplicaţii dedicate)
Pe lângă aceste scopuri prevăzute înainte de proiectarea limbajului, autorii au mai ţinut cont de încă două principii: primul dintre ele a fost principiul utilizării internaţionale (şi XML oferă suport pentru o gamă largă de caractere din alfabetele lumii, nu numai cel latin); al doilea scop suplimentar a fost acela de a permite modificarea la nivel global, într-un document complex, a anumitor informaţii prin folosirea unui limbaj de script – cum ar fi Perl.

    2.2. Sintaxa unui document XML
    Regulile de sintaxă ale XML-ului sunt foarte simple şi foarte stricte. Regulile sunt foarte uşor de învăţat şi foarte uşor de utiliazat. Din acest motiv este foarte uşoară crearea unui software care să citească şi să manipuleze documente XML, de altfel aceasta find unul din scopurile de proiectare ale limbajului.
Documentele XML au o sintaxă simplă, care se auto-descrie. Vom ilustra acest lucru printr-un exemplu foarte simplu:
<?xml version="1.0" encoding="ISO-8859-1"?>
<telegrama>
   <destinatar>Popescu</destinatar>
   <expeditor>Ionescu</expeditor>
   <titlu>Reamintire</titlu>
   <cuprins>Ne vedem în weekend</Cuprins>
</telegrama>
Prima linie din acest document conţine declaraţia XML (conţine versiunea de XML folosită şi modul de codare a caracterelor din acest document). În acest exemplu, avem de a face cu un document XML care respectă specificaţile XML versiunea 1.0 şi foloseşte setul de caractere ISO-8859-1 (alfabetul latin, folosit in Europa de vest).

    2.2.1. Reguli de sintaxă
    Elementul rădăcină – telegramă – conţine patru elemente fiu – destinatar, expeditor, titlu şi cuprins. După cum se poate oberva toate elementele XML trebuie să aibă tagul de încheiere. Spre deosebire de HTML, unde unele tag-uri de final puteau fi omise. Acest lucru nu se aplică liniilor de declaraţie, pentru că, practic, ele nu aparţin documentului. Există o singură abatere de la această regulă, şi anume cazul unui element vid (fără fii, atribute sau valoare). În acest caz este permis să se scrie, de exemplu, <titlu/>, în loc de <titlu></titlu>.
Tot spre deosebire de HTML, în XML tag-urile sunt case-sensitive, adică o literă mare este diferită de o literă mică, deci un tag <Telegrama> este diferit de un tag <telegrama>.
    Toate elementele XML trebuie închise în ordinea exact inversă a deschiderii lor. Adică tag-ul de final al unui element nu poate apărea decât după apariţia tag-urilor de final ale tuturor fiilor acelui element.
Toate documentele XML conţin unul şi numai un element rădăcină. Toate celelalte elementele trebuie să fie conţinute în cadrul acestui document rădăcină sau în cadrul fiilor acestui element.
    Elementele pot avea asociate atribute. Fiecare atribut are o anumită valoare. Toate valorile atributelor trebuie trecute între ghilimel,. indiferent dacă valoarea acelui atribut reprezintă un şir de caractere, un număr sau o dată calendaristică.
    În XML spaţiile sunt păstrate. Spre deosebire de HTML, unde mai multe caractere de spaţiu erau reduse la unul singur, acest lucru nu se întâmplă în XML. De asemenea, perechea CR / LF este redusă la LF.
Ca orice alt limbaj, XML oferă posibilitatea prezenţei comentariilor. Acestea încep cu <!-- şi se termină cu -->.

    2.3.1. Structuri fizice
    Din punct de vedere fizic, un document XML este compus din una sau mai multe unităţi de stocare, numite ‚entităţi’. Fiecare entitate are un ‚conţinut’ şi sunt identificate printr-un ‚nume’.
    Fiecare document XML are o entitate numită ‚entitatea document’, care este punctul de plecare pentru un procesor XML şi care poate conţine întreg documentul.
    Fiecare entitate poate fi fie o entitate finală (care nu mai trebuie parsată de către procesorul XML), fie o entitate care, pentru a căpăta sens trebuie să fie parsată de către procesorul XML. Prin procesor XML se înţelege un program care interpretează documentele XML.
    O entitate poate să conţină referinţe către alte entităţi incluse în document. Bineînţeles că, pentru a evita blocarea procesorului XML într-o buclă infinită, o entitate nu poate conţine o referinţă către ea însăşi nici direct, nici indirect (adică, lanţul de entităţi referite nu poate conţine cicluri).
    Una din particularităţile XML, care îl transformă într-o modalitate convenabilă de transmitere a datelor este faptul ca entităţile au o structură şi un comportament asemănător obiectelor din limbajele de programare orientate pe obiecte. Ele pot fi descrise în echivalentul unei clase, cu ajutorul definiţiilor DTD sau XMLSchema, pot fi verificate, se pot referi unele pe altele.
Structura ierarhică a unui document XML poate fi extinsă fără probleme. Unei entităţi i se poate adăuga un fiu fără nici o problemă, atât timp cât se respectă regulile de sintaxă ale limbajului. 
    Entităţile pot fi folosite pentru a defini porţiuni de text care sunt folosite mai des în cadrul documentului, pentru a defini un literal pentru diverse caractere UNICODE.

    2.3.2. Structuri logice
    Din punct de vedere logic, un document XML conţine unul sau mai multe elemente delimitate de tag-urile de început şi sfârşit. Fiecare element are un tip identificat prin nume, şi poate avea specificat un set de atribute.
O excepţie de la regula delimitării o constituie faptul că, în cazul elementelor goale, următoarele două construcţii sunt echivalente: <empty></empty> se poate scrie <empty/>
    Numele conţinut în tag-urile de început şi final dă tipul unui element. Numele trebuie să respecte câteva reguli: un nume trebuie să înceapă cu o literă si poate conţine litere, cifre sau alte caractere. Numele nu pot conţine spaţii şi nu pot începe cu literele xml (indiferent dacă sunt cu majuscule sau nu). Numele care încep cu ‚xml’ sunt rezervate pentru tipuri specifice limbajului.
Elementele XML pot avea asociate atribute. Valoarea atributelor trebuie să fie conţinută între ghilimele. De exemplu: putem avea un astfel de element:
<persoana sex=”feminin”>Ioana Popescu</persoana>
Deşi atributele pot fi folositoare, în special pentru cei obisnuiţi cu HTML, folosirea lor nu este recomandată din moment ce aceeaşi informaţie poate fi conţinută ca un fiu al elementului respectiv. Această modalitate prezintă avantajul că poate fi uşor modificat ulterior (atât valoare cât şi structură).
Prin utilizarea unei modalităţi de definire a conţinutului unui document (XMLSchema sau DTD) se pot construi structuri de tipul listelor sau enumerărilor. De asemenea, în cazul atributelor se pot specifica tipul valorii, o valoare implicită şi eventuala obligativitate a prezenţei atributului respectiv.

    2.4. Validarea documentelor XML
    Pentru ca un document XML să poată fi folosit el trebuie să fie conform şi, dacă e cazul, valid. Un document este conform, sau bine formatat atunci când respectă regulile de sintaxă ale XML-ului. Această proprietate trebuie să fie respectată de toate documentele XML.
    Atunci când un document respectă şi regulile trasate într-un document de definire a datelor, un DTD sau o XMLSchema, se spune despre acel document că este şi valid. 
Procesorul XML, atunci când verifică validitatea unui document, ia în considerare definiţiile trasate în documentul specificat. Pentru aceasta există două entităţi care precizează dacă un document XML trebuie să urmărească regulile unui DTD sau ale unei XMLSchema. Acestea sunt:
<!DOCTYPE tipul_elementului_radacina SYSTEM „fisierul_cu_definiţii.dtd”>
respectiv
xsi:schemaLocation=”adresa_schemei_folosite schema_folosita.xsd”
De remarcat că definirea definiţiei DTD este o entitate separată de elementul rădăcină, în timp ce definirea unei scheme este doar un atribut al elementului radăcină.
Cu alte cuvinte, orice document trebuie să respecte regulile generale ale limbajului XML, iar pentru acele documente pentru care s-au precizat reguli suplimentare, şi acestea trebuie respectate. 

    2.5. XML Schema şi DTD
    Există două modalităţi de a descrie structura pe care trebuie să o respecte un anumit document XML. Prima dintre ele – DTD = Document Type Definition – este mai veche, a fost construită pe baza definiţilor SGML şi constă dintr-o înşiruire de entităţi. Fiecare din aceste entităţi corespunde unui tip de elemente din documentul XML si stabileşte regurile pentru acel tip. Poate fi indicată lista atributelor, cu valoarea lor implicită, si lista (eventual chiar şi ordinea) fiilor pentru elementul respectiv.
Totuşi, un DTD este destul de greoi de construit şi de urmărit datorită faptului că este atât de diferit de XML. Din acest motiv apartiţia XMLSchema a fost întâmpinată cu atât de mult succes de către autorii de documente XML.
Iata mai jos, spre exemplificare, aceleaşi definiţii, scrise în DTD şi în XMLSchema pentru un document XML, numit telegrama.xml

CUPRINS

INTRODUCERE 8
1.1. PROBLEMATICA SEMNĂRII DIGITALE 8
1.2. PROBLEMATICA DESCRIERII UNITARE A DATELOR 9
2. PREZENTARE GENERALĂ XML 10
2.1. CERINŢELE DE PROIECTARE 10
2.2. SINTAXA UNUI DOCUMENT XML 11
2.2.1. Reguli de sintaxă 11
2.3. STRUCTURI 12
2.3.1. Structuri fizice 12
2.3.2. Structuri logice 13
2.4. VALIDAREA DOCUMENTELOR XML 13
2.5. XML SCHEMA ŞI DTD 14
2.6. DATE ŞI STRUCTURI 15
2.7. DOM 16
3. LEGISLAŢIA PRIVIND SEMNĂTURILE ELECTRONICE 17
3.1. LEGISLAŢIA EUROPEANĂ 17
3.1.1. Directiva Consiliului Europei 17
3.2. LEGISLAŢIA ROMÂNEASCĂ 22
3.2.1. Legea semnăturii electronice 22
3.2.2. Normele tehnice şi metodologice (HG1259 din 13 decembrie 2001) 24
4. PREZENTARE GENERALĂ A SEMNĂTURILOR DIGITALE ÎN XML 26
4.1. SEMNĂTURĂ DIGITALĂ 26
4.1.1. Elemente de criptare asimetrică 26
4.1.2. Cerinţe pentru semnături 26
4.1.2.1. Probă 27
4.1.2.2. Caracter oficial 27
4.1.2.3. Acord 27
4.1.2.4. Eficienţă 27
4.1.3. Proprietăţi ale semnăturilor digitale 27
4.1.3.1. Autentică 27
4.1.3.2. Nefalsificabilă 28
4.1.3.3. Nereutilizabilă 28
4.1.3.4. Nealterabilă 28
4.1.3.5. Nerepudiabilă 28
4.2. INFRASTRUCTURA PKI 29
4.3. CARACTERISTICI XMLDSIG 30
4.3.1. Structură de obiect 30
4.3.2. Uşor de citit 31
4.3.3. Semnături multiple într-un singur document 31
4.3.4. Compatibilitatea 31
5. SINTAXA ŞI PROCESARE XMLDSIG 32
5.1. GENERALITĂŢI 32
5.2. RECOMANDAREA W3C PRIVIND SINTAXA ŞI PROCESAREA SEMNĂTURILOR DIGITALE ÎN XML 33
5.2.1. Stabilirea cadrului de lucru 33
5.2.2. Conceptul de semnătură simplă (core signature) 33
5.2.3. Conceptul de semnătură extinsă (extended signature) 34
5.2.4. Reguli de procesare 36
5.2.4.1. Generarea semnăturii simple 37
5.2.4.1.1. Generarea referinţelor 37
5.2.4.1.2. Generarea semnăturii 37
5.2.4.2. Validarea semnăturii simple 38
5.2.4.2.1. Validarea referinţelor 38
5.2.4.2.2. Validarea semnăturii 39
5.2.5. Sintaxa semnăturii simple 39
5.2.5.1. Elementul Signature 39
5.2.5.2. Elementul SignatureValue 40
5.2.5.3. Elementul SignedInfo 40
5.2.5.4. Elementul CanonicalizationMethod 41
5.2.5.5. Elementul SignatureMethod 42
5.2.5.6. Elementul Reference 42
5.2.5.7. Elementul KeyInfo 44
5.2.5.8. Elementul Object 45
5.2.6. Sintaxa semnăturii extinse 46
5.2.6.1. Elementul Manifest 46
5.2.6.2. Elementul SignatureProperties 47
5.3. EXEMPLU 48
6. STANDARDUL PENTRU SEMNĂTURI DIGITALE XML AVANSATE (ETSI TS 101 903 – XML ADVANCED ELECTRONIC SIGNATURES XADES) 49
6.1. INTRODUCERE ŞI SCOP 49
6.2. SEMNĂTURĂ ELECTRONICĂ ŞI DATE DE VALIDARE 51
6.3. STRUCTURI DE DATE ALE SEMNĂTURII ELECTRONICE XML AVANSATE (XADES) 51
6.3.1. Conţinutul XAdES-BES 51
6.3.2. Conţinutul XAdES-EPES 53
6.3.3. Conţinutul XAdES-C 55
6.4. DATE DE VALIDARE A FORMULARELOR EXTINSE 56
6.4.1. Conţinutul XAdES-X 56
6.4.2. Conţinutul XAdES-X-L 57
6.5. DATE DE VALIDARE ARHIVELOR 57
6.5.1. Conţinutul XAdES-A 57
7. PREZENTARE GENERALĂ STUCTURI ŞI CLASE 59
7.1. MOTIVAREA ALEGERII LIMBAJULUI JAVA™ 59
7.2. PACHETELE DISTRIBUITE ŞI CLASELE MAI IMPORTANTE 60
7.2.1. DSIG 60
7.2.1.1. ConfigManager 61
7.2.1.2. XMLDSIG 62
7.2.2. Data 62
7.2.2.1. Data 63
7.2.2.2. DataList 64
7.2.2.3. Cache 64
7.2.2.4. URIDereferencer 64
7.2.3. XML 65
7.2.3.1. SignedDoc 67
7.2.3.2. Signature 68
7.2.3.3. SignedInfo 69
7.2.3.4. Reference 71
7.2.3.5. SignedProperties 72
7.2.3.6. UnsignedProperties 74
7.2.3.7. SignatureValue 76
7.2.3.8. RSAKeyInfo 76
7.2.4. Utils 78
7.2.4.1. XMLContainer 78
7.2.4.2. ConvertUtils 79
7.2.5. Crypto 80
7.2.5.1. Algorithm 80
7.2.6. Transform 81
7.2.6.1. Transform 81
7.2.6.2. Base64 82
7.2.6.3. DOMc14n 83
7.2.7. Certificate 84
7.2.8. Factory 86
7.2.9. Exceptions 86
7.3. DATAFLOW GENERAL 87
7.3.1. Semnare 87
7.3.1.1. Determinarea referinţelor 88
7.3.1.2. Calculare digest 88
7.3.1.3. Grupare referinţe într-un signedInfo 88
7.3.1.4. Calculare digest pentru SignedInfo 89
7.3.1.5. Semnare digest SignedInfo 89
7.3.1.6. Adăugare informaţii despre cheie 89
7.3.1.7. Adăugare informaţii suplimentare 89
7.3.2. Verificare 90
7.3.2.1. Identificarea semnăturii care trebuie verificată 90
7.3.2.2. Extragerea elementului SignedInfo 90
7.3.2.3. Calculare digest asupra elementului SignedInfo 91
7.3.2.4. Calcularea cheii de verificare 91
7.3.2.5. Verificarea semnăturii 91
7.3.2.6. Compararea celor două digest-uri 91
8. APLICAŢIE 92
8.1. SCOPUL APLICAŢIEI 92
8.2. PREZENTARE APLICAŢIEI DE SEMNARE 93
8.2.1. Ecranul de configurare 93
8.2.2. Ecranul de introducere a datelor 95
8.2.3. Ecranul de alegere a cheii de semnare 98
8.2.4. Ecranul de prezentare 99
9. CONCLUZII 100
10. BIBLIOGRAFIE 101

Descarca lucrare