УНИТе

Портал > Документация > Заявяване на TSA цифрово подписване на време, относно същестуващо съдържание, в CentOS 7 и Scientific Linux 7, с последваща проверка на подписването и използването му за датиране на съдържание

Заявяване на TSA цифрово подписване на време, относно същестуващо съдържание, в CentOS 7 и Scientific Linux 7, с последваща проверка на подписването и използването му за датиране на съдържание

Съдържание:

  1. Предварителна информация относно времеподписването и датировката на съдържание
  2. Създаване на заявка за подписване на време с цел датировка на съдържание
  3. Изпращане на заявката за подписване на време към TimeStamp сървър и получаване на цифрово подписания отговор
  4. Проверка на валидността на цифров подпис на време и датиране на съдържанието

 

1. Предварителна информация относно времеподписването и датировката на съдържание

Подписването на време (Time Stamping) има за цел да позволи датировката на даден блок от информация (цялото съдържание на файл, част от съдържанието на файл и др). Под дарировка се разбира възможността да бъде показано с високо ниво на надеждност, че съдържанието, за което времеподписването е изършено, е съществувало (било познато на заявителя) по и след времето на подписването. След като подписът за време бъде генериран, той се съхранява заедно или отделно от съдържанието, което ще датира. Ако след време възникне съмнение дали това съдържние е същестувало на часа и датата, вложена в подписа, то успешната проверка на цифровия подпис (валидирането му), може да покаже, че то е същствувало.

Какъв е механизма за подписване на времето и датировката? Първо се изчислява се контролната сума на съдържанието, тя се влага се в блок данни, след това този блок се изпраща до специален сървър, наречен още "Time Stamping сървър", където към него се добавя информация за времето, по което той е получен (и др. допълнителна информация) и накрая този така допълнен блок се подписва цифрово с X.509 сертификата на сървъра. Този подписан блок данни е подписа за време (Time Stamp) върху контролната сума. Как се използва той? Когато се наложи да се покаже, че съдържанието, което съответства на контролната сума, е съществувало по и след някакво време (дата, час, минути, секунди, милисекунди), се проверява дали това време не е след времето, което е вложено в блока с подписа. Ако то е след това, което е вложено в блока с цифровия подпис, то проверяваното съдържание е съществувало още по време на подписването на контролната сума. В това се състои и смисъла на датировката.

Организацията, която поддържа Time Stamping сървъра и издава сървърския X.509 сертификат, се нарича Time Stamping Authority (TSA). Тя следва да действа на принципа на пълна неутралност и да е арбитър при датировката.

 

2. Създаване на заявка за подписване на време с цел датировка на съдържание

Заявката за подписване на време е блок информация, който включва (1) контролната сума на файла, (2) описание на хеш-функцията, използвана за изчисляване на контролната сума, (3) заявка за използване на уникален номер в заявката (вижте повече на https://en.wikipedia.org/wiki/Cryptographic_nonce) и (4) изискване сертификата на Time Stamping сървъра да бъде прикачен към отговора. (-cert):

Отбележете, че набора възможни за използване хеш-функции, на база на които се изчисляват контролните суми на съдържанието, зависи от TimeStamp сървъра. Обикновено, TimeStamp сървърите поддържат като минимум хеш-функцията SHA1 и опционално RIPEMD160, SHA256, SHA384, SHA512. Добре е да знаете предварително кои хеш-функции се поддържат от TimeStamp сървъра, към който ще изпращате заявката за подписване, ако не искате тя да бъде отхвърлена. Освен това, имайте предвид, че подразбиращата се в повечето TimeStamp сървъри хеш-функцията SHA1, е ненадеждна и се поддържа само и единствено за да осигурява обратна съвместимост със стар клиентски софтуер за изпращане на заявки. Това означава, че трябва да използвате поне 256-битова контролна сума (хеш-функцията SHA256) или в краен случай 160-битова, като тази осигурявана от функцията RIPEMD160.

Обектите, чието съдържание искате да направите възможно за датиране, чрез подписване на време, могат да се разделят на две групи и за всяка една от тях се изисква прилагането на различна процедура по генериране на заявка:

  • цялото съдържние на даден файл:

    Създаването на заявка за подписване на време, с цел датиране на съдържанието на цял файл, е илюстрирано с пример по-долу. Създаваната на негова база заявка, която ще бъде запазена във файла messages-20190414.gz.tsq, е за времеподписване на съдържанието в messages-20190414.gz (този файл е указан след -data), чиято контролна сума е пресметната чрез хеш-функцията SHA384 (-sha384), и включва изискването в отговора (блока съдържащ цифрово подписаната контролна сума) да се съдържа и копие от сертификата на TimeStamp сървъра, което изискване е отразено с добавяне на ключа -cert в командния ред:

    $ openssl ts -query -data messages-20190414.gz -sha384 -cert -out messages-20190414.gz.tsq

    Създадената заявка (за примера тя е във файла messages-20190414.gz.tsq), трябва да бъде изпратена до TimeStamp сървър. Как става това е описано в "Изпращане на заявката за подписване на време към TimeStamp сървър и получаване на цифрово подписания отговор".

  • блок от информация (който не е цялото съдържание на файл):

    Ако искате да датирате не файл, а просто блок от информация, като например, съдържание на колона в таблица, ред в текстов файл и прочие, тогава трябва да изчислите контролната сума на този блок и след това да генерирате файла със заявката за подписване на време. Например, ако трябва да се подпише BASE64 блок от вида:

    $ echo -n "gGR7OlZ2CmznRzSxEHtlkNfLQ6E8LKhV/gKafczvMY2mqVgR0VUpfJfspW/ZqaImsDe0oBOah7UB" | sha384sum | awk '{print $1}'

    Резултатът, който ще получите е контролната сума на блока информация:

    51627215838c44e1b6760a66dd372e66ee6dadb7ad2d8dac3a56473a2469d9876d71414e7dffff7b23c212a21533a621

    За да създадете файла със заявка за времеподписването на този блок, трябва да укажете получения хеш след -digest, както е показано по-долу:

    $ openssl ts -query -digest 51627215838c44e1b6760a66dd372e66ee6dadb7ad2d8dac3a56473a2469d9876d71414e7dffff7b23c212a21533a621 -sha384 -cert -out message-block.tsq

    Създадената заявка (за примера тя е във файла message-block.tsq), трябва да бъде изпратена до TimeStamp сървър. Как става това е описано в "Изпращане на заявката за подписване на време към TimeStamp сървър и получаване на цифрово подписания отговор".

 

3. Изпращане на заявката за подписване на време към TimeStamp сървър и получаване на цифрово подписания отговор

След като заявката за подписване на време бъде генерирана по един от начините показани по-горе в "Създаване на заявка за подписване на време и нейното подписване", тя трябва да бъде изпратена до TimeStamp сървъра, възможно най-бързо. Обикновено, изпращането на заявката става чрез HTTP клиент по транспортен протокол HTTP/HTTPS. В рамките на тази услуга, цифрово подписаният отговор на заявката се връща почти веднага след изпращането ѝ и то в рамките на комуникацията по вече установената HTTP сесия, използвана за изпащане на заявката.

По-долу е показан пример как чрез HTTP клиента curl, файла със заявката (messages-20190414.gz.tsq) да бъде изпратен от TimeStamp съвъра pki.uni-sofia.bg, върху който TimeStamp услугата е достъпна по HTTP протокол на адрес http://pki.uni-sofia.bg/tsa и цифрово подписания отговор - цифров подпис на време - да се запази като файла messages-20190414.gz.tsr:

$ curl -s -k -H "Content-Type: application/timestamp-query" -H Host:pki.uni-sofia.bg --data-binary @messages-20190414.gz.tsq "http://pki.uni-sofia.bg/tsa"  > messages-20190414.gz.tsr

Полученият цифрово подписан отговор на заявката за подписване на време (messages-20190414.gz.tsr), трябва да бъде запазен като критично важен цифров документ (дори под формата на няколко копия, за да се гарантира, че няма да бъде загубен). В него се съдържа доказателството, че съдържанието във файла, за което е генерирана заявката, отговаря на контролната сума, подписана от TimeStamp услугата по време на установената HTTP сесия (времето се отбелязва като дата, час, минути, секунди, милисекунди, микросекунди).

ВНИМАНИЕ! В никакъв случай не изтривайте файла със заявката (за примера това е messages-20190414.gz.tsq). Запазете го по същия начин, по който пазите файла, за който е издаден подпис на време и самия подпис на време.

 

4. Проверка на валидността на цифров подпис на време и датиране на съдържанието

Преди да установите дали съдържанието на файла, за който е изчислена цифрово подписаната сума, не е променяно след датата и часа подписването, трябва да проверите валидността на цифровия подпис, който TimeStamp сървъра е поставил върху отговора на изпратената заявка. Ако сте следвали примера в "Изпращане на заявката за подписване на време към TimeStamp сървър и получаване на цифрово подписания отговор", този отговор ще се намира запазен във файла messages-20190414.gz.tsr (във вашия конкретен случай този файл ще е друг).

Това, което ви трябва за да проверите цифровия подпис на TimeStamp сървъра, направен върху отговора на заявката, е сертификатната верига, която удостоверява X.509 сертификата на сървъра, файла, за който е заявено подписване на времето или заявката за издаване на подпис за време. Имайте предвид, че в най-честия случай, оператора на TimeStamp услугата трябва да ви даде веригата като файл. В някой случаи може да се наложи вие да я съставите, изтегляйки удостоверителските X.509 сертификати един по един. Ако сте следвали примера, който е даден в "Изпращане на заявката за подписване на време към TimeStamp сървър и получаване на цифрово подписания отговор", то единствения X.509 сертификат, който ще ви е нужен за проверката на цифровия подпис ще е този на Удостоверителя на СУ. Него може да изтеглите с wget:

$ wget https://pki.uni-sofia.bg/crt/SU_ECC_Root_CA.crt

или curl:

$ curl -O https://pki.uni-sofia.bg/crt/SU_ECC_Root_CA.crt

След това, в зависимост дали разполагате с контролната сума на съдържанието във файла, самия файл или заявката за подписване на време, изпълнете:

  • разполагате с контролната сума на съдържанието, за което е направен подписа:

    В този случай трябва да посочите контролната сума след -digest, например:

    $ openssl ts -verify -digest 46797935f16d2a3bb59e7195bb15311234fae4afbfd109c0dec47b164aca28ea6495fef5182a65ab98abfcd5510d960b -in messages-20190414.gz.tsr -CAfile SU_ECC_Root_CA.crt

    При успешна проверка на автентичността на подписа за време, ще получите резултата:

    Verification: OK
  • разполагате с файла, чието съдържание е подписано:

    В този случай трябва да посочите файла след -data, например:

    $ openssl ts -verify -data messages-20190414.gz -in messages-20190414.gz.tsr -CAfile SU_ECC_Root_CA.crt

    При успешна проверка на автентичността на подписа за време, ще получите резултата:

    Verification: OK

След като се уверите, че подписа е валиден (изведено е "Verification: OK"), може да изведете информация за времето, което е удостоверено от TimeStamp сървъра, както и друга информация за подписването. Това може да стане така, ако отговора на подписаната заявка е във файла messages-20190414.gz.tsr:

$ openssl ts -reply -in messages-20190414.gz.tsr -text

При успешно изпълнение на горния команден ред, ще получите информация, която е структурирана по следния начин:

Status info:
Status: Granted.
Status description: unspecified
Failure info: unspecified

TST info:
Version: 1
Policy OID: 1.2.3.4.1
Hash Algorithm: sha384
Message data:
    0000 - 46 79 79 35 f1 6d 2a 3b-b5 9e 71 95 bb 15 31 12   Fyy5.m*;..q...1.
    0010 - 34 fa e4 af bf d1 09 c0-de c4 7b 16 4a ca 28 ea   4.........{.J.(.
    0020 - 64 95 fe f5 18 2a 65 ab-98 ab fc d5 51 0d 96 0b   d....*e.....Q...
Serial number: 0x0259
Time stamp: May  2 23:18:21 2019 GMT
Accuracy: 0x01 seconds, 0x01F4 millis, 0x64 micros
Ordering: yes
Nonce: 0xDD83918F8385F7B6
TSA: DirName:/O=uni-sofia.bg/CN=TSR000001/emailAddress=admin@tsa.uni-sofia.bg
Extensions:

Времето, което е обект на подписване (удостоверяване) е посочено след "Time stamp:" (горе този ред е оцветен в зелено), а точността на времеотчитането е описана след Accuracy: (с използване на шестнадесетични числа). Забележете и как е представена контролната сума след Message data:.

Проверката посочена горе, ако е успешна, показва следното: съдържанието, чиято контролна сума се намира в подписа върху заявката за подписване на време, е съществувало преди времето, което е отбелязано и подписано от TimeStamp сървъра.
Този извод, се нарича "датировка" на съдържанието!

 


Последна актуализация: 28 април 2019

2019 УНИТе, Веселин Колев