Przejdź do głównej zawartości

FIPS 140-2/3 – polityka kryptograficzna i autotest

NextPDF Enterprise ogranicza wybory kryptograficzne dostępne dla operacji podpisywania lub szyfrowania do zbioru zatwierdzonego przez Federal Information Processing Standards (FIPS) i odrzuca każdy wybór spoza tego zbioru. Strażnik działający w czasie wykonywania sprawdza każdy skrót, identyfikator algorytmu podpisu, algorytm szyfrowania i siłę klucza przed uruchomieniem operacji. Zestaw autotestów po uruchomieniu jest wykonywany jednokrotnie podczas startu procesu. Jeśli którykolwiek test ze znaną odpowiedzią zakończy się niepowodzeniem, moduł przechodzi w stan błędu. Ta strona opisuje to zachowanie: co dopuszcza polityka, co odrzuca strażnik, co obejmuje autotest oraz jakie jest jednoznaczne stanowisko dotyczące certyfikacji.

NextPDF Enterprise wspiera zgodność z przepisami. Nie jest certyfikowanym modułem kryptograficznym. Zobacz Bezpieczeństwo i zgodność, aby poznać jednoznaczne stanowisko dotyczące braku certyfikacji.

Front matter podaje wymagania wstępne, a sekcja Wymagania wstępne je powtarza.

Profil polityki kryptograficznej w trybie FIPS, strażnik działający w czasie wykonywania oraz strażnik autotestu po uruchomieniu są dostarczane w pakiecie nextpdf/enterprise i wymagają flagi funkcji licencyjnej enterprise. NextPDF Core i NextPDF Pro nie udostępniają profilu trybu FIPS. Strażnik i autotest działają w obrębie procesu; kontrole polityki i autotesty nie wysyłają zawartości dokumentu poza hosta. Porównaj edycje.

Funkcja składa się z trzech części: polityki kryptograficznej, strażnika działającego w czasie wykonywania oraz autotestu po uruchomieniu.

Polityka kryptograficzna ogranicza wybory kryptograficzne do zatwierdzonego zbioru i oferuje dwa ustawienia wstępne:

  • Strict (zgodne z generacją FIPS 140-3) — skróty SHA-256, SHA-384 i SHA-512; identyfikatory obiektów (OID) podpisów RSA i ECDSA z tymi skrótami; szyfrowanie AES-256-CBC oraz minimalne rozmiary kluczy RSA 2048 i krzywej eliptycznej 256.
  • Standard (zgodne z generacją FIPS 140-2) — odpowiada ustawieniu strict, a dodatkowo dopuszcza AES-128-CBC dla zgodności ze starszymi rozwiązaniami.

W przypadku generowania podpisu NIST SP 800-131A Rev.2 §3 akceptuje klucz RSA o długości co najmniej 2048 bitów oraz rząd ECDSA wynoszący co najmniej 224 bitów; dolne progi 2048/256 w ustawieniu strict spełniają te minima lub je przekraczają. Polityka domyślnie odrzuca nieznany typ klucza — nie akceptuje po cichu nierozpoznanego typu.

Strażnik działający w czasie wykonywania opakowuje politykę i udostępnia metody asercji dla skrótu, identyfikatora OID podpisu, algorytmu szyfrowania oraz siły klucza. Gdy wybór jest niedozwolony, strażnik zgłasza typowane naruszenie, które wskazuje politykę oraz problematyczny element, a następnie zatrzymuje operację. Ścieżka przechodzi w stan bezpiecznej awarii: polityka nigdy nie łagodzi własnych reguł i nigdy nie zastępuje algorytmu słabszym. W przypadku podpisu RSASSA-PSS bramka generowania podpisu jawnie wiąże skrót wiadomości. Wszystkie warianty PSS współdzielą jeden OID podpisu; skrót znajduje się w parametrach PSS, a nie w OID. Sama lista dozwolonych OID nie może potwierdzić rzeczywistego skrótu, dlatego bramka sprawdza, czy skrót jest zatwierdzony przez FIPS (SHA-256/384/512). W trybie bezpiecznej awarii odmawia każdego tokenu PSS, którego skrót jest nieznany lub niezatwierdzony, na przykład SHA-1 PSS, przed jakimkolwiek wywołaniem podpisującego (FIPS 186-5 §5.4(b)).

Autotest po uruchomieniu wykonuje zestaw testów ze znaną odpowiedzią (KAT) jednokrotnie podczas startu procesu. Zestaw obejmuje zatwierdzone funkcje skrótu, uwierzytelniania wiadomości, szyfrowania, szyfrowania uwierzytelnionego, podpisu oraz generowania bitów losowych. Zgodnie z ISO/IEC 19790:2025 §7.10.4.2 test ze znaną odpowiedzią kończy się niepowodzeniem, gdy obliczony wynik nie jest równy znanej odpowiedzi. Przy każdym niepowodzeniu moduł przechodzi w stan błędu i odmawia usług kryptograficznych (ISO/IEC 19790:2025 §7.2.4.3). Stan błędu jest trwały dla procesu: gdy jakikolwiek strażnik rozruchu w procesie zaobserwuje błąd, cały proces pozostaje w stanie bezpiecznej awarii przez cały okres działania. Utworzenie nowego strażnika rozruchu ani polityki nie może go wyczyścić. Późniejsze pomyślne ponowne wykonanie autotestu nie czyści zatrzaśniętego błędu — robi to wyłącznie ponowne uruchomienie procesu (rzeczywisty cykl zasilania), zgodnie z ISO/IEC 19790:2025 §7.10.2. Wynik jest buforowany przez cały okres działania procesu; możesz uruchomić ponowne wykonanie na żądanie dla punktu końcowego administratora lub polecenia, ale służy ono spełnieniu obowiązku okresowego autotestu, a nie odzyskiwaniu po błędzie.

Polityka wymaga unikatowego wektora inicjalizacji (IV) na klucz w przypadku szyfrowania uwierzytelnionego, zgodnie z NIST SP 800-38D §5.2.1.

  1. Zainstaluj NextPDF Core oraz pakiet Enterprise i utrzymuj aktywną licencję Enterprise.
  2. Aby zadeklarować działanie zgodne z FIPS, skonfiguruj NextPDF z dostawcą kryptografii walidowanym pod kątem FIPS — na przykład walidowanym pod kątem FIPS dostawcą OpenSSL — lub walidowanym pod kątem FIPS sprzętowym modułem bezpieczeństwa (HSM). NextPDF Enterprise wykonuje montaż strukturalny, obliczanie skrótu oraz egzekwowanie polityki; bazowy prymityw działa w walidowanej granicy, którą dostarczasz.
  3. Wybierz ustawienie wstępne: strict dla egzekwowania zgodnego z FIPS 140-3 lub standard, gdy wymagana jest interoperacyjność z AES-128-CBC.
  • Ustawienie wstępne — wybierz strict lub standard. Strict dopuszcza wyłącznie AES-256-CBC; standard dopuszcza także AES-128-CBC.
  • Strażnik — utwórz strażnika z wybraną polityką. Używaj strażnika jako granicy, na której sprawdzany jest każdy wybór kryptograficzny.
  • Podłączenie autotestu — podłącz strażnika rozruchu podczas inicjalizacji aplikacji, aby każdy proces roboczy wykonywał własny cykl autotestu. Każda instancja procesu wykonuje własny autotest po uruchomieniu.
  1. Podczas inicjalizacji aplikacji wykonaj autotest po uruchomieniu za pomocą strażnika rozruchu i potwierdź, że moduł jest sprawny. Zatrzymaj proces, jeśli tak nie jest.
  2. Utwórz strażnika z polityką strict lub standard.
  3. Przed każdą operacją kryptograficzną sprawdź skrót, identyfikator OID podpisu, algorytm szyfrowania oraz siłę klucza za pośrednictwem strażnika.
  4. Przechwyć typowane naruszenie, zapisz w dzienniku ustrukturyzowany komunikat i odmów wykonania operacji. Nie przechodź awaryjnie na słabszy wybór.
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. Uruchom autotest po uruchomieniu i potwierdź, że zgłasza stan sprawności. Potwierdź, że obejmuje każdą zatwierdzoną klasę algorytmów — skrót, uwierzytelnianie wiadomości, szyfrowanie, szyfrowanie uwierzytelnione, podpis oraz generowanie bitów losowych.
  2. Sprawdź zatwierdzony wybór, na przykład SHA-256, RSA 2048, i potwierdź, że przechodzi pomyślnie. Sprawdź niedozwolony wybór, na przykład SHA-1, RSA 1024, i potwierdź, że zgłasza typowane naruszenie.
  3. Celowo wstrzyknij uszkodzony skrót lub źródło losowości do autotestu i potwierdź, że moduł przechodzi w stan błędu i odmawia usług.
  4. Potwierdź, że nieznany typ klucza jest domyślnie odrzucany, a nie akceptowany.
  • Bezpieczna awaria. Gdy wybór kryptograficzny jest niedozwolony, strażnik zgłasza typowane naruszenie i zatrzymuje operację. Polityka nigdy nie łagodzi własnych reguł i nigdy nie zastępuje algorytmu słabszym.
  • Autotest odmawia przy niezgodności. Niepowodzenie testu ze znaną odpowiedzią wprowadza moduł w stan błędu trwały dla procesu. Cały proces pozostaje w stanie bezpiecznej awarii; nowy strażnik rozruchu ani polityka nie mogą go przywrócić, a pomyślne ponowne wykonanie nie zwalnia zatrzasku. Czyści go wyłącznie ponowne uruchomienie procesu (ISO/IEC 19790:2025 §7.10.4.2; §7.10.2).
  • Siła klucza. Ustawienie strict egzekwuje minima RSA 2048 i krzywej eliptycznej 256, które spełniają lub przekraczają dopuszczalne dolne progi z NIST SP 800-131A Rev.2 §3.
  • Unikatowość IV. Użycie szyfrowania uwierzytelnionego wymaga unikatowego IV na klucz (NIST SP 800-38D §5.2.1).

Ta strona jest oznaczona jako export_control_class: legal-review-required, ponieważ dotyczy polityki kryptograficznej. Każde źródło normatywne jest parafrazowane; żaden tekst normatywny nie jest odtwarzany. Przed ustawieniem flagi publish wymagana jest akceptacja działu prawnego.

NextPDF Enterprise nie jest modułem kryptograficznym walidowanym pod kątem FIPS i nie składa żadnego oświadczenia o certyfikacji FIPS. Działa w trybie zgodnym z FIPS tylko wtedy, gdy skonfigurujesz go z dostawcą kryptografii walidowanym pod kątem FIPS — na przykład walidowanym pod kątem FIPS dostawcą OpenSSL — lub walidowanym pod kątem FIPS sprzętowym modułem bezpieczeństwa (HSM). Polityka trybu FIPS wspiera zgodność z przepisami; nie jest certyfikacją ani opinią prawną. W zakresie swoich zobowiązań regulacyjnych skonsultuj się z własnymi doradcami ds. zgodności i prawnymi.

  • Niepowodzenie autotestu podczas rozruchu. Strażnik rozruchu zgłasza wyjątek stanu błędu modułu. Zatrzymaj proces; nie kontynuuj pracy z niezweryfikowaną ścieżką kryptograficzną.
  • Naruszenie polityki. Strażnik zgłasza typowane naruszenie, które wskazuje politykę oraz problematyczny element. Odmów wykonania operacji; nie obniżaj poziomu zabezpieczeń.
  • Nieznany typ klucza. Polityka domyślnie go odrzuca. Odwzoruj typ klucza jawnie tylko wtedy, gdy rzeczywiście jest zatwierdzony.
  • Ponowne wykonanie autotestu. Ponowne wykonanie jest dostępne na żądanie dla punktu końcowego administratora lub polecenia, co spełnia obowiązek okresowego autotestu na żądanie. Nie jest to mechanizm odzyskiwania: nieudane ponowne wykonanie również zatrzaskuje proces, a pomyślne ponowne wykonanie nie zwalnia istniejącego zatrzasku. Przywrócenie modułu ze stanu błędu wymaga ponownego uruchomienia procesu.

NextPDF Core dostarcza programowy komponent podpisujący i szyfrowanie bez profilu trybu FIPS. NextPDF Enterprise dodaje profil polityki kryptograficznej w trybie FIPS, strażnika działającego w czasie wykonywania oraz strażnika autotestu po uruchomieniu, dzięki czemu możesz ograniczyć wybory kryptograficzne do zatwierdzonego zbioru i przejść w stan bezpiecznej awarii przy niezgodności autotestu. Połącz to z podpisywaniem HSM, aby wykonywać prymityw wewnątrz urządzenia walidowanego pod kątem FIPS. Porównaj edycje.