Przejdź do głównej zawartości

Model bezpieczeństwa podpisywania i szyfrowania

Ta strona określa model bezpieczeństwa dla dwóch powierzchni kryptograficznych udostępnianych przez silnik podstawowy: szyfrowania dokumentu za pomocą 256-bitowego Advanced Encryption Standard (AES-256) oraz podpisywania dokumentu za pomocą Cryptographic Message Syntax (CMS)/PDF Advanced Electronic Signatures (PAdES). Wyjaśnia, co chroni każdy mechanizm, czego nie chroni i gdzie przebiega granica zaufania.

Granica. Sama obsługa mechanizmu kryptograficznego nie gwarantuje bezpieczeństwa wdrożenia. Siła zaszyfrowanego dokumentu zależy od wybranego hasła oraz sposobu przechowywania klucza. Znaczenie podpisu zależy od certyfikatu, kotwicy zaufania, urzędu znacznika czasu oraz polityki weryfikatora. Te kontrole znajdują się poza biblioteką. Ta strona opisuje mechanizm; nie certyfikuje wyniku.

Okno terminala
composer require nextpdf/core:^3

Rozszerzenie ext-openssl jest wymagane przez ścieżki podpisywania i CMS.

W silniku podstawowym szyfrowanie korzysta z modułu obsługi bezpieczeństwa AES-256 z ISO 32000-2 §7.6 (AESV3, Revision 6) (iso32000_2_sec7#x1.x65.p29). Zapewnia poufność: podmiot bez hasła nie może odczytać zawartości łańcuchów znaków ani strumieni. Nie zapewnia integralności ani autentyczności. Szyfrogram nadal może zostać obcięty lub podmieniony. Taką zmianę musi wykryć podpis albo kod uwierzytelniania wiadomości dokumentu (MAC); moduł obsługi szyfrowania tego nie wykrywa.

Uprawnienia (drukowanie, kopiowanie, modyfikowanie) są odrębne i łatwo je błędnie zinterpretować. Flagi uprawnień ISO 32000-2 opierają się na współpracy czytnika (iso32000_2_sec7#x1.x71.p27). Zgodny czytnik je respektuje, ale są to metadane doradcze, a nie kryptograficzna kontrola dostępu. Niewspółpracujące narzędzie może je zignorować. Silnik wiernie je zapisuje; nie może ich wymusić.

W przypadku podpisywania silnik osadza strukturę CMS SignedData opisaną w ISO 32000-2 §12.8. Podpisany zakres bajtów jest obiektem bezpośrednim, a skrót celowo pomija wartość podpisu Contents (iso32000_2_sec12#x1.x121.p45), więc podpis obejmuje dokument, ale nie samego siebie.

Ta strona nie powiela dokumentacji referencyjnej podpisywania. Punkty wejścia do szyfrowania oraz orkiestrator podpisywania są opisane w /modules/core/security/ oraz /modules/core/security/signing/. Ten model dotyczy znaczenia i granic, a nie sygnatur metod.

Szyfrowanie chroni poufność przed podmiotami bez hasła i nic poza tym:

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = new Document();
// AES-256 (AESV3 R6). The owner/user passwords gate read access only.
// Permission flags below are advisory: a conforming reader honors them.
$doc->encrypt(
userPassword: 'open-secret',
ownerPassword: 'owner-secret',
);
$doc->save('confidential.pdf');

Produkcyjny przepływ podpisywania nakłada bazowy podpis CMS/PAdES z kluczem przechowywanym w oprogramowaniu. Edycja Core wytwarza poziom PAdES B-B. Po skonfigurowaniu urzędu znacznika czasu edycja Core wytwarza PAdES B-T, czyli B-B plus pojedynczy niepodpisany atrybut RFC 3161 signature-time-stamp:

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Security\Signature\CertificateInfo;
use NextPDF\Security\Signature\SignatureLevel;
$cert = CertificateInfo::fromPkcs12('signer.p12', 'pin');
$doc = new Document();
// B-B is the default. B-T adds a trusted timestamp over the signature value.
$doc->setSignature($cert, SignatureLevel::PAdES_B_B);
$doc->save('signed.pdf');

PAdES B-T to dokładnie B-B plus jeden niepodpisany atrybut RFC 3161 signature-time-stamp umieszczony w strukturze CMS SignerInfo (rfc5652#p603). Znacznik czasu wiąże wartość podpisu z zaufanym czasem pochodzącym od urzędu znacznika czasu (rfc3161#p208). Nie dodaje słownika danych walidacyjnych, struktury informacji o unieważnieniu ani pętli znacznika czasu archiwum. Są to odrębne poziomy długoterminowe o osobnym zakresie, które nie są częścią powierzchni B-B/B-T i wykraczają poza zakres tej strony.

U-1. NextPDF nie deklaruje niezależnej certyfikacji ETSI EN 319 142-1 dla PAdES B-T. EN 319 142-1 nie znajduje się w korpusie weryfikacyjnym używanym tutaj. Wymóg B-T dotyczący signature-time-stamp jest sprawdzany względem ETSI EN 319 122-1 §5.3 — podstawy CMS Advanced Electronic Signatures (CAdES), którą rodzina EN 319 142 PAdES importuje przez odwołanie (etsi_en_319_122_1#6.x40.p96) — wraz z RFC 3161, RFC 5652 oraz ISO 32000-2 §12.8. Obsługa profilu B-T nie jest certyfikacją zgodności ani certyfikacją ważności prawnej. Takie rozstrzygnięcie podejmuje niezależny walidator.

  • Szyfrowanie ≠ integralność. Do czytnika, który może otworzyć dokument, nadal można przekazać zmodyfikowaną kopię. Taką zmianę wykrywa wyłącznie podpis (lub MAC dokumentu). „Tamper-proof” (odporność na manipulację) nie jest właściwością zapewnianą przez moduł obsługi szyfrowania i termin ten nie jest używany jako zapewnienie dotyczące produktu.
  • Obecność podpisu nie oznacza jego ważności. To, że dokument zawiera słownik podpisu, nie mówi nic o tym, czy certyfikat jest zaufany, niewygasły czy nieunieważniony. Ustalenie ważności jest operacją po stronie weryfikatora, regulowaną przez politykę strony ufającej, a nie przez podpisującego.
  • Zaufanie do znacznika czasu jest zewnętrzne. Znacznik czasu B-T jest tyle wart, ile zaufanie, jakim weryfikator obdarza urząd znacznika czasu (TSA), który go wystawił. Biblioteka pozyskuje i osadza token. Nie ręczy za TSA.
  • Status FIPS zależy od środowiska. Działanie na module kryptograficznym z walidacją FIPS jest właściwością środowiska operacyjnego oraz modułu (fips_140_3#x12), a nie czymś, co biblioteka PHP mogłaby zadeklarować w imieniu kodu wywołującego.

Ścieżka podpisu oblicza jeden skrót zakresu bajtów i jedną strukturę CMS. Rozszerzenie B-T dodaje jedno synchroniczne zapytanie do urzędu znacznika czasu. Szyfrowanie jest operacją symetryczną per-string/per-stream. Żadna z tych operacji zwykle nie dominuje kosztu typowego renderowania. Zmienny koszt stanowi zapytanie sieciowe dla B-T, które zależy od wyboru TSA przez wywołującego.

Poniższe stwierdzenia dotyczące granic są sformułowane jako egzekwowalne reguły dla recenzentów:

  1. Tylko poufność. Szyfrowanie AES-256 chroni zawartość przed podmiotami bez hasła. Nie zapewnia integralności, autentyczności ani kontroli dostępu (iso32000_2_sec7#x1.x65.p29).
  2. Uprawnienia mają charakter doradczy. Flagi uprawnień opierają się na współpracy czytnika i nie są egzekwowane kryptograficznie (iso32000_2_sec7#x1.x71.p27). Treści produktowe nie mogą twierdzić, że uniemożliwiają one wykonanie czynności.
  3. Na tej stronie tylko B-B i B-T. Udokumentowana tutaj powierzchnia podpisywania core/Pro obejmuje B-B oraz jego rozszerzenie znacznika czasu B-T, przy czym każda wzmianka o B-T pojawia się wraz z powyższym zastrzeżeniem U-1. Poziomy archiwizacji długoterminowej stanowią odrębną powierzchnię edycji płatnej i celowo nie są tutaj opisane. Na tej stronie nie deklaruje się żadnej funkcji związanej z danymi walidacyjnymi, informacji o unieważnieniu ani znacznika czasu archiwum.
  4. Brak deklaracji ważności prawnej. Wytworzony podpis jest artefaktem kryptograficznym. To, czy jest on ważny prawnie, zależy od jurysdykcji, polityki certyfikatu oraz strony ufającej, a nie od tej biblioteki.

Obsługa mechanizmu nie oznacza zgodności. Silnik wytwarza wynik korzystający z przywołanych konstrukcji ISO 32000-2, RFC 3161, RFC 5652 oraz ETSI EN 319 122-1. Silnik nie deklaruje zgodności z PAdES, CAdES ani eIDAS. Walidacja FIPS 140-3 jest właściwością module/environment (fips_140_3#x12), a nie deklaracją biblioteki. Wszelkie rozstrzygnięcia dotyczące zgodności lub ważności prawnej podejmuje niezależny walidator lub audytor.