Kaj je kvalificiran elektronski žig in kako deluje

Strežnik za časovno žigosanje je del infrastrukture javnih ključev (PKI). Ko želimo v neki aplikaciji časovno žigosati nek elektronski dokument oziroma podatke, pošljemo strežniku z zgostitveno funkcijo narejen "povzetek" (hash) dokumenta oziroma podatkov. To je fiksen niz bitov, ki enolično določa dokument. Strežnik temu povzetku dopiše čas in vse skupaj podpiše s svojim zasebnim ključem - to je časovni žig. S tem je dokazano, da je elektronski dokument obstajal pred časom, navedenim v časovnem žigu, poleg tega pa se da preveriti, da se od časa žigosanja ni spremenil (naredimo ponovni povzetek dokumenta in se mora ujemati s tistim, ki je del časovnega žiga).

Postopek je opisan v RFC 3161: Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP).

Postopek časovnega žigosanja pri SI-TSA

Uporabniki programskega produkta "Entrust Entelligence Desktop Solutions", ki imajo posebna digitalna potrdila SIGOV-CA, lahko časovno žigosajo elektronske dokumente prek menuja "Entrust Advanced" > "Timestamp". 

Za druge uporabnike oziroma aplikacije pa časovno žigosanje pri SI-TSA deluje kot spletna storitev (Web Service).

Z "Web Services" označujemo skupek protokolov, ki naj bi omogočili, da se različne storitve odvijajo čim bolj avtomatično, brez človeških posegov:

  • Podatke, ki jih storitev potrebuje, vedno definiramo v jeziku XML (specifikacija XML- Signature Syntax and Processing).
    V našem primeru sta to zahtevek za časovni žig in odgovor z žigom. Določa ju naslednja XML shema:timestamp.xsd
  • Podatke o storitvi zapišemo v obliki WSDL - Web Service Description Language (specifikacija WSDL). 
    V našem primeru:timestamp.wsdl
  • Podatke si klient in strežnik izmenjata v  ovojnici  SOAP. SOAP označuje Simple Object Access Protocol (specifikacija SOAP). SOAP ne določa, po katerem protokolu si bosta odjemalec in strežnik izmenjala podatke, vendar je zaenkrat najbolj v uporabi protokol HTTP POST. Strežnik za časovno žigosanje sprejema zahtevke po HTTP POST protokolu, ki imajo polje "Content-Type: text/xml". V zahtevku (v body) mora biti polje TimeStampReq, kodirano po specifikaciji ASN.1 (Abstract Syntax Notation), strežnik pa vrne ASN.1 kodirano polje TimeStampResp.

WebServices sestavlja še protokol UDDI (Universal Description, Discovery and Integration), ki določa, kako se informacija o posameznih storitvah hrani v imeniku, kjer jo lahko uporabniki najdejo. V našem primeru zaenkrat to ni realizirano, ker gre za storitev, ki je namenjena zaprtemu krogu uporabnikov.

Povezava aplikacije s časovnim overiteljem SI-TSA

V skladu s politiko SI-TSA je storitev časovnega žigosanja dostopna za aplikacije znotraj državne uprave in za aplikacije tistih poslovnih subjektov, ki sklenejo dogovor s SI-TSA.

Aplikacije, s katerimi upravljajo organi javne uprave, pošljejo zahtevek v SOAP ovojnici prek protokola HTTP na naslov "http://ts.si-tsa.sigov.si/verificationserver/timestamp".

Aplikacije, s katerimi upravljajo poslovni subjekti izven omrežja državnih organov, pošljejo zahtevek v SOAP ovojnici prek protokola HTTPS na naslov "https://ts.si-tsa.si:443/". Ta strežnik overi digitalno potrdilo aplikacije in potem posreduje zahtevek na časovni strežnik, ki je zaradi varnosti nameščen za požarnim zidom.

Pri overitelju SI-TSA delujeta dva enakovredna strežnika SI-TSA-1 in SI-TSA-2, zato je odgovor podpisan s ključem enega od njiju.

Zahtevek za časovni žig vsebuje naslednje podatke:

1. Informacija o dokumentu, ki naj bo žigosan:

Sestavljajo jo naslednji podatki:

  • Transformacija:
    Če je to polje prisotno, označuje postopek za preoblikovanje dokumenta, ki naj bo podpisan. Določen je v XML-Signature Syntax and Processing - Canonical XML.
  • Zgoščevalna funkcija:
    Določena je v XML-Signature Syntax and Processing. Zdaj se običajno uporablja SHA-1, ki daje 160-bitne povzetke. MD5, ki daje 128-bitne povzetke, ne velja več za dovolj varno.
  • Povzetek:
    Vsebuje z zgoščevalno funkcijo narejen povzetek dokumenta, ki naj bo časovno žigosan. 

2. Naključno generirano število (nonce): Če je to polje prisotno, je namenjeno temu, da poveže zahtevek in odgovor od časovnega strežnika in tudi onemogoči napad s ponovitvijo (replay attack).

3. Razširitve - je neobvezno polje, ki je predvideno za uporabo v bodočnosti.

Odgovor od SI-TSA vsebuje:

Informacija o tem, ali je bil zahtevek za časovni žig uspešen <StatusInfo>

  • Status:
    Tu strežnik pove, kako je obravnaval zahtevo. Možne vrednosti so "granted", "grantedWithModifications", "rejection", "waiting", "RevocationWarning", "revocationNotification".
  • Obvestilo o napaki:
    V primeru, da časovnega žiga ni bilo mogoče tvoriti, strežnik pove, zakaj.
    Možne vrednosti so: "badAlgorithm", "badRequest", "badDataFormat", "timeNotAvailable", "unacceptedPolicy", "unacceptedExtension", "additionalInformationNotAvailable".

Sledi časovni žig <TimeStampToken>, ki ga sestavljajo naslednji štirje deli:

1. Podatki o žigosanih poljih <SignedInfo>: 

  • Kanonikalizacijska metoda
  • Algoritem za podpis (običajno RSA, s katerim zašifriramo povzetek, narejen s SHA-1)
  • Podatki o časovnem žigu
    • Algoritem za povzetek (običajno SHA-1)
    • Povzetek
  • Podatki o časovnem overitelju
    • Algoritem za povzetek (običajno SHA-1)
    • Povzetek, ki enolično označuje časovnega overitelja

2. Podpis <SignatureValue>

3. Digitalno potrdilo časovnega overitelja (KeyInfo of TimeStampAuthority- X509Certificate) v obliki base64

4. Podatki o časovnem žigu <TimeStampInfo>: 

  • Politika:
    Vsebuje oznako politike, pod katero je časovni žig izdan. Če je bila politika navedena tudi v zahtevku, se morata oznaki politike ujemati
  • Povzetek:
    Povzetek sporočila, ki se žigosa - se mora ujemati s tistim v zahtevku.
  • Serijska številka:
    Je biti enolična za vsak časovni žig, ki ga je izdal SI-TSA.
  • Čas nastanka:
    Čas, ko je bil časovni žig izdan in sicer kot univerzalni čas (Universal Time, kar označuje "Z" na koncu podatka, n.pr: 2004-02-16T07:06:11.703Z). Univerzalni čas je v zimskem času eno uro za našim, v letnem času pa dve uri za našim.
  • Naključno generirano število <Nonce>:
    Obvezno samo takrat, ko je bilo v zahtevku, in mora biti enako.
  • Razširitve - ni obvezno:
    Obvezno samo takrat, ko je bilo v zahtevku, in mora biti enako.

Aplikacija mora po prejemu časovnega žiga od strežnika izvesti naslednje:

  • primerjati povzetek v časovnem žigu s tistim, ki ga je poslala strežniku;
  • preveriti potrdilo strežnika, da pripada SI-TSA;
  • preveriti potrdilo overitelja, ki je podpisal potrdilo SI-TSA.

Potrdilo strežnika mora vsebovati polje "razširjen namen uporabe ključa" (Extended key usage): TimeStamping oziroma id-kp-timestamping.

Razvijalcem aplikacij, ki bodo uporabljale časovni žig SI-TSA, so na voljo podrobnejša navodila: