Ga naar inhoud

FIPS 140-2/3-cryptografiebeleid en zelftest

NextPDF Enterprise beperkt de cryptografische keuzes die een ondertekenings- of versleutelingsbewerking kan maken tot een door de Federal Information Processing Standards (FIPS) goedgekeurde set en weigert elke keuze buiten die set. Runtimebewaking controleert elke hash, identifier voor handtekeningalgoritmes, versleutelingsalgoritme en sleutelsterkte voordat de bewerking wordt uitgevoerd. Een reeks power-on-zelftests wordt eenmalig uitgevoerd wanneer het proces start. Als een known-answer-test mislukt, gaat de module naar een foutstatus. Deze pagina beschrijft het gedrag: wat het beleid toestaat, wat de bewaking weigert, wat de zelftest dekt en het expliciete standpunt over certificering.

NextPDF Enterprise helpt bij compliance. Het is geen gecertificeerde cryptografische module. Zie Beveiliging en compliance voor het expliciete niet-certificeringsstandpunt.

De front matter vermeldt de vereisten; Vereisten herhaalt ze.

Het crypto-beleidsprofiel voor de FIPS-modus, de runtimebewaking en de power-on-zelftestbewaking worden geleverd in het pakket nextpdf/enterprise en vereisen de licentiefunctievlag enterprise. NextPDF Core en NextPDF Pro bieden geen FIPS-modusprofiel. De bewaking en de zelftest worden in-process uitgevoerd; beleidscontroles en zelftests laten geen documentinhoud de host verlaten. Vergelijk edities.

De functie bestaat uit drie onderdelen: een cryptografiebeleid, een runtimebewaking en een power-on-zelftest.

Het cryptografiebeleid beperkt cryptografische keuzes tot een goedgekeurde set, met twee presets:

  • Strict (afgestemd op de FIPS 140-3-generatie) — SHA-256-, SHA-384- en SHA-512-hashes; object identifiers (OID’s) voor RSA- en ECDSA-handtekeningen met die hashes; AES-256-CBC-versleuteling; en minimale sleutelgroottes van RSA 2048 en elliptische curve 256.
  • Standard (afgestemd op de FIPS 140-2-generatie) — komt overeen met strict en staat daarnaast AES-128-CBC toe voor oudere interoperabiliteit.

Voor het genereren van handtekeningen accepteert NIST SP 800-131A Rev.2 §3 een RSA-sleutel van ten minste 2048 bits en een ECDSA-orde van ten minste 224 bits; de ondergrenzen 2048/256 van de preset strict voldoen aan die minimumwaarden of liggen erboven. Het beleid weigert standaard een onbekend sleuteltype — het accepteert een niet-herkend type niet stilzwijgend.

De runtimebewaking vormt een laag rond het beleid en stelt assert-achtige methoden beschikbaar voor een hash, een handtekening-OID, een versleutelingsalgoritme en een sleutelsterkte. Wanneer een keuze niet is toegestaan, werpt de bewaking een getypeerde overtreding op die het beleid en het ongeldige item benoemt en stopt vervolgens de bewerking. Het pad reageert fail-closed: het beleid versoepelt zichzelf nooit en vervangt nooit een zwakker algoritme. Voor een RSASSA-PSS-handtekening bindt de generatie-gate de message digest expliciet. Elke PSS-variant gebruikt dezelfde handtekening-OID; de hash staat in de PSS-parameters, niet in de OID. Een OID-allowlist alleen kan de effectieve digest niet bewijzen, dus de gate bevestigt dat de digest FIPS-goedgekeurd is (SHA-256/384/512). De gate weigert elk PSS-token fail-closed waarvan de digest onbekend of niet goedgekeurd is, bijvoorbeeld SHA-1 PSS, voordat een ondertekenaar wordt aangeroepen (FIPS 186-5 §5.4(b)).

De power-on-zelftest voert eenmalig bij processtart een reeks known-answer-tests (KAT) uit. De reeks omvat de goedgekeurde functies voor hashing, berichtauthenticatie, versleuteling, authenticated encryption, handtekeningen en willekeurige bits. Volgens ISO/IEC 19790:2025 §7.10.4.2 mislukt een known-answer-test wanneer de berekende uitvoer niet gelijk is aan het bekende antwoord. Bij elke fout gaat de module naar een foutstatus en weigert cryptografische diensten (ISO/IEC 19790:2025 §7.2.4.3). De foutstatus is procesgebonden: zodra ook maar één boot guard in het proces een fout waarneemt, blijft het hele proces voor de rest van zijn levensduur fail-closed. Het aanmaken van een nieuwe boot guard of een nieuw beleid kan deze status niet opheffen. Een latere geslaagde herhaling van de zelftest heft een vergrendelde fout niet op — alleen een herstart van het proces (een echte power cycle) doet dat, volgens ISO/IEC 19790:2025 §7.10.2. Het resultaat wordt voor de levensduur van het proces in de cache bewaard; je kunt op aanvraag een herhaling uitvoeren voor een beheereindpunt of een opdracht, maar die dient voor de verplichting tot periodieke zelftests, niet voor foutherstel.

Het beleid vereist een unieke initialisatievector (IV) per sleutel bij het gebruik van authenticated encryption, volgens NIST SP 800-38D §5.2.1.

  1. Installeer NextPDF Core en het Enterprise-pakket en houd een actieve Enterprise-licentie aan.
  2. Om een FIPS-compatibele werking te claimen, configureer je NextPDF met een FIPS-gevalideerde cryptografische provider — bijvoorbeeld een FIPS-gevalideerde OpenSSL-provider — of een FIPS-gevalideerde hardware security module (HSM). NextPDF Enterprise verzorgt de structurele assemblage, de digestberekening en de handhaving van het beleid; de onderliggende primitieve bewerking draait binnen de gevalideerde grens die je aanlevert.
  3. Kies de preset: strict voor handhaving die is afgestemd op FIPS 140-3, of standard wanneer AES-128-CBC-interoperabiliteit vereist is.
  • Preset — kies strict of standard. Strict staat alleen AES-256-CBC toe; standard staat ook AES-128-CBC toe.
  • Guard — maak de bewaking aan met het gekozen beleid. Gebruik de bewaking als de grens waarmee je elke cryptografische keuze bevestigt.
  • Bedrading van de zelftest — koppel de boot guard tijdens de bootstrap van de applicatie, zodat elk werkproces zijn eigen zelftestcyclus uitvoert. Elke procesinstantie voert zijn eigen power-on-zelftest uit.
  1. Voer tijdens de bootstrap van de applicatie de power-on-zelftest uit via de boot guard en bevestig dat de module operationeel is. Stop het proces als dat niet het geval is.
  2. Maak de bewaking aan met het beleid strict of standard.
  3. Bevestig vóór elke cryptografische bewerking de hash, de handtekening-OID, het versleutelingsalgoritme en de sleutelsterkte via de bewaking.
  4. Vang de getypeerde overtreding op, log een gestructureerd bericht en weiger de bewerking. Val niet terug op een zwakkere keuze.
examples/enterprise/fips-boot-and-guard.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\Fips\FipsBootGuard;
use NextPDF\Enterprise\Security\Fips\FipsCryptoPolicy;
use NextPDF\Enterprise\Security\Fips\FipsModeGuard;
use NextPDF\Enterprise\Security\Fips\FipsSelfTest;
use NextPDF\Enterprise\Security\Fips\FipsModuleErrorStateException;
use Psr\Log\LoggerInterface;
/**
* Run the power-on self-test, then build a guard on the strict policy.
*
* The self-test runs once per process. A known-answer failure raises a
* module-error-state exception; the caller must stop rather than proceed
* with an unverified crypto path.
*
* @param LoggerInterface $logger Structural diagnostics only — never secrets.
*
* @throws FipsModuleErrorStateException When a power-on known-answer test fails.
*
* @return FipsModeGuard A guard ready to assert each cryptographic choice.
*/
function bootFipsGuard(LoggerInterface $logger): FipsModeGuard
{
$bootGuard = new FipsBootGuard(new FipsSelfTest());
try {
$bootGuard->assertOperational();
} catch (FipsModuleErrorStateException $e) {
$logger->critical('FIPS power-on self-test failed; refusing crypto services.', [
'reason' => $e->getMessage(),
]);
throw $e;
}
return new FipsModeGuard(FipsCryptoPolicy::strict());
}
examples/enterprise/fips-assert-choices.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\Fips\FipsModeGuard;
use NextPDF\Enterprise\Security\Fips\FipsViolationException;
use Psr\Log\LoggerInterface;
final readonly class FipsCheckedSigning
{
public function __construct(
private FipsModeGuard $guard,
private LoggerInterface $logger,
) {}
/**
* Assert the signing choices against the active policy before signing.
*
* A disallowed hash, signature OID, or key strength raises a typed
* violation; the operation is refused rather than downgraded.
*
* @param string $hash The hash algorithm name (e.g. 'sha256').
* @param string $signatureOid The signature algorithm OID.
* @param string $keyType The key type (e.g. 'rsa', 'ec').
* @param positive-int $keyBits The key length in bits.
*
* @throws FipsViolationException When any choice is not approved.
*/
public function assertApproved(
string $hash,
string $signatureOid,
string $keyType,
int $keyBits,
): void {
try {
$this->guard->assertHashAllowed($hash);
$this->guard->assertSignatureAlgorithmAllowed($signatureOid);
$this->guard->assertKeyStrengthAllowed($keyType, $keyBits);
} catch (FipsViolationException $e) {
$this->logger->error('FIPS policy violation', ['reason' => $e->getMessage()]);
throw $e;
}
}
}
  1. Voer de power-on-zelftest uit en bevestig dat die meldt dat de module operationeel is. Bevestig dat die elke goedgekeurde algoritmeklasse test — hashing, berichtauthenticatie, versleuteling, authenticated encryption, handtekeningen en willekeurige bits.
  2. Bevestig een goedgekeurde keuze, bijvoorbeeld SHA-256, RSA 2048, en controleer dat deze slaagt. Bevestig een niet-toegestane keuze, bijvoorbeeld SHA-1, RSA 1024, en controleer dat deze een getypeerde overtreding veroorzaakt.
  3. Injecteer een opzettelijk defecte hash- of willekeurigheidsbron in de zelftest en controleer dat de module naar de foutstatus gaat en diensten weigert.
  4. Controleer dat een onbekend sleuteltype standaard wordt geweigerd in plaats van geaccepteerd.
  • Fail-closed. Wanneer een cryptografische keuze niet is toegestaan, werpt de bewaking een getypeerde overtreding op en stopt de bewerking. Het beleid versoepelt zichzelf nooit en vervangt nooit een zwakker algoritme.
  • Zelftest weigert bij mismatch. Een mislukte known-answer-test brengt de module in een procesgebonden foutstatus. Het hele proces blijft fail-closed; een nieuwe boot guard of een nieuw beleid kan dat niet herstellen, en een geslaagde herhaling heft de vergrendeling niet op. Alleen een herstart van het proces heft de status op (ISO/IEC 19790:2025 §7.10.4.2; §7.10.2).
  • Sleutelsterkte. De preset strict handhaaft minimumwaarden van RSA 2048 en elliptische curve 256, die de aanvaardbare ondergrenzen in NIST SP 800-131A Rev.2 §3 halen of overtreffen.
  • Uniciteit van de IV. Gebruik van authenticated encryption vereist een unieke IV per sleutel (NIST SP 800-38D §5.2.1).

Deze pagina is gemarkeerd met export_control_class: legal-review-required omdat ze cryptografiebeleid betreft. Elke normatieve bron is geparafraseerd; er wordt geen normatieve tekst gereproduceerd. Juridische goedkeuring is vereist voordat de vlag publish wordt ingesteld.

NextPDF Enterprise is geen FIPS-gevalideerde cryptografische module en doet geen FIPS-certificeringsclaim. Het werkt alleen in FIPS-compatibele modus wanneer je het configureert met een FIPS-gevalideerde cryptografische provider — bijvoorbeeld een FIPS-gevalideerde OpenSSL-provider — of een FIPS-gevalideerde hardware security module (HSM). Het FIPS-modusbeleid ondersteunt compliance; het is geen certificering en geen juridisch advies. Raadpleeg je eigen compliance- en juridische adviseurs voor je wettelijke verplichtingen.

  • Mislukte zelftest bij boot. De boot guard werpt een module-error-state-uitzondering op. Stop het proces; ga niet verder met een niet-geverifieerd cryptopad.
  • Beleidsovertreding. De bewaking werpt een getypeerde overtreding op die het beleid en het ongeldige item benoemt. Weiger de bewerking; voer geen downgrade uit.
  • Onbekend sleuteltype. Het beleid weigert het standaard. Wijs het sleuteltype alleen expliciet toe als het werkelijk is goedgekeurd.
  • Herhaling van de zelftest. Een herhaling is op aanvraag beschikbaar voor een beheereindpunt of een opdracht en voldoet aan de verplichting tot periodieke zelftests op aanvraag. Het is geen herstelmechanisme: een mislukte herhaling vergrendelt het proces eveneens, en een geslaagde herhaling heft een bestaande vergrendeling niet op. Herstel van een module in de foutstatus vereist een herstart van het proces.

NextPDF Core levert de softwarematige ondertekenaar en versleuteling zonder een FIPS-modusprofiel. NextPDF Enterprise voegt het crypto-beleidsprofiel voor de FIPS-modus, de runtimebewaking en de power-on-zelftestbewaking toe, zodat je cryptografische keuzes tot een goedgekeurde set kunt beperken en fail-closed kunt reageren bij een niet-overeenkomende zelftest. Combineer dit met HSM-ondertekening om de primitieve bewerking binnen een FIPS-gevalideerd apparaat uit te voeren. Vergelijk edities.