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

Enterprise รุ่น

Security — เอกสารอ้างอิงเชิงลึก (HSM, PKCS#11, FIPS-mode)

หน้านี้เป็นเอกสารอ้างอิงเชิงลึกแบบรวมสำหรับพื้นผิวความปลอดภัยของ NextPDF Enterprise ครอบคลุมการลงนามด้วย hardware token ผ่าน PKCS#11, การลงนามแบบ subprocess ผ่าน OpenSSL command-line interface (CLI), ค่าสำเร็จของนโยบายการเข้ารหัส FIPS, FIPS guard ในขณะรันไทม์ และ power-on self-test guard มีเอกสารประกอบเฉพาะทางสองฉบับ ได้แก่ HSM — เอกสารอ้างอิงเชิงลึก สำหรับรายละเอียดตัวลงนาม และ FIPS 140 — เอกสารอ้างอิงเชิงลึก สำหรับรายละเอียดโมดูล FIPS เส้นทางการลงนามแบบ post-quantum เป็นรุ่นพรีวิวที่ไม่มีการอ้างความสอดคล้อง NextPDF ไม่ถือครองการรับรองใด ๆ และไม่มอบให้ การรองรับไม่เท่ากับความสอดคล้อง และความสอดคล้องไม่เท่ากับการรับรอง

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

Terminal window
composer require nextpdf/enterprise:^3

ชนิดสำหรับการลงนามอยู่ใน NextPDF\Enterprise\Security\Signature\Hsm; ชนิด FIPS อยู่ใน NextPDF\Enterprise\Security\Fips; composition root อยู่ใน NextPDF\Enterprise\Bootstrap ตัวลงนามทั้งสองนำสัญญา NextPDF\Contracts\HsmSignerInterface ของ Core ไปใช้ นโยบายนำสัญญา NextPDF\Contracts\CryptoPolicyInterface และ NextPDF\Contracts\PreOperationalSelfTestInterface ของ Core ไปใช้

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่ายกข้อผิดพลาดหรือล้มเหลวด้วยหมายเหตุ
Pkcs11Signer::__construct()string $libraryPath, int $slotId, string $pin, string $certLabel, ?string $keyLabel = null, array $chainDer = [], bool $enablePostQuantum = false, ?FipsSignatureEnforcer $fipsEnforcer = nullเปิดไลบรารีของผู้ขาย, ล็อกอินเข้าสู่ slot, โหลดเมทาดาทาของใบรับรองและอัลกอริทึมของคีย์HsmOperationException เมื่อไม่มี ext-pkcs11 หรือการเข้าถึง token ล้มเหลวPIN และ label เป็น #[SensitiveParameter]; module handle หนึ่งตัวถูกแคชต่อเส้นทางไลบรารีต่อกระบวนการ
Pkcs11Signer::isAvailable()ไม่มีรายงานว่ามีการโหลด ext-pkcs11 หรือไม่boolไม่มีแบบ static; ตรวจสอบก่อนการสร้าง
Pkcs11Signer::sign()string $data, string $algorithm = 'sha256WithRSAEncryption'ลงนามบน token; ผลลัพธ์ ECDSA ดิบถูกแปลงเป็น DER ECDSA-Sig-Valuestring ไบต์ลายเซ็นดิบHsmOperationException (ไม่พบคีย์, token ล้มเหลว); InvalidArgumentException (อัลกอริทึมที่ไม่มีการแมป); FipsViolationException / FipsModuleErrorStateException ก่อนการลงนามเมื่อมีการต่อ enforcerชุดอัลกอริทึมแบบปิด; ดูสัญญาพฤติกรรม
Pkcs11Signer::signPqs()string $data, Pkcs11PqsAlgorithm $algorithm, string $context = '', bool $randomized = trueถูกปฏิเสธเว้นแต่มีการตั้ง $enablePostQuantum; ส่งไปยังกลไก post-quantum แบบชั่วคราวของ PKCS#11string ไบต์ลายเซ็นดิบHsmOperationException (ปิดใช้งาน, token ล้มเหลว, ความยาวลายเซ็นไม่ตรงกัน); InvalidArgumentException (context เกิน 255 ไบต์)รุ่นพรีวิว; ไม่มีการอ้างความสอดคล้อง
พื้นผิว accessor ของ Pkcs11Signerไม่มีผลลัพธ์การสร้างแบบอ่านอย่างเดียวbool / string / array<string>ไม่มีisPostQuantumEnabled, getCertificateDer, getCertificateChainDer, getPublicKeyAlgorithm
OpenSslCliSigner::__construct()string $keyUri, string $certPath, string $pin, array $extraCertPaths = [], OpenSslCliBackend $backend = OpenSslCliBackend::Auto, string $opensslBinary = 'openssl', int $timeoutSeconds = 30, ?string $modulePath = null, ?string $configPath = null, bool $legacyPinDelivery = false, ?FipsSignatureEnforcer $fipsEnforcer = nullตรวจสอบ proc_open, ตรวจโพรบ binary, resolve backend, โหลดใบรับรองHsmOperationException (proc_open ถูกปิดใช้งาน, ไม่มีไฟล์ module/config/certificate, ไม่มี backend); InvalidArgumentException (pin-value ภายใน $keyUri)Auto เลือกใช้ provider ของ OpenSSL 3.x ก่อน แล้วจึงใช้ engine
OpenSslCliSigner::sign()string $data, string $algorithm = 'sha256WithRSAEncryption'ลงนามใน subprocess openssl; ตามค่าเริ่มต้น PIN เดินทางผ่านไฟล์ pin-source ชั่วคราวแบบ 0600string ไบต์ลายเซ็นดิบHsmOperationException (หมดเวลา, PIN ถูกปฏิเสธ, ไม่พบคีย์, ผลลัพธ์ว่าง); InvalidArgumentException (อัลกอริทึมที่ไม่มีการแมป); ข้อยกเว้นของเกต FIPS ก่อนการลงนามsubprocess ถูกฆ่าหลังจาก $timeoutSeconds; stderr ถูกปกปิด
พื้นผิว accessor ของ OpenSslCliSignerไม่มีผลลัพธ์การสร้างแบบอ่านอย่างเดียวstring / array<string> / OpenSslCliBackendไม่มีgetCertificateDer, getCertificateChainDer, getPublicKeyAlgorithm, getCertificatePem, getResolvedBackend, getOpensslVersion
OpenSslCliBackendEnum: Provider, Engine, Autoไม่มีการเลือก backend สำหรับตัวลงนาม CLI
Pkcs11PqsAlgorithmEnum ของชุดพารามิเตอร์ ML-DSA และ SLH-DSAไม่มีตัวช่วย: isMlDsa, isSlhDsa, mechanismId, parameterSetId, signatureLength, nistCategory
PqsCapabilityStatus::current()ไม่มีสร้างท่าที post-quantum ที่ตรงไปตรงมาสำหรับกระบวนการPqsCapabilityStatusไม่มีboolean ของการอ้างความสอดคล้องทุกตัวถูกกำหนดตายตัวเป็น false; ไม่มีแฟล็กใดพลิกให้เป็นจริงได้
HsmSignerProviderAdapterHsmSignerInterface $hsm, string $providerId, SignatureAlgorithm $algorithm = SignatureAlgorithm::Pkcs1v15เปิดเผยคลาส HSM แบบรูปธรรมเป็น SignerProviderInterface แบบรวมตาม SPIKeyManagementException (เวอร์ชันคีย์ที่ไม่ใช่ null); SignatureFailedException (ไดรเวอร์ล้มเหลว, ลายเซ็นว่าง)provider id: pkcs11-{module-id}, openssl-cli
HsmOperationExceptionความล้มเหลวแบบมีชนิดสำหรับทุกเส้นทางการลงนาม HSMสืบทอดจาก NextPdfException ของ Core
FipsCryptoPolicy::strict() / ::standard()?FipsSelfTest $selfTest = nullค่าสำเร็จจากโรงงาน; strict คือโปรไฟล์ FIPS 140-3, standard เพิ่ม AES-128-CBCFipsCryptoPolicyไม่มีallow-list ที่เปลี่ยนแปลงไม่ได้; ดูพฤติกรรมในโหมด FIPS
พื้นผิว predicate ของ FipsCryptoPolicyอินพุต string / intการตรวจสอบสมาชิกของ allow-listbool / stringไม่มีisHashAlgorithmAllowed, isSignatureAlgorithmAllowed, isEncryptionAlgorithmAllowed, isKeyStrengthAllowed, getPreferredHashAlgorithm, getName
FipsCryptoPolicy::assertPreOperational()ไม่มีรัน (หรือเล่นซ้ำ) power-on self-testvoidFipsModuleErrorStateExceptionขับเคลื่อนโดย enforcement seam ของ Core ในการดำเนินการทางการเข้ารหัสครั้งแรก
FipsModeGuard::__construct()CryptoPolicyInterface $policy, ?FipsBootGuard $bootGuard = null, ?FipsAuditLogger $auditLogger = nullห่อหุ้มนโยบายด้วยขอบเขตแบบ assertไม่มีหากไม่มี boot guard เกต self-test จะไม่มี (เฉพาะนโยบาย)
พื้นผิว assert ของ FipsModeGuardอินพุต string / intแคตตาล็อกปฏิเสธก่อน แล้วจึง allow-list; บันทึกการตรวจสอบก่อนการยกข้อผิดพลาดใด ๆvoidFipsViolationException; FipsModuleErrorStateException (มีการต่อ boot guard)assertHashAllowed, assertSignatureAlgorithmAllowed, assertEncryptionAllowed, assertKeyStrengthAllowed, และ getPolicy
FipsBootGuard::report() / ::rerun()ไม่มีรัน self-test battery (แคช / บังคับ)FipsSelfTestReportไม่มีรายงานสถานะ ERROR ล็อกกระบวนการไว้; การรันซ้ำที่ผ่านไม่เคยปลดล็อก
FipsBootGuard::assertOperational()ไม่มียืนยันว่าโมดูลอยู่ในสถานะ OPERATIONALvoidFipsModuleErrorStateExceptionแบบติดหนึบ: สถานะ ERROR ที่ล็อกกระบวนการไว้จะปฏิเสธแม้แต่ instance ที่สะอาด
FipsBootGuard::status()ไม่มีรายงานสถานะที่แคชไว้FipsSelfTestStatusไม่มีPRE_OPERATIONAL, OPERATIONAL หรือ ERROR
FipsSelfTest::run()ไม่มีรัน known-answer-test battery ทั้งชุด; ไม่เคยลัดขั้นตอนFipsSelfTestReportไม่มีคอนสตรักเตอร์รับ provider ของ hash และ random-bytes ที่ inject ได้สำหรับการทดสอบแบบ deterministic
FipsSelfTestReport / FipsSelfTestResult / FipsSelfTestStatusvalue object ของรายงานและ enum ของสถานะFipsSelfTestReport::assertOperational() ยก FipsModuleErrorStateExceptionresults แสดงทุกผลลัพธ์เสมอเพื่อเป็นหลักฐานการตรวจสอบ
FipsSignatureEnforcer::assertSignatureGenerationAllowed()string $algorithm, string $certificatePemresolve signature OID และความแข็งแรงของคีย์ แล้วมอบหมายให้ guardvoidFipsViolationException (ไม่อนุญาตหรือจัดประเภทไม่ได้, fail-closed)จุดคอขวดที่ตัวลงนามทั้งสองเรียกที่ต้นของ sign() ในโหมด FIPS
FipsAuditLoggerCryptoPolicyInterface $policy, LoggerInterface $loggerปล่อยบันทึก ALLOW (INFO) / DENY (WARNING) ต่อการตัดสินใจแต่ละครั้งbool ต่อการเรียก log แต่ละครั้งไม่มีlogHashOperation, logSignatureOperation, logEncryptionOperation, logKeyStrengthCheck
FipsTransitioningAlgorithmsอินพุต string / intแคตตาล็อกปฏิเสธ NIST SP 800-131A แบบ staticbool / arrayไม่มีเลเยอร์ปฏิเสธแบบชัดแจ้งใต้ทุกขอบเขต guard
FipsBootstrap::boot() / ::lazy()?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = nullประกอบ boot guard, นโยบาย และ mode guard; boot() รัน self-test ทันที, lazy() เลื่อนไปที่ขอบเขตแรกFipsModeGuardboot(): FipsModuleErrorStateException เมื่อการทดสอบล้มเหลวค่าเริ่มต้นเป็นนโยบาย strict
FipsBootstrap::signatureEnforcer()?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = nullบูตโมดูลและคืนเกตในเวลาสร้างสำหรับตัวลงนามFipsSignatureEnforcerFipsModuleErrorStateExceptionส่งผลลัพธ์ไปยังพารามิเตอร์ $fipsEnforcer ของตัวลงนาม
FipsBootstrap::selfTestReport()?FipsSelfTest $selfTest = nullรัน battery ตามความต้องการและสรุปผลarray{status, operational, failed}ไม่มีมีไว้สำหรับ health endpoint และ subcommand ของ CLI
FipsViolationException / FipsModuleErrorStateExceptionความล้มเหลว FIPS แบบมีชนิดเปิดเผย policyName / violatingItem / reason และ failedResults ตามลำดับ
public function __construct(private readonly string $libraryPath, private readonly int $slotId, #[SensitiveParameter] private readonly string $pin, #[SensitiveParameter] private readonly string $certLabel, #[SensitiveParameter] private readonly ?string $keyLabel = null, array $chainDer = [], private readonly bool $enablePostQuantum = false, ?FipsSignatureEnforcer $fipsEnforcer = null)
public static function isAvailable(): bool
public function sign(string $data, string $algorithm = 'sha256WithRSAEncryption'): string
public function signPqs(string $data, Pkcs11PqsAlgorithm $algorithm, string $context = '', bool $randomized = true): string
public function __construct(private string $keyUri, string $certPath, #[SensitiveParameter] private string $pin, array $extraCertPaths = [], private OpenSslCliBackend $backend = OpenSslCliBackend::Auto, private string $opensslBinary = 'openssl', private int $timeoutSeconds = 30, private ?string $modulePath = null, private ?string $configPath = null, private bool $legacyPinDelivery = false, private ?FipsSignatureEnforcer $fipsEnforcer = null)
public function sign(string $data, string $algorithm = 'sha256WithRSAEncryption'): string
public static function strict(?FipsSelfTest $selfTest = null): self
public static function standard(?FipsSelfTest $selfTest = null): self
public function assertPreOperational(): void
public function __construct(private CryptoPolicyInterface $policy, private ?FipsBootGuard $bootGuard = null, private ?FipsAuditLogger $auditLogger = null)
public function assertHashAllowed(string $algorithm): void
public function assertSignatureAlgorithmAllowed(string $oid): void
public function assertEncryptionAllowed(string $algorithm): void
public function assertKeyStrengthAllowed(string $keyType, int $bitLength): void
public function getPolicy(): CryptoPolicyInterface
public static function boot(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuard
public static function lazy(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuard
public static function signatureEnforcer(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null): FipsSignatureEnforcer
public static function selfTestReport(?FipsSelfTest $selfTest = null): array
  • การ resolve สัญญา ตัวลงนามทั้งสองนำ HsmSignerInterface ของ Core ไปใช้; นโยบายนำ CryptoPolicyInterface ของ Core ไปใช้ โค้ดที่เรียกใช้พึ่งพาสัญญา ดังนั้นการอัปเกรดรุ่นจึงเปลี่ยนการประกอบ ไม่ใช่จุดเรียกใช้
  • การเก็บรักษาคีย์ คีย์ส่วนตัวไม่เคยออกจากขอบเขตของ token Pkcs11Signer มอบหมายการดำเนินการให้ token; OpenSslCliSigner ส่งการอ้างอิงคีย์แบบ PKCS#11 URI ไปยัง subprocess NextPDF ไม่จัดเก็บ สร้าง หรือรับประกันความปลอดภัยของคีย์ลงนาม การปกป้องคีย์เป็นความรับผิดชอบในการเก็บรักษาของผู้ดำเนินการ (NIST SP 800-57 Part 1 Rev.5 §5.5.2)
  • Session และการ login การดำเนินการ sign ของ token, session และการ login ของผู้ใช้ เป็นไปตาม PKCS#11 v3.1 §5 label ของใบรับรองและ label ของคีย์ส่วนตัวอาจต่างกัน; คอนสตรักเตอร์รับ key label แยกสำหรับ token เช่นนั้น
  • ชุดอัลกอริทึมแบบปิด ตัวลงนามรับเฉพาะ: RSA PKCS#1 v1.5 กับ SHA-256/384/512, RSASSA-PSS กับ SHA-256/384/512 และ ECDSA กับ SHA-256/384/512 (Pkcs11Signer ยังรับ ecdsa-raw ด้วย) ตัวระบุอื่นใดจะยก InvalidArgumentException; ไม่มีการลงนามด้วยอัลกอริทึมทดแทนใด ๆ
  • การผูก PSS salt สำหรับ PSS ทุกรูปแบบ ความยาว salt เท่ากับความยาว digest — 32, 48 หรือ 64 ไบต์ — และพารามิเตอร์ hash และ mask-generation ตรงกับ digest ที่เลือก (PKCS#11 v3.1 §5)
  • การแปลง ECDSA กลไก ECDSA ของ token คืนค่าลายเซ็นดิบ; sign() แปลงเป็นรูปแบบ ECDSA-Sig-Value ที่เข้ารหัส DER เพื่อการทำงานร่วมกันกับ PDF และ OpenSSL การสร้างลายเซ็นเป็นไปตาม FIPS 186-5 §6.3.2
  • เนื้อหาของค่าสำเร็จ ค่าสำเร็จ strict อนุญาต SHA-256/384/512; signature OID ของ RSA และ ECDSA กับ hash เหล่านั้น; RSASSA-PSS; AES-256-CBC และ AES-256-GCM; RSA ขั้นต่ำ 2048 และ EC 256 ค่าสำเร็จ standard อนุญาต AES-128-CBC เพิ่มเติมสำหรับการทำงานร่วมกับระบบเก่า การใช้ AES-GCM ใด ๆ ต้องใช้ initialization vector ที่ไม่ซ้ำต่อคีย์ (NIST SP 800-38D §5)
  • การบังคับใช้สองเลเยอร์ ทุกขอบเขต guard ปรึกษาแคตตาล็อกปฏิเสธ NIST SP 800-131A แบบชัดแจ้งก่อน แล้วจึงใช้ allow-list ของนโยบาย เลเยอร์ปฏิเสธสร้างสัญญาณ “disallowed” ที่ชัดเจนสำหรับการตรวจสอบ; allow-list ยังคงมีอำนาจตัดสิน
  • power-on self-test battery ครอบคลุม SHA-256/384/512, HMAC-SHA-256, AES-256-CBC, AES-256-GCM, การทดสอบ pairwise-consistency ของ ECDSA P-256 และการตรวจสอบสุขภาพ random-bit การดำเนินการทางการเข้ารหัสครั้งแรกภายใต้นโยบายบนเส้นทางของ Core จะรันหนึ่งครั้งต่อกระบวนการ แบบ fail-closed ความล้มเหลวทำให้โมดูลเข้าสู่สถานะ ERROR; บริการทางการเข้ารหัสจะถูกปฏิเสธจนกว่าจะรีเซ็ต เป็นไปตาม ISO/IEC 19790:2025 §7.10, §7.10.2, §7.10.3 และ §7.10.3.p3
  • สถานะ ERROR แบบติดหนึบ ERROR ที่สังเกตพบจะล็อกไว้ตลอดทั้งกระบวนการ การสร้างนโยบายหรือ boot guard ใหม่ไม่สามารถล้างออกได้; การรันซ้ำที่ผ่านไม่เคลียร์มัน มีเพียงการรีสตาร์ตกระบวนการ — การ power cycle จริง — เท่านั้นที่รีเซ็ตสถานะ
  • เกตเฉพาะการสร้าง FipsSignatureEnforcer ควบคุมการสร้างลายเซ็นใหม่ การตรวจสอบความถูกต้องของลายเซ็นที่มีอยู่ก่อนเป็นการใช้งานแบบ legacy และไม่เคยผ่าน enforcer
  • ร่องรอยการตรวจสอบ เมื่อ guard ถูกประกอบกับ audit logger ทุกขอบเขตจะปล่อยบันทึก ALLOW หรือ DENY ก่อนอนุญาตหรือปฏิเสธการดำเนินการ logger ปรึกษานโยบายเดียวกันกับที่ guard บังคับใช้ ดังนั้นการตัดสินใจที่บันทึกไว้จึงไม่สามารถแตกต่างได้
  • การสร้าง Pkcs11Signer โดยไม่มี ext-pkcs11 จะยก HsmOperationException ทันที; ส่วนขยายนี้ไม่ได้รวมมากับ PHP distribution มาตรฐาน
  • label ของใบรับรองหรือคีย์ส่วนตัวที่ไม่ตรงกับอ็อบเจ็กต์ token ใดจะยก HsmOperationException โดยระบุชื่อคลาสอ็อบเจ็กต์ที่หายไป
  • OpenSslCliSigner ปฏิเสธ $keyUri ที่มี pin-value ในเวลาสร้าง แบบ fail-closed; PIN เดินทางผ่านเส้นทาง pin-source ที่ปลอดภัยแทน
  • ในโหมด FIPS ตัวระบุอัลกอริทึมที่ไม่สามารถแมปไปยัง signature OID ที่รู้จักได้จะถูกปฏิเสธแบบ fail-closed; เช่นเดียวกับใบรับรองที่ไม่สามารถระบุความแข็งแรงของคีย์สาธารณะได้
  • ชนิดคีย์ที่ไม่รู้จักจะถูกปฏิเสธตามค่าเริ่มต้น; นโยบายไม่เคยถอยกลับไปใช้อัลกอริทึมที่อ่อนกว่า
  • known-answer test ที่ล้มเหลวจะยก FipsModuleErrorStateException ซึ่งพกพาผลลัพธ์ที่ล้มเหลวมาด้วย; ทุกขอบเขตถัดไปในกระบวนการจะทำซ้ำความล้มเหลวจนกว่าจะรีสตาร์ต
  • guard ที่สร้างโดยไม่มี boot guard จะบังคับใช้ allow-list แต่ไม่มีเกต self-test; การประกอบ FIPS ในการใช้งานจริงจัดหาให้ผ่าน bootstrap
  • signPqs() ปฏิเสธที่จะรันเว้นแต่มีการตั้งค่าเลือกใช้ในคอนสตรักเตอร์ context string ที่เกิน 255 ไบต์จะยก InvalidArgumentException (FIPS 204 §5.4) ลายเซ็นที่คืนกลับมาซึ่งความยาวไบต์ไม่ตรงกับชุดพารามิเตอร์ที่เลือกจะถูกปฏิเสธก่อนถึงขั้นการเข้ารหัส

FIPS-allowed ในโหมด strict: SHA-256/384/512; RSA PKCS#1 v1.5 และ RSA-PSS กับ hash เหล่านั้น; ECDSA กับ hash เหล่านั้น; AES-256-CBC และ AES-256-GCM; RSA อย่างน้อย 2048 บิต, EC อย่างน้อย 256 บิต FIPS-rejected ในโหมด strict: hash ที่อ่อนกว่าหรือแบบเก่า, signature OID ที่ไม่ผ่านการอนุมัติ, AES-128 (อนุญาตเฉพาะในค่าสำเร็จ standard) และคีย์ใด ๆ ที่ต่ำกว่าความแข็งแรงขั้นต่ำ ความยาวคีย์ RSA ขั้นต่ำและสถานะการเปลี่ยนผ่านเป็นไปตาม NIST SP 800-131A Rev.2 §3 การจับคู่ curve และ hash ของ ECDSA เป็นไปตาม FIPS 186-5 §6.1.1 เส้นทางนี้เป็นแบบ fail-closed และไม่เคยแทนที่ด้วยอัลกอริทึมที่อ่อนกว่า

NextPDF Enterprise ไม่ใช่โมดูลการเข้ารหัสที่ผ่านการตรวจรับรอง FIPS และไม่ได้อ้างการรับรอง FIPS NextPDF Enterprise ทำงานในโหมดที่เข้ากันได้กับ FIPS เฉพาะเมื่อกำหนดค่าด้วย crypto provider ที่ผ่านการตรวจรับรอง FIPS — เช่น OpenSSL provider ที่ผ่านการตรวจรับรอง FIPS — หรือ HSM ที่ผ่านการตรวจรับรอง FIPS นโยบายในโหมด FIPS ช่วยในการปฏิบัติตามข้อกำหนด; ไม่ใช่การรับรอง ไม่มีอาร์ทิแฟกต์การรับรอง FIPS อยู่ใน repository นี้

การอ้างมาตรฐานข้อ
ความหมายของการดำเนินการ sign ของ token, session และการ login ของผู้ใช้PKCS#11 v3.1§5 (sign)
ความยาว PSS salt เท่ากับความยาว digestPKCS#11 v3.1§5 (PSS sLen)
การสร้างลายเซ็น ECDSA; การจับคู่ curve และ hashFIPS 186-5§6.3.2; §6.1.1
ความยาวคีย์ RSA ขั้นต่ำและสถานะการเปลี่ยนผ่านของการสร้างลายเซ็นNIST SP 800-131A Rev.2§3
หมวด self-test, เอกสาร, ทริกเกอร์แบบ conditional, disjoint setISO/IEC 19790:2025§7.10, §7.10.2, §7.10.3, §7.10.3.p3
ความไม่ซ้ำของ initialization vector ของ AES-GCMNIST SP 800-38D§5
ความรับผิดชอบในการปกป้องและเก็บรักษาคีย์NIST SP 800-57 Part 1 Rev.5§5.5.2
context string ของการลงนาม post-quantum จำกัดที่ 255 ไบต์FIPS 204§5.4

ทุกข้อเป็นการถอดความ; ไม่มีการทำซ้ำข้อความเชิงบรรทัดฐาน สิ่งเหล่านี้เป็นการอ้างความสามารถเกี่ยวกับโค้ดของ NextPDF ไม่ใช่การรับรอง ลายเซ็นที่สร้างขึ้นจะตรวจสอบผ่านหรือไม่นั้นเป็นการตัดสินใจของผู้ตรวจสอบตามการกำหนดค่าความเชื่อถือของตนเอง นโยบายในโหมด FIPS เป็นฟีเจอร์ช่วยในการปฏิบัติตามข้อกำหนด ไม่ใช่คำให้ความเห็นทางกฎหมาย; โปรดปรึกษาที่ปรึกษาด้านการปฏิบัติตามข้อกำหนดและด้านกฎหมายของคุณเอง โมดูลนี้เกี่ยวข้องกับฟังก์ชันการเข้ารหัส; โปรดถือว่ามีความอ่อนไหวด้านความปลอดภัยในการทบทวนของคุณเอง

  • ประกอบโหมด FIPS ผ่าน bootstrap: boot() สำหรับเกตในเวลาเริ่มต้น, lazy() เพื่อเลื่อน battery ไปที่ขอบเขตแรก และ enforcer factory สำหรับพารามิเตอร์ $fipsEnforcer ของตัวลงนาม การปรับใช้ที่ไม่ใช่ FIPS ส่ง null และพฤติกรรมไม่เปลี่ยนแปลง
  • subcommand fips:self-test ของ bin/nextpdf-enterprise รัน battery ตามความต้องการและออกด้วยค่าที่ไม่ใช่ศูนย์ในสถานะ ERROR; ต่อเข้ากับงานบำรุงรักษาหรือ health endpoint เฉพาะผู้ดูแล (ISO/IEC 19790:2025 self-test ตามความต้องการ)
  • FipsBootGuard::resetProcessErrorLatchForTesting() เป็น @internal และใช้เฉพาะการทดสอบ; โค้ดในการใช้งานจริงไม่เคยเรียกใช้ เพราะจะทำลายสถานะ ERROR แบบติดหนึบ
  • สร้างตัวลงนามหนึ่งครั้งแล้วนำกลับมาใช้ซ้ำ; การสร้างจะ login และอ่านใบรับรอง และแคชโมดูลต่อไลบรารีทำให้การสร้างซ้ำกับไลบรารีเดียวกันปลอดภัย
  • จัดหา PIN จาก secret manager มันเป็น #[SensitiveParameter] ที่ไม่เคยถูกบันทึกหรือ serialize; อย่า commit ลงในการกำหนดค่า
  • ผู้ดำเนินการเป็นเจ้าของการจัดเตรียม token, การจัดการ PIN, การกำหนดค่า slot, การป้องกันเครือข่ายของ HSM ที่เชื่อมต่อเครือข่าย และการกำหนดค่าความเชื่อถือ หน้านี้ไม่เปิดเผยรายละเอียดภายในของนโยบาย PIN ของ token หรือวัสดุข้อมูลรับรองของผู้ขาย
  • อย่าเปิดใช้งานรุ่นพรีวิว post-quantum สำหรับลายเซ็น AdES ในการใช้งานจริง แคตตาล็อก cryptographic-suites ของ AdES ยังไม่รับรู้ suite แบบ post-quantum, ตัวอ่าน PDF ส่วนใหญ่ปฏิเสธลายเซ็นเช่นนั้น และการตรวจสอบความถูกต้องแบบ round-trip ด้วยฮาร์ดแวร์ยังไม่เสร็จสมบูรณ์ รายละเอียดกลไกภายในยังคงอยู่ในเอกสารภายในของ source repository และอยู่นอกขอบเขตของคู่มือนี้

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