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 การปรับใช้ที่ไม่มีสิทธิ์ดังกล่าวจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและขอรับสิทธิ์การใช้งาน
พื้นผิว API สาธารณะ
หัวข้อที่มีชื่อว่า “พื้นผิว API สาธารณะ”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-Value | string ไบต์ลายเซ็นดิบ | HsmOperationException (ไม่พบคีย์, token ล้มเหลว); InvalidArgumentException (อัลกอริทึมที่ไม่มีการแมป); FipsViolationException / FipsModuleErrorStateException ก่อนการลงนามเมื่อมีการต่อ enforcer | ชุดอัลกอริทึมแบบปิด; ดูสัญญาพฤติกรรม |
Pkcs11Signer::signPqs() | string $data, Pkcs11PqsAlgorithm $algorithm, string $context = '', bool $randomized = true | ถูกปฏิเสธเว้นแต่มีการตั้ง $enablePostQuantum; ส่งไปยังกลไก post-quantum แบบชั่วคราวของ PKCS#11 | string ไบต์ลายเซ็นดิบ | 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 ชั่วคราวแบบ 0600 | string ไบต์ลายเซ็นดิบ | HsmOperationException (หมดเวลา, PIN ถูกปฏิเสธ, ไม่พบคีย์, ผลลัพธ์ว่าง); InvalidArgumentException (อัลกอริทึมที่ไม่มีการแมป); ข้อยกเว้นของเกต FIPS ก่อนการลงนาม | subprocess ถูกฆ่าหลังจาก $timeoutSeconds; stderr ถูกปกปิด |
พื้นผิว accessor ของ OpenSslCliSigner | ไม่มี | ผลลัพธ์การสร้างแบบอ่านอย่างเดียว | string / array<string> / OpenSslCliBackend | ไม่มี | getCertificateDer, getCertificateChainDer, getPublicKeyAlgorithm, getCertificatePem, getResolvedBackend, getOpensslVersion |
OpenSslCliBackend | — | Enum: Provider, Engine, Auto | — | ไม่มี | การเลือก backend สำหรับตัวลงนาม CLI |
Pkcs11PqsAlgorithm | — | Enum ของชุดพารามิเตอร์ ML-DSA และ SLH-DSA | — | ไม่มี | ตัวช่วย: isMlDsa, isSlhDsa, mechanismId, parameterSetId, signatureLength, nistCategory |
PqsCapabilityStatus::current() | ไม่มี | สร้างท่าที post-quantum ที่ตรงไปตรงมาสำหรับกระบวนการ | PqsCapabilityStatus | ไม่มี | boolean ของการอ้างความสอดคล้องทุกตัวถูกกำหนดตายตัวเป็น false; ไม่มีแฟล็กใดพลิกให้เป็นจริงได้ |
HsmSignerProviderAdapter | HsmSignerInterface $hsm, string $providerId, SignatureAlgorithm $algorithm = SignatureAlgorithm::Pkcs1v15 | เปิดเผยคลาส HSM แบบรูปธรรมเป็น SignerProviderInterface แบบรวม | ตาม SPI | KeyManagementException (เวอร์ชันคีย์ที่ไม่ใช่ 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-CBC | FipsCryptoPolicy | ไม่มี | allow-list ที่เปลี่ยนแปลงไม่ได้; ดูพฤติกรรมในโหมด FIPS |
พื้นผิว predicate ของ FipsCryptoPolicy | อินพุต string / int | การตรวจสอบสมาชิกของ allow-list | bool / string | ไม่มี | isHashAlgorithmAllowed, isSignatureAlgorithmAllowed, isEncryptionAlgorithmAllowed, isKeyStrengthAllowed, getPreferredHashAlgorithm, getName |
FipsCryptoPolicy::assertPreOperational() | ไม่มี | รัน (หรือเล่นซ้ำ) power-on self-test | void | FipsModuleErrorStateException | ขับเคลื่อนโดย enforcement seam ของ Core ในการดำเนินการทางการเข้ารหัสครั้งแรก |
FipsModeGuard::__construct() | CryptoPolicyInterface $policy, ?FipsBootGuard $bootGuard = null, ?FipsAuditLogger $auditLogger = null | ห่อหุ้มนโยบายด้วยขอบเขตแบบ assert | — | ไม่มี | หากไม่มี boot guard เกต self-test จะไม่มี (เฉพาะนโยบาย) |
พื้นผิว assert ของ FipsModeGuard | อินพุต string / int | แคตตาล็อกปฏิเสธก่อน แล้วจึง allow-list; บันทึกการตรวจสอบก่อนการยกข้อผิดพลาดใด ๆ | void | FipsViolationException; FipsModuleErrorStateException (มีการต่อ boot guard) | assertHashAllowed, assertSignatureAlgorithmAllowed, assertEncryptionAllowed, assertKeyStrengthAllowed, และ getPolicy |
FipsBootGuard::report() / ::rerun() | ไม่มี | รัน self-test battery (แคช / บังคับ) | FipsSelfTestReport | ไม่มี | รายงานสถานะ ERROR ล็อกกระบวนการไว้; การรันซ้ำที่ผ่านไม่เคยปลดล็อก |
FipsBootGuard::assertOperational() | ไม่มี | ยืนยันว่าโมดูลอยู่ในสถานะ OPERATIONAL | void | FipsModuleErrorStateException | แบบติดหนึบ: สถานะ ERROR ที่ล็อกกระบวนการไว้จะปฏิเสธแม้แต่ instance ที่สะอาด |
FipsBootGuard::status() | ไม่มี | รายงานสถานะที่แคชไว้ | FipsSelfTestStatus | ไม่มี | PRE_OPERATIONAL, OPERATIONAL หรือ ERROR |
FipsSelfTest::run() | ไม่มี | รัน known-answer-test battery ทั้งชุด; ไม่เคยลัดขั้นตอน | FipsSelfTestReport | ไม่มี | คอนสตรักเตอร์รับ provider ของ hash และ random-bytes ที่ inject ได้สำหรับการทดสอบแบบ deterministic |
FipsSelfTestReport / FipsSelfTestResult / FipsSelfTestStatus | — | value object ของรายงานและ enum ของสถานะ | — | FipsSelfTestReport::assertOperational() ยก FipsModuleErrorStateException | results แสดงทุกผลลัพธ์เสมอเพื่อเป็นหลักฐานการตรวจสอบ |
FipsSignatureEnforcer::assertSignatureGenerationAllowed() | string $algorithm, string $certificatePem | resolve signature OID และความแข็งแรงของคีย์ แล้วมอบหมายให้ guard | void | FipsViolationException (ไม่อนุญาตหรือจัดประเภทไม่ได้, fail-closed) | จุดคอขวดที่ตัวลงนามทั้งสองเรียกที่ต้นของ sign() ในโหมด FIPS |
FipsAuditLogger | CryptoPolicyInterface $policy, LoggerInterface $logger | ปล่อยบันทึก ALLOW (INFO) / DENY (WARNING) ต่อการตัดสินใจแต่ละครั้ง | bool ต่อการเรียก log แต่ละครั้ง | ไม่มี | logHashOperation, logSignatureOperation, logEncryptionOperation, logKeyStrengthCheck |
FipsTransitioningAlgorithms | อินพุต string / int | แคตตาล็อกปฏิเสธ NIST SP 800-131A แบบ static | bool / array | ไม่มี | เลเยอร์ปฏิเสธแบบชัดแจ้งใต้ทุกขอบเขต guard |
FipsBootstrap::boot() / ::lazy() | ?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null | ประกอบ boot guard, นโยบาย และ mode guard; boot() รัน self-test ทันที, lazy() เลื่อนไปที่ขอบเขตแรก | FipsModeGuard | boot(): FipsModuleErrorStateException เมื่อการทดสอบล้มเหลว | ค่าเริ่มต้นเป็นนโยบาย strict |
FipsBootstrap::signatureEnforcer() | ?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null | บูตโมดูลและคืนเกตในเวลาสร้างสำหรับตัวลงนาม | FipsSignatureEnforcer | FipsModuleErrorStateException | ส่งผลลัพธ์ไปยังพารามิเตอร์ $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(): boolpublic function sign(string $data, string $algorithm = 'sha256WithRSAEncryption'): stringpublic function signPqs(string $data, Pkcs11PqsAlgorithm $algorithm, string $context = '', bool $randomized = true): stringpublic 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'): stringpublic static function strict(?FipsSelfTest $selfTest = null): selfpublic static function standard(?FipsSelfTest $selfTest = null): selfpublic function assertPreOperational(): voidpublic function __construct(private CryptoPolicyInterface $policy, private ?FipsBootGuard $bootGuard = null, private ?FipsAuditLogger $auditLogger = null)public function assertHashAllowed(string $algorithm): voidpublic function assertSignatureAlgorithmAllowed(string $oid): voidpublic function assertEncryptionAllowed(string $algorithm): voidpublic function assertKeyStrengthAllowed(string $keyType, int $bitLength): voidpublic function getPolicy(): CryptoPolicyInterfacepublic static function boot(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuardpublic static function lazy(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuardpublic static function signatureEnforcer(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null): FipsSignatureEnforcerpublic 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
หัวข้อที่มีชื่อว่า “พฤติกรรมในโหมด FIPS”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 เท่ากับความยาว digest | PKCS#11 v3.1 | §5 (PSS sLen) |
| การสร้างลายเซ็น ECDSA; การจับคู่ curve และ hash | FIPS 186-5 | §6.3.2; §6.1.1 |
| ความยาวคีย์ RSA ขั้นต่ำและสถานะการเปลี่ยนผ่านของการสร้างลายเซ็น | NIST SP 800-131A Rev.2 | §3 |
| หมวด self-test, เอกสาร, ทริกเกอร์แบบ conditional, disjoint set | ISO/IEC 19790:2025 | §7.10, §7.10.2, §7.10.3, §7.10.3.p3 |
| ความไม่ซ้ำของ initialization vector ของ AES-GCM | NIST 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 อยู่นอกขอบเขต
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- Security — NextPDF Enterprise — หน้าความสามารถสำหรับพื้นผิวนี้
- การลงนามด้วย hardware security module (PKCS#11) — ขั้นตอนการตั้งค่า, การกำหนดค่า และการตรวจสอบ
- นโยบายการเข้ารหัส FIPS 140 — หน้าความสามารถ FIPS
- HSM — เอกสารอ้างอิงเชิงลึก — เอกสารอ้างอิงตัวลงนามแบบเฉพาะเจาะจง
- FIPS 140 — เอกสารอ้างอิงเชิงลึก — เอกสารอ้างอิงโมดูล FIPS แบบเฉพาะเจาะจง
- Security — NextPDF Pro — พื้นผิวความปลอดภัยระดับ Pro
- Security — NextPDF Core — พื้นฐานความปลอดภัยของ Core