Enterprise รุ่น
FIPS 140 — เอกสารอ้างอิงเชิงลึก
ภาพรวมโดยสรุป
หัวข้อที่มีชื่อว่า “ภาพรวมโดยสรุป”หน้านี้เป็นข้อมูลอ้างอิงเชิงลึกสำหรับโมดูล FIPS 140 ของ NextPDF Enterprise โมดูลนี้เป็นความสามารถด้านนโยบายและการทดสอบตนเอง มันจำกัดตัวเลือกการเข้ารหัสให้อยู่ในรายการอนุญาตที่สอดคล้องกับ FIPS, รันชุดทดสอบ known-answer เมื่อเปิดเครื่อง และยับยั้งเอาต์พุตการเข้ารหัสเมื่อชุดทดสอบล้มเหลว NextPDF ไม่ใช่โมดูลการเข้ารหัสที่ผ่านการตรวจรับรอง FIPS 140 ไม่ได้ถือใบรับรองใด และไม่ได้มอบใบรับรองใด การรองรับไม่เท่ากับการปฏิบัติตาม และการปฏิบัติตามไม่เท่ากับการรับรอง การดีพลอยที่รองรับ FIPS ยังต้องมีผู้ให้บริการการเข้ารหัสที่ผ่านการตรวจรับรอง FIPS ซึ่งจัดหาโดยผู้ดำเนินการเพิ่มเติมด้วย
ความพร้อมใช้งานและการอนุญาต
หัวข้อที่มีชื่อว่า “ความพร้อมใช้งานและการอนุญาต”ความสามารถนี้มาพร้อมกับ NextPDF Enterprise (nextpdf/enterprise) และเปิดใช้งานด้วยซองใบอนุญาตระดับ Enterprise การดีพลอยที่ไม่มีสิทธิ์นั้นจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบเอดิชันและขอรับใบอนุญาต
พื้นผิว API สาธารณะ
หัวข้อที่มีชื่อว่า “พื้นผิว API สาธารณะ”สัญลักษณ์ทั้งหมดอยู่ใน NextPDF\Enterprise\Security\Fips ยกเว้น FipsBootstrap ซึ่งอยู่ใน NextPDF\Enterprise\Bootstrap
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
FipsBootstrap::boot() | ?CryptoPolicyInterface $policy, ?FipsSelfTest $selfTest, ?LoggerInterface $auditLogger (ทั้งหมดค่าเริ่มต้น null) | รันชุดทดสอบเมื่อเปิดเครื่องหนึ่งครั้งตอนเริ่มต้น; ค่าเริ่มต้นใช้นโยบาย strict | FipsModeGuard | FipsModuleErrorStateException เมื่อมีการทดสอบเมื่อเปิดเครื่องล้มเหลว | รากการประกอบ; ปิดร่องรอยการตรวจสอบเมื่อ $auditLogger เป็น null |
FipsBootstrap::lazy() | เหมือนกับ boot() | เลื่อนชุดทดสอบไปยังการยืนยันขอบเขตครั้งแรก | FipsModeGuard | ไม่มีในตอนเรียก; การยืนยันครั้งแรกอาจโยน FipsModuleErrorStateException | โมดูลคงสถานะ PRE_OPERATIONAL จนกว่าจะมีการยืนยันครั้งแรก |
FipsBootstrap::signatureEnforcer() | ?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null | บูตโมดูล จากนั้นห่อหุ้มตัวป้องกันสำหรับจุดคอขวดของผู้ลงนาม | FipsSignatureEnforcer | FipsModuleErrorStateException เมื่อมีการทดสอบเมื่อเปิดเครื่องล้มเหลว | มอบหมายให้ boot() |
FipsBootstrap::selfTestReport() | ?FipsSelfTest $selfTest = null | รันชุดทดสอบตามคำขอและสรุปผล | array{status: FipsSelfTestStatus, operational: bool, failed: list<string>} | ไม่โยนข้อยกเว้น; ความล้มเหลวปรากฏใน failed | สำหรับ endpoint ตรวจสุขภาพของผู้ดูแลระบบและการใช้งาน CLI |
FipsCryptoPolicy::strict() | ?FipsSelfTest $selfTest = null | พรีเซ็ต FIPS 140-3: SHA-256/384/512; RSA, RSASSA-PSS, ECDSA OIDs ที่ได้รับการอนุมัติ; aes-256-cbc, aes-256-gcm; RSA >= 2048, EC >= 256 | self | ไม่มี | คอนสตรัคเตอร์เป็นแบบ private; พรีเซ็ตเป็นทางเข้าเดียว |
FipsCryptoPolicy::standard() | ?FipsSelfTest $selfTest = null | พรีเซ็ต FIPS 140-2: ชุด strict บวก aes-128-cbc | self | ไม่มี | สำหรับการทำงานร่วมกันแบบเดิมเท่านั้น |
FipsCryptoPolicy::assertPreOperational() | ไม่มี | รัน หรือเล่นซ้ำผลลัพธ์ที่ติดค้างของชุดทดสอบเมื่อเปิดเครื่อง | void | FipsModuleErrorStateException เมื่อมีการทดสอบเมื่อเปิดเครื่องล้มเหลว | ขับเคลื่อนโดยตะเข็บการบังคับใช้ของ Core ก่อนการดำเนินการครั้งแรก |
พื้นผิวการสอบถามของ FipsCryptoPolicy | อินพุต string / int | การตรวจสอบสมาชิกในรายการอนุญาต; ปฏิเสธชนิดกุญแจที่ไม่รู้จัก | bool / string | ไม่มี | isHashAlgorithmAllowed, isSignatureAlgorithmAllowed, isEncryptionAlgorithmAllowed, isKeyStrengthAllowed, getPreferredHashAlgorithm, getName |
FipsModeGuard::__construct() | CryptoPolicyInterface $policy, ?FipsBootGuard $bootGuard = null, ?FipsAuditLogger $auditLogger = null | ห่อหุ้มนโยบายด้วยขอบเขตแบบ assert | — | ไม่มี | หากไม่มี $bootGuard จะไม่มีเกตทดสอบตนเอง; การประกอบสำหรับโปรดักชันจะจัดหาให้ |
FipsModeGuard::assertHashAllowed() | string $algorithm | แคตตาล็อกการปฏิเสธก่อน จากนั้นรายการอนุญาต | void | FipsViolationException; FipsModuleErrorStateException เมื่อมีการต่อ boot guard ไว้ | บันทึกการตรวจสอบเกิดขึ้นก่อน FipsViolationException ใดๆ |
FipsModeGuard::assertSignatureAlgorithmAllowed() | string $oid | แคตตาล็อกการปฏิเสธก่อน จากนั้นรายการอนุญาต | void | เหมือนกับด้านบน | OID จับคู่แบบตรงตัว |
FipsModeGuard::assertEncryptionAllowed() | string $algorithm | แคตตาล็อกการปฏิเสธก่อน จากนั้นรายการอนุญาต | void | เหมือนกับด้านบน | ชื่อถูกเปรียบเทียบแบบตัวพิมพ์เล็ก |
FipsModeGuard::assertKeyStrengthAllowed() | string $keyType, int $bitLength | แคตตาล็อกการปฏิเสธก่อน จากนั้นค่าต่ำสุดของนโยบาย | void | เหมือนกับด้านบน | ปฏิเสธชนิดกุญแจที่ไม่รู้จัก |
FipsModeGuard::getPolicy() | ไม่มี | คืนค่านโยบายที่ถูกห่อหุ้ม | CryptoPolicyInterface | ไม่มี | — |
FipsBootGuard::__construct() | FipsSelfTest $selfTest | ถือชุดทดสอบไว้; ไม่รันมัน | — | ไม่มี | หนึ่งรอบเปิดเครื่องต่อหนึ่งอินสแตนซ์ |
FipsBootGuard::report() | ไม่มี | รันชุดทดสอบหนึ่งครั้ง, แคชรายงาน, ติดค้างเมื่อเกิดข้อผิดพลาด | FipsSelfTestReport | ไม่มี | การเรียกครั้งแรกจะรันการทดสอบ |
FipsBootGuard::rerun() | ไม่มี | บังคับรันใหม่; การรันที่ผิดพลาดจะทำให้โปรเซสติดค้าง | FipsSelfTestReport | ไม่มี | การทดสอบตนเองตามคำขอ; ไม่ใช่เส้นทางการกู้คืนข้อผิดพลาด |
FipsBootGuard::assertOperational() | ไม่มี | ยืนยันว่าโมดูลพร้อมทำงาน; ติดค้างทั่วทั้งโปรเซส | void | FipsModuleErrorStateException | อินสแตนซ์ที่สะอาดยังคงโยนข้อยกเว้นเมื่อโปรเซสติดค้างข้อผิดพลาดไว้ |
FipsBootGuard::status() | ไม่มี | รายงานสถานะที่แคชไว้ | FipsSelfTestStatus | ไม่มี | ERROR เมื่อติดค้าง; PRE_OPERATIONAL เมื่อไม่เคยรัน |
FipsSelfTest::__construct() | ?callable $randomBytesProvider = null, ?callable $hashProvider = null | ใช้ hash() และ random_bytes() ของแพลตฟอร์ม | — | ไม่มี | มีการแทนที่สำหรับการทดสอบความล้มเหลวแบบกำหนดผลได้ |
FipsSelfTest::run() | ไม่มี | ดำเนินชุดทดสอบทั้งหมด; ไม่ลัดวงจร | FipsSelfTestReport | ไม่มี | ความล้มเหลวปรากฏในรายงาน ไม่ใช่ในข้อยกเว้น |
FipsSelfTestReport | FipsSelfTestStatus $status, array $results, array $failedResults | กลุ่มข้อมูลที่ไม่เปลี่ยนแปลงของการรันหนึ่งครั้ง | — | assertOperational() โยน FipsModuleErrorStateException ในสถานะข้อผิดพลาด | ยังมี isOperational(), isError() |
FipsSelfTestResult | string $algorithm, string $kind, bool $passed, string $message = '' | ผลลัพธ์ต่อการทดสอบที่ไม่เปลี่ยนแปลง | — | ไม่มี | kind คือ KAT, PWCT หรือ HEALTH; ยังมี isPassed(), isFailed() |
FipsSelfTestStatus | — | enum ที่รองรับด้วยสตริง | — | ไม่มี | เคส PRE_OPERATIONAL, OPERATIONAL, ERROR |
FipsSignatureEnforcer::__construct() | FipsModeGuard $guard | ห่อหุ้มตัวป้องกันที่ผ่านเกตบูตสำหรับจุดคอขวดการลงนาม | — | ไม่มี | — |
FipsSignatureEnforcer::assertSignatureGenerationAllowed() | string $algorithm, string $certificatePem | แปลง OID และความแข็งแรงของกุญแจ จากนั้นมอบหมายให้ตัวป้องกัน | void | FipsViolationException (อัลกอริทึมที่ไม่รู้จัก, PSS digest ที่ไม่ได้รับอนุมัติ, กุญแจที่พิสูจน์ไม่ได้ หรือการปฏิเสธของนโยบาย); FipsModuleErrorStateException ผ่านตัวป้องกัน | เส้นทางการสร้างเท่านั้น; การตรวจสอบไม่เคยผ่านทางนี้ |
FipsAuditLogger::__construct() | CryptoPolicyInterface $policy, LoggerInterface $logger | ห่อหุ้ม logger แบบ PSR-3 และนโยบายเดียวกับที่ตัวป้องกันบังคับใช้ | — | ไม่มี | การตัดสินใจที่บันทึกไว้ไม่สามารถแตกต่างจากที่บังคับใช้จริง |
FipsAuditLogger::logHashOperation() / logSignatureOperation() / logEncryptionOperation() / logKeyStrengthCheck() | อินพุต string / int ต่อการตัดสินใจ | บันทึก ALLOW ที่ระดับ INFO และ DENY ที่ระดับ WARNING | bool (true เมื่ออนุญาต) | ไม่มี | บริบทเชิงโครงสร้าง: ชื่อนโยบาย, รายการ, การตัดสินใจ |
FipsTransitioningAlgorithms | อินพุต string / int | แคตตาล็อกการปฏิเสธ SP 800-131A Rev.2 แบบสถิต | bool / list<string> | ไม่มี | isHashDisallowed, isSignatureOidDisallowed, isEncryptionDisallowed, isKeyStrengthDisallowed, plus disallowedHashes, disallowedSignatureOids, disallowedEncryption |
FipsViolationException | string $policyName, string $violatingItem, string $reason | การละเมิดนโยบายแบบมีชนิดพร้อมฟิลด์ public readonly | — | — | ชนิดย่อยของ NextPDF\Exception\NextPdfException |
FipsModuleErrorStateException | array $failedResults, ?string $message = null | การปฏิเสธในสถานะข้อผิดพลาดที่พาผลการทดสอบที่ล้มเหลวมาด้วย | — | — | ชนิดย่อยของ NextPDF\Exception\NextPdfException |
public 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): arraypublic static function strict(?FipsSelfTest $selfTest = null): selfpublic static function standard(?FipsSelfTest $selfTest = null): selfpublic function assertPreOperational(): voidpublic function isHashAlgorithmAllowed(string $algorithm): boolpublic function isSignatureAlgorithmAllowed(string $oid): boolpublic function isEncryptionAlgorithmAllowed(string $algorithm): boolpublic function isKeyStrengthAllowed(string $keyType, int $bitLength): boolpublic function getPreferredHashAlgorithm(): stringpublic function getName(): stringpublic 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 function __construct(private readonly FipsSelfTest $selfTest)public function report(): FipsSelfTestReportpublic function rerun(): FipsSelfTestReportpublic function assertOperational(): voidpublic function status(): FipsSelfTestStatuspublic function __construct(?callable $randomBytesProvider = null, ?callable $hashProvider = null)public function run(): FipsSelfTestReportpublic function __construct(private readonly FipsModeGuard $guard)public function assertSignatureGenerationAllowed(string $algorithm, string $certificatePem): voidpublic function __construct(private CryptoPolicyInterface $policy, private LoggerInterface $logger)public function logHashOperation(string $algorithm): boolpublic function logSignatureOperation(string $oid): boolpublic function logEncryptionOperation(string $algorithm): boolpublic function logKeyStrengthCheck(string $keyType, int $bitLength): boolpublic static function isHashDisallowed(string $algorithm): boolpublic static function isSignatureOidDisallowed(string $oid): boolpublic static function isEncryptionDisallowed(string $algorithm): boolpublic static function isKeyStrengthDisallowed(string $keyType, int $bitLength): boolpublic static function disallowedHashes(): arraypublic static function disallowedSignatureOids(): arraypublic static function disallowedEncryption(): arraypublic function __construct(public FipsSelfTestStatus $status, public array $results, public array $failedResults)public function isOperational(): boolpublic function isError(): boolpublic function assertOperational(): void
// FipsSelfTestResultpublic function __construct(public string $algorithm, public string $kind, public bool $passed, public string $message = '')public function isPassed(): boolpublic function isFailed(): bool
// FipsSelfTestStatusenum FipsSelfTestStatus: string{ case PRE_OPERATIONAL = 'pre_operational'; case OPERATIONAL = 'operational'; case ERROR = 'error';}สัญญาพฤติกรรม
หัวข้อที่มีชื่อว่า “สัญญาพฤติกรรม”- รายการอนุญาตของนโยบายคือการตัดสินใจที่มีอำนาจสูงสุด
FipsTransitioningAlgorithmsเพิ่มชั้นการปฏิเสธตาม SP 800-131A Rev.2 อย่างชัดเจนไว้เหนือมัน เพื่อข้อความปฏิเสธที่ชัดเจนสำหรับการตรวจสอบ ชั้นการปฏิเสธไม่เคยขยายหรือลบล้างรายการอนุญาต FipsCryptoPolicy::strict()อนุญาต SHA-256, SHA-384 และ SHA-512; signature OID ของ RSA PKCS#1 v1.5,RSASSA-PSSและ ECDSA ที่ผูกกับแฮชเหล่านั้น;aes-256-cbcและaes-256-gcm; และขั้นต่ำของกุญแจ RSA 2048, EC 256, Ed25519 256standard()อนุญาตaes-128-cbcเพิ่มเติม- ชุดทดสอบเมื่อเปิดเครื่องครอบคลุม: KAT ของ digest SHA-256/384/512, KAT ของ HMAC-SHA-256, KAT การเข้ารหัสและถอดรหัส AES-256-CBC, KAT ของ tag AES-256-GCM, การทดสอบความสอดคล้องแบบคู่ของ ECDSA P-256 และการตรวจสุขภาพ DRBG
FipsSelfTest::run()จะดำเนินทุกการทดสอบเสมอและไม่ลัดวงจร ดังนั้นรายงานจึงสมบูรณ์สำหรับหลักฐานการตรวจสอบ - แถว DRBG เป็นการทดสอบสุขภาพแบบต่อเนื่อง (ความยาวการสุ่มบวกกับการสุ่มต่อเนื่องที่แตกต่างกัน) ไม่ใช่การทดสอบ known-answer ภาระ known-answer ของ DRBG ถูกมอบหมายให้ผู้ให้บริการที่ผ่านการตรวจรับรอง FIPS ซึ่งผู้ดำเนินการจัดหามาเป็นพื้นฐาน
- สถานะข้อผิดพลาดติดค้างทั้งโปรเซส รายงาน
ERRORครั้งแรกที่FipsBootGuardใดสังเกตเห็นจะทำให้ทั้งโปรเซสติดค้าง ตัวป้องกันหรืออินสแตนซ์นโยบายใหม่ไม่สามารถลบล้างข้อผิดพลาดได้ และการรันซ้ำที่ผ่านในภายหลังก็ไม่ล้างมัน มีเพียงการรีสตาร์ทโปรเซส (การเปิดเครื่องใหม่จริงๆ) เท่านั้นที่รีเซ็ตสถานะ FipsCryptoPolicyทำการ implementNextPDF\Contracts\CryptoPolicyInterfaceและNextPDF\Contracts\PreOperationalSelfTestInterfaceเมื่อกำหนดค่าเป็นนโยบายการเข้ารหัสของ Core ตะเข็บการบังคับใช้ของ Core จะขับเคลื่อนassertPreOperational()ก่อนที่ลายเซ็นหรือไซเฟอร์เท็กซ์แรกจะถูกสร้างขึ้นFipsSignatureEnforcerควบคุมเฉพาะเส้นทางการสร้าง การตรวจสอบลายเซ็นที่ถูกสร้างขึ้นแล้วเป็นการใช้งานแบบเดิมภายใต้ SP 800-131A Rev.2 และไม่เคยผ่านตัวบังคับใช้- เมื่อมีการต่อ audit logger ไว้ ทุกขอบเขต assert จะปล่อยบันทึก ALLOW (INFO) หรือ DENY (WARNING) หนึ่งรายการก่อนการโยนการละเมิดนโยบายใดๆ ดังนั้นการปฏิเสธด้วย
FipsViolationExceptionทุกครั้งจึงมีหลักฐานในร่องรอย เกต boot-guard ทำงานก่อน ดังนั้นการปฏิเสธในสถานะข้อผิดพลาดจึงถูกยกขึ้นก่อนบันทึกการตรวจสอบFipsAuditLoggerอ้างอิงนโยบายเดียวกับที่ตัวป้องกันบังคับใช้ ดังนั้นการตัดสินใจที่บันทึกไว้จึงไม่สามารถแตกต่างจากที่บังคับใช้จริง
กรณีขอบและโหมดความล้มเหลว
หัวข้อที่มีชื่อว่า “กรณีขอบและโหมดความล้มเหลว”- ชนิดกุญแจที่ไม่รู้จักถูกปฏิเสธโดยทั้งสองชั้น: นโยบายคืนค่า
falseและแคตตาล็อกถือว่าไม่อนุญาต - ตัวระบุอัลกอริทึมการลงนามที่ตัวบังคับใช้ไม่สามารถแมปเป็น signature OID ได้จะถูกปฏิเสธแบบ fail-closed ด้วย
FipsViolationException - ทุกวาเรียนต์ของ
RSASSA-PSSใช้ OID1.2.840.113549.1.1.10ร่วมกัน ดังนั้น OID เพียงอย่างเดียวจึงไม่สามารถพิสูจน์ digest ได้ ตัวบังคับใช้ผูก digest ที่มีผลอย่างชัดเจนและปฏิเสธ PSS token ใดๆ ที่ digest ไม่ใช่ SHA-256/384/512 - ใบรับรองที่ไม่สามารถแยกวิเคราะห์ได้ หรือที่ไม่ทราบความยาวบิตของกุญแจสาธารณะ จะถูกปฏิเสธเป็น
key:unprovable - บนรันไทม์ที่ไม่มี asymmetric primitives ของ OpenSSL การทดสอบความสอดคล้องแบบคู่ของ ECDSA จะบันทึกความล้มเหลว ไม่ใช่การข้าม และโมดูลจะเข้าสู่
ERROR - การสุ่ม 32 ไบต์ต่อเนื่องกันสองครั้งที่เหมือนกันจะทำให้การตรวจสุขภาพ DRBG ล้มเหลว (การตรวจจับเอาต์พุตที่ค้าง) และบังคับให้เป็น
ERROR FipsModeGuardที่ถูกสร้างขึ้นโดยไม่มี boot guard จะทำเพียงการตรวจสอบนโยบายและไม่มีเกตทดสอบตนเอง การประกอบสำหรับโปรดักชันจะผ่านFipsBootstrapซึ่งต่อเกตไว้เสมอ- ชื่อแฮชและ cipher ถูกเปรียบเทียบแบบตัวพิมพ์เล็ก; signature OID จับคู่แบบตรงตัวโดยไม่มีการนอร์มัลไลซ์
- หลังจาก
FipsBootstrap::lazy()โมดูลจะคงสถานะPRE_OPERATIONALจนกว่าขอบเขต assert แรกจะรันชุดทดสอบPRE_OPERATIONALถูกถือว่าไม่พร้อมทำงานในเวลาที่ยืนยัน
พฤติกรรมโหมด FIPS
หัวข้อที่มีชื่อว่า “พฤติกรรมโหมด FIPS”โมดูลนี้คือพื้นผิวโหมด FIPS โดยตัวมันเอง ในขณะที่โมดูลอยู่ในสถานะข้อผิดพลาด และในขณะที่การทดสอบตนเองก่อนการทำงานกำลังรัน เอาต์พุตการเข้ารหัสจะถูกยับยั้ง: ทุกขอบเขต assert จะโยน FipsModuleErrorStateException ก่อนที่ลายเซ็นหรือไซเฟอร์เท็กซ์ใดจะถูกสร้างขึ้น (ISO/IEC 19790:2025 §7.3.3 b), AS03.07) FipsBootGuard::status() และ FipsBootstrap::selfTestReport() เปิดเผยสถานะเพื่อให้ผู้ดำเนินการสามารถระบุได้ว่าโมดูลเข้าสู่สถานะข้อผิดพลาด (ISO/IEC 19790:2025 §7.10.3) พฤติกรรมเหล่านี้เป็นการอ้างความสามารถเกี่ยวกับโค้ดของ NextPDF ไม่ใช่การอ้างการตรวจรับรอง: ขอบเขตโมดูลที่ FIPS 140 ตรวจรับรองคือผู้ให้บริการการเข้ารหัสที่ผู้ดำเนินการจัดหา ไม่ใช่ NextPDF
การปฏิบัติตามมาตรฐาน
หัวข้อที่มีชื่อว่า “การปฏิบัติตามมาตรฐาน”| ข้ออ้าง | มาตรฐาน | ข้อกำหนด |
|---|---|---|
| FIPS 140-3 อ้างอิงจาก ISO/IEC 19790 และ ISO/IEC 24759; หน้านี้จึงอ้างข้อกำหนดของ ISO/IEC 19790 | FIPS 140-3 | Introduction (fips_140_3#x26.x2) |
| เอาต์พุตถูกยับยั้งในสถานะข้อผิดพลาดและระหว่างการทดสอบตนเองก่อนการทำงาน | ISO/IEC 19790:2025 | §7.3.3 b) [AS03.07] |
| การทดสอบ known-answer เปรียบเทียบผลลัพธ์ที่คำนวณได้กับเอาต์พุตที่คาดหวังที่ทราบ; ชุดทดสอบนำรูปแบบนี้ไปใช้ | ISO/IEC 19790:2025 | §7.10.4 |
| ผู้ดำเนินการสามารถระบุสถานะข้อผิดพลาดได้ผ่านเอาต์พุตสถานะ | ISO/IEC 19790:2025 | §7.10.3 [AS10.10] |
ผู้ดำเนินการสามารถเริ่มการทดสอบตนเองตามคำขอสำหรับการทดสอบตามระยะ; rerun() และ selfTestReport() ให้ความสามารถนี้ | ISO/IEC 19790:2025 | §7.10.5 [AS10.54] |
| SHA-1 ไม่ได้รับอนุญาตสำหรับการสร้างลายเซ็นดิจิทัลใหม่; แคตตาล็อกการปฏิเสธจะปฏิเสธมัน | NIST SP 800-131A Rev.2 | §9 |
| การสร้างลายเซ็นที่มีความแข็งแรงต่ำกว่า 112 บิต (RSA < 2048, ลำดับ ECDSA < 224) ไม่ได้รับอนุญาต; ขั้นต่ำของกุญแจบังคับใช้เรื่องนี้ | NIST SP 800-131A Rev.2 | §3 Table 2 |
| การตรวจสอบลายเซ็น SHA-1 ที่ถูกสร้างขึ้นแล้วเป็นการใช้งานแบบเดิม; มันไม่ผ่านเกตการสร้าง | NIST SP 800-131A Rev.2 | Change summary (9.x4.p12) |
ข้อกำหนดทั้งหมดถูกถอดความ; ไม่มีการนำข้อความเชิงบรรทัดฐานมาแสดงซ้ำ NextPDF ไม่ได้อ้างการรับรอง FIPS 140 โมดูลปรับพฤติกรรมให้สอดคล้องกับข้อกำหนดที่อ้างถึงในฐานะความสามารถช่วยเหลือการปฏิบัติตาม การที่การดีพลอยจะปฏิบัติตาม FIPS หรือไม่นั้นขึ้นอยู่กับผู้ให้บริการที่ผ่านการตรวจรับรอง, นิยามขอบเขตโมดูล และโปรแกรมการปฏิบัติตามของผู้ดำเนินการ — ไม่ใช่ NextPDF เพียงลำพัง
หมายเหตุการพัฒนา
หัวข้อที่มีชื่อว่า “หมายเหตุการพัฒนา”- การทดสอบความล้มเหลวแบบกำหนดผลได้จะฉีดผู้ให้บริการที่เสียหายผ่านคอนสตรัคเตอร์ของ
FipsSelfTestหรือผ่านพารามิเตอร์$selfTestบนFipsCryptoPolicy::strict(),standard()และเมธอดของFipsBootstrap - ตัวล็อกข้อผิดพลาดที่ติดค้างทั้งโปรเซสมีฮุครีเซ็ตภายในสำหรับการทดสอบเท่านั้น มันไม่ได้เป็นส่วนหนึ่งของ API ที่รองรับ และโค้ดโปรดักชันต้องไม่เรียกใช้มัน
- โปรเซส PHP worker แต่ละตัวจะรันชุดทดสอบเมื่อเปิดเครื่องของตัวเอง รายงานถูกแคชต่ออินสแตนซ์ ดังนั้นการยืนยันบนเส้นทางร้อนจึงเป็นการตรวจสอบสถานะแบบเวลาคงที่
- อย่าจับ
FipsModuleErrorStateExceptionแล้วดำเนินการต่อ ข้อยกเว้นนี้หมายความว่าโมดูลปฏิเสธบริการการเข้ารหัส; การตอบสนองที่ถูกต้องคือหยุดและรีสตาร์ทโปรเซสหลังจากแก้ไข FipsBootstrap::selfTestReport()รองรับความต้องการทดสอบตนเองตามคำขอและตามระยะ เช่น health endpoints การรันตามคำขอที่ผ่านไม่เคยล้างข้อผิดพลาดที่ติดค้าง
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- นโยบายการเข้ารหัสและการทดสอบตนเอง FIPS 140-2/3 — หน้าความสามารถพร้อมการตั้งค่าและตัวอย่าง
- ความปลอดภัย — ข้อมูลอ้างอิงเชิงลึก — การควบคุมความปลอดภัยของ Enterprise แบบรวม
- ลายเซ็น — ข้อมูลอ้างอิงเชิงลึก — ตัวสร้าง PAdES ระยะยาวและหมายเหตุโหมด FIPS ของมัน
- ความปลอดภัย — NextPDF Core — พื้นผิวการเข้ารหัสและการลงนามของ Core ที่นโยบายผูกไว้
ขอบเขตการเผยแพร่
หัวข้อที่มีชื่อว่า “ขอบเขตการเผยแพร่”หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว API สาธารณะที่รองรับเท่านั้น เส้นทาง namespace ภายใน, คลาสตัวช่วย, ตารางกลไก, ชื่อไฟล์ runbook และคำนำหน้าตั๋วอยู่นอกขอบเขต