isdoc / dsig-demo

Sample application for signing ISDOC documents
Apache License 2.0
3 stars 3 forks source link

Vložené časové razítko #3

Open jlejtnar opened 5 years ago

jlejtnar commented 5 years ago

Dobrý den, trochu mě mate, proč by ISDOC měl mít v elementu EncapsulatedTimeStamp hodnotu TimeStampResp místo TimeStampToken?

V příkladu (https://github.com/isdoc/dsig-demo/blob/master/data/priklad-podepsany-casove-razitko.isdoc) tomu tak je.

Norma ISDOC (http://www.isdoc.cz/6.0/doc/isdoc.html) na jednu stranu říká, že _"Časové razítko musí být ve formě XAdES-T v souladu se specifikací [XAdES] (ETSI TS 101 903 v1.4.1, https://www.etsi.org/deliver/etsi_ts/101900_101999/101903/01.04.01_60/ts_101903v010401p.pdf)"_. Ovšem ve zmiňovaném TS 101 903 se v čl. 7.1.4 píše: “NOTE: readers should note that the term time-stamp token used thorought the present document does NOT refer to the TSA's response to a requesting client, but the token generated by the TSA, which is present within this response. In the case of RFC 3161 [10] protocol, the time-stamp token term is referring to the timeStampToken field within the TimeStampResp element (the TSA's response returned to the requesting client).” Tedy pokud se norma zmiňuje o vkládání časového razítka k podpisu, dle poznámky výše tím myslí TimeStampToken, nikoliv TimeStampResp.

Na straně druhé se pak v ISDOC normě píše: "Časové razítko musí vyhovovat formátu definovanému produkčním pravidlem TimeStampResp dle [RFC3161]. Časové razítko musí vždy obsahovat položku timeStampToken.", z čehož lze soudit, že se požaduje vkládání celé odpovědi autority vydávající razítka.

Je to opravdu tak, že se do EncapsulatedTimeStamp vkládá TimeStampResp?

Děkuji za odpověď.

kosek commented 5 years ago

Když se na to teď znovu po letech koukám, řekl bych, že máte pravdu. Přiznám se, že už si nevybavuji, zda i časové razítka se testovala i vůči dalším implementacím.

Píšete novou implementaci na "zelené louce" nebo jste narazil na nekompatibilitu s nějakými existujícími systémy, které vydávají/ověřují ISDOC s časovým razítkem?

jlejtnar commented 5 years ago

Děkuji za rychlou odpověď.

Pracuji na aplikaci pro vytváření a ověřování digitálních podpisů mj. formátu XAdES a chci přidat podporu pro ISDOC. Zaujala mě právě tato nesrovnalost, kdy XAdES pracuje s TimeStampToken a u ISDOC mi nebylo jasné, zda pracuje s TimeStampToken nebo s TimeStampResp.

Je fakt, že jsem si neověřoval, jak se k tomuto staví existující systémy (pokud vůbec razítko přidávají).

kosek commented 5 years ago

Asi to bude opravdu jen ten TimeStampToken. Ještě to jednou překontroluji a až se k tomu dostanu, opravím ukázkovou aplikaci. Oprava standardu ISDOC bude trvat chvíli déle. Každopádně díky moc za upozornění. Obávám se, že častová razítka s ISDOCem nikdo moc nepoužívá, takže se na nesrovnalost dosud nepřišlo.

jlejtnar commented 5 years ago

Ještě jeden rozdíl tu oproti XAdESu definovaném v TS 101 903 je. Jedná se o to, jak se získává hash, ze kterého se pak počítá razítko.

V TS 101 903 v článku 7.3 se píše: "The SignatureTimeStamp encapsulates the time-stamp over the ds:SignatureValue element. This property uses the implicit mechanism as the time-stamped data object is always the same. For building the input to the digest computation, applications MUST: 1) Take the ds:SignatureValue element and its contents. 2) If the ds:Canonicalization element is present canonicalize it using the indicated algorithm. If not, use the standard canonicalization method specified by XMLDSIG."

Tedy vezme se celý ds:SignatureValue element, provede se na něm kanonizace a z výsledku se pak spočítá hash.

Kdežto v normě ISDOC se píše: "Autoritě časového razítka se posílá otisk hodnoty digitálního podpisu z elementu SignatureValue. Otisk se přitom počítá z binární reprezentace hodnoty digitálního podpisu nikoli z textového obsahu elementu, který binární data obsahuje až po zakódování metodou base64. Pro výpočet otisku musí být použit algoritmus z rodiny SHA-2."

Tady se zase vezme hodnota z elementu SignatureValue, provede se na ní dekódování z Base64. Tím se získá hodnota digitálního podpisu. Z toho se spočítá hash.

kosek commented 3 years ago

Chystají se teď nějaké další změny do ISDOCu, takže se tam tenhle problém může napravit. Text specifikace jsem opravil, na návrh se můžete podívat na

https://isdoc.github.io/doc/isdoc.html#razitko

Budu rád, když potvrdíte, zda je to teď dle vás v pořádku.

Aplikaci se také pokusím opravit, až bude chvíle času.

jlejtnar commented 3 years ago

Dobrý den, děkuji za informaci.

Mám ještě připomínku k výpočtu hashe pro razítko: "Otisk se přitom počítá z textového obsahu elementu SignatureValue nikoliv z binární reprezentace hodnoty digitálního podpisu. Před výpočtem otisku se ještě provádí kanonizace."

Z tohoto textu podle mě není jasné, že se vezme celý element SignatureValue včetně jeho obsahu. Tedy i samotného SignatureValue elementu. Upravil bych tedy text na: "Otisk se přitom počítá z elementu SignatureValue včetně jeho obsahu nikoliv z binární reprezentace hodnoty digitálního podpisu. Před výpočtem otisku se ještě provádí kanonizace. (viz sekce 7.3 [XAdES])"

Děkuji.

S pozdravem, Jakub Lejtnar

kosek commented 3 years ago

Z tohoto textu podle mě není jasné, že se vezme celý element SignatureValue včetně jeho obsahu. Tedy i samotného SignatureValue elementu. Upravil bych tedy text na:

Díky, v další verzi ISDOCu už to bude, jak navrhujete.

Issue nechávám otevřené, aby bylo poznačené, že ukázková aplikace je špatně.