Aller au contenu
getnextpdf.com

Enterprise éditionstabilité: Expérimental

Statut de capacité de prévisualisation de la signature HSM post-quantique (PQS)

Statut de capacité de prévisualisation. Opt-in, désactivé par défaut, fail-closed. Ceci est une prévisualisation de la signature post-quantique déléguée au HSM. Elle n’est pas généralement disponible, elle n’est pas AdES-compliant, elle n’est pas FIPS-validated, et elle ne fait aucune revendication de certification ni de conformité. La prévisualisation est désactivée jusqu’à ce que tu l’actives ; lorsqu’elle est désactivée, l’appel de signature échoue en mode fail-closed avec une exception typée.

NextPDF Enterprise expose une surface de signature post-quantique (PQS) expérimentale qui pilote la signature ML-DSA (FIPS 204) et SLH-DSA (FIPS 205) via un jeton matériel PKCS#11. Le chemin est Pkcs11Signer::signPqs(), verrouillé derrière un opt-in explicite par signataire ($enablePostQuantum) et, séparément, derrière un indicateur d’environnement au niveau processus (NEXTPDF_FEATURE_PREVIEW_PQS_HSM). Les deux sont désactivés par défaut.

Cette page est la frontière honnête. Elle énonce ce que la prévisualisation fait — elle délègue une véritable opération de signature post-quantique au jeton — et, avec une honnêteté égale, ce qu’elle n’est pas : elle n’est pas GA, pas AdES, pas FIPS-validated, et pas une revendication de conformité vis-à-vis de FIPS, OASIS ou ETSI. Les normes qui rendraient une signature PDF post-quantique interopérable pour l’archivage à long terme ne sont pas encore arrivées (voir Frontière des normes).

Cette capacité est livrée dans NextPDF Enterprise (nextpdf/enterprise) et s’active avec une enveloppe de licence de niveau Enterprise. Un déploiement dépourvu de cette autorisation ne charge pas les classes de la capacité. Comparer les éditions et obtenir une licence.

Elle s’appuie sur le signataire à jeton matériel PKCS#11 Enterprise — voir Signature HSM. Le chemin de signature PKCS#11 classique (RSA / ECDSA) est la capacité Enterprise prise en charge et stable ; le chemin post-quantique décrit ici est une prévisualisation expérimentale superposée par-dessus. NextPDF Enterprise inclut l’ensemble des fonctionnalités Pro.

La prévisualisation pilote une véritable opération de signature : lorsqu’elle est activée, signPqs() dépêche le mécanisme post-quantique candidat PKCS#11 v3.1 sur le jeton, la clé privée ne quitte jamais la frontière du jeton, et les octets renvoyés sont contrôlés en longueur par rapport à la longueur de signature imposée par FIPS pour le jeu de paramètres choisi avant d’être acceptés.

Elle est, en même temps, une prévisualisation et non une capacité produit généralement disponible :

  • Les identifiants de mécanisme post-quantique et de jeu de paramètres PKCS#11 sont provisoires — OASIS PKCS#11 v3.1 n’a pas finalisé de registre de mécanismes post-quantiques, de sorte que les valeurs utilisées sont suivies comme provisoires et les opérateurs de HSM doivent confirmer que le firmware PQ de leur jeton y correspond avant l’activation.
  • Aucun chemin de vérification post-quantique n’existe dans NextPDF, et aucune suite ETSI n’enregistre de signature post-quantique pour l’archivage à long terme AdES, de sorte qu’une signature produite ici n’est pas encore interopérable et que la plupart des visionneuses PDF la rejetteront au moment de la validation.
  • Un descripteur compagnon, PqsCapabilityStatus, rapporte ces faits sous une forme lisible par machine. Chaque booléen de revendication positive — generallyAvailable, adesCompliant, verificationAvailable, conformanceClaimed — est codé en dur à false et reste false même lorsque l’indicateur de prévisualisation est activé, et aucune configuration ne peut en basculer un sur true. (Il porte aussi un indicateur recognitionOnly, codé en dur à true, qui consigne que la reconnaissance d’algorithme n’est jamais un verdict de conformité ; cela ne signifie pas que la surface ne peut pas signer — la signature se produit via signPqs() comme décrit ci-dessus.)

NextPDF peut déjà calculer une véritable signature ML-DSA ou SLH-DSA via le jeton. Malgré cela, chaque booléen de conformité reste codé en dur à false, derrière deux verrous désactivés par défaut. Une signature ne vaut que par la capacité à la vérifier plus tard. Pour le post-quantique, il n’existe encore aucun chemin de vérification, aucune suite AdES ETSI enregistrée, et aucun aller-retour HSM validé FIPS. Livrer cela comme généralement disponible émettrait des signatures qu’aucune visionneuse ne peut valider et à qui aucune archive ne peut se fier. La conception sépare donc la production des octets de l’affirmation que quiconque peut s’y fier, et aucun indicateur de prévisualisation ne peut brouiller cette ligne.

Contexte de conception : Validation à long terme.

signPqs() sélectionne l’algorithme et le jeu de paramètres via l’énumération Pkcs11PqsAlgorithm. Chaque cas associe un jeu de paramètres NIST à un identifiant de mécanisme / jeu de paramètres PKCS#11 provisoire et à la longueur d’octets de signature imposée par FIPS utilisée pour le contrôle de longueur en défense en profondeur.

ML-DSA — FIPS 204 (réseau de modules). Trois jeux de paramètres, revendiqués aux catégories de force de sécurité NIST indiquées :

Jeu de paramètresCatégorie NISTLongueur de signature (octets)
ML-DSA-4422420
ML-DSA-65 (valeur par défaut recommandée)33309
ML-DSA-8754627

SLH-DSA — FIPS 205 (haché sans état). Douze jeux de paramètres, formés comme SHA2 / SHAKE x 128 / 192 / 256 x small (s) / fast (f). Les variantes s minimisent la taille de signature ; les variantes f minimisent la latence de signature :

Famille de jeux de paramètresCatégorie NISTLongueur de signature (octets)
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

Deux verrous indépendants doivent tous deux être ouverts. Les deux sont désactivés par défaut.

  1. Verrou de processus. Définis NEXTPDF_FEATURE_PREVIEW_PQS_HSM=1 avant le démarrage du processus (ou via putenv() avant la lecture du statut). L’égalité stricte à la chaîne 1 est requise ; toute autre valeur — y compris 0, true, yes ou vide — est traitée comme désactivée.
  2. Opt-in par signataire. Passe $enablePostQuantum: true au constructeur de 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() indique si l’opt-in par signataire a été défini, et PqsCapabilityStatus::current() rapporte l’état au niveau processus plus les booléens de revendication honnêtes.

La surface est fail-closed et rapporte les défaillances via des exceptions nommées et typées plutôt que par un repli silencieux :

  • Opt-in absent. Si signPqs() est appelé alors que $enablePostQuantum est false, elle lève HsmOperationException. Aucune signature ne se produit.
  • Contexte trop long. Une chaîne d’octets de contexte de signature de plus de 255 octets lève InvalidArgumentException (selon la borne de contexte FIPS 204 / FIPS 205) avant tout appel au jeton.
  • Clé absente. Si aucune clé privée ne correspond à l’étiquette configurée sur le jeton, signPqs() lève HsmOperationException.
  • Discordance de longueur. Si le jeton renvoie une signature dont la longueur en octets n’égale pas la longueur imposée par FIPS pour le jeu de paramètres, signPqs() lève HsmOperationException — une signature malformée (tronquée ou surdimensionnée) est rejetée avant qu’elle ne puisse atteindre l’encodage CMS SignedData.
  • Erreur du jeton. Toute erreur PKCS#11 sous-jacente est enveloppée dans HsmOperationException.

L’indicateur d’environnement au niveau processus ne change rien à cette frontière : même lorsque l’indicateur est activé, les booléens de capacité restent false et le chemin de signature reste contrôlé en longueur et fail-closed.

Les revendications suivantes ne sont pas faites pour cette surface et ne doivent apparaître dans aucune documentation, interface ou marketing qui en dérive :

  • « GA » / « generally available ».
  • « AdES » / « PAdES-compliant » — aucune suite ETSI n’enregistre de signature post-quantique pour l’archivage à long terme.
  • « FIPS-validated » — aucun aller-retour HSM post-quantique validé FIPS-140-3 n’a été établi pour ce chemin.
  • « certified » ou « conformant » vis-à-vis de FIPS, OASIS PKCS#11 v3.1 ou ETSI.
  • « production-ready ».

Ce que la surface est honnêtement : une prévisualisation opt-in, désactivée par défaut et fail-closed de la signature post-quantique déléguée au HSM qui pilote ML-DSA / SLH-DSA via un jeton PKCS#11 et contrôle la longueur du résultat. Ce qu’elle n’est pas : une capacité de signature généralement disponible, AdES-compliant, FIPS-validated ou certifiée.

Les normes concernées sont maintenues par des organismes externes, et la prévisualisation ne prend aucune position sur la conformité à l’une quelconque d’entre elles :

  • Les jeux de paramètres d’algorithme et les longueurs de signature suivent FIPS 204 (ML-DSA) et FIPS 205 (SLH-DSA).
  • Les identifiants de mécanisme du jeton suivent OASIS PKCS#11 ; le registre de mécanismes post-quantiques dans PKCS#11 v3.1 n’est pas encore finalisé, de sorte que NextPDF utilise des identifiants provisoires.
  • Les profils d’archivage à long terme de signature PDF sont ETSI EN 319 142-2 (profils étendus PAdES, construits sur le SignerInfo CMS) et le catalogue de suites cryptographiques ETSI TS 119 312, qui ne profilent actuellement que RSA et ECDSA — aucune suite post-quantique n’est enregistrée pour CAdES/PAdES. Une signature PDF post-quantique produite aujourd’hui n’est donc pas encore AdES-compliant pour l’archivage.

Aucun texte de norme n’est reproduit sur cette page.

Une prévisualisation n’est pas un contrôle de sécurité. La présence d’une signature post-quantique produite par ce chemin n’établit pas une validité AdES, n’implique pas une clé de confiance, et n’est pas vérifiable par NextPDF (il n’y a aucun chemin de vérification post-quantique). Ne te fie pas à cette prévisualisation pour une assurance de signature, et ne la déploie pas là où une signature AdES-compliant ou FIPS-validated est requise. Garde les deux verrous désactivés en production jusqu’à ce que les normes arrivent.

SymboleRôle
Pkcs11Signer::signPqs()Signature post-quantique opt-in, fail-closed, déléguée au HSM via PKCS#11. Lève HsmOperationException lorsqu’elle est désactivée, lorsque la clé est absente, ou sur une discordance de longueur de signature.
Pkcs11Signer::isPostQuantumEnabled()Indique si l’opt-in par signataire $enablePostQuantum a été défini.
Pkcs11PqsAlgorithmÉnumération des jeux de paramètres ML-DSA (FIPS 204) et SLH-DSA (FIPS 205) ; associe chacun à un identifiant de mécanisme provisoire et à la longueur de signature imposée par FIPS.
PqsPreviewFeatureVerrou d’environnement au niveau processus, désactivé par défaut (NEXTPDF_FEATURE_PREVIEW_PQS_HSM).
PqsCapabilityStatusStatut honnête et lisible par machine : chaque booléen de revendication positive (généralement disponible, AdES, vérification, conformité) est codé en dur à false quel que soit l’indicateur de prévisualisation.
HsmOperationExceptionL’exception typée levée sur les chemins fail-closed.

Cette page documente uniquement le comportement observable de l’extérieur et la surface d’API publique prise en charge. Les chemins de namespace internes, les classes utilitaires, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de tickets sont hors périmètre.