Перейти к содержимому

Криптографическая политика FIPS 140-2/3 и самопроверки

NextPDF Enterprise ограничивает криптографический выбор для операций подписания или шифрования набором, одобренным федеральными стандартами обработки информации (FIPS), и отклоняет любой выбор за пределами этого набора. Защитный механизм времени выполнения проверяет каждый хеш, идентификатор алгоритма подписи, алгоритм шифрования и стойкость ключа перед выполнением операции. Набор самопроверок при запуске выполняется один раз при старте процесса. Если какой-либо тест с известным ответом не проходит, модуль переходит в состояние ошибки. На этой странице описано, что разрешает политика, что отклоняет защитный механизм, что охватывает самопроверка и какова явная позиция в отношении сертификации.

NextPDF Enterprise помогает обеспечить соответствие требованиям. Это не сертифицированный криптографический модуль. Явная позиция об отсутствии сертификации приведена в разделе Безопасность и соответствие требованиям.

Предварительные требования перечислены в блоке front matter; раздел Предварительные требования повторяет их.

Профиль криптографической политики режима FIPS, защитный механизм времени выполнения и защитный механизм самопроверки при запуске поставляются в пакете nextpdf/enterprise и требуют флага лицензируемой возможности enterprise. NextPDF Core и NextPDF Pro не предоставляют профиль режима FIPS. Защитный механизм и самопроверка выполняются внутри процесса; проверки политики и самопроверки не отправляют содержимое документа за пределы хоста. Сравнить редакции.

Возможность состоит из трёх частей: криптографической политики, защитного механизма времени выполнения и самопроверки при запуске.

Криптографическая политика ограничивает криптографический выбор одобренным набором в двух предустановках:

  • Строгая (соответствует поколению FIPS 140-3) — хеши SHA-256, SHA-384 и SHA-512; идентификаторы объектов подписи (OID) RSA и ECDSA с этими хешами; шифрование AES-256-CBC; минимальные размеры ключей RSA 2048 и ключей на эллиптических кривых 256.
  • Стандартная (соответствует поколению FIPS 140-2) — совпадает со строгой и дополнительно разрешает AES-128-CBC для совместимости со старыми системами.

Для генерации подписи NIST SP 800-131A Rev.2 §3 допускает ключ RSA не менее 2048 бит и порядок ECDSA не менее 224 бит; пороги 2048/256 строгой предустановки соответствуют этим минимумам или превышают их. По умолчанию политика отклоняет неизвестный тип ключа — она не принимает нераспознанный тип молча.

Защитный механизм времени выполнения работает поверх политики и предоставляет методы в стиле assert для хеша, OID подписи, алгоритма шифрования и стойкости ключа. Когда выбор не разрешён, он вызывает типизированное нарушение с указанием политики и недопустимого элемента, после чего операция останавливается. В этом сценарии срабатывает безопасный отказ: политика никогда не ослабляет сама себя и никогда не подставляет более слабый алгоритм. Для подписи RSASSA-PSS шлюз генерации явно привязывает дайджест сообщения. Все варианты PSS используют один OID подписи; хеш находится в параметрах PSS, а не в OID. Один лишь список разрешённых OID не может подтвердить фактический дайджест, поэтому шлюз проверяет, что дайджест одобрен FIPS (SHA-256/384/512). Он отклоняет с безопасным отказом любой токен PSS, дайджест которого неизвестен или не одобрен, например SHA-1 PSS, до передачи подписывающему модулю (FIPS 186-5 §5.4(b)).

Самопроверка при запуске выполняет набор тестов с известным ответом (KAT) один раз при старте процесса. Набор охватывает одобренные функции хеширования, аутентификации сообщений, шифрования, аутентифицированного шифрования, подписи и генерации случайных битов. Согласно ISO/IEC 19790:2025 §7.10.4.2, тест с известным ответом не проходит, когда вычисленный результат не равен известному ответу. При любом сбое модуль переходит в состояние ошибки и отказывает в криптографических услугах (ISO/IEC 19790:2025 §7.2.4.3). Состояние ошибки закрепляется на уровне процесса: после того как любой защитный механизм запуска в процессе обнаружил ошибку, весь процесс остаётся в режиме безопасного отказа на всё время своего существования. Создание нового защитного механизма запуска или политики не может сбросить это состояние. Последующий успешный повторный запуск самопроверки не сбрасывает зафиксированную ошибку — это делает только перезапуск процесса (настоящий цикл питания), согласно ISO/IEC 19790:2025 §7.10.2. Результат кэшируется на всё время существования процесса; вы можете выполнить повторный запуск по требованию для административной конечной точки или команды, но он служит для выполнения обязательства о периодической самопроверке, а не для восстановления после ошибки.

Политика требует уникального вектора инициализации (IV) на каждый ключ при использовании аутентифицированного шифрования, согласно NIST SP 800-38D §5.2.1.

  1. Установите NextPDF Core и пакет Enterprise, поддерживайте активную лицензию Enterprise.
  2. Чтобы заявить о FIPS-совместимой работе, настройте NextPDF с прошедшим проверку FIPS криптографическим провайдером — например прошедшим проверку FIPS провайдером OpenSSL — или прошедшим проверку FIPS аппаратным модулем безопасности (HSM). NextPDF Enterprise выполняет структурную сборку, вычисление дайджеста и применение политики; базовый примитив выполняется в предоставленной вами проверенной границе.
  3. Выберите предустановку: строгую для применения, соответствующего FIPS 140-3, или стандартную для случаев, где требуется совместимость с AES-128-CBC.
  • Предустановка — выберите строгую или стандартную. Строгая разрешает только AES-256-CBC; стандартная также разрешает AES-128-CBC.
  • Защитный механизм — создайте защитный механизм с выбранной политикой. Используйте защитный механизм как точку, где вы проверяете каждый криптографический выбор.
  • Подключение самопроверки — подключите защитный механизм запуска при инициализации приложения, чтобы каждый рабочий процесс выполнял собственный цикл самопроверки. Каждый экземпляр процесса выполняет собственную самопроверку при запуске.
  1. При инициализации приложения выполните самопроверку при запуске через защитный механизм запуска и убедитесь, что модуль работоспособен. Если это не так, остановите процесс.
  2. Создайте защитный механизм со строгой или стандартной политикой.
  3. Перед каждой криптографической операцией проверьте через защитный механизм хеш, OID подписи, алгоритм шифрования и стойкость ключа.
  4. Перехватите типизированное нарушение, запишите структурное сообщение в журнал и откажите в операции. Не переходите на более слабый вариант.
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. Выполните самопроверку при запуске и убедитесь, что она сообщает о работоспособности. Убедитесь, что она покрывает каждый одобренный класс алгоритмов — хеширование, аутентификацию сообщений, шифрование, аутентифицированное шифрование, подпись и генерацию случайных битов.
  2. Проверьте одобренный выбор, например SHA-256, RSA 2048, и убедитесь, что он проходит. Проверьте неразрешённый выбор, например SHA-1, RSA 1024, и убедитесь, что он вызывает типизированное нарушение.
  3. Внедрите в самопроверку намеренно повреждённый хеш или источник случайности и убедитесь, что модуль переходит в состояние ошибки и отказывает в услугах.
  4. Убедитесь, что неизвестный тип ключа по умолчанию отклоняется, а не принимается.
  • Безопасный отказ. Когда криптографический выбор не разрешён, защитный механизм вызывает типизированное нарушение и останавливает операцию. Политика никогда не ослабляет сама себя и никогда не подставляет более слабый алгоритм.
  • Самопроверка отказывает при несовпадении. Сбой теста с известным ответом переводит модуль в состояние ошибки, закреплённое на уровне процесса. Весь процесс остаётся в режиме безопасного отказа; новый защитный механизм запуска или политика не могут его восстановить, а успешный повторный запуск не снимает фиксацию. Сбросить состояние может только перезапуск процесса (ISO/IEC 19790:2025 §7.10.4.2; §7.10.2).
  • Стойкость ключа. Строгая предустановка применяет минимумы RSA 2048 и ключей на эллиптических кривых 256, которые соответствуют допустимым порогам в NIST SP 800-131A Rev.2 §3 или превышают их.
  • Уникальность IV. Использование аутентифицированного шифрования требует уникального IV на каждый ключ (NIST SP 800-38D §5.2.1).

Эта страница помечена как export_control_class: legal-review-required, поскольку она касается криптографической политики. Каждый нормативный источник изложен своими словами; нормативный текст не воспроизводится. Перед установкой флага publish требуется согласование с юридической службой.

NextPDF Enterprise не является прошедшим проверку FIPS криптографическим модулем и не делает заявлений о сертификации FIPS. Он работает в FIPS-совместимом режиме только при условии, что вы настроите его с прошедшим проверку FIPS криптографическим провайдером — например прошедшим проверку FIPS провайдером OpenSSL — или прошедшим проверку FIPS аппаратным модулем безопасности (HSM). Политика режима FIPS помогает обеспечить соответствие требованиям; это не сертификация и не юридическое заключение. По вопросам нормативных обязательств обращайтесь к своим специалистам по соответствию требованиям и юристам.

  • Сбой самопроверки при запуске. Защитный механизм запуска вызывает исключение состояния ошибки модуля. Остановите процесс; не продолжайте работу с непроверенным криптографическим путём.
  • Нарушение политики. Защитный механизм вызывает типизированное нарушение с указанием политики и недопустимого элемента. Откажите в операции; не переходите на более слабый вариант.
  • Неизвестный тип ключа. Политика отклоняет его по умолчанию. Сопоставляйте тип ключа явно только в том случае, если он действительно одобрен.
  • Повторный запуск самопроверки. Повторный запуск доступен по требованию для административной конечной точки или команды и выполняет обязательство о периодической самопроверке по требованию. Это не механизм восстановления: неуспешный повторный запуск также фиксирует процесс в состоянии ошибки, а успешный повторный запуск не снимает существующую фиксацию. Восстановление модуля в состоянии ошибки требует перезапуска процесса.

NextPDF Core поставляет программный подписывающий модуль и шифрование без профиля режима FIPS. NextPDF Enterprise добавляет профиль криптографической политики режима FIPS, защитный механизм времени выполнения и защитный механизм самопроверки при запуске, поэтому вы можете ограничить криптографический выбор одобренным набором и переходить в режим безопасного отказа при несовпадении самопроверки. Объедините его с подписанием через HSM, чтобы выполнять примитив внутри прошедшего проверку FIPS устройства. Сравнить редакции.