Ga naar inhoud
getnextpdf.com

Enterprise editie

FIPS 140 — Diepe referentie

Deze pagina is de uitgebreide referentie voor de NextPDF Enterprise FIPS 140-module. De module is een policy- en zelftestcapaciteit. Ze beperkt cryptografische keuzes tot een FIPS-afgestemde allow-list, draait een power-on known-answer-test batterij, en verhindert cryptografische output wanneer de batterij faalt. NextPDF is geen FIPS 140-gevalideerde cryptografische module, heeft geen certificering en verleent er geen. Ondersteuning staat niet gelijk aan conformiteit, en conformiteit staat niet gelijk aan certificering. Een FIPS-compatibele deployment vereist bovendien een FIPS-gevalideerde cryptografische provider die door de operator wordt aangeleverd.

Deze capaciteit wordt geleverd in NextPDF Enterprise (nextpdf/enterprise) en activeert met een licentie-envelop op Enterprise-niveau. Een deployment zonder die entitlement laadt de klassen van de capaciteit niet. Vergelijk edities en verkrijg een licentie.

Alle symbolen leven in NextPDF\Enterprise\Security\Fips, behalve FipsBootstrap in NextPDF\Enterprise\Bootstrap.

SymboolParametersStandaardgedragRetourneertGooit of faalt metOpmerkingen
FipsBootstrap::boot()?CryptoPolicyInterface $policy, ?FipsSelfTest $selfTest, ?LoggerInterface $auditLogger (alle standaard null)Draait de power-on batterij eenmaal bij het opstarten; valt terug op de strikte policyFipsModeGuardFipsModuleErrorStateException bij elke gefaalde power-on testCompositie-root; audittrail uit wanneer $auditLogger null is
FipsBootstrap::lazy()Zelfde als boot()Stelt de batterij uit tot de eerste grens-assertieFipsModeGuardGeen op het moment van aanroep; de eerste assertie kan FipsModuleErrorStateException gooienModule blijft PRE_OPERATIONAL tot de eerste assertie
FipsBootstrap::signatureEnforcer()?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = nullBoot de module en wikkelt dan de bewaking voor signer-knelpuntenFipsSignatureEnforcerFipsModuleErrorStateException bij elke gefaalde power-on testDelegeert naar boot()
FipsBootstrap::selfTestReport()?FipsSelfTest $selfTest = nullDraait de batterij op aanvraag en vat ze samenarray{status: FipsSelfTestStatus, operational: bool, failed: list<string>}Gooit niet; fouten verschijnen in failedVoor admin health-endpoints en CLI-gebruik
FipsCryptoPolicy::strict()?FipsSelfTest $selfTest = nullFIPS 140-3 preset: SHA-256/384/512; goedgekeurde RSA-, RSASSA-PSS-, ECDSA-OID’s; aes-256-cbc, aes-256-gcm; RSA >= 2048, EC >= 256selfGeenConstructor is privé; presets zijn de enige ingang
FipsCryptoPolicy::standard()?FipsSelfTest $selfTest = nullFIPS 140-2 preset: strikte set plus aes-128-cbcselfGeenUitsluitend voor legacy-interoperabiliteit
FipsCryptoPolicy::assertPreOperational()GeenDraait, of herspeelt het vergrendelde resultaat van, de power-on batterijvoidFipsModuleErrorStateException wanneer een power-on test faaltAangedreven door de Core-enforcementnaad vóór de eerste operatie
FipsCryptoPolicy query-oppervlakstring / int inputsAllow-list lidmaatschapscontroles; onbekend sleuteltype wordt geweigerdbool / stringGeenisHashAlgorithmAllowed, isSignatureAlgorithmAllowed, isEncryptionAlgorithmAllowed, isKeyStrengthAllowed, getPreferredHashAlgorithm, getName
FipsModeGuard::__construct()CryptoPolicyInterface $policy, ?FipsBootGuard $bootGuard = null, ?FipsAuditLogger $auditLogger = nullWikkelt een policy met assert-stijl grenzenGeenZonder $bootGuard is er geen zelftestpoort; productiecompositie levert die aan
FipsModeGuard::assertHashAllowed()string $algorithmEerst de weigercatalogus, dan de allow-listvoidFipsViolationException; FipsModuleErrorStateException wanneer een boot guard is bedraadAuditrecord gaat vooraf aan elke FipsViolationException
FipsModeGuard::assertSignatureAlgorithmAllowed()string $oidEerst de weigercatalogus, dan de allow-listvoidZelfde als hierbovenOID’s worden exact gematcht
FipsModeGuard::assertEncryptionAllowed()string $algorithmEerst de weigercatalogus, dan de allow-listvoidZelfde als hierbovenNamen worden in kleine letters vergeleken
FipsModeGuard::assertKeyStrengthAllowed()string $keyType, int $bitLengthEerst de weigercatalogus, dan de policy-minimavoidZelfde als hierbovenOnbekend sleuteltype wordt geweigerd
FipsModeGuard::getPolicy()GeenRetourneert de gewikkelde policyCryptoPolicyInterfaceGeen
FipsBootGuard::__construct()FipsSelfTest $selfTestHoudt de batterij vast; draait ze nietGeenEén power-on cyclus per instantie
FipsBootGuard::report()GeenDraait de batterij eenmaal, cachet het rapport, vergrendelt bij foutFipsSelfTestReportGeenEerste aanroep draait de tests
FipsBootGuard::rerun()GeenForceert een verse run; een gefaalde run vergrendelt het procesFipsSelfTestReportGeenZelftest op aanvraag; geen foutherstelpad
FipsBootGuard::assertOperational()GeenAsserteert dat de module operationeel is; plakkend over het procesvoidFipsModuleErrorStateExceptionEen schone instantie gooit nog steeds wanneer het proces een fout vergrendelde
FipsBootGuard::status()GeenRapporteert de gecachete statusFipsSelfTestStatusGeenERROR wanneer vergrendeld; PRE_OPERATIONAL wanneer nooit gedraaid
FipsSelfTest::__construct()?callable $randomBytesProvider = null, ?callable $hashProvider = nullGebruikt platform hash() en random_bytes()GeenOverrides bestaan voor deterministische faaltests
FipsSelfTest::run()GeenVoert de volledige batterij uit; maakt nooit een kortsluitingFipsSelfTestReportGeenFouten landen in het rapport, niet in excepties
FipsSelfTestReportFipsSelfTestStatus $status, array $results, array $failedResultsOnveranderlijk aggregaat van één runassertOperational() gooit FipsModuleErrorStateException in de foutstatusOok isOperational(), isError()
FipsSelfTestResultstring $algorithm, string $kind, bool $passed, string $message = ''Onveranderlijke uitkomst per testGeenkind is KAT, PWCT of HEALTH; ook isPassed(), isFailed()
FipsSelfTestStatusString-backed enumGeenCases PRE_OPERATIONAL, OPERATIONAL, ERROR
FipsSignatureEnforcer::__construct()FipsModeGuard $guardWikkelt een boot-gated bewaking voor ondertekeningsknelpuntenGeen
FipsSignatureEnforcer::assertSignatureGenerationAllowed()string $algorithm, string $certificatePemHerleidt de OID en sleutelsterkte, delegeert dan naar de bewakingvoidFipsViolationException (onbekend algoritme, niet-goedgekeurde PSS-digest, onbewijsbare sleutel of policy-weigering); FipsModuleErrorStateException via de bewakingAlleen het generatiepad; verificatie routeert hier nooit door
FipsAuditLogger::__construct()CryptoPolicyInterface $policy, LoggerInterface $loggerWikkelt een PSR-3 logger en dezelfde policy die de bewaking afdwingtGeenVastgelegde beslissingen kunnen niet afwijken van afgedwongen beslissingen
FipsAuditLogger::logHashOperation() / logSignatureOperation() / logEncryptionOperation() / logKeyStrengthCheck()string / int inputs per beslissingLogt ALLOW op INFO en DENY op WARNINGbool (true wanneer toegestaan)GeenGestructureerde context: policy-naam, item, beslissing
FipsTransitioningAlgorithmsstring / int inputsStatische SP 800-131A Rev.2 weigercatalogusbool / list<string>GeenisHashDisallowed, isSignatureOidDisallowed, isEncryptionDisallowed, isKeyStrengthDisallowed, plus disallowedHashes, disallowedSignatureOids, disallowedEncryption
FipsViolationExceptionstring $policyName, string $violatingItem, string $reasonGetypeerde policy-schending met publieke readonly veldenSubtype van NextPDF\Exception\NextPdfException
FipsModuleErrorStateExceptionarray $failedResults, ?string $message = nullFoutstatus-weigering die de gefaalde testresultaten meedraagtSubtype van NextPDF\Exception\NextPdfException
public static function boot(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuard
public static function lazy(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuard
public static function signatureEnforcer(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null): FipsSignatureEnforcer
public static function selfTestReport(?FipsSelfTest $selfTest = null): array
public static function strict(?FipsSelfTest $selfTest = null): self
public static function standard(?FipsSelfTest $selfTest = null): self
public function assertPreOperational(): void
public function isHashAlgorithmAllowed(string $algorithm): bool
public function isSignatureAlgorithmAllowed(string $oid): bool
public function isEncryptionAlgorithmAllowed(string $algorithm): bool
public function isKeyStrengthAllowed(string $keyType, int $bitLength): bool
public function getPreferredHashAlgorithm(): string
public function getName(): string
public function __construct(private CryptoPolicyInterface $policy, private ?FipsBootGuard $bootGuard = null, private ?FipsAuditLogger $auditLogger = null)
public function assertHashAllowed(string $algorithm): void
public function assertSignatureAlgorithmAllowed(string $oid): void
public function assertEncryptionAllowed(string $algorithm): void
public function assertKeyStrengthAllowed(string $keyType, int $bitLength): void
public function getPolicy(): CryptoPolicyInterface
public function __construct(private readonly FipsSelfTest $selfTest)
public function report(): FipsSelfTestReport
public function rerun(): FipsSelfTestReport
public function assertOperational(): void
public function status(): FipsSelfTestStatus
public function __construct(?callable $randomBytesProvider = null, ?callable $hashProvider = null)
public function run(): FipsSelfTestReport
public function __construct(private readonly FipsModeGuard $guard)
public function assertSignatureGenerationAllowed(string $algorithm, string $certificatePem): void
public function __construct(private CryptoPolicyInterface $policy, private LoggerInterface $logger)
public function logHashOperation(string $algorithm): bool
public function logSignatureOperation(string $oid): bool
public function logEncryptionOperation(string $algorithm): bool
public function logKeyStrengthCheck(string $keyType, int $bitLength): bool
public static function isHashDisallowed(string $algorithm): bool
public static function isSignatureOidDisallowed(string $oid): bool
public static function isEncryptionDisallowed(string $algorithm): bool
public static function isKeyStrengthDisallowed(string $keyType, int $bitLength): bool
public static function disallowedHashes(): array
public static function disallowedSignatureOids(): array
public static function disallowedEncryption(): array
public function __construct(public FipsSelfTestStatus $status, public array $results, public array $failedResults)
public function isOperational(): bool
public function isError(): bool
public function assertOperational(): void
// FipsSelfTestResult
public function __construct(public string $algorithm, public string $kind, public bool $passed, public string $message = '')
public function isPassed(): bool
public function isFailed(): bool
// FipsSelfTestStatus
enum FipsSelfTestStatus: string
{
case PRE_OPERATIONAL = 'pre_operational';
case OPERATIONAL = 'operational';
case ERROR = 'error';
}
  • De policy-allow-list is de gezaghebbende beslissing. FipsTransitioningAlgorithms voegt daarbovenop een expliciete SP 800-131A Rev.2 weigerlaag toe, voor audit-heldere afwijzingsberichten. De weigerlaag verbreedt of overschrijft de allow-list nooit.
  • FipsCryptoPolicy::strict() staat SHA-256, SHA-384 en SHA-512 toe; RSA PKCS#1 v1.5-, RSASSA-PSS- en ECDSA-handtekening-OID’s gebonden aan die hashes; aes-256-cbc en aes-256-gcm; en sleutelvloeren van RSA 2048, EC 256, Ed25519 256. standard() staat daarnaast aes-128-cbc toe.
  • De power-on batterij dekt: SHA-256/384/512 digest-KAT’s, een HMAC-SHA-256 KAT, een AES-256-CBC encrypt-en-decrypt KAT, een AES-256-GCM tag-KAT, een ECDSA P-256 paarsgewijze consistentietest, en een DRBG health-check. FipsSelfTest::run() voert altijd elke test uit en maakt nooit een kortsluiting, zodat het rapport volledig is als auditbewijs.
  • De DRBG-rij is een continue health-test (trekkingslengte plus verschillende opeenvolgende trekkingen), geen known-answer test. De DRBG known-answer verplichting wordt gedelegeerd aan de onderliggende FIPS-gevalideerde provider die de operator aanlevert.
  • De foutstatus is proces-plakkend. Het eerste ERROR-rapport dat door een FipsBootGuard wordt waargenomen, vergrendelt het hele proces. Een verse bewaking of policy-instantie kan de fout niet witwassen, en een latere slagende rerun wist ze niet. Alleen een procesherstart (een echte power-cyclus) reset de status.
  • FipsCryptoPolicy implementeert NextPDF\Contracts\CryptoPolicyInterface en NextPDF\Contracts\PreOperationalSelfTestInterface. Wanneer geconfigureerd als de Core-crypto-policy, drijft de Core-enforcementnaad assertPreOperational() aan voordat de eerste handtekening of ciphertext wordt geproduceerd.
  • FipsSignatureEnforcer bewaakt alleen het generatiepad. Verificatie van reeds gegenereerde handtekeningen is legacy-gebruik onder SP 800-131A Rev.2 en routeert nooit door de enforcer.
  • Wanneer een audit-logger is bedraad, zendt elke assert-grens één ALLOW (INFO)- of DENY (WARNING)-record uit voordat een policy-schending wordt gegooid. Elke FipsViolationException-weigering wordt dus in de trail bewezen. De boot-guard-poort draait eerst, zodat een foutstatus-weigering wordt opgeworpen vóór het auditrecord. De FipsAuditLogger raadpleegt dezelfde policy die de bewaking afdwingt, zodat vastgelegde beslissingen niet kunnen afwijken van afgedwongen beslissingen.
  • Een onbekend sleuteltype wordt door beide lagen geweigerd: de policy retourneert false en de catalogus behandelt het als niet-toegestaan.
  • Een ondertekeningsalgoritme-identifier die de enforcer niet naar een handtekening-OID kan mappen, wordt fail-closed geweigerd met FipsViolationException.
  • Elke RSASSA-PSS-variant deelt de OID 1.2.840.113549.1.1.10, zodat de OID alleen de digest niet kan bewijzen. De enforcer bindt de effectieve digest expliciet en weigert elk PSS-token waarvan de digest geen SHA-256/384/512 is.
  • Een certificaat dat niet kan worden geparseerd, of waarvan de bitlengte van de publieke sleutel onbeschikbaar is, wordt geweigerd als key:unprovable.
  • Op een runtime zonder OpenSSL asymmetrische primitieven registreert de ECDSA paarsgewijze consistentietest een fout, geen skip, en de module gaat over naar ERROR.
  • Twee identieke opeenvolgende 32-byte willekeurige trekkingen falen de DRBG health-check (stuck-output detectie) en forceren ERROR.
  • Een FipsModeGuard geconstrueerd zonder boot guard voert alleen policy-controles uit en heeft geen zelftestpoort. Productiecompositie gaat via FipsBootstrap, die de poort altijd bedraadt.
  • Hash- en cipher-namen worden in kleine letters vergeleken; handtekening-OID’s worden exact gematcht, zonder normalisatie.
  • Na FipsBootstrap::lazy() blijft de module PRE_OPERATIONAL totdat de eerste assert-grens de batterij draait. PRE_OPERATIONAL wordt op het moment van assertie als niet-operationeel behandeld.

Deze module is het FIPS-modus oppervlak zelf. Terwijl de module in de foutstatus is, en terwijl pre-operationele zelftests draaien, wordt cryptografische output verhinderd: elke assert-grens gooit FipsModuleErrorStateException voordat een handtekening of ciphertext wordt geproduceerd (ISO/IEC 19790:2025 §7.3.3 b), AS03.07). FipsBootGuard::status() en FipsBootstrap::selfTestReport() stellen de status bloot zodat een operator kan bepalen dat de module de foutstatus binnenging (ISO/IEC 19790:2025 §7.10.3). Deze gedragingen zijn capaciteitsclaims over NextPDF-code, geen validatieclaim: de modulegrens die FIPS 140 valideert is de door de operator aangeleverde cryptografische provider, niet NextPDF.

ClaimStandaardClausule
FIPS 140-3 is gebaseerd op ISO/IEC 19790 en ISO/IEC 24759; deze pagina citeert daarom ISO/IEC 19790-clausules.FIPS 140-3Introduction (fips_140_3#x26.x2)
Output wordt verhinderd in de foutstatus en tijdens pre-operationele zelftests.ISO/IEC 19790:2025§7.3.3 b) [AS03.07]
Een known-answer test vergelijkt een berekend resultaat met een bekende verwachte output; de batterij implementeert deze vorm.ISO/IEC 19790:2025§7.10.4
De operator kan de foutstatus bepalen via een status-output.ISO/IEC 19790:2025§7.10.3 [AS10.10]
Operators kunnen de zelftests op aanvraag initiëren voor periodieke tests; rerun() en selfTestReport() bieden dit.ISO/IEC 19790:2025§7.10.5 [AS10.54]
SHA-1 is niet toegestaan voor nieuwe digitale-handtekeninggeneratie; de weigercatalogus wijst het af.NIST SP 800-131A Rev.2§9
Handtekeninggeneratie onder 112-bit sterkte (RSA < 2048, ECDSA-order < 224) is niet toegestaan; de sleutelvloeren dwingen dit af.NIST SP 800-131A Rev.2§3 Table 2
Verificatie van reeds gegenereerde SHA-1-handtekeningen is legacy-gebruik; het routeert niet door de generatiepoort.NIST SP 800-131A Rev.2Change summary (9.x4.p12)

Alle clausules zijn geparafraseerd; er wordt geen normatieve tekst gereproduceerd. NextPDF maakt geen FIPS 140-certificeringsclaim. De module stemt haar gedrag af op de geciteerde clausules als een compliance-assistentie capaciteit. Of een deployment FIPS-compliant is, hangt af van de gevalideerde provider van de operator, de definitie van de modulegrens en het complianceprogramma — niet van NextPDF alleen.

  • Deterministische faaltests injecteren kapotte providers via de FipsSelfTest-constructor, of via de $selfTest-parameters op FipsCryptoPolicy::strict(), standard() en de FipsBootstrap-methoden.
  • De proces-plakkende foutvergrendeling heeft een interne, test-only reset-hook. Die is geen onderdeel van de ondersteunde API, en productiecode mag hem niet aanroepen.
  • Elk PHP-workerproces draait zijn eigen power-on batterij. Het rapport wordt per instantie gecachet, zodat hot-path asserties constant-tijd statuscontroles zijn.
  • Vang FipsModuleErrorStateException niet af en ga niet door. De exceptie betekent dat de module cryptografische diensten weigert; de juiste reactie is stoppen en het proces herstarten na remediatie.
  • FipsBootstrap::selfTestReport() bedient zelftestbehoeften op aanvraag en periodiek, zoals health-endpoints. Een slagende run op aanvraag wist nooit een vergrendelde fout.

Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helper-klassen, mechanismetabellen, runbook-bestandsnamen en ticket-prefixen vallen buiten de scope.