XML nënshkrimet digjitale

## XML Nenshkrimi 
### Çka eshte XML nenshkrimi
**eXtended Markup Langugage (XML)** nënshkrimi digjital është rekomandim nga
World Wide Web Consortium (W3C) që definon XML sintaksën për nënshkrimet 
digjitale. XML nënshkrimet digjitale mund të përdoren për të nënshkruar dokumente
(resurse) apo pjesë të dokumenteve te çfarëdo lloji e që janë të qasshme përmes 
shtegut ose ueb adresës. XML nënshkrimi digjital mund të jetë i ndarë nga XML 
dokumenti i cili nënshkruhet (**detached**), i futur në XML dokumentin (**enveloped**) ose 
mund të përmbaj dokumentin i cili nënshkruhet (**enveloping**). 

## Çka s’është në rregull me nënshkrimet e zakonshme digjitale?
Dërguesi, i cili dëshiron që një dokument së bashku me nënshkrimin digjital t’ia
dërgoj pranuesit vepron si vijon: llogaritë digest-in e dokumentin me anë të ndonjë
hash funksioni të njohur siç janë: Secure Hash Algorithm #1 (SHA-1) ose Message 
Digest #5 (MD-5). Me tutje dërguesi e enkripton digest-in me çelësin e vetë privat. 
Rezultati i këtij enkriptimi quhet **nënshkrim digjital**.
Dërguesi e dërgon dokumentin së bashku me nënshkrimin digjital përmes çfarëdo mjeti (rrjete) transportuese 
pranuesit, siç është paraqitur në Fig. 1. Dokumenti ne këtë rast nuk është i 
enkriptuar, pra mund të lexohet prej çdo kujt që e pranon këtë informatë.
 
 
Pranuesi në anën tjetër e pranon dokumentin (të pa enkriptuar) dhe me anë të të
njëjtit hash funksion llogarit digest-in e dokumentin të pranuar. Pranuesi po ashtu e
dekripton nënshkrimin digjital të pranuar me çelësin publik të dërguesit, dhe rezultatin
e këtij dekriptimi e krahason me digest-in aktual, shih Fig. 1.
Me anë të nënshkrimit digjital arrihet: 
:* integriteti i shënimeve (dokumentit) - çdo ndërrim i dokumentit, qofte edhe një 
biti të vetëm rezulton në një digest tjetër me çka ndryshon edhe nënshkrimi 
digjital i dokumentit, dhe 
:* jo mohueshmëria e dërguesit – dërguesi nuk mundet me vonë të mohoj se 
dokumentin e ka nënshkruar dikush tjetër sepse vetëm ai është ne pronësi të
çelësit të vetë privat. 
Nënshkrimi digjital funksionon vetëm kur kemi një dërgues dhe një pranues. Bizneset
bashkëkohore qe zhvillohen përmes Internetit kërkojnë që dokumenti apo kontrata
për biznes (siç quhet ndryshe) të nënshkruhet nga shumë pjesëmarrës në një 
transaksion. Secili prej pjesëmarrësve e nënshkruan vetëm një pjesë. Ne disa raste
kërkohet një renditje strikte e nënshkruarjes se dokumentit (kontratës), p.sh. se pari 
duhet banka të lejoj shumën e caktuar të parave dhe pastaj klienti të ketë të drejt të 
blej artikuj ndryshëm. Pjesëmarrësit e ndryshëm në transaksion përdorin poashtu 
platforma dhe protokolle të ndryshme për enkriptim. Interoperabiliteti këtu luan një
rol shumë të rëndësishëm sepse të gjithë pjesëmarrësit duhet të jenë në gjendje të
kuptojnë njeri-tjetrin. 
XML nënshkrimet digjitale përmbushin kërkesat e lartshënuara. 

## Struktura e XML nënshkrimeve digjitale
Struktura dhe sintaksa e XML nënshkrimeve digjitale është përcaktuar me 
rekomandimin e W3C[1]. XML nënshkrimi digjital mund të aplikohet në çfarëdo lloji të
shënimeve. Shënimet në XML dokumentin ruhen si element i veçantë. Po ashtu edhe
hash vlera e shënimeve (digest-i) ruhet në XML dokumentin si element i veçantë. 
Digest-i enkriptohet me çelësin privat dhe ruhet si një XML element. XML nënshkrimi 
digjital identifikohet me anë të XML elementit “Signature” dhe përmban këto XML 
elemente[2], siç është paraqitur në Fig. 2. 
    
Disa XML elemente mund të mos paraqiten fare apo vetëm një herë në XML
nënshkrimin digjital, kjo është paraqitur me anë të shenjës “?”, shih Fig. 2. Disa
elemente duhet të paktën të paraqiten njëherë, shenja “+”, ndërsa disa elemente 
munden të mungojnë ose të paraqiten disa herë, shenja “*” në Fig. 2. 

Përshkrimi i secilit XML element është paraqitur në Tab. 1. 
    
Tab. 1: Përshkrimi XML elementeve të nënshkrimit digjital 
Gjatë përdorimit të XML elementit KeyInfo duhet pasur kujdes të veçantë, sepse
përgjuesi i mundshëm i trafikut të shënimeve ka mundësi të vepron si vijon: 
:* çelësin publik të dërguesit e zëvendëson me çelësin e vet publik, 
:* e enkripton digest-in me çelësin e vet privat, pra e rillogaritë nënshkrimin
digjital dhe nënshkrimin digjital të dërguesit e zëvendëson me nënshkrimin 
digjital të rillogaritur. 
Pranuesi ne anën tjetër gjatë vërtetimit të nënshkrimit digjital nuk vëren kurrfarë
mangësie sepse nënshkrimin digjital e vërteton me çelësin publik të përgjuesit. Një 
sulm i tille njihet si “man-in-the-middle”. 
Pozita e XML nënshkrimit digjital ndaj XML shënimeve ka nxitur diskutime të gjata në 
W3C. Duke pasur parasysh kërkesa të ndryshme për platforma të ndryshme W3C
rekomandimi për XML nënshkrimet digjitale i përkrah tri format të vendosjes së XML
nënshkrimit digjital ndaj XML shënimeve: 
:* Nënshkrimi i ndarë (detached) – në këtë rast  elementi ruhet ne
një fajll të veçantë[2], shih Fig. 3, dhe  XML elementi shfrytëzon 
adresën (shtegun) për ti adresuar XML shënimet. 
Fig. 3: Pozita e XML nënshkrimit digjital në XML dokumente 
:* XML nënshkrimi i mbështjellë XML shënimet (enveloping) – në këtë rast
 XML elementi i përmban XML shënimet dhe është pjesë e 
 XML elementit. 
:* XML nënshkrimi është i mbështjellur në XML shenimet (enveloped) – në këtë
rast  XML elementi është insertuar në XML shënimet. 
4 Përkrahja e XML nënshkrimeve digjitale në .NET 
Microsoft .NET (New Enterprise Technology) i përmban të gjitha klasat dhe 
metodat për përkrahjen e XML nënshkrimeve digjitale në hapësirën

System.Security.Cryptography.Xml. Klasat dhe metodat për manipulim me XML 
dokumente gjenden në hapësirën System.Xml. Në kornizën .NET klasat dhe metodat 
për enkriptim/dekriptim gjenden në hapësirën System.Security.Cryptography. 

.NET. Shembulli është i natyrës shkollore dhe ka për qellim njohjen me format e 
ndryshme të XML nënshkrimeve digjitale. Fajlli “XML nenshkrimet digjitale.cs“
përmban fajllin burimor. Pamja e aplikacionit është paraqitur në Fig. 4. Për qëllime
ndihme nga [3] mund të shkarkohet edhe një XML fajll (Porosia.xml) mbi të cilin do të
llogaritet nënshkrimi digjital. 
Kompajllimi e fajllit burimor “XML nenshkrimet digjitale.cs” prej vijës komanduese
(DOS box-it) bëhet me anë të urdhrit: 
csc “XML nënshkrimet digjitale.cs”
dhe pas kompajllimit të suksesshëm gjenerohet aplikacioni i ekzekutueshëm “XML
nenshkrimet digjitale.exe”. 
SignedXML është klasa, e cila përdoret për krijimin e XML nënshkrimeve digjitale.
Me anë të metodës ComputeSignature() llogaritet nënshkrimi digjitale ndërsa me anë
të metodës CheckSignature() behet verifikimi i nënshkrimit digjital. 
Framework
Namespace 
Fig. 4: Pamja e aplikacionit për testimin e XML nënshkrimeve digjitale 
5 Përmbledhje 
Me anë të nënshkrimeve të zakonshme digjitale nuk është e mundur që dokumenti të 
nënshkruhet në formë të pjesshme dhe prej shumë njësive. Me anë të XML
nënshkrimeve digjitale është e mundur qe një dokument të nënshkruhet në formë të
pjesshme dhe prej njësive të ndryshme. Kërkese kjo e pashmangshme për bizneset
bashkëkohore përmes Internetit. Se cila formë e nënshkrimit: detached, enveloping
ose enveloped do të përdoret varet prej kërkesave konkrete të aplikacionit.

## Referimet