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

Enterprise редакциястабильность: Экспериментальная

Статус предварительной версии постквантового подписания через HSM (PQS)

Статус превью-возможности. Подключаемое, выключено по умолчанию, отказывает закрытием. Это превью постквантового подписания с делегированием HSM. Оно не общедоступно, оно не соответствует AdES, оно не FIPS-validated и не делает заявления о сертификации или соответствии. Превью выключено, пока вы его не подключите; когда выключено, вызов подписания отказывает закрытием с типизированным исключением.

NextPDF Enterprise предоставляет экспериментальную поверхность постквантовой подписи (PQS), которая управляет подписанием ML-DSA (FIPS 204) и SLH-DSA (FIPS 205) через аппаратный токен PKCS#11. Путь — Pkcs11Signer::signPqs(), ограниченный явным посигнерным подключением ($enablePostQuantum) и, отдельно, env-флагом уровня процесса (NEXTPDF_FEATURE_PREVIEW_PQS_HSM). Оба выключены по умолчанию.

Эта страница — честная граница. Она описывает, что превью делает — оно делегирует настоящую операцию постквантового подписания токену — и с равной честностью, чем оно не является: оно не GA, не AdES, не FIPS-validated и не заявление о соответствии FIPS, OASIS или ETSI. Стандарты, которые сделали бы постквантовую подпись PDF совместимой для долгосрочного архивирования, ещё не появились (см. Границы стандартов).

Эта возможность поставляется в NextPDF Enterprise (nextpdf/enterprise) и активируется лицензионным конвертом уровня Enterprise. Развёртывание без этого права не загружает классы возможности. Сравнить редакции и получить лицензию.

Она строится на подписывающем аппаратном токене PKCS#11 Enterprise — см. Подписание через HSM. Классический путь подписания PKCS#11 (RSA / ECDSA) — это поддерживаемая, стабильная возможность Enterprise; описанный здесь постквантовый путь — это экспериментальное превью, наложенное поверх него. NextPDF Enterprise включает набор функций Pro.

Превью управляет настоящей операцией подписания: когда включено, signPqs() направляет вызов к кандидатному постквантовому механизму PKCS#11 v3.1 на токене, закрытый ключ никогда не покидает границу токена, а возвращённые байты проверяются по длине относительно длины подписи, предписанной FIPS для выбранного набора параметров, прежде чем они принимаются.

При этом оно одновременно является превью, а не общедоступной возможностью продукта:

  • Идентификаторы постквантового механизма PKCS#11 и набора параметров предварительны — OASIS PKCS#11 v3.1 не финализировал реестр постквантовых механизмов, поэтому используемые значения отслеживаются как предварительные, и операторы HSM должны подтвердить, что PQ-прошивка их токена им соответствует, прежде чем включать.
  • В NextPDF не существует пути постквантовой проверки, и ни один набор ETSI не регистрирует постквантовую подпись для долгосрочного архивирования AdES, поэтому произведённая здесь подпись пока несовместима, и большинство просмотрщиков PDF отвергнут её во время проверки.
  • Сопутствующий дескриптор, PqsCapabilityStatus, сообщает эти факты в машиночитаемой форме. Каждый булев флаг положительного заявления — generallyAvailable, adesCompliant, verificationAvailable, conformanceClaimed — жёстко закодирован как false и остаётся false даже когда превью-флаг включён, и никакая конфигурация не может переключить его в истину. (Он также несёт флаг recognitionOnly, жёстко закодированный как true, который фиксирует, что распознавание алгоритма никогда не является вердиктом о соответствии; это не означает, что поверхность не может подписывать — подписание происходит через signPqs(), как описано выше.)

NextPDF уже может вычислить настоящую подпись ML-DSA или SLH-DSA через токен. Тем не менее каждый булев флаг соответствия остаётся жёстко закодированным как false, за двумя выключенными по умолчанию затворами. Подпись стоит ровно столько, сколько стоит возможность проверить её позже. Для постквантовой криптографии пока нет пути проверки, нет зарегистрированного набора ETSI AdES и нет FIPS-validated кругового обхода HSM. Поставка этого как общедоступного выпускала бы подписи, которые ни один просмотрщик не может проверить и ни один архив не может считать доверенными. Поэтому дизайн отделяет производство байтов от заявления, что кто-либо может на них полагаться, и никакой превью-флаг не может размыть эту грань.

Справочная информация по дизайну: Долгосрочная валидация.

signPqs() выбирает алгоритм и набор параметров через перечисление Pkcs11PqsAlgorithm. Каждый случай сопоставляет набор параметров NIST с предварительным идентификатором механизма / набора параметров PKCS#11 и с длиной подписи в байтах, предписанной FIPS, используемой для проверки длины с эшелонированной защитой.

ML-DSA — FIPS 204 (модульно-решёточный). Три набора параметров, заявленных на показанных категориях стойкости NIST:

Набор параметровКатегория NISTДлина подписи (байты)
ML-DSA-4422420
ML-DSA-65 (рекомендуемое значение по умолчанию)33309
ML-DSA-8754627

SLH-DSA — FIPS 205 (бесстатусный на основе хеша). Двенадцать наборов параметров, образованных как SHA2 / SHAKE x 128 / 192 / 256 x малый (s) / быстрый (f). Варианты s минимизируют размер подписи; варианты f минимизируют задержку подписания:

Семейство наборов параметровКатегория NISTДлина подписи (байты)
SLH-DSA-{SHA2,SHAKE}-128s17856
SLH-DSA-{SHA2,SHAKE}-128f117088
SLH-DSA-{SHA2,SHAKE}-192s316224
SLH-DSA-{SHA2,SHAKE}-192f335664
SLH-DSA-{SHA2,SHAKE}-256s529792
SLH-DSA-{SHA2,SHAKE}-256f549856

Оба независимых затвора должны быть открыты. Оба по умолчанию выключены.

  1. Затвор процесса. Установите NEXTPDF_FEATURE_PREVIEW_PQS_HSM=1 до загрузки процесса (или через putenv() до чтения статуса). Требуется строгое равенство строке 1; любое другое значение — включая 0, true, yes или пустое — трактуется как выключено.
  2. Посигнерное подключение. Передайте $enablePostQuantum: true в конструктор Pkcs11Signer.
use NextPDF\Enterprise\Security\Signature\Hsm\Pkcs11Signer;
use NextPDF\Enterprise\Security\Signature\Hsm\Pkcs11PqsAlgorithm;
use NextPDF\Enterprise\Security\Signature\Hsm\PqsCapabilityStatus;
use NextPDF\Enterprise\Security\Signature\Hsm\PqsPreviewFeature;
// 1. Open the process-level preview gate (default-off).
putenv(PqsPreviewFeature::ENV_PREVIEW_PQS_HSM . '=1');
// 2. The capability status is honest even with the gate open:
// generallyAvailable / adesCompliant / verificationAvailable stay false.
$status = PqsCapabilityStatus::current();
// 3. Construct the PKCS#11 signer with the per-signer opt-in.
$signer = new Pkcs11Signer(
libraryPath: '/usr/lib/softhsm/libsofthsm2.so',
slotId: 0,
pin: '1234',
certLabel: 'my-pqc-signing-cert',
enablePostQuantum: true,
);
// 4. Sign with a chosen parameter set. The returned bytes are length-checked
// against Pkcs11PqsAlgorithm::signatureLength() before being accepted.
$signature = $signer->signPqs(
data: $tbsBytes,
algorithm: Pkcs11PqsAlgorithm::MlDsa65,
);

isPostQuantumEnabled() сообщает, было ли установлено посигнерное подключение, а PqsCapabilityStatus::current() сообщает состояние уровня процесса плюс честные булевы флаги заявлений.

Поверхность отказывает закрытием и сообщает об отказах через именованные, типизированные исключения, а не через молчаливый запасной вариант:

  • Подключение отсутствует. Если signPqs() вызывается, когда $enablePostQuantum равно false, он выбрасывает HsmOperationException. Подписания не происходит.
  • Контекст слишком длинный. Октетная строка контекста подписания длиннее 255 байт выбрасывает InvalidArgumentException (согласно ограничению контекста FIPS 204 / FIPS 205) до любого вызова токена.
  • Ключ отсутствует. Если ни один закрытый ключ не соответствует настроенной метке на токене, signPqs() выбрасывает HsmOperationException.
  • Несовпадение длины. Если токен возвращает подпись, чья длина в байтах не равна длине, предписанной FIPS для набора параметров, signPqs() выбрасывает HsmOperationException — некорректная (усечённая или избыточная) подпись отвергается до того, как она может достичь кодирования CMS SignedData.
  • Ошибка токена. Любая нижележащая ошибка PKCS#11 оборачивается в HsmOperationException.

Env-флаг уровня процесса ничего не меняет в этой границе: даже когда флаг включён, булевы флаги возможностей остаются false, а путь подписания остаётся проверяемым по длине и отказывающим закрытием.

Следующие заявления для этой поверхности не делаются и не должны появляться ни в какой документации, интерфейсе или маркетинге, производных от неё:

  • «GA» / «generally available».
  • «AdES» / «PAdES-compliant» — ни один набор ETSI не регистрирует постквантовую подпись для долгосрочного архивирования.
  • «FIPS-validated» — ни одного FIPS-140-3-validated постквантового кругового обхода HSM для этого пути не установлено.
  • «certified» или «conformant» относительно FIPS, OASIS PKCS#11 v3.1 или ETSI.
  • «production-ready».

Чем поверхность честно является: подключаемое, выключенное по умолчанию, отказывающее закрытием превью постквантового подписания с делегированием HSM, которое управляет ML-DSA / SLH-DSA через токен PKCS#11 и проверяет результат по длине. Чем она не является: общедоступной, AdES-compliant, FIPS-validated или сертифицированной возможностью подписания.

Задействованные стандарты сопровождаются внешними органами, и превью не занимает никакой позиции относительно соответствия любому из них:

  • Наборы параметров алгоритмов и длины подписей следуют FIPS 204 (ML-DSA) и FIPS 205 (SLH-DSA).
  • Идентификаторы механизмов токена следуют OASIS PKCS#11; реестр постквантовых механизмов в PKCS#11 v3.1 ещё не финализирован, поэтому NextPDF использует предварительные идентификаторы.
  • Профили долгосрочного архивирования подписи PDF — это ETSI EN 319 142-2 (расширенные профили PAdES, построенные на CMS SignerInfo) и каталог криптографических наборов ETSI TS 119 312, которые в настоящее время профилируют только RSA и ECDSA — ни один постквантовый набор не зарегистрирован для CAdES/PAdES. Поэтому постквантовая подпись PDF, произведённая сегодня, пока не соответствует AdES для архивирования.

Текст стандартов на этой странице не воспроизводится.

Превью — это не средство контроля безопасности. Присутствие постквантовой подписи, произведённой этим путём, не устанавливает действительности AdES, не подразумевает доверенного ключа и не проверяемо NextPDF (пути постквантовой проверки нет). Не полагайтесь на это превью для гарантии подписи и не развёртывайте его там, где требуется AdES-compliant или FIPS-validated подпись. Держите оба затвора выключенными в продакшене, пока стандарты не появятся.

СимволРоль
Pkcs11Signer::signPqs()Подключаемое, отказывающее закрытием постквантовое подписание с делегированием HSM через PKCS#11. Выбрасывает HsmOperationException, когда выключено, когда ключ отсутствует или при несовпадении длины подписи.
Pkcs11Signer::isPostQuantumEnabled()Было ли установлено посигнерное подключение $enablePostQuantum.
Pkcs11PqsAlgorithmПеречисление наборов параметров ML-DSA (FIPS 204) и SLH-DSA (FIPS 205); сопоставляет каждый с предварительным id механизма и длиной подписи, предписанной FIPS.
PqsPreviewFeatureEnv-затвор уровня процесса, выключенный по умолчанию (NEXTPDF_FEATURE_PREVIEW_PQS_HSM).
PqsCapabilityStatusЧестный, машиночитаемый статус: каждый булев флаг положительного заявления (общедоступность, AdES, проверка, соответствие) жёстко закодирован как false независимо от превью-флага.
HsmOperationExceptionТипизированное исключение, вызываемое на путях с отказом закрытием.

Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов ранбуков и префиксы тикетов вне области рассмотрения.