Laiko žymos peržiūra Linux terminale

Kaip patvirtinti dokumento sudarymo datą su elektronine „laiko žyma“

Facebooktwittergoogle_pluspinterestlinkedintumblrmail

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ą.

Laiko žymos peržiūra Linux terminale
Laiko žymos peržiūra Linux terminale

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ą:

Laiko žymos patikra „Safe Creative“ svetainėje
Laiko žymos patikra „Safe Creative“ svetainėje

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
Facebooktwittergoogle_pluspinterestlinkedintumblrmail