Criterio crittografico e self-test FIPS 140-2/3
In breve
Sezione intitolata “In breve”NextPDF Enterprise limita le scelte crittografiche che un’operazione di firma o cifratura può effettuare a un insieme approvato dai Federal Information Processing Standards (FIPS) e rifiuta qualsiasi scelta esterna a tale insieme. Un guard runtime asserisce ogni hash, identificatore di algoritmo di firma, algoritmo di cifratura e robustezza della chiave prima dell’esecuzione dell’operazione. La batteria di self-test all’avvio viene eseguita una sola volta quando il processo parte e porta il modulo in uno stato di errore se un qualsiasi known-answer test fallisce. Questa pagina descrive il comportamento: cosa il criterio consente, cosa il guard rifiuta, cosa copre il self-test e la posizione esplicita in materia di certificazione.
NextPDF Enterprise è uno strumento di supporto alla conformità, non un modulo crittografico certificato. La posizione esplicita di non certificazione è indicata in Sicurezza e conformità.
I prerequisiti sono dichiarati nel front matter e ripetuti in Prerequisiti.
Edizione e licenze
Sezione intitolata “Edizione e licenze”Il profilo del criterio crittografico in modalità FIPS, il guard runtime e il guard di self-test all’avvio sono distribuiti nel pacchetto nextpdf/enterprise e sono regolati dal feature flag di licenza enterprise. NextPDF Core e NextPDF Pro non forniscono un profilo in modalità FIPS. Il guard e il self-test vengono eseguiti nel processo; nessun contenuto del documento lascia l’host per la verifica del criterio o per il self-test. Confronta le edizioni.
Cosa fa questa funzionalità
Sezione intitolata “Cosa fa questa funzionalità”La funzionalità si articola in tre parti: un criterio crittografico, un guard runtime e un self-test all’avvio.
Il criterio crittografico limita le scelte crittografiche a un insieme approvato, con due preset:
- Strict (allineato alla generazione FIPS 140-3) — hash SHA-256, SHA-384 e SHA-512; identificatori di oggetto (OID) di firma RSA ed ECDSA con tali hash; cifratura AES-256-CBC; e dimensioni minime pari a chiave RSA 2048 e curva ellittica 256.
- Standard (allineato alla generazione FIPS 140-2) — come strict, ma consente anche AES-128-CBC per l’interoperabilità con sistemi più datati.
Una chiave RSA di almeno 2048 bit e un ordine ECDSA di almeno 224 bit sono i minimi accettabili per la generazione della firma secondo NIST SP 800-131A Rev.2 §3; i limiti minimi 2048/256 del preset strict sono pari o superiori a tali minimi. Un tipo di chiave sconosciuto viene negato per impostazione predefinita — il criterio non accetta silenziosamente un tipo non riconosciuto.
Il guard runtime incapsula il criterio ed espone metodi in stile assert per hash, OID di firma, algoritmo di cifratura e robustezza della chiave. Una scelta non consentita solleva una violazione tipizzata che indica il criterio e l’elemento in violazione e interrompe l’operazione. Il percorso è fail-closed: il criterio non viene mai allentato e non sostituisce mai un algoritmo più debole. Per una firma RSASSA-PSS, il gate di generazione vincola esplicitamente il digest del messaggio: poiché ogni variante PSS condivide un unico OID di firma — l’hash risiede nei parametri PSS, non nell’OID — la sola allowlist di OID non può provare il digest effettivo; quindi il gate asserisce che tale digest sia approvato FIPS (SHA-256/384/512) e nega in modo fail-closed un token PSS il cui digest è sconosciuto o non approvato, per esempio SHA-1 PSS, prima di qualsiasi dispatch verso il signer (FIPS 186-5 §5.4(b)).
Il self-test all’avvio esegue una batteria di known-answer test (KAT) una volta all’avvio del processo, coprendo le funzioni approvate di hash, autenticazione del messaggio, cifratura, cifratura autenticata, firma e bit casuali. Un known-answer test fallisce quando l’output calcolato non è uguale alla risposta nota, secondo ISO/IEC 19790:2025 §7.10.4.2. In caso di qualsiasi fallimento il modulo entra in uno stato di errore e rifiuta i servizi crittografici (ISO/IEC 19790:2025 §7.2.4.3). Lo stato di errore è persistente per il processo: una volta che un qualsiasi boot guard nel processo osserva un errore, l’intero processo rimane fail-closed per tutta la sua durata. Costruire un nuovo boot guard o criterio non può cancellarlo, e una successiva ri-esecuzione superata del self-test non azzera un errore bloccato — può farlo solo un riavvio del processo (un vero ciclo di spegnimento e riaccensione), secondo ISO/IEC 19790:2025 §7.10.2. Il risultato viene memorizzato nella cache per tutta la durata del processo; una ri-esecuzione su richiesta è disponibile per un endpoint amministrativo o un comando, ma soddisfa l’obbligo di self-test periodico, non il ripristino dall’errore.
L’uso della cifratura autenticata secondo il criterio richiede un vettore di inizializzazione (IV) univoco per ciascuna chiave, secondo NIST SP 800-38D §5.2.1.
Prerequisiti
Sezione intitolata “Prerequisiti”- Installare NextPDF Core e il pacchetto Enterprise e disporre di una licenza Enterprise attiva.
- Per dichiarare un funzionamento compatibile FIPS, configurare NextPDF con un provider crittografico convalidato FIPS — per esempio un provider OpenSSL convalidato FIPS — o un HSM convalidato FIPS. NextPDF Enterprise esegue l’assemblaggio strutturale, il calcolo del digest e l’applicazione del criterio; la primitiva sottostante viene eseguita nel boundary convalidato fornito dall’utente.
- Decidere il preset: strict per un’applicazione allineata a FIPS 140-3, oppure standard quando è richiesta l’interoperabilità AES-128-CBC.
Configurazione
Sezione intitolata “Configurazione”- Preset — scegliere strict o standard. Strict consente solo AES-256-CBC; standard consente anche AES-128-CBC.
- Guard — costruire il guard con il criterio scelto. Il guard è il boundary nel quale si asserisce ogni scelta crittografica.
- Wiring del self-test — collegare il boot guard al bootstrap dell’applicazione in modo che ogni processo worker esegua il proprio ciclo di self-test. Le diverse istanze di processo eseguono ciascuna il proprio self-test all’avvio.
Passo dopo passo
Sezione intitolata “Passo dopo passo”- Al bootstrap dell’applicazione, eseguire il self-test all’avvio tramite il boot guard e asserire che il modulo sia operativo. Arrestare il processo se non lo è.
- Costruire il guard con il criterio strict o standard.
- Prima di ogni operazione crittografica, asserire tramite il guard l’hash, l’OID di firma, l’algoritmo di cifratura e la robustezza della chiave.
- Intercettare la violazione tipizzata, registrare un messaggio strutturato e rifiutare l’operazione — non ripiegare su una scelta più debole.
<?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());}<?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; } }}Verifica
Sezione intitolata “Verifica”- Eseguire il self-test all’avvio e verificare che riporti lo stato operativo. Verificare che ogni classe di algoritmi approvata — hash, autenticazione del messaggio, cifratura, cifratura autenticata, firma e bit casuali — venga esercitata.
- Asserire una scelta approvata (per esempio SHA-256, RSA 2048) e verificare che venga superata; asserire una scelta non consentita (per esempio SHA-1, RSA 1024) e verificare che sollevi una violazione tipizzata.
- Iniettare nel self-test un hash deliberatamente difettoso o una sorgente di casualità deliberatamente difettosa e verificare che il modulo entri nello stato di errore e rifiuti i servizi.
- Verificare che un tipo di chiave sconosciuto venga negato per impostazione predefinita anziché accettato.
Sicurezza e conformità
Sezione intitolata “Sicurezza e conformità”- Fail-closed. Una scelta crittografica non consentita solleva una violazione tipizzata e interrompe l’operazione. Il criterio non viene mai allentato e non sostituisce mai un algoritmo più debole.
- Il self-test rifiuta in caso di mancata corrispondenza. Il fallimento di un known-answer test porta il modulo in uno stato di errore persistente per il processo. L’intero processo rimane fail-closed; un nuovo boot guard o criterio non può ripristinarlo, e una ri-esecuzione superata non rimuove il blocco — solo un riavvio del processo lo azzera (ISO/IEC 19790:2025 §7.10.4.2; §7.10.2).
- Robustezza della chiave. Il preset strict impone i minimi RSA 2048 e curva ellittica 256, pari o superiori ai limiti minimi accettabili di NIST SP 800-131A Rev.2 §3.
- Univocità dell’IV. L’uso della cifratura autenticata richiede un IV univoco per ciascuna chiave (NIST SP 800-38D §5.2.1).
Questa pagina è contrassegnata con export_control_class: legal-review-required perché riguarda il criterio crittografico. Ogni fonte normativa è parafrasata; nessun testo normativo viene riprodotto. È necessaria l’approvazione legale prima che il flag publish venga impostato.
NextPDF Enterprise non è un modulo crittografico convalidato FIPS e non formula alcuna dichiarazione di certificazione FIPS. Opera in una modalità compatibile FIPS solo quando è configurato con un provider crittografico convalidato FIPS — per esempio un provider OpenSSL convalidato FIPS — o un HSM convalidato FIPS. Il criterio in modalità FIPS supporta la conformità; non è una certificazione né un parere legale. Consultare i propri consulenti legali e di conformità per gli obblighi normativi applicabili.
Gestione dei guasti
Sezione intitolata “Gestione dei guasti”- Fallimento del self-test all’avvio. Il boot guard solleva un’eccezione di stato di errore del modulo. Arrestare il processo; non procedere con un percorso crittografico non verificato.
- Violazione del criterio. Il guard solleva una violazione tipizzata che indica il criterio e l’elemento in violazione. Rifiutare l’operazione; non effettuare un downgrade.
- Tipo di chiave sconosciuto. Il criterio lo nega per impostazione predefinita. Mappare esplicitamente il tipo di chiave se è effettivamente approvato.
- Ri-esecuzione del self-test. Una ri-esecuzione è disponibile su richiesta per un endpoint amministrativo o un comando e soddisfa l’obbligo di self-test periodico su richiesta. Non è un meccanismo di ripristino: una ri-esecuzione fallita blocca anch’essa il processo, e una ri-esecuzione superata non rimuove un blocco esistente. Il ripristino di un modulo nello stato di errore richiede un riavvio del processo.
Contesto commerciale
Sezione intitolata “Contesto commerciale”NextPDF Core distribuisce il signer software e la cifratura senza un profilo in modalità FIPS. NextPDF Enterprise aggiunge il profilo del criterio crittografico in modalità FIPS, il guard runtime e il guard di self-test all’avvio, così che un deployment possa limitare le scelte crittografiche a un insieme approvato e fallire in modo chiuso in caso di mancata corrispondenza del self-test. Abbinarlo a Firma HSM per eseguire la primitiva all’interno di un dispositivo convalidato FIPS. Confronta le edizioni.
Vedere anche
Sezione intitolata “Vedere anche”- Sicurezza — NextPDF Enterprise — la superficie di sicurezza Enterprise combinata.
- Firma HSM — NextPDF Enterprise — custodia delle chiavi hardware PKCS#11.
- Firma — NextPDF Enterprise — il produttore a lungo termine PAdES B-LT e B-LTA.
- Sicurezza — NextPDF Core — la superficie principale di cifratura e firma.
- Modalità FIPS · KAT · AEAD — termini del glossario.