İmzalayan sertifikasının süresi dolduktan ve CA'sı rotasyon yaptıktan yıllar sonra imzalı bir PDF'in doğrulanmasını sağlamak için, PDFium Bileşeni Windows'ta uzun vadeli PAdES imzaları üretebilir: güvenilir zaman için bir RFC 3161 zaman damgası, doğrulama materyalini gömen bir Belge Güvenlik Deposu (Document Security Store) ve tüm dosyayı kapsayan bir arşiv DocTimeStamp zaman damgası. Bu üç eklenti PAdES B-T, B-LT ve B-LTA temel seviyeleridir ve PDFium Bileşeni tek bir imzalama çağrısından hepsine ulaşır. Bu, PadesCryptoAvailable özelliği ile geçit verilen yalnızca Windows'a özel bir yetenektir
Bu makale serinin üçüncüsüdür. İlki, PDFium VCL kullanarak PAdES B-B ile PDF'leri imzalama konusunu kapsar; ikincisi, PDF dijital imzalarını ve PAdES seviyelerini inceleme konusu imzanın geri okunmasını ve hangi seviyeye ulaştığının belirlenmesini kapsar. Burada üzerinde durulan konu arşivdir: sertifika süresinin dolmasından sonra hayatta kalması ve haftalar değil, yıllarla ölçülen bir saklama süresi boyunca doğrulanabilir kalması gereken imzalar
Geçerli bir PDF imzası zamanla neden doğrulanmaz hale gelir?
Temel bir imza yalnızca tek bir soruyu yanıtlar: imzalamadan sonra bu baytlar değiştirildi mi. İmzalamanın ne zaman gerçekleştiğini kendi başına kanıtlamaz ve bu boşluk daha sonra imzayı bozar. CMS yapısı bir imzalama zamanı özniteliği taşır, ancak imzalayan bu değeri kendi saatinden yazar; bu nedenle bir doğrulayıcının buna güvenmek için hiçbir nedeni yoktur. İmzalayan sertifikasının süresi daha sonra dolduğunda veya CA bunu iptal ettiğinde, katı bir doğrulayıcı artık sertifika geçerliyken yapılan bir imza ile süresi dolduktan sonra taklit edilen bir imza arasındaki farkı ayırt edemez. İmza, yapıldığı gün iyi durumdaydı ve kendi hatası olmaksızın doğrulanamaz hale gelir
Uzun vadeli arşivleme bunu iki hamlede düzeltir. İlk olarak, güvenilir bir üçüncü taraf olan bir Zaman Damgası Yetkilisi (Time Stamping Authority), zamanı kriptografik olarak onaylar; böylece zaman artık imzalayanın dürüstlüğüne bağlı kalmaz. İkinci olarak, güven zincirini oluşturmak ve kontrol etmek için gereken her sertifika, iptal yanıtı ve CRL, PDF dosyasının içine gömülür; böylece doğrulama, birisi baktığında ortadan kalkmış olabilecek sunuculara bağımlı olmaz. ETSI EN 319 142-1 olarak standartlaştırılan PAdES, bunları temel seviyeler olarak katmanlandırır ve PDFium Bileşeni her seviyenin gerektirdiği yapıları yazar
LTV veya arşiv zaman damgalı PDF imzası nedir?
PAdES, birbiri üzerine inşa edilen dört temel seviye tanımlar ve PDFium Bileşeni bunları TPadesLevel listesi (plB_B, plB_T, plB_LT, plB_LTA) aracılığıyla sunar. B-B düz imzadır. B-T, imza değeri üzerine güvenilir bir zaman damgası ekler. B-LT (long-term - uzun vadeli), çoğu insanın "LTV" ile kastettiği özellik olan gömülü doğrulama materyalini ekler. B-LTA (long-term with archive timestamp - arşiv zaman damgalı uzun vadeli) ise her şeyi, tüm dosyayı kapsayan bir zaman damgasıyla daha sarar; böylece gömülü materyalin kendisi arşivleme anından itibaren provayla bozulmamış olur
Pratik okuma bir merdivendir. B-T ne zaman olduğunu kanıtlar. B-LT imzanın ne ile kontrol edilebileceğini kanıtlar. B-LTA, tüm paketin mühürlendiğinden beri kurcalanmadığını kanıtlar ve arşivi süresiz olarak uzatmak için bir önceki zaman damgasının süresi dolmadan önce yeni bir DocTimeStamp ekleyerek yenilediğiniz seviyedir. Yıllar süren uzun bir saklama yükümlülüğü olan bir sözleşme veya uyumluluk kaydı için hedef B-LTA'dır; B-LT ise pragmatik tabandır
Güvenilir zaman ekleme: RFC 3161 ile PAdES B-T
PDFium Bileşeni, TPadesSignOptions üzerinde iki alan ayarlayarak bir B-B imzasını B-T'ye dönüştürür: Level özelliğini plB_T seviyesine yükseltin ve bir TsaUrl sağlayın. Her ikisi de mevcut olduğunda, imzalama işlem hattı ham imza sekizlilerini SHA-256 ile özetler, bu özeti RFC 3161 messageImprint olarak paketler, isteği WinHttp üzerinden TSA'ya POST eder ve döndürülen belirteci EN 319 142-1 §6.3 uyarınca SignerInfo unsignedAttrs [1] içindeki imza zaman damgası (signature-time-stamp) imzasız özniteliği (OID 1.2.840.113549.1.9.16.2.14) olarak gömer. Zaman damgası özellikle imza değerini kapsar, bu da güvenilir zamanı tam olarak o imzaya bağlayan şeydir
uses
PDFium, FPdfPades;
procedure SignWithTimestamp;
var
Pdf: TPdf;
Options: TPadesSignOptions;
begin
Pdf := TPdf.Create(nil);
try
if not Pdf.PadesCryptoAvailable then
raise Exception.Create('PAdES signing backend is Windows-only');
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 left at 0: the component derives a unique anti-replay value.
Pdf.SignPades('contract-bt.pdf', Options);
finally
Pdf.Free;
end;
end;
CertificateThumbprint, Current User "MY" deposunda bulunan ve özel anahtarını kullanabileceğiniz bir sertifikanın hex formatındaki SHA-1 özetidir. Nonce alanı RFC 3161 yineleme önleme (anti-replay) değeridir; bunu sıfır olarak bırakın ve bileşen, bir sayaç, saat, tick sayısı ve işlem kimliğinin SHA-256 katlamasından istek başına benzersiz bir değer türetir; böylece aynı milisaniyede verilen iki istek çakışmaz. Kendi değerinizi yalnızca daha fazla güvendiğiniz bir kriptografik RNG'niz olduğunda geçirin. Dürüst bir uyarı: B-T ulaşılabilir bir TSA'ya ihtiyaç duyar, bu nedenle şimdi imzalama bir ağ araması yapar ve TSA kullanılabilirliği ile gecikmesini miras alır
Doğrulama materyalini gömme: Tek bir çağrıda B-LT ve B-LTA
Uzun vadeli doğrulamaya geçiş tek bir değişikliktir: Level özelliğini plB_LTA olarak ayarlayın ve TsaUrl değerini koruyun. PDFium Bileşeni daha sonra tek bir SignPades çağrısı içinde tüm merdiveni çalıştırır. B-B imzalar, B-T için zaman damgası vurur, B-LT için Belge Güvenlik Deposunu (Document Security Store) enjekte eder ve B-LTA için arşiv zaman damgasını ekler; her biri kendi artımlı güncellemesi olarak eklenir, böylece önceki baytlar bayt bayt bozulmadan kalır
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; // drives B-B -> B-T -> B-LT -> B-LTA
Options.TsaUrl := 'http://timestamp.example-tsa.com/tsr';
Options.Location := 'Head Office';
// One call writes the timestamp, the DSS and the archive DocTimeStamp.
Pdf.SignPades('contract-lta.pdf', Options);
finally
Pdf.Free;
end;
end;
B-LT aşaması için PDFium Bileşeni, CertGetCertificateChain ile sertifika zincirini oluşturur ve tam olarak EN 319 142-1 §5.4.2'nin öngördüğü şekilde, bir /Certs dizisi içinde imzalayan sertifikasını ve her ara CA'yı (paralel /OCSPs ve /CRLs dizileriyle birlikte) taşıyan bir /DSS sözlüğü ve Seviye 1'de bir /Extensions /ESIC işaretçisi yazar. Kendinden imzalı kök, RFC 5652 §10.2.3 izin verdiğinden ve kök zaten doğrulayıcının elinde tuttuğu bir güven çapası olduğundan kasıtlı olarak atlanır. Sonuç, bir okuyucunun elindeki dosyadan başka hiçbir şeye ihtiyaç duymadan doğrulayabileceği bir imzadır
B-LTA için bileşen bir Belge Zaman Damgası ekler: /ByteRange aralığı tüm dosyayı kapsayan, /Contents kısmı o aralık üzerinde bir RFC 3161 belirteci tutan /SubFilter /ETSI.RFC3161 değerine sahip bir imza sözlüğü ve ESIC işaretçisini Seviye 2'ye yükseltir. Bu, §5.4.3 ve TS 119 142-3 arşiv adımıdır. DocTimeStamp, imzanın yanı sıra DSS'yi de kapsadığından, gömülü doğrulama materyalinin arşivleme anında mevcut ve değiştirilmemiş olduğunu kanıtlar; bu da uzun bir saklama politikasının tam olarak gösterebilmesi gereken şeydir
Halihazırda var olan bir imzayı zenginleştirme
Bazen imza belgede zaten mevcuttur ve arşiviniz için üçüncü taraf bir B-B imzasını B-LT'ye yükseltmek gibi yalnızca doğrulama deposunu eklemeniz veya yenilemeniz gerekir. PDFium Bileşeni, mevcut imza baytlarına dokunmadan /DSS ve /Extensions yapılarını artımlı bir güncelleme olarak ekleyen SaveAsPadesDss aracılığıyla DSS enjektörünü doğrudan sunar
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 for B-LT, 2 for B-LTA
Cert.DerBytes := LoadSignerCertDer; // your DER-encoded certificate
SetLength(DssOpts.Certs, 1);
DssOpts.Certs[0] := Cert;
Pdf.SaveAsPadesDss('already-signed-lt.pdf', DssOpts);
finally
Pdf.Free;
end;
end;
Bir doğrulayıcının ihtiyaç duyacağı DER kodlu sertifikaları ve isteğe bağlı olarak OCSP yanıtlarını ve CRL'leri sağlarsınız. B-LT deposu için EsicExtensionLevel değerini 1 veya bir DocTimeStamp takip edeceğinde 2 olarak ayarlayın. IncludeVri özelliğini varsayılan False değerinde bırakın: EN 319 142-1 §5.4.2.3, imza başına /VRI sözlüğünü isteğe bağlı olarak değerlendirir ve hedeflediğiniz belirli bir okuyucu bunu talep etmedikçe önermez
Planlamaya değer maliyetler ve sınırlar
Üç dürüst sınır bu seviyelerin nereye sığacağını şekillendirir. İlk olarak, kriptografik arka uç yalnızca Windows'a özeldir: imzalama ve zaman damgası vurma işlemleri platform CNG ve WinHttp depolarından geçer, bu nedenle PadesCryptoAvailable başka yerlerde False döndürür og SignPades hata verir. Yardımcı makalede ele alınan okuma tarafı incelemesi platformlar arası kalır; yalnızca imzaların yazılması Windows'a bağlıdır. İkinci olarak, B-T ve B-LTA bir Zaman Damgası Yetkilisine bağlıdır, bu da imzalama anında bir ağ turu ve çalışma süresi ile oran limitleri imzalama yolunuzun bir parçası haline gelen harici bir hizmet anlamına gelir
Üçüncüsü, her seviye depolama maliyeti getirir. Her aşama dosyayı yeniden yazmak yerine artımlı bir güncelleme ekler, DSS tam bir sertifika zinciri gömer ve arşiv DocTimeStamp belirteci için yer ayırır; bu nedenle bir B-LTA dosyası B-B orijinalinden belirgin şekilde daha büyüktür. Bu bilinçli bir takastır: daha sonra doğrulanabilirliği satın almak için şimdi bayt harcarsınız. Çoğu sözleşme ve uyumluluk arşivi için bu doğru takastır, ancak varsaymak yerine kendi belgelerinizde ölçmeye değer. Bitmiş bir dosyanın gerçekten amaçladığınız seviyeye ulaştığını doğrulamak istediğinizde, bunu PDF dijital imzalarını ve PAdES seviyelerini inceleme makalesindeki tekniklerle doğrulayın ve genel olarak bir belge işlem hattını sağlamlaştırıyorsanız, PDF güvenlik risklerini denetleme notları çevre kontrollerini kapsar
Burada gösterilen PAdES imzalama, DSS ve arşiv zaman damgası özellikleri, ürün sayfası tam imzalama referansını ve platform gereksinimlerini taşıyan Delphi ve C++Builder için PDFium Bileşeni'nin bir parçasıdır