Nors jau kurį laiką žinojau, kad pasirašant dokumentą elektroniniu parašu dažnai prie dokumento yra pridedama ir „laiko žyma“, tik ne per seniausiai išsiaiškinau, kad tai per daiktas, ir kam tos laiko žymos gali būti naudingos.
El parašo atveju laiko žyma patvirtina, iki kada buvo sudarytas (ir pasirašytas) dokumentas. gal būt anksčiau nei laiko žymoje nurodyta data, bet tikrai ne vėliau. Laiko žyma yra tiesiog dar vienas elektroninis parašas ant mano pasirašomo dokumento. Skirtumas tik tas, kad tą laiko žymą pasirašau ne aš, o laiko žymų tarnyba.
Laiko žymos pridėjimas prie failo vyksta maždaug taip. Programa, kuri formuoja el. parašą ir „prikabina“ jį prie pasirašomo dokumento, generuoja dokumento santrauką („hešą“) ir siunčia jį žymų tarnybai. Žymų tarnyba prideda prie dokumento santraukos laiko žymą ir pasirašo tuos duomenis savo el. parašu automatiškai. Jei laiko žymų tarnyba turi valstybės įgaliojimą tai veiklai, jos laiko žymos yra laikomos patikimomis ir pripažįstamos tiek valstybės institucijose, tiek ir teismuose. El. parašą formuojanti programa prikabina laiko žymų tarnybos pasirašytą failą su laiko žyma prie pasirašomo failo.
Laiko žyma prie failo pridedama siekiant užtikrinti, kad dokumentas tikrai buvo sudarytas (ar egzistavo) tam tikru metu. Nes failo data galima lengvai manipuliuoti keičiant kompiuterio laikrodžio rodmenis.
Tačiau laiko žymas galima naudoti ir be elektroninio parašo. Kokiu tikslu? Pvz., laiko žyma galima patvirtinti tam tikro išradimo sukūrimo laiką, nuotraukos padarymo laiką (jei, pvz., tokia nuotrauka žmona nori įrodyti, kad vyras su meiluže susitikinėjo dar prieš sutuoktinių faktinį išsiskyrimą) ir panašiai.
Žemiau paaiškinsiu, kaip tai padaryti su openssl programa Linux operacinėje sistemoje, naudojant Safe Creative žymų tarnybos paslaugą. Lygiai taip pat galima naudoti ir kol kas vienintelę Lietuvoje patvirtintą žymų tarnybą BalTstamp, tuomet ir laiko žymos būtų teisiškai galiojančiomis, tačiau BalTstamp neturi žymų patikros web sąsajos, kuri supaprastina žymų patikrinimą. Todėl komandas, pritaikytas BalTstamp laiko žymų tarnybai pateiksiu šio įrašo pabaigoje.
Taigi, sakykime, jog turime pdf failą, kuriam norime sukurti laiko žymą.
Sukuriame laiko žymos užklausos prašymo failą:
openssl ts -query -data bandomasis.pdf -cert -sha256 -no_nonce -out bandomasis-prasymas.tsq
Šioje komandoje bandomasis.pdf yra failas, kuriam norime sukurti laiko žymą, parametru -sha256 yra nurodomas sha256 algoritmas failo santraukos (hash) kūrimui, ir bandomasis-prasymas.tsq yra failas su standartinės laiko žymos užklausos duomenimis. Būtent šį failą ši komanda ir sukuria.
Parengę prašymą, siunčiame jį laiko žymų serveriui ir prašome atsiųsti sertifikatu patvirtintą laiko žymą:
cat bandomasis-prasymas.tsq | curl -s -S -H 'Content-Type: application/timestamp-query' --data-binary @- http://tsa.safecreative.org -o bandomasis-atsakymas.tsr
Šioje komandoje nurodomas laiko žymų serveris http://tsa.safecreative.org ir atsakymo su laiko žyma failo pavadinimas bandomasis-atsakymas.tsr.
Taigi, jei ši komanda sukūrė failą bandomasis-atsakymas.tsr, laiko žymą jau turime. Galime peržiūrėti jos duomenis įvykdydami žemiau nurodytą komandą.
openssl ts -reply -in bandomasis-atsakymas.tsr -text
Jos išvestyje ieškokime eilutės Time stamp, kurioje ir rasime laiko žymą:
Status info: Status: Granted. Status description: Operation Okay Failure info: unspecified TST info: Version: 1 Policy OID: 1.3.6.1.4.1.45794.1.1 Hash Algorithm: sha256 Message data: 0000 - 5f 58 35 3b 37 57 78 48-c2 ee 37 90 00 05 57 e2 _X5;7WxH..7...W. 0010 - 98 af 49 c8 fd 36 ea 9c-f0 2e 19 7c f7 19 18 d8 ..I..6.....|.... Serial number: 0x76B0CF Time stamp: Aug 22 08:38:09 2017 GMT Accuracy: 0x01 seconds, unspecified millis, unspecified micros Ordering: no Nonce: unspecified TSA: DirName:/C=ES/O=Safe Creative/CN=Time Stamp Authority Server Extensions:
Tam, kad galėtume patikrinti laiko žymos patikimumą, reikia atsisiųsti laiko žymų tarnybos sertifikatą. Atsidarome laiko žymų tarnybos puslapį https://tsa.safecreative.org/ ir matome, kad sertifikatas „guli“ adresu https://tsa.safecreative.org/certificate. Atsisiųskime jį:
wget https://tsa.safecreative.org/certificate --output-document=SafeCreative_TSA.cer
Šioje komandoje nurodome sertifikato, kurį atsisiųsime, norimą pavadinimą pas mus failų sistemoje: SafeCreative_TSA.cer
Dabar jau galime patikrinti laiko žymos patikimumą:
openssl ts -verify -in bandomasis-atsakymas.tsr -data bandomasis.pdf -CAfile SafeCreative_TSA.cer
Jei gauname štai tokią išvestį:
Verification: OK
tai žyma yra patikima.
Žymų tarnyba „Safe Creative“ taip pat teikia galimybę pasitikrinti laiko žymą savo interneto svetainėje. Tuo tikslu reikės svetainėje įterpti failo, kuriam kūrėme laiko žymą, sha256 santrauką.
Failo santrauka gaunama štai taip:
sha256sum bandomasis.pdf
Komandos išvestis štai tokia:
5f58353b37577848c2ee3790000557e298af49c8fd36ea9cf02e197cf71918d8 bandomasis.pdf
Joje matome failo santrauką („hešą“) ir failo pavadinimą.
Santrauką įterpą į paieškos langą Safe Creative svetainėje rasime šio failo laiko žymą:
O dabar patikrinkime, ar laiko žyma veikia patikimai. Paimkime ir pakeiskime failą – pridėkime prie jo vieną tarpo simbolį:
echo " " > tmp cat bandomasis.pdf tmp > bandomasis-pakeistas.pdf
Pamėginkime atverti failą su pdf peržiūros programa. Jis atrodys visiškai taip pat, programa modifikavimo nepastebės.
Tačiau jei dabar pamėgintume sukurti failo santrauką, ji atrodytų visiškai kitaip:
sha256sum bandomasis-pakeistas.pdf 53b001072ac362086106da575f13fc51b82b57cd399aa62bf9926d70d7c92fd3 bandomasis-pakeistas.pdf
openssl ts -verify -in bandomasis-atsakymas.tsr -data bandomasis-pakeistas.pdf -CAfile SafeCreative_TSA.cer Verification: FAILED 140513968481944:error:2F064067:time stamp routines:TS_CHECK_IMPRINTS:message imprint mismatch:ts_rsp_verify.c:672:
Taigi, nors šiek tiek pakeitus dokumentą laiko žyma dokumento nebeatitiks, ir openssl programa rodys klaidą.
PS: veiksmai lietuviškosios BalTstamp laiko žymų tarnybos atveju
Ir galiausiai – visa komandų seka, pritaikyta lietuviškajai BalTstamp žymų tarnybai, kuri, pasak Ryšio reguliavimo tarnybos, yra kol kas vienintelė registruota ir sertifikuota teikti tokias paslaugas Lietuvoje. Reikalingus kvalifikuotus sertifikatus, kuriais patvirtinti BalTstamp sertifikatai, rasime keistu adresu https://gdl.repository.ssc.lt/lt/talpykla/seni-dokumentai/#sertifikatai . Taigi:
# Sukuriame laiko žymos užklausos prašymo failą: openssl ts -query -data bandomasis.pdf -cert -sha256 -no_nonce -out bandomasis-prasymas.tsq # Siunčiame generuotą failą laiko žymų serveriui ir prašome laiko žymos: cat bandomasis-prasymas.tsq | curl -s -S -H 'Content-Type: application/timestamp-query' --data-binary @- http://tsa.baltstamp.lt -o bandomasis-atsakymas.tsr # peržiūrime gautą laiko žymą (atkreipiame dėmesį į „Time Stamp“ eilutę): openssl ts -reply -in bandomasis-atsakymas.tsr -text # Atsisiunčiame patikrinimui reikalingus Skaitmeninio sertifikavimo centro šakninį ir tarpinį sertifikatus, kuriuo patvirtintas BalTstamp laiko žymų sertifikatas: wget https://gdl.repository.ssc.lt/f/old_certs/SSCRootCAA.pem --output-document=SSCRootCAA.pem wget https://gdl.repository.ssc.lt/f/old_certs/SSCQualifiedClass3CAnew.pem --output-document=SSCQualifiedClass3CA.pem # Ir galiausiai patikriname failo bandomasis.pdf laiko žymos failą bandomasis-atsakymas.tsr: openssl ts -verify -in bandomasis-atsakymas.tsr -data bandomasis.pdf -CAfile SSCRootCAA.pem -untrusted SSCQualifiedClass3CA.pem
Jei viskas pavyks, pamatysite atsakymą po paskutinės komandos:
Verification: OK
Parašykite komentarą