Enterprise Edition
eIDAS-Sicherheitsniveaus
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“NextPDF Enterprise verwandelt EU-Vertrauenslistennachweise in ein explizites eIDAS-Sicherheitsniveau (Level of Assurance, LoA). Der Dienst NextPDF\Enterprise\Security\Eidas\LoaMapping klassifiziert einen Vertrauensdiensteintrag als Low, Substantial oder High. Er gibt eine LoaAssertion zurück, die das Niveau zusammen mit maschinenlesbaren Begründungscodes trägt. Ihr Workflow kann anhand des Sicherheitsniveaus abriegeln – „High erforderlich“ – und die Begründungen als Audit-Nachweis archivieren. Ein begleitender Schutzmechanismus, CertPiiGuard, schwärzt die Identitätsfelder des Unterzeichners, bevor Audit-Datensätze den Prozess verlassen.
Zwei Grenzen umreißen diese Fähigkeit ehrlich. Erstens gehört die Qualifizierung stets dem Vertrauensdiensteanbieter (Trust Service Provider, TSP) unter mitgliedstaatlicher Aufsicht. NextPDF trifft eine Klassifizierungsaussage über veröffentlichte Nachweise; es gewährt, verleiht oder zertifiziert niemals eine Qualifizierung. Zweitens behandelt diese Seite ausschließlich LoA-Aussage und -Abbildung. Die strukturelle PAdES-Richtlinie eidasQualified(), einschließlich ihrer Bestehen/Nicht-bestehen-Kriterien, ist unter Validierung dokumentiert.
Verfügbarkeit & Lizenzierung
Abschnitt betitelt „Verfügbarkeit & Lizenzierung“Diese Fähigkeit ist in NextPDF Enterprise (nextpdf/enterprise) enthalten und wird mit einer Lizenz-Hülle der Enterprise-Stufe aktiviert. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Fähigkeit nicht. Editionen vergleichen und eine Lizenz erwerben.
Installation
Abschnitt betitelt „Installation“composer require nextpdf/enterpriseDas Metapaket nextpdf/premium löst ebenfalls das Enterprise-Paket auf. Die Aktivierung nutzt Ihre Enterprise-Lizenz-Hülle; siehe Lizenzierung und Aktivierung. Die eIDAS-Klassen benötigen keine PHP-Erweiterung über die Engine-Grundlage hinaus. Sie werden unter NextPDF\Enterprise\Security\Eidas und NextPDF\Enterprise\Signature\Eidas automatisch geladen.
Konzeptioneller Überblick
Abschnitt betitelt „Konzeptioneller Überblick“Die Verordnung (EU) Nr. 910/2014 (eIDAS) definiert drei Sicherheitsniveaus: niedrig, substanziell und hoch (Artikel 8(1)). Jedes Niveau drückt einen Grad an Vertrauen in eine behauptete Identität aus. Das Niveau hoch fügt Kontrollen hinzu, deren Zweck es ist, den Missbrauch oder die Veränderung der Identität zu verhindern – nicht bloß zu verringern (Artikel 8(2)(c)). Artikel 8 definiert diese Niveaus für elektronische Identifizierungssysteme. NextPDF verwendet dasselbe Vokabular erneut, um die Vertrauensdienstnachweise hinter einem Signaturzertifikat zu klassifizieren. Diese Wiederverwendung ist eine technische Konvention für Richtlinien-Abriegelung und Audit, keine rechtliche Gleichstellung.
Das Enum LoaLevel modelliert die drei Niveaus. Seine hinterlegten Werte sind die eIDAS-LoA-URIs statt bloßer Bezeichnungen, sodass eine persistierte Aussage den vollständigen Bezeichner trägt. rank() liefert eine Totalordnung (Low = 1, Substantial = 2, High = 3), und meetsOrExceeds() vergleicht gegen eine erforderliche Untergrenze.
LoaMapping berechnet ein Niveau aus einem Vertrauenslisteneintrag – einem TspService aus dem Enterprise-Vertrauenslisten-Subsystem (NextPDF\Enterprise\Security\Tsl). Die Abbildung ist deterministisch:
| Vertrauenslistennachweis | Niveau | Begründungscodes |
|---|---|---|
| Dienststatus ist nicht granted | Low | service_not_granted |
Diensttyp ist nicht CA/QC | Low | service_not_qualified_ca |
Granted CA/QC mit QCWithQSCD und ohne QCNoQSCD | High | ca_qc_with_qscd plus esig_or_eseal oder qc_default |
Granted CA/QC andernfalls | Substantial | ca_qc_no_qscd_or_unspecified |
Der QSCD-Qualifizierer (qualified signature creation device) ist der Dreh- und Angelpunkt. Nach Artikel 3(12) erfordert eine qualifizierte elektronische Signatur sowohl ein qualifiziertes Zertifikat als auch eine qualifizierte Erstellungseinheit. Eine Vertrauenslistenerklärung, dass Zertifikate auf einer QSCD verwaltet werden, ist daher der Nachweis, der eine High-Aussage stützt. Ohne diese Erklärung stützt eine granted qualifizierte CA weiterhin Substantial, niemals High.
Das Ergebnis ist eine LoaAssertion: das Niveau plus eine Liste von Begründungscodes. Die Begründungen erlauben es einem Audit-Konsumenten, die Klassifizierung später aus denselben Nachweisen erneut abzuleiten. Nachgelagerte Richtlinienauswerter können die Aussage neben einem Signaturvalidierungsergebnis aufzeichnen.
Ein weiterer Baustein ist in diesem Modul enthalten: CertPiiGuard. Wenn Validierungsartefakte in JSON-Audit-Bündel serialisiert werden, trägt das Unterzeichnerzertifikat personenbezogene Daten – den Subject CN, E-Mail-Attribute und das Attribut serialNumber, das für natürliche Personen eine nationale Kennung codieren kann. GDPR Artikel 5(1)(c) verlangt, dass die Verarbeitung auf das Notwendige beschränkt bleibt. Der Schutzmechanismus schwärzt diese Felder daher standardmäßig und ersetzt die Werte durch [REDACTED], während die strukturelle Hülle erhalten bleibt (Organisation, Land, Kette und Statusfelder). Konsumenten können weiterhin überprüfen, ob eine Signatur bestanden hat, ohne zu erfahren, wer unterzeichnet hat.
Warum es so funktioniert
Abschnitt betitelt „Warum es so funktioniert“Die tragende Entscheidung ist die Trennung der Sicherheitsaussage von der Validierungsentscheidung. Die Signaturvalidierung endet gemäß ETSI EN 319 102-1 in einer Statusangabe – TOTAL-PASSED, TOTAL-FAILED oder INDETERMINATE – und diese Entscheidung gehört zur Validierungsschicht. Die LoA-Abbildung ist eine eigenständige, wiederholbare Klassifizierung über Vertrauenslistennachweise, mit Begründungscodes statt einer bloßen Bezeichnung. Das hält NextPDF davon ab, jemals eine Sicherheitsaussage als Validierungsergebnis oder ein Validierungsergebnis als Qualifizierungsgewährung darzustellen. Es macht die Abbildung außerdem konstruktionsbedingt konservativ: Fehlende oder mehrdeutige Nachweise senken das Niveau, heben es niemals an.
Entwurfshintergrund: Qualifizierte Signaturen, erklärt.
API-Oberfläche
Abschnitt betitelt „API-Oberfläche“Alle nachfolgenden Symbole sind öffentliche API in nextpdf/enterprise 3.1.0.
LoaLevel
Abschnitt betitelt „LoaLevel“enum LoaLevel: string{ case Low = 'http://eidas.europa.eu/LoA/low'; case Substantial = 'http://eidas.europa.eu/LoA/substantial'; case High = 'http://eidas.europa.eu/LoA/high';
public function rank(): int
public function meetsOrExceeds(self $required): bool}Wirft oder scheitert mit: nichts aus rank() oder meetsOrExceeds(). Die native Enum-Konstruktion über LoaLevel::from() wirft \ValueError bei einer unbekannten URI; LoaLevel::tryFrom() gibt stattdessen null zurück.
LoaMapping
Abschnitt betitelt „LoaMapping“final class LoaMapping{ public function loaForService(TspService $service): LoaAssertion}Wirft oder scheitert mit: nichts. Die Methode ist total – jede TspService-Eingabe ergibt eine LoaAssertion.
Die Eingabe-DTOs NextPDF\Enterprise\Security\Tsl\TspService und NextPDF\Enterprise\Security\Tsl\TspServiceQualifier sind stabile öffentliche DTOs (@api). Die Abbildung konsultiert TspService::STATUS_GRANTED, TspService::TYPE_CA_QC sowie die Qualifiziererkonstanten TspServiceQualifier::QSCD_STATEMENT (QCWithQSCD), TspServiceQualifier::NO_QSCD (QCNoQSCD), TspServiceQualifier::FOR_ESIG und TspServiceQualifier::FOR_ESEAL.
LoaAssertion
Abschnitt betitelt „LoaAssertion“final readonly class LoaAssertion{ /** * @param list<non-empty-string> $reasons Machine-readable reason codes for the assertion. */ public function __construct( public LoaLevel $level, public array $reasons, ) {}}Wirft oder scheitert mit: nichts. Unveränderliches Wertobjekt.
CertPiiGuard
Abschnitt betitelt „CertPiiGuard“final readonly class CertPiiGuard{ public function __construct( private bool $disclosePii = false, ) {}
public function disclosesPii(): bool
public function guardSignerCommonName(string $signer): string
public function guardDistinguishedName(string $dn): string
public function guardTsaName(string $tsaName): string
public function guardRootIssuer(string $issuer): string
public function guardChainIssue(string $issue): string}Wirft oder scheitert mit: nichts. Die Schutzmechanismen sind reine String-Transformationen. Bei einer DN-Komponente, die nicht zuverlässig tokenisiert werden kann, scheitert der Schutzmechanismus geschlossen und reduziert die Komponente auf [REDACTED], statt einen teilweise maskierten Wert auszugeben.
Codebeispiel – Schnellstart
Abschnitt betitelt „Codebeispiel – Schnellstart“Eine LoA-URI parsen und mit einer erforderlichen Untergrenze vergleichen.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Security\Eidas\LoaLevel;
// A LoA URI as persisted in an audit record or received from a peer system.$uri = 'http://eidas.europa.eu/LoA/substantial';
try { $level = LoaLevel::from($uri);} catch (\ValueError $e) { // Unknown URI: refuse to classify. Never guess an assurance level. echo "Unrecognized LoA URI: {$uri}\n"; exit(1);}
echo 'Level: ' . $level->name . ' (rank ' . $level->rank() . ")\n";echo 'Meets substantial: ' . ($level->meetsOrExceeds(LoaLevel::Substantial) ? 'yes' : 'no') . "\n";echo 'Meets high: ' . ($level->meetsOrExceeds(LoaLevel::High) ? 'yes' : 'no') . "\n";Erwartete Ausgabe:
Level: Substantial (rank 2)Meets substantial: yesMeets high: noCodebeispiel – Produktion
Abschnitt betitelt „Codebeispiel – Produktion“Einen Vertrauenslisteneintrag klassifizieren, anhand eines erforderlichen Niveaus abriegeln und einen geschwärzten Audit-Datensatz ausgeben.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Security\Eidas\LoaLevel;use NextPDF\Enterprise\Security\Eidas\LoaMapping;use NextPDF\Enterprise\Security\Tsl\TspService;use NextPDF\Enterprise\Security\Tsl\TspServiceQualifier;use NextPDF\Enterprise\Signature\Eidas\CertPiiGuard;
// Normally produced by the Enterprise trusted-list subsystem from a// member-state TSL; constructed inline here for a self-contained example.$caPem = (string) file_get_contents(__DIR__ . '/example-qc-ca.pem');
$service = new TspService( tspName: 'Example Qualified TSP', serviceName: 'Example Qualified CA G2', serviceTypeIdentifier: TspService::TYPE_CA_QC, serviceStatus: TspService::STATUS_GRANTED, statusStartingTime: '2024-01-01T00:00:00Z', serviceCertificatePem: $caPem, qualifiers: [ new TspServiceQualifier(qualifierUri: TspServiceQualifier::QSCD_STATEMENT), new TspServiceQualifier(qualifierUri: TspServiceQualifier::FOR_ESIG), ], additionalServiceInformation: [],);
try { // Required floor from deployment configuration; defaults to High. $required = LoaLevel::from(getenv('LOA_REQUIRED') ?: LoaLevel::High->value);} catch (\ValueError $e) { echo "Invalid LOA_REQUIRED URI; refusing to continue.\n"; exit(1);}
$mapping = new LoaMapping();$assertion = $mapping->loaForService($service);
// Privacy by default: signer identity fields are redacted in audit output.$guard = new CertPiiGuard();
$audit = [ 'loa' => $assertion->level->value, 'reasons' => $assertion->reasons, 'meets_required' => $assertion->level->meetsOrExceeds($required), 'signer' => $guard->guardSignerCommonName('CN=Jane Example, O=Example Corp, C=DE'),];
echo json_encode($audit, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n";Erwartete Ausgabe:
{ "loa": "http://eidas.europa.eu/LoA/high", "reasons": [ "ca_qc_with_qscd", "esig_or_eseal" ], "meets_required": true, "signer": "CN=[REDACTED], O=Example Corp, C=DE"}Grenzfälle & Fallstricke
Abschnitt betitelt „Grenzfälle & Fallstricke“LoaLevel::from()wirft\ValueErrorbei unbekannten URIs. Verwenden SieLoaLevel::tryFrom(), wo einenull-Behandlung vorzuziehen ist.- Widersprüchliche Geräte-Nachweise bleiben konservativ. Ein Dienst, der sowohl
QCWithQSCDals auchQCNoQSCDträgt, bildet aufSubstantialab, nicht aufHigh. - Ein granted
CA/QC-Dienst ohne Qualifizierer bildet aufSubstantialmit der Begründungca_qc_no_qscd_or_unspecifiedab – standardmäßig qualifiziert, Gerät unbewiesen. - Qualifizierer-URIs außerhalb des verfolgten Satzes beeinflussen die Klassifizierung nicht. Unbekannte oder zukünftige Qualifizierer heben das Niveau niemals an.
- Die Abbildung liest ausschließlich den aktuellen Dienststatus. Sie wertet die
statusStartingTime-Historie nicht aus; zeitpunktbezogene Fenster gehören zur Validierungsschicht. - Persistieren Sie die hinterlegte URI des Enums, nicht die
rank()-Ganzzahl. Ränge existieren nur zum Vergleich. CertPiiGuardreduziert einen bloßen Namen ohne=vollständig auf[REDACTED]; leere Strings passieren alle Schutzmechanismen unverändert.- Ältere OpenSSL-DNs mit Schrägstrichtrennung werden erkannt und strukturell maskiert. Ein
/innerhalb eines RFC-4514-Werts wird als Inhalt behandelt, nicht als Trennzeichen. - Nicht-PII-DN-Attribute (
O,OU,C,ST,L) bleiben erhalten, sodass die Zuständigkeitsherleitung die Schwärzung überlebt.
Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“- Datenschutz standardmäßig. Der Konstruktor des Schutzmechanismus ist standardmäßig auf
disclosePii: falsegesetzt. Konstruieren Sienew CertPiiGuard(disclosePii: true)nur dort, wo Sie eine dokumentierte Rechtsgrundlage für die Verarbeitung der Unterzeichneridentität besitzen. Dies setzt die Datenminimierung nach GDPR Artikel 5(1)(c) an der Serialisierungsgrenze um. - Geschlossen scheiternde Schwärzung. Wenn eine DN-Komponente nicht zuverlässig tokenisiert werden kann, wird die gesamte Komponente auf
[REDACTED]reduziert. Eine Datenschutzkontrolle scheitert niemals offen. - Deterministische Ausgabe. Die Schutzmechanismen verwenden reine String-Verarbeitung – keine Uhren, keine Zufälligkeit – sodass maskierte Ausgabe für identische Eingabe byte-stabil ist. Stabile Ausgabe hält Audit-Diffs aussagekräftig.
- Schwärzung ist keine Verschlüsselung.
[REDACTED]entfernt den Wert aus dem Datensatz. Wenn Sie die Identität wiederherstellbar benötigen, speichern Sie sie separat unter ihrer eigenen Rechtsgrundlage und Zugriffskontrolle. - Müll rein, Müll raus. Eine
LoaAssertionist nur so vertrauenswürdig wie der Vertrauenslistennachweis dahinter. Beschaffen und signaturprüfen Sie Vertrauenslisten über das Enterprise-Vertrauenslisten-Subsystem, bevor Sie der Abbildung Einträge zuführen.
Konformität
Abschnitt betitelt „Konformität“NextPDF Enterprise setzt Verhalten um, das durch die Verordnung (EU) Nr. 910/2014 Artikel 8 (Sicherheitsniveaus) und Artikel 3(12) (Elemente einer qualifizierten elektronischen Signatur) sowie durch das ETSI-Vertrauenslisten-Qualifiziererschema informiert ist. Unterstützung ist keine Konformität, und Konformität ist keine Zertifizierung. NextPDF hält keine Zertifizierung und gewährt keine. NextPDF ist kein qualifizierter Vertrauensdiensteanbieter, keine Konformitätsbewertungsstelle und keine Aufsichtsbehörde. Eine LoaAssertion ist eine softwareseitige Klassifizierung veröffentlichter Nachweise. Sie ist keine rechtliche Bestimmung von Qualifizierung oder Sicherheit, und sie kann eine Signatur nicht qualifiziert machen.
Die Verordnung (EU) 2024/1183 (eIDAS 2) verweist weiterhin auf die Niveaus des Artikels 8 und verlangt, dass European Digital Identity Wallets auf dem Sicherheitsniveau hoch bereitgestellt werden. Diese Seite zitiert das als regulatorischen Kontext; NextPDF erhebt keinen Wallet-bezogenen Fähigkeitsanspruch.
Ob eine bestimmte Signatur eine strukturelle eIDAS-orientierte Richtlinie erfüllt, ist eine separate Frage, die vom Validierungsmodul beantwortet wird; siehe Validierung.
Verhalten im FIPS-Modus
Abschnitt betitelt „Verhalten im FIPS-Modus“Die eIDAS-LoA-Klassen führen keine kryptografischen Operationen aus – kein Hashing, keine Signaturprüfung, keine Zufälligkeit. Die Enterprise-FIPS-Modus-Richtlinie riegelt kryptografische Entscheidungen ab, also hat sie in diesem Modul nichts abzuriegeln. Die Aktivierung des FIPS-Modus ändert weder die LoA-Abbildung noch das Verhalten des PII-Schutzmechanismus. Die kryptografische Prüfung von Signaturen und Vertrauenslisten wird von den Verifizierungs- und Sicherheitsmodulen geregelt, wo die FIPS-Modus-Richtlinie gilt.
Verhaltensvertrag
Abschnitt betitelt „Verhaltensvertrag“LoaMapping::loaForService()ist total und deterministisch. JederTspServiceergibt eineLoaAssertion; die Methode wirft niemals und konsultiert keine Uhr, kein Netzwerk und keinen globalen Zustand.- Die Klassifizierung ist konservativ. Fehlende, unbekannte oder widersprüchliche Nachweise senken das Niveau; nichts hebt es an außer explizite granted-
CA/QC-mit-QSCD-Nachweise. - Begründungscodes sind maschinenlesbar und stabil:
service_not_granted,service_not_qualified_ca,ca_qc_with_qscd,esig_or_eseal,qc_default,ca_qc_no_qscd_or_unspecified. - Die Niveauordnung ist festgelegt:
Low<Substantial<High, offengelegt überrank()undmeetsOrExceeds(). CertPiiGuardist standardmäßig auf Schwärzung eingestellt und scheitert bei Tokenisierungszweifeln geschlossen. MitdisclosePii: truegibt jeder Schutzmechanismus seine Eingabe wortgetreu zurück.- Die Ausgabe des Schutzmechanismus ist für identische Eingabe byte-stabil.
Core-Rückfallebene
Abschnitt betitelt „Core-Rückfallebene“NextPDF Core prüft PDF-Signaturen kryptografisch und scheitert bei defektem Nachweis geschlossen. Core hat kein EU-Vertrauenslistenmodell, kein LoaLevel-Vokabular, keine LoA-Abbildung und keinen eIDAS-Schicht-PII-Schutzmechanismus für die Audit-Serialisierung. Mit Core allein müssen Sie Sicherheitsklassifizierungen selbst aus von Ihnen gepflegten Vertrauensdaten ableiten und Ihre eigene Schwärzung anwenden, bevor Audit-Datensätze den Prozess verlassen.
Veröffentlichungsgrenze
Abschnitt betitelt „Veröffentlichungsgrenze“Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namespace-Pfade, Hilfsklassen, Mechanismustabellen, Runbook-Dateinamen und Ticket-Präfixe sind außerhalb des Geltungsbereichs.
Siehe auch
Abschnitt betitelt „Siehe auch“- Validierung – strukturelle Compliance-Richtlinien, einschließlich
eidasQualified()-Semantik und Bestehen/Nicht-bestehen-Kriterien - Signaturprüfung – die kryptografische AdES/PAdES-Verifizierungsseite, deren Berichte der PII-Schutzmechanismus schützt
- Sicherheit – Tiefenreferenz – die Tiefenreferenz des Sicherheitsmoduls
- Qualifizierte Signaturen, erklärt – Insider-Essay über Qualifizierung und Sicherheit
- Wie eine Signatur beweist, wer unterzeichnet hat – Insider-Essay über die Verifizierungsseiten-Vertrauensbildung