ข้ามไปยังเนื้อหา
getnextpdf.com

Enterprise รุ่นความเสถียร: ทดลอง

การลงนาม HSM แบบ post-quantum (PQS): สถานะความสามารถแบบ preview

สถานะความสามารถแบบ preview opt-in, เปิดเป็นค่าเริ่มต้นปิด, fail-closed นี่คือ preview ของการ ลงนาม post-quantum ที่มอบหมายผ่าน HSM มันไม่พร้อมใช้งานทั่วไป มันไม่สอดคล้องกับ AdES มันไม่ผ่านการ validate แบบ FIPS และมันไม่อ้างการรับรอง หรือความสอดคล้อง preview ปิดอยู่จนกว่าคุณจะ opt in; เมื่อปิด การเรียกลงนามจะ fail closed ด้วยข้อยกเว้นแบบมีชนิด

NextPDF Enterprise เปิดเผยพื้นผิวลายเซ็น post-quantum (PQS) ที่ทดลองซึ่งขับเคลื่อน การลงนาม ML-DSA (FIPS 204) และ SLH-DSA (FIPS 205) ผ่าน PKCS#11 hardware token เส้นทางคือ Pkcs11Signer::signPqs() ซึ่ง gate ไว้หลัง opt-in ต่อ signer ที่ชัดเจน ($enablePostQuantum) และแยกต่างหากหลังแฟล็ก env ระดับกระบวนการ (NEXTPDF_FEATURE_PREVIEW_PQS_HSM) ทั้งสองปิดโดยค่าเริ่มต้น

หน้านี้คือขอบเขตที่ตรงไปตรงมา มันระบุสิ่งที่ preview ทำ — มันมอบหมายการดำเนินการ ลงนาม post-quantum จริงให้ token — และด้วยความซื่อสัตย์เท่ากัน สิ่งที่มัน ไม่ใช่: มัน ไม่ใช่ GA, ไม่ใช่ AdES, ไม่ผ่านการ validate แบบ FIPS และไม่ใช่การอ้างความสอดคล้อง เทียบกับ FIPS, OASIS หรือ ETSI มาตรฐานที่จะทำให้ลายเซ็น PDF แบบ post-quantum ทำงานร่วมกันได้สำหรับการจัดเก็บถาวรระยะยาวยังไม่ลงตัว (ดู ขอบเขตของมาตรฐาน)

ความสามารถนี้ ship ใน NextPDF Enterprise (nextpdf/enterprise) และเปิดใช้งาน ด้วย license envelope ระดับ Enterprise การ deploy ที่ไม่มีสิทธิ์นั้นจะไม่โหลดคลาสของ ความสามารถนี้ เปรียบเทียบรุ่นและรับใบอนุญาต

มันสร้างบน Enterprise PKCS#11 hardware-token signer — ดู การลงนาม HSM เส้นทางการลงนาม PKCS#11 แบบคลาสสิก (RSA / ECDSA) คือความสามารถ Enterprise ที่รองรับและเสถียร; เส้นทาง post-quantum ที่อธิบายในที่นี้เป็น preview ที่ทดลองซึ่งซ้อนอยู่บนมัน NextPDF Enterprise รวมชุด คุณสมบัติ Pro

preview ขับเคลื่อนการดำเนินการลงนามจริง: เมื่อเปิดใช้งาน signPqs() จะส่งไปยังกลไก post-quantum แบบ candidate ของ PKCS#11 v3.1 บน token, private key ไม่เคยออกจาก ขอบเขตของ token และไบต์ที่คืนกลับถูกตรวจสอบความยาวเทียบกับความยาวลายเซ็นที่ FIPS กำหนดสำหรับชุดพารามิเตอร์ที่เลือกก่อนที่จะถูกยอมรับ

ในขณะเดียวกัน มันเป็น preview และไม่ใช่ความสามารถผลิตภัณฑ์ที่พร้อมใช้งานทั่วไป:

  • กลไก post-quantum และตัวระบุชุดพารามิเตอร์ของ PKCS#11 เป็นแบบ provisional — OASIS PKCS#11 v3.1 ยังไม่ได้สรุป registry กลไก post-quantum ดังนั้นค่าที่ใช้จึงถูก ติดตามเป็น provisional และผู้ปฏิบัติงาน HSM ต้องยืนยันว่า PQ firmware ของ token ตรงกันก่อนเปิดใช้
  • ไม่มีเส้นทาง การตรวจสอบ (verification) post-quantum ใน NextPDF และไม่มีชุด ETSI ใดลงทะเบียนลายเซ็น post-quantum สำหรับการจัดเก็บถาวรระยะยาวแบบ AdES ดังนั้นลายเซ็นที่ผลิตที่นี่จึงยังไม่ทำงานร่วมกันได้ และโปรแกรมดู PDF ส่วนใหญ่จะ ปฏิเสธมันในเวลาตรวจสอบ
  • ตัวอธิบายคู่กัน PqsCapabilityStatus รายงานข้อเท็จจริงเหล่านี้ในรูปแบบที่อ่านได้ด้วย เครื่อง ทุก boolean ที่อ้างเชิงบวก — generallyAvailable, adesCompliant, verificationAvailable, conformanceClaimed — ถูกตั้งค่าตายตัวเป็น false และ ยังคงเป็น false แม้เมื่อแฟล็ก preview เปิด และไม่มีการกำหนดค่าใดพลิกมันเป็นเปิด ได้ (มันยังบรรจุแฟล็ก recognitionOnly ที่ตั้งค่าตายตัวเป็น true ซึ่งบันทึกว่าการ จดจำ อัลกอริทึม ไม่เคยเป็นคำตัดสินความสอดคล้อง; มันไม่ได้หมายความว่าพื้นผิว ลงนามไม่ได้ — การลงนามเกิดผ่าน signPqs() ตามที่อธิบายข้างต้น)

NextPDF สามารถคำนวณลายเซ็น ML-DSA หรือ SLH-DSA จริงผ่าน token ได้แล้ว ถึงกระนั้น ทุก boolean ความสอดคล้องยังคงถูกตั้งค่าตายตัวเป็น false หลัง gate ที่เปิดเป็นค่า เริ่มต้นปิดสองตัว ลายเซ็นมีค่าก็ต่อเมื่อสามารถตรวจสอบมันได้ภายหลัง สำหรับ post-quantum ยังไม่มีเส้นทางการตรวจสอบ ไม่มีชุด ETSI AdES ที่ลงทะเบียน และยังไม่มีการ round-trip HSM ที่ผ่านการ validate แบบ FIPS การ ship สิ่งนี้แบบพร้อมใช้งานทั่วไปจะออกลายเซ็นที่ ไม่มีโปรแกรมดูใดตรวจสอบได้และไม่มีคลังเก็บใดเชื่อถือได้ ดังนั้นการออกแบบจึงแยกการ ผลิตไบต์ออกจากการอ้างว่าใครสามารถพึ่งพามันได้ และไม่มีแฟล็ก preview ใดทำให้เส้นนั้น พร่ามัวได้

เบื้องหลังการออกแบบ: Long-term validation

signPqs() เลือกอัลกอริทึมและชุดพารามิเตอร์ผ่าน enum Pkcs11PqsAlgorithm แต่ละ case แมปชุดพารามิเตอร์ NIST เข้ากับตัวระบุกลไก / ชุดพารามิเตอร์ของ PKCS#11 แบบ provisional และเข้ากับความยาวไบต์ลายเซ็นที่ FIPS กำหนดซึ่งใช้สำหรับการตรวจสอบ ความยาวแบบ defence-in-depth

ML-DSA — FIPS 204 (module-lattice) สามชุดพารามิเตอร์ อ้างที่หมวดความแข็งแกร่ง ด้านความปลอดภัยของ NIST ที่แสดง:

ชุดพารามิเตอร์หมวด NISTความยาวลายเซ็น (ไบต์)
ML-DSA-4422420
ML-DSA-65 (ค่าเริ่มต้นที่แนะนำ)33309
ML-DSA-8754627

SLH-DSA — FIPS 205 (stateless hash-based) สิบสองชุดพารามิเตอร์ ก่อตัวเป็น SHA2 / SHAKE x 128 / 192 / 256 x small (s) / fast (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

gate อิสระสองตัวต้องเปิดทั้งคู่ ทั้งสองตั้งค่าเริ่มต้นเป็นปิด

  1. Process gate ตั้ง NEXTPDF_FEATURE_PREVIEW_PQS_HSM=1 ก่อนที่กระบวนการจะ boot (หรือผ่าน putenv() ก่อนอ่านสถานะ) ต้องการความเท่ากันอย่างเข้มงวดกับสตริง 1; ค่าอื่นใด — รวมถึง 0, true, yes หรือว่าง — จะถูกถือว่าปิด
  2. Opt-in ต่อ signer ส่ง $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() รายงานว่า opt-in ต่อ signer ถูกตั้งไว้หรือไม่ และ PqsCapabilityStatus::current() รายงานสถานะระดับกระบวนการบวกกับ boolean การอ้าง ที่ตรงไปตรงมา

พื้นผิวเป็น fail-closed และรายงานความล้มเหลวผ่านข้อยกเว้นที่มีชื่อและมีชนิด แทนที่จะ เป็น fallback ที่เงียบ ๆ:

  • ไม่มี opt-in หาก signPqs() ถูกเรียกเมื่อ $enablePostQuantum เป็น false มันจะโยน HsmOperationException ไม่มีการลงนามเกิดขึ้น
  • Context ยาวเกินไป context octet string ของการลงนามที่ยาวเกิน 255 ไบต์จะโยน InvalidArgumentException (ตามขอบเขต context ของ FIPS 204 / FIPS 205) ก่อนการ เรียก token ใด ๆ
  • ไม่มีคีย์ หากไม่มี private key ที่ตรงกับ label ที่กำหนดค่าไว้บน token, signPqs() จะโยน HsmOperationException
  • ความยาวไม่ตรงกัน หาก token คืนลายเซ็นที่ความยาวไบต์ไม่เท่ากับความยาวที่ FIPS กำหนดสำหรับชุดพารามิเตอร์ signPqs() จะโยน HsmOperationException — ลายเซ็นที่ผิดรูปแบบ (ถูกตัดทอนหรือใหญ่เกิน) จะถูกปฏิเสธก่อนที่จะถึงการเข้ารหัส CMS SignedData
  • ข้อผิดพลาด token ข้อผิดพลาด PKCS#11 ที่อยู่เบื้องล่างใด ๆ ถูกห่อใน HsmOperationException

แฟล็ก env ระดับกระบวนการไม่เปลี่ยนแปลงสิ่งใดเกี่ยวกับขอบเขตนี้: แม้เมื่อแฟล็กเปิด boolean ความสามารถยังคงเป็น false และเส้นทางการลงนามยังคงถูกตรวจสอบความยาว และ fail-closed

การอ้างต่อไปนี้ ไม่ ถูกทำสำหรับพื้นผิวนี้ และต้องไม่ปรากฏในเอกสาร UI หรือการตลาด ใด ๆ ที่มาจากมัน:

  • “GA” / “generally available”
  • “AdES” / “PAdES-compliant” — ไม่มีชุด ETSI ใดลงทะเบียนลายเซ็น post-quantum สำหรับการจัดเก็บถาวรระยะยาว
  • “FIPS-validated” — ไม่มีการ round-trip HSM post-quantum ที่ผ่านการ validate แบบ FIPS-140-3 ถูกสร้างขึ้นสำหรับเส้นทางนี้
  • “certified” หรือ “conformant” เทียบกับ FIPS, OASIS PKCS#11 v3.1 หรือ ETSI
  • “production-ready”

สิ่งที่พื้นผิวเป็นจริงอย่างตรงไปตรงมา: preview แบบ opt-in, เปิดเป็นค่าเริ่มต้นปิด, fail-closed ของการลงนาม post-quantum ที่มอบหมายผ่าน HSM ซึ่งขับเคลื่อน ML-DSA / SLH-DSA ผ่าน PKCS#11 token และตรวจสอบความยาวของผลลัพธ์ สิ่งที่มันไม่ใช่: ความสามารถการลงนามที่พร้อมใช้งานทั่วไป สอดคล้องกับ AdES ผ่านการ validate แบบ FIPS หรือผ่านการรับรอง

มาตรฐานที่เกี่ยวข้องดูแลโดยหน่วยงานภายนอก และ preview ไม่มีจุดยืนเกี่ยวกับความ สอดคล้องกับสิ่งใดในนั้น:

  • ชุดพารามิเตอร์อัลกอริทึมและความยาวลายเซ็นเป็นไปตาม FIPS 204 (ML-DSA) และ FIPS 205 (SLH-DSA)
  • ตัวระบุกลไก token เป็นไปตาม OASIS PKCS#11; registry กลไก post-quantum ใน PKCS#11 v3.1 ยังไม่ถูกสรุป ดังนั้น NextPDF จึงใช้ตัวระบุแบบ provisional
  • โปรไฟล์การจัดเก็บถาวรระยะยาวของลายเซ็น PDF คือ ETSI EN 319 142-2 (PAdES extended profile สร้างบน CMS SignerInfo) และแคตตาล็อก cryptographic-suite ETSI TS 119 312 ซึ่งปัจจุบันโปรไฟล์เฉพาะ RSA และ ECDSA เท่านั้น — ไม่มีชุด post-quantum ถูกลงทะเบียนสำหรับ CAdES/PAdES ลายเซ็น PDF แบบ post-quantum ที่ผลิตวันนี้จึงยังไม่สอดคล้องกับ AdES สำหรับการจัดเก็บถาวร

ไม่มีการคัดลอกข้อความมาตรฐานซ้ำในหน้านี้

preview ไม่ใช่การควบคุมด้านความปลอดภัย การมีลายเซ็น post-quantum ที่ผลิตโดย เส้นทางนี้ไม่ได้สร้างความถูกต้องแบบ AdES ไม่ได้บ่งบอกว่าคีย์น่าเชื่อถือ และไม่สามารถ ตรวจสอบได้โดย NextPDF (ไม่มีเส้นทางการตรวจสอบ post-quantum) อย่าพึ่งพา preview นี้สำหรับการรับประกันลายเซ็น และอย่า deploy มันที่ซึ่งต้องการลายเซ็นที่สอดคล้องกับ AdES หรือผ่านการ validate แบบ FIPS ปิด gate ทั้งสองในการใช้งานจริงจนกว่ามาตรฐาน จะลงตัว

สัญลักษณ์บทบาท
Pkcs11Signer::signPqs()การลงนาม post-quantum ที่มอบหมายผ่าน HSM แบบ opt-in, fail-closed ผ่าน PKCS#11 โยน HsmOperationException เมื่อปิดใช้งาน เมื่อไม่มีคีย์ หรือเมื่อความยาวลายเซ็นไม่ตรงกัน
Pkcs11Signer::isPostQuantumEnabled()ว่า opt-in $enablePostQuantum ต่อ signer ถูกตั้งไว้หรือไม่
Pkcs11PqsAlgorithmenum ของชุดพารามิเตอร์ ML-DSA (FIPS 204) และ SLH-DSA (FIPS 205); แมปแต่ละชุดเข้ากับ id กลไกแบบ provisional และความยาวลายเซ็นที่ FIPS กำหนด
PqsPreviewFeaturegate env ระดับกระบวนการ เปิดเป็นค่าเริ่มต้นปิด (NEXTPDF_FEATURE_PREVIEW_PQS_HSM)
PqsCapabilityStatusสถานะที่ตรงไปตรงมาและอ่านได้ด้วยเครื่อง: ทุก boolean ที่อ้างเชิงบวก (generally-available, AdES, verification, conformance) ถูกตั้งค่าตายตัวเป็น false ไม่ว่าจะตั้งแฟล็ก preview อย่างไร
HsmOperationExceptionข้อยกเว้นแบบมีชนิดที่ยกบนเส้นทาง fail-closed

หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว public API ที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้า ticket อยู่นอกขอบเขต