Jotta allekirjoitettu PDF-tiedosto voidaan todentaa vuosien kuluttua, sen jälkeen kun allekirjoitusvarmenne vanhenee ja sen varmentaja vaihtuu, PDFium-komponentti voi tuottaa pitkäaikaisia PAdES-allekirjoituksia Windowsissa. Se tukee RFC 3161 -aikaleimaa luotettavalle ajalle, Document Security Store -säilöä todentamismateriaalin upottamiseen ja DocTimeStamp-arkistoaikaleimaa koko tiedoston päälle. Nämä kolme lisäystä muodostavat PAdES-perustasot B-T, B-LT ja B-LTA, ja PDFium-komponentti saavuttaa ne kaikki yhdestä allekirjoituskutsusta. Tämä on vain Windowsissa käytettävä ominaisuus, jonka suojana on PadesCryptoAvailable
Tämä artikkeli on sarjan kolmas. Ensimmäinen, PDF-tiedostojen allekirjoittaminen PAdES B-B -tasolla PDFium VCL:llä, kattaa perusallekirjoituksen; toinen, PDF-digitaalisten allekirjoitusten ja PAdES-tasojen tarkastelu, kattaa allekirjoituksen lukemisen ja sen tason määrittämisen. Tässä artikkelissa keskitytään arkistoon: allekirjoituksiin, joiden on säilyttävä varmenteen vanhenemisen yli ja pysyttävä todennettavissa vuosina, ei viikkoina, mitattavan säilytysajan
Miksi voimassa oleva PDF-allekirjoitus lakkaa toimimasta ajan myötä?
Perusallekirjoitus vastaa vain yhteen kysymykseen: muutettiinko näitä tavuja allekirjoittamisen jälkeen. Se ei itsessään todista, milloin allekirjoittaminen tapahtui, ja tämä aukko rikkoo sen myöhemmin. CMS-rakenne kantaa allekirjoitusaikamääritettä (signing-time attribute), mutta allekirjoittaja kirjoittaa tuon arvon omasta kellostaan, joten validaattorilla ei ole syytä luottaa siihen. Kun allekirjoitusvarmenne myöhemmin vanhenee tai CA peruuttaa sen, tiukka validaattori ei voi enää erottaa varmenteen voimassaoloaikana tehtyä allekirjoitusta sellaisesta, joka on väärennetty sen päättymisen jälkeen. Allekirjoitus oli kunnossa sinä päivänä, kun se tehtiin, ja siitä tulee todennuskulmaton ilman omaa syytään
Pitkäaikainen arkistointi korjaa tämän kahdella tavalla. Ensinnäkin luotettu kolmas osapuoli, aikaleimaviranomainen (TSA), vahvistaa ajan kryptografisesti, joten se ei ole enää riippuvainen allekirjoittajan rehellisyydestä. Toiseksi jokainen varmenne, peruutusoikeus ja CRL, jota tarvitaan luottamusketjun rakentamiseen ja tarkistamiseen, upotetaan itse PDF-tiedostoon, joten todentaminen ei riipu palvelimista, jotka saattavat olla poissa käytöstä silloin, kun joku asiaa tarkastelee. Standardissa ETSI EN 319 142-1 PAdES ryhmittelee nämä perustasoiksi, ja PDFium-komponentti kirjoittaa kunkin tason vaatimat rakenteet
Mikä on LTV- tai arkistoaikaleimattu PDF-allekirjoitus?
PAdES määrittelee neljä perustasoa, jotka rakentuvat toistensa päälle, ja PDFium-komponentti tuo ne esille TPadesLevel-luettelotyypin kautta (plB_B, plB_T, plB_LT, plB_LTA). B-B on tavallinen allekirjoitus. B-T lisää luotetun aikaleiman allekirjoitusarvon päälle. B-LT (long-term) lisää upotetun todentamismateriaalin, eli ominaisuuden, jota useimmat ihmiset tarkoittavat termillä "LTV". B-LTA (long-term with archive timestamp) käärii kaiken vielä yhteen aikaleimaan, joka kattaa koko tiedoston, joten upotettu materiaali itsessään on todistettavasti muuttumaton arkistointihetkestä lähtien
Käytännön luenta on portaikko. B-T todistaa milloin. B-LT todistaa millä allekirjoitus voidaan edelleen tarkistaa. B-LTA todistaa, että koko paketti on pysynyt muuttumattomana sen sulkemisen jälkeen, ja se on se taso, jonka uusit lisäämällä uuden DocTimeStamp-aikaleiman ennen edellisen vanhenemista arkiston pidentämiseksi rajattomasti. Sopimukselle tai vaatimustenmukaisuusraportille, jolla on pitkä säilytysvelvollisuus, B-LTA on tavoite; B-LT on käytännön alaraja
Luotetun ajan lisääminen: PAdES B-T ja RFC 3161
PDFium-komponentti muuttaa B-B-allekirjoituksen B-T-allekirjoitukseksi asettamalla kaksi kenttää TPadesSignOptions-tietueeseen: nosta Level-arvoksi plB_T ja anna TsaUrl. Kun molemmat ovat olemassa, allekirjoitusputki tiivistää (hash) raa'at allekirjoituksen lokerot SHA-256-algoritmillä, pakkaa tuon tiivisteen RFC 3161 messageImprint-muotoon, lähettää POST-pyynnön TSA-palvelimelle WinHttp-rajapinnan kautta ja upottaa palautetun tokenin signature-time-stamp-allekirjoituksen allekirjoittamattomana määritteenä (unsigned attribute, OID 1.2.840.113549.1.9.16.2.14) SignerInfo-osan unsignedAttrs [1]-kenttään standardin EN 319 142-1 §6.3 mukaisesti. Aikaleima kattaa erityisesti allekirjoitusarvon, mikä sitoo luotetun ajan juuri tuohon allekirjoitukseen
var
Pdf: TPdf;
Options: TPadesSignOptions;
begin
Pdf := TPdf.Create(nil);
try
if not Pdf.PadesCryptoAvailable then
raise Exception.Create('PAdES-allekirjoitus taustaosa toimii vain Windowsissa');
Pdf.FileName := 'contract.pdf';
Pdf.Active := True;
Options := TPadesSignOptions.Default;
Options.CertificateThumbprint := 'A1B2C3D4E5F6071829304152637485960A1B2C3D';
Options.Level := plB_T;
Options.TsaUrl := 'http://timestamp.example-tsa.com/tsr';
Options.Reason := 'Contract execution';
// Nonce jätetään nollaksi: komponentti johtaa uniikin anti-replay-arvon.
Pdf.SignPades('contract-bt.pdf', Options);
finally
Pdf.Free;
end;
end;
CertificateThumbprint on SHA-1-tiiviste heksamuodossa varmenteesta, joka sijaitsee Current User "MY" -säilössä ja jonka yksityistä avainta voit käyttää. Nonce-kenttä on RFC 3161 anti-replay-arvo. Jos jätät sen nollaksi, komponentti johtaa uniikin arvon kullekin pyynnölle SHA-256-tiivisteestä, joka koostuu laskurista, kellosta, tick-laskurista ja prosessin id:stä, joten kaksi samalla millisekunnilla annettua pyyntöä ei törmää. Välitä oma arvosi vain, jos sinulla on kryptografinen RNG, johon mieluummin luotat. Yksi rehellinen huomautus: B-T vaatii tavoitettavan TSA-palvelimen, joten allekirjoittaminen tekee nyt verkkokutsun ja perii TSA:n saatavuuden ja latenssin
Todentamismateriaalin upottaminen: B-LT ja B-LTA yhdellä kutsulla
Askel pitkäaikaiseen todentamiseen on yksi muutos: aseta Level-arvoksi plB_LTA ja säilytä TsaUrl. PDFium-komponentti ajaa silloin koko portaikon yhden ainoan SignPades-kutsun sisällä. Se allekirjoittaa B-B-tason, leimaa B-T-tason, injektoi Document Security Store -säilön B-LT-tasoa varten ja lisää arkistoaikaleiman B-LTA-tasoa varten, kunkin omana inkrementaalisena päivityksenään, jotta aiemmat tavut säilyvät täysin muuttumattomina
procedure SignForArchive;
var
Pdf: TPdf;
Options: TPadesSignOptions;
begin
Pdf := TPdf.Create(nil);
try
Pdf.FileName := 'contract.pdf';
Pdf.Active := True;
Options := TPadesSignOptions.Default;
Options.CertificateThumbprint := 'A1B2C3D4E5F6071829304152637485960A1B2C3D';
Options.Level := plB_LTA; // ajaa vaiheet B-B -> B-T -> B-LT -> B-LTA
Options.TsaUrl := 'http://timestamp.example-tsa.com/tsr';
Options.Location := 'Head Office';
// Yksi kutsu kirjoittaa aikaleiman, DSS-säilön ja arkisto-DocTimeStampin.
Pdf.SignPades('contract-lta.pdf', Options);
finally
Pdf.Free;
end;
end;
B-LT-vaiheetta varten PDFium-komponentti rakentaa varmenneketjun CertGetCertificateChain-kutsulla ja kirjoittaa /DSS-sanakirjan, joka kuljettaa allekirjoittajan varmenteen sekä jokaisen välivaiheen CA:n /Certs-taulukossa (sekä rinnakkaiset /OCSPs- ja /CRLs-taulukot) sekä /Extensions /ESIC Level 1 -merkin, aivan kuten standardi ETSI EN 319 142-1 §5.4.2 määrää. Itse allekirjoitettu juurivarmenne jätetään tietoisesti pois, koska RFC 5652 §10.2.3 sallii sen ja juuri on jo luottamusankkuri, joka validaattorilla on hallussaan. Tuloksena on allekirjoitus, jonka lukija voi todentaa pelkän tiedoston avulla
B-LTA-tasoa varten komponentti lisää Document Time-stamp -aikaleiman: allekirjoitussanakirjan, jossa on /SubFilter /ETSI.RFC3161 ja jonka /ByteRange kattaa koko tiedoston. Sen /Contents-kenttä sisältää kyseisen alueen kattavan RFC 3161 -tokenin, ja se nostaa ESIC-merkin tasolle Level 2. Tämä on standardin §5.4.3 ja TS 119 142-3 mukainen arkistointivaihe. Koska DocTimeStamp kattaa DSS-säilön sekä allekirjoituksen, se todistaa, että upotettu todentamismateriaali oli olemassa ja muuttumaton arkistointihetkellä, mikä on juuri se mitä pitkän säilytysajan politiikan on pystyttävä näyttämään
Olemassa olevan allekirjoituksen täydentäminen
Joskus allekirjoitus on jo asiakirjassa ja sinun tarvitsee vain lisätä tai päivittää todentamissälö (validation store), esimerkiksi tuoda kolmannen osapuolen B-B-allekirjoitus B-LT-tasolle arkistoasi varten. PDFium-komponentti tuo DSS-injektorin suoraan esille SaveAsPadesDss-metodilla, joka lisää /DSS- ja /Extensions-rakenteet inkrementaalisena päivityksenä koskematta olemassa oleviin allekirjoitustavuihin
procedure AddValidationStore;
var
Pdf: TPdf;
DssOpts: TPadesDssOptions;
Cert: TPadesDssMaterial;
begin
Pdf := TPdf.Create(nil);
try
Pdf.FileName := 'already-signed.pdf';
Pdf.Active := True;
DssOpts := TPadesDssOptions.Default;
DssOpts.EsicExtensionLevel := 1; // 1 tasolle B-LT, 2 tasolle B-LTA
Cert.DerBytes := LoadSignerCertDer; // DER-koodattu varmenteesi
SetLength(DssOpts.Certs, 1);
DssOpts.Certs[0] := Cert;
Pdf.SaveAsPadesDss('already-signed-lt.pdf', DssOpts);
finally
Pdf.Free;
end;
end;
Toimitat DER-koodatut varmenteet ja valinnaisesti OCSP-vastaukset ja CRL:t, joita validaattori tarvitsee. Aseta EsicExtensionLevel arvoon 1 B-LT-säilöä varten tai arvoon 2, jos sen jälkeen tulee DocTimeStamp. Jätä IncludeVri oletusarvoonsa False: standardi EN 319 142-1 §5.4.2.3 pitää allekirjoituskohtaista /VRI-sanakirjaa valinnaisena ja neuvoo välttämään sitä, ellei jokin tietty kohdelukija sitä vaadi
Kustannukset ja rajat, jotka on syytä suunnitella
Kolme rehellistä rajaa muovaa sitä, mihin nämä tasot sopivat. Ensinnäkin kryptografinen taustaosa toimii vain Windowsissa: allekirjoittaminen ja aikaleimaus kulkevat alustan CNG- ja WinHttp-säilöjen kautta, joten PadesCryptoAvailable palauttaa False-arvon muualla ja SignPades nostaa poikkeuksen. Companion-artikkelissa käsitelty lukupuolen tarkastus säilyy monialustaisena; vain allekirjoitusten kirjoittaminen on sidottu Windowsiin. Toiseksi B-T ja B-LTA ovat riippuvaisia aikaleimaviranomaisesta (TSA), mikä tarkoittaa verkkokierrosta allekirjoitushetkellä ja ulkoista palvelua, jonka saatavuus ja nopeusrajat tulevat osaksi allekirjoituspolkuasi
Kolmanneksi jokainen taso maksaa tallennustilaa. Jokainen vaihe lisää inkrementaalisen päivityksen tiedoston uudelleenkirjoittamisen sijaan, DSS upottaa täyden varmenneketjun ja arkiston DocTimeStamp varaa tilaa tokenilleen, joten B-LTA-tiedosto on huomattavasti suurempi kuin alkuperäinen B-B. Tämä on tietoinen vaihtokauppa: käytät tavuja nyt ostaaksesi todennettavuutta myöhemmin. Useimmille sopimus- ja vaatimustenmukaisuusarkistoille se on oikea kauppa, mutta se kannattaa mitata omilla asiakirjoillasi sen sijaan, että olettaisit. Kun haluat vahvistaa, että valmis tiedosto todella saavutti tavoittelemasi tason, todenna se artikkelin PDF-digitaalisten allekirjoitusten ja PAdES-tasojen tarkastelu tekniikoilla. Ja jos kovennat asiakirjaputkea laajemmin, artikkelin PDF-turvallisuusriskien auditointi muistiinpanot kattavat ympäröivät tarkistukset
Tässä esitetyt PAdES-allekirjoitus-, DSS- ja arkistoaikaleimaominaisuudet ovat osa Delphille ja C++Builderille tarkoitettua PDFium-komponenttia, jonka tuotesivu sisältää täydellisen allekirjoitusviitteen ja alustavaatimukset