Aller au contenu
getnextpdf.com

Enterprise éditionstabilité: Expérimental

Aperçu de la signature post-quantique — Référence détaillée

Cette page constitue la référence de niveau contrat de la surface d’aperçu de la signature post-quantique (PQS) dans NextPDF Enterprise. Elle couvre trois symboles publics : l’énumération de jeux de paramètres Pkcs11PqsAlgorithm, la barrière de processus PqsPreviewFeature et le descripteur PqsCapabilityStatus. Elle documente également la barrière d’environnement NEXTPDF_FEATURE_PREVIEW_PQS_HSM.

La surface est expérimentale et désactivée par défaut. Elle reconnaît les identifiants d’algorithme, les jeux de paramètres et les longueurs de signature ML-DSA (FIPS 204) et SLH-DSA (FIPS 205). La reconnaissance n’est pas un verdict de validation. Il n’existe aucun chemin de vérification post-quantique. Aucune revendication AdES, de validation FIPS ou de conformité n’est faite, et l’indicateur d’aperçu ne peut en créer une. Le point d’entrée de signature consommateur, Pkcs11Signer::signPqs(), est décrit sur la page de capacité.

Cette capacité est fournie dans NextPDF Enterprise (nextpdf/enterprise) et s’active avec une enveloppe de licence de niveau Enterprise. Un déploiement dépourvu de ce droit d’accès ne charge pas les classes de la capacité. Compare les éditions et obtiens une licence.

La licence active la surface PKCS#11 Enterprise dans son ensemble. Le chemin post-quantique qu’elle contient reste un aperçu quel que soit le niveau de licence. Deux acceptations indépendantes restent nécessaires : la barrière de processus documentée ici et l’indicateur de constructeur par signataire sur Pkcs11Signer.

SymboleParamètresComportement par défautRetourneLève ou échoue avecNotes
Pkcs11PqsAlgorithménumération sur chaîne, 15 casNomme un jeu de paramètres FIPS 204 / FIPS 205 par cascas d’énumérationRien à l’accès du casLes valeurs des cas sont les noms des jeux de paramètres, par ex. ML-DSA-65.
Pkcs11PqsAlgorithm::isMlDsa()aucunTest de familleboolNe lève pastrue pour MlDsa44, MlDsa65, MlDsa87.
Pkcs11PqsAlgorithm::isSlhDsa()aucunNégation de isMlDsa()boolNe lève pastrue pour les douze cas SLH-DSA.
Pkcs11PqsAlgorithm::mechanismId()aucunAssocie la famille à l’identifiant de mécanisme PQ PKCS#11 v3.1 candidatintError PHP lorsque l’environnement d’exécution ne dispose pas des constantes PQ Pkcs11 provisoiresCKM_ML_DSA ou CKM_SLH_DSA ; les deux identifiants sont provisoires.
Pkcs11PqsAlgorithm::parameterSetId()aucunAssocie le cas au discriminant de jeu de paramètres OASISintError PHP lorsque l’environnement d’exécution ne dispose pas des constantes PQ Pkcs11 provisoiresvaleurs CKP_* ; provisoires.
Pkcs11PqsAlgorithm::signatureLength()aucunLongueur de signature en octets imposée par FIPS pour le casint (positif)Ne lève pasUtilisée par le chemin de signature pour rejeter une signature retournée de longueur inattendue.
Pkcs11PqsAlgorithm::nistCategory()aucunCatégorie de niveau de sécurité NIST revendiquéeintNe lève pasRetourne 1, 2, 3 ou 5.
PqsPreviewFeatureénumération sur chaîne, 1 casCas unique PREVIEW_PQS_HSM ; constante ENV_PREVIEW_PQS_HSMcas d’énumérationRien à l’accès du casLa barrière d’aperçu au niveau du processus.
PqsPreviewFeature::isEnabled()aucunLit getenv() en direct ; comparaison stricte avec la chaîne 1boolNe lève pasUne variable absente ou toute autre valeur, y compris 0, true, yes, est désactivée.
PqsCapabilityStatus::__construct()neuf champs nommés en lecture seuleConstruit une instance de descripteur arbitrairePqsCapabilityStatusNe lève pascurrent() est le constructeur canonique.
PqsCapabilityStatus::current()aucunConstruit le descripteur pour le processus englobantPqsCapabilityStatusNe lève pasChaque booléen de revendication est figé ; seul hsmRoundtripPreviewEnabled varie selon la barrière.
PqsCapabilityStatus::summary()aucunTexte d’état sur une lignestringNe lève pasLa formulation ne porte aucune revendication de disponibilité, d’archivage ou de validation.
enum Pkcs11PqsAlgorithm: string
case MlDsa44 = 'ML-DSA-44';
case MlDsa65 = 'ML-DSA-65';
case MlDsa87 = 'ML-DSA-87';
case SlhDsaSha2_128s = 'SLH-DSA-SHA2-128s';
case SlhDsaShake_128s = 'SLH-DSA-SHAKE-128s';
case SlhDsaSha2_128f = 'SLH-DSA-SHA2-128f';
case SlhDsaShake_128f = 'SLH-DSA-SHAKE-128f';
case SlhDsaSha2_192s = 'SLH-DSA-SHA2-192s';
case SlhDsaShake_192s = 'SLH-DSA-SHAKE-192s';
case SlhDsaSha2_192f = 'SLH-DSA-SHA2-192f';
case SlhDsaShake_192f = 'SLH-DSA-SHAKE-192f';
case SlhDsaSha2_256s = 'SLH-DSA-SHA2-256s';
case SlhDsaShake_256s = 'SLH-DSA-SHAKE-256s';
case SlhDsaSha2_256f = 'SLH-DSA-SHA2-256f';
case SlhDsaShake_256f = 'SLH-DSA-SHAKE-256f';
public function isMlDsa(): bool
public function isSlhDsa(): bool
public function mechanismId(): int
public function parameterSetId(): int
public function signatureLength(): int
public function nistCategory(): int
enum PqsPreviewFeature: string
case PREVIEW_PQS_HSM = 'preview_pqs_hsm';
public const string ENV_PREVIEW_PQS_HSM = 'NEXTPDF_FEATURE_PREVIEW_PQS_HSM';
public function isEnabled(): bool
final readonly class PqsCapabilityStatus
public const string MATURITY_PREVIEW_EXPERIMENTAL = 'preview-experimental';
public const string MECHANISM_STATUS_PROVISIONAL = 'provisional';
public function __construct(
public bool $hsmRoundtripPreviewEnabled,
public bool $generallyAvailable,
public bool $adesCompliant,
public bool $verificationAvailable,
public bool $conformanceClaimed,
public bool $recognitionOnly,
public string $maturity,
public string $mechanismIdStatus,
public string $envGate,
)
public static function current(): self
public function summary(): string
  • Catalogue des jeux de paramètres. NextPDF\Enterprise\Security\Signature\Hsm\Pkcs11PqsAlgorithm énumère trois jeux ML-DSA (FIPS 204) et douze jeux SLH-DSA (FIPS 205 §11.p12, Table 2). Chaque cas est associé à un identifiant de mécanisme provisoire, un discriminant de jeu de paramètres, une longueur de signature en octets imposée par FIPS et une catégorie NIST revendiquée.
  • Longueurs de signature. signatureLength() retourne 2420, 3309 et 4627 octets pour MlDsa44, MlDsa65 et MlDsa87, conformément à FIPS 204 §4.p15 (Table 2). Les cas SLH-DSA retournent 7856, 17088, 16224, 35664, 29792 et 49856 octets selon le niveau et la variante, conformément à FIPS 205 §11 (Table 2). Le signataire consommateur lève HsmOperationException lorsqu’une signature retournée a une longueur différente, reflétant la discipline de rejet sur longueur de FIPS 204 §x34.
  • Catégories. nistCategory() retourne 2, 3 et 5 pour les cas ML-DSA, conformément à FIPS 204 §4.p9. Les cas SLH-DSA retournent 1, 3 et 5 selon le niveau de paramètre de sécurité.
  • Barrière de processus. PqsPreviewFeature::PREVIEW_PQS_HSM est désactivée par défaut. isEnabled() retourne true uniquement lorsque la variable d’environnement NEXTPDF_FEATURE_PREVIEW_PQS_HSM est exactement égale à la chaîne 1. La lecture est effectuée en direct à chaque appel ; rien n’est mémoïsé.
  • Barrière complémentaire. La barrière de processus est distincte de l’acceptation de constructeur $enablePostQuantum par signataire sur Pkcs11Signer. L’appel de signature échoue de façon fermée sans l’acceptation par signataire. La barrière de processus existe comme frontière auditable unique pour tout comportement futur d’aller-retour ou d’archivage.
  • Invariant d’honnêteté. NextPDF\Enterprise\Security\Signature\Hsm\PqsCapabilityStatus::current() fixe en dur generallyAvailable, adesCompliant, verificationAvailable et conformanceClaimed à false, et recognitionOnly à true. Aucune configuration, option de constructeur ou indicateur d’environnement n’active une revendication. Seul hsmRoundtripPreviewEnabled reflète la barrière.
  • Aucun chemin de vérification. NextPDF ne dispose d’aucun chemin de vérification post-quantique. Un identifiant d’algorithme reconnu ou une longueur de signature bien formée n’est jamais un verdict d’acceptation.
  • Définir la variable de barrière à 0, true, yes, on ou une chaîne vide laisse la barrière désactivée. Seule la chaîne exacte 1 l’active.
  • Les modifications par putenv() prennent effet au prochain appel de isEnabled() car la lecture est en direct. Une barrière basculée en cours de processus est observée immédiatement.
  • mechanismId() et parameterSetId() résolvent des constantes depuis l’espace de noms de l’extension Pkcs11. Un environnement d’exécution dépourvu des constantes d’extension post-quantiques provisoires échoue avec une Error PHP (constante non définie) au moment de l’appel.
  • Les identifiants de mécanisme et de jeu de paramètres sont provisoires. OASIS n’a pas finalisé le registre post-quantique PKCS#11 v3.1. Un jeton dont le firmware attribue des identifiants différents échouera à la couche PKCS#11 ; les opérateurs doivent confirmer les identifiants du firmware avant d’activer l’aperçu.
  • Le contexte de signature accepté par le signataire consommateur est limité à 255 octets, conformément au contrat d’entrée de signature FIPS 204 (§x43.p2). Un contexte plus long lève InvalidArgumentException avant tout appel au jeton.
  • PqsCapabilityStatus::__construct() est public, de sorte qu’une instance construite à la main peut porter des booléens arbitraires. Une telle instance n’est qu’un objet-valeur. Elle ne modifie aucun comportement de signature. current() est le constructeur canonique, figé en dur.
  • Le choix entre aléatoire et déterministe sur le signataire consommateur suit la sémantique de FIPS 205 §x65.p7 : la signature couverte (hedged) est le comportement par défaut. L’indicateur est ignoré pour ML-DSA, qui rend toujours aléatoire via son propre nonce.

ML-DSA et SLH-DSA sont des algorithmes FIPS 204 et FIPS 205, mais cet aperçu ne porte aucune revendication de validation FIPS 140-3. Aucun aller-retour HSM post-quantique validé FIPS n’a été établi pour ce chemin. Le profil de politique cryptographique en mode FIPS de l’édition Enterprise, documenté dans la référence détaillée Sécurité, encadre les algorithmes de signature classiques ; il n’admet pas la surface PQS dans un ensemble validé. Activer le mode FIPS ne rend pas la signature post-quantique validée FIPS. Ne déploie pas l’aperçu là où une signature validée FIPS est requise.

RevendicationNormeClause
ML-DSA-44/65/87 portent les catégories NIST revendiquées 2, 3, 5.FIPS 204§4.p9
Les tailles de signature ML-DSA sont de 2420, 3309, 4627 octets.FIPS 204§4.p15 (Table 2)
La chaîne d’octets de contexte de signature est limitée à 255 octets.FIPS 204§x43.p2
Une signature ou une clé de longueur incorrecte doit être rejetée.FIPS 204§x34
Douze jeux de paramètres SLH-DSA sont approuvés.FIPS 205§11.p12 (Table 2)
Les tailles de signature SLH-DSA suivent la Table 2 (7856 octets pour 128s).FIPS 205§11.p6
La signature couverte (hedged) est le comportement par défaut ; une variante déterministe existe.FIPS 205§x65.p7
Le catalogue de suites CAdES/PAdES ne profile que RSA et EC-DSA.ETSI TS 119 312 V1.5.1§7.x7.p10 (Table A.1)
Les identifiants de mécanisme PQ PKCS#11 sont provisoires.OASIS PKCS#11 v3.1fondé sur le code source du produit

Toutes les clauses sont paraphrasées. NextPDF ne reproduit pas de texte normatif. NextPDF ne détient aucune certification et n’en accorde aucune. Les déclarations ci-dessus sont des déclarations d’alignement structurel portant sur les identifiants, les longueurs et les bornes. Ce ne sont pas des résultats de tests de conformité, ni des attestations de tiers, ni une revendication de conformité FIPS, OASIS ou ETSI. PqsCapabilityStatus encode cette posture dans le code : conformanceClaimed est false, adesCompliant est false et verificationAvailable est false, dans toutes les configurations. Une signature produite par cet aperçu n’est pas conforme AdES pour l’archivage à long terme, et la plupart des lecteurs PDF la rejettent au moment de la validation.

  • Le registre de mécanismes post-quantiques PKCS#11 d’OASIS n’est pas finalisé ; les identifiants CKM_ML_DSA / CKM_SLH_DSA et les constantes de jeu de paramètres utilisés ici sont provisoires et fondés sur le code source du produit, et non sur une citation de spécification.

  • Le jalon actuel correspond à une préparation testée par simulation. Aucun aller-retour HSM avec firmware post-quantique réel n’a encore été validé.

  • Garde les deux barrières désactivées en production. L’aperçu n’ajoute aucune capacité de production que le chemin PKCS#11 RSA/ECDSA classique n’offre pas déjà.

  • Avant toute évaluation avec du matériel réel, confirme les identifiants de mécanisme et de jeu de paramètres du firmware du jeton par rapport aux valeurs provisoires. Une non-correspondance échoue à la couche PKCS#11, et non à l’intérieur de NextPDF.

  • Considère PqsCapabilityStatus::current() comme la source de vérité unique lorsque tu exposes l’état PQS dans l’outillage ou l’interface. Ne redéclare pas ses booléens à la main.

  • La sortie de summary() peut sans risque être utilisée dans les journaux et les points de terminaison d’état ; elle est formulée pour ne porter aucune revendication de disponibilité ou de validation.

Cette page documente uniquement le comportement observable de l’extérieur et la surface d’API publique prise en charge. Les chemins d’espaces de noms 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.