Digitální podpis ve formátu PDF

Zaručený elektronický podpis je v současnosti již běžným způsobem, jak pomocí kvalifikovaného certifikátu zajistit nezpochybnitelnou souvislost mezi elektronickým dokumentem a jeho autorem. Elektronický podpis slouží především k identifikaci autora a k zajištění integrity dokumentu, tedy aby zaručil, že dokument nebyl od svého vytvoření bez vědomí autora pozměněn. Klasická verze elektronického podpisu však chápe elektronický podpis pouze jako doplněk již existujícího dokumentu, který může vystupovat i samostatně jako nepodepsaný. Podpis není součástí dokumentu, je jen jakýmsi přívěškem, pomocí něhož je možné ověřit autorství. Tím se ale zásadně odlišuje od podpisu, jak ho uživatelé znají z dokumentů v papírové podobě. Na listině se podpis stává její neoddělitelnou součástí a je na ní viditelně přítomen, od okamžiku podpisu již není možné listinu od podpisu oddělit. Právě filosofie podpisu běžných papírových dokumentů byla motivací ke vzniku speciálního podpisu ve formátu PDF. V článku se podíváme, jak je digitální podpis PDF technicky realizován a jaké výhody to přináší uživatelům.


Jak probíhá elektronické podepisování?

Abychom se mohli věnovat elektronicky podepsaným PDF dokumentům, musíme se nejprve krátce zastavit u obecného postupu elektronického podepisování. V dnešním digitálním světě probíhá podepisování a ověřování dokumentů pomocí asymetrické kryptografie, tedy pomocí privátních a veřejných klíčů. Zatímco privátní klíč je číslo známé pouze svému držiteli, hodnota veřejného klíče může být libovolně šířena a je také součástí kvalifikovaného certifikátu, který ve světě dnešního internetu představuje něco jako občanský průkaz.

Máme-li tedy soubor k podepsání, postupujeme následujícím způsobem: ze souboru spočítáme takzvaný „otisk“ (heš) předem stanovené délky, z celého souboru tak získáme například 256 bitů. Na ně aplikujeme privátní klíč a výslednou hodnotu podpisu spolu s certifikátem, informací o zvolené hešovací funkci a o způsobu použití privátního klíče přiložíme k souboru. Až bude v budoucnu někdo chtít ověřit, zda je podpis platný, nahlédne na použitou hešovací funkci a spočítá otisk souboru, čímž získá první hodnotu. Následně aplikuje veřejný klíč (získaný z přiloženého certifikátu autora dokumentu) na podpis, a získá tak hodnotu druhou. Pokud se obě hodnoty rovnají, je elektronický podpis platný a k souboru může být přistupováno jako k důveryhodnému zdroji informací.

Struktura PDF

Formát PDF má jednoduchou strukturu, která je uvnitř souboru uchována v textové podobě. Máte-li nějaký pdf dokument po ruce, zkuste si ho otevřít v textovém editoru. Většina .pdf souborů je dnes generována aplikacemi a nepředpokládá se, že bude někdo do dokumentu nahlížet lidskýma očima. Proto v textové podobě PDF zpravidla chybí konce řádků, odsazení a nadbytečné mezery, což činí text značně nepřehledným.

Pdf se skládá především z hlavičky a seznamu objektů. Jedním z objektů dokumentu je i elektronický podpis, podívejme se proto, jak vypadá běžný objekt ve své textové podobě:

1 0 obj <<
    /key1 value1
    /key2 value2
    /key3 value3
    ...
>> endobj

Objekt je vždy uvozen klíčovým slovem obj a symboly „<<„, ukončen symboly „>>“ a klíčovým slovem endobj. Tělo objektu můžeme chápat jako mapu atributů klíč – hodnota, přičemž název klíče je vždy uvozen lomítkem a od své hodnoty je oddělen mezerou. Hodnoty před klíčovým slovem obj objekt v rámci dokumentu jednoznačně identifikují.

Objekt typu /Sig

Elektronický podpis PDF dokumentu je běžný objekt a je tedy součástí dokumentu. Poznáme ho podle klíče /Type s hodnotou /Sig. Pokud Vám podobně jako mně nedávno dorazilo vyúčtování od mobilního operátora, zkuste si dokument otevřít jako textový a vyhledejte řetězec „/Sig“. Nejspíš uvnitř naleznete něco podobného jako já:

1 0 obj <<

    /Contents <308006092a86...000000>
    /Type /Sig
    /SubFilter /adbe.pkcs7.detached
    /M (D:20110414092245+02'00')
    /ByteRange [0 238 32238 249523]
    /Filter /Adobe.PPKLite
    /Reference [ <<
        /Type /SigRef
        /TransformParams <<
             /Type /TransformParams
             /V /1.2
             /P 1 >>
        /TransformMethod /DocMDP >>]
>> endobj

Podívejme se, co znamenají jednotlivé atributy. Kromě už zmíněného /Type /Sig, který říká, že se jedná o podpis, můžeme v atributu /M nalézt datum podpisu a v atributu /ByteRange takzvanou podepisovanou část. Je totiž pochopitelné, že otisk dokumentu nemohl být vypočítán z podpisu samotného, ten se vytváří až se známým otiskem. Proto musí být v atributu /ByteRange stanoveno, ze kterých bajtů byl otisk spočítán. V příkladu výše se tedy použily bajty 0 až 238 a bajty 32238 až 249532. V chybějícím úseku se v mém souboru nachází objekt představující podpis.

Atributy /Filter a /SubFilter a odkaz /Reference uvádí, jaké hešovací funkce, kryptografické algoritmy a jejich konkrétní implementace byly použity pro elektronický podpis. Například „adbe.pkcs7.detached“ značí standardní postup od společnosti Adobe.

Do objemu dat největší částí podpisu je hodnota atributu /Contents, jistě jste si ve svém souboru všimli posloupnosti číslic v šestnáctkové soustavě, zpravidla končící dlouhým blokem nul. V ní je uchován certifikát autora dokumentu a samotná číselná hodnota podpisu.

Do hlubin atributu /Contents

Jak jsem už zmínil, v hodnotě atributu /Contents se skrývá samotná hodnota elektronického podpisu. Sekvence číslic šestnáctkové soustavy představuje data v BER kódování jazyka ASN.1. Použjeme-li číslo jako vstup nějakého prohlížeče jazyka ASN.1 (například program Dumpasn1), můžeme data dekódovat a prohlédnout si jejich obsah.

Moje vyúčtování mobilních služeb obsahovalo běžnou CMS zprávu typu SignedData, obsahující certifikát „T-Mobile Czech Republic – elektronická fakturace“ a samotný podpis s použitým algoritmem RSA.

V čem je takový podpis lepší než ten obvyklý?

V provedení dokumentu PDF se podpis stal přirozenou součástí dokumentu, což je stav na který je z papírové podoby dokumentů zvyklý běžný uživatel: je přirozenější hledat podpis přímo na dokumentu než někde v jeho okolí. A co je nejdůležitější, podpis může na dokumentu dokonce být vidět! Coby běžný PDF objekt může mít svou grafickou podobu a být umístěn přímo na dokumentu, uživatel na podpis jen najede kurzorem myši a dozví se vše podstatné o autorství dokumentu. Mé vyúčtování telefonických služeb podpis obsahovalo jen jako očima neviditelný objekt, v českém prostředí zatím není viditelný podpis bohužel příliš obvyklý.

Závěr

V článku jsme se podívali na strukturu PDF a na specifický způsob podepisování dokumentů v tomto formátu. Kdybyste měli jakékoli otázky, neváhejte a napište na adresu vojtech.matocha@bcvsolutions.eu!