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
10. Bibliografie