นโยบายการเข้ารหัสลับและการทดสอบตนเองสำหรับ FIPS 140-2/3
ภาพรวมโดยย่อ
หัวข้อที่มีชื่อว่า “ภาพรวมโดยย่อ”NextPDF Enterprise จำกัดตัวเลือกการเข้ารหัสลับที่การลงนามหรือการเข้ารหัสลับเลือกใช้ได้ให้เหลือเฉพาะชุดที่ได้รับอนุมัติตาม Federal Information Processing Standards (FIPS) และปฏิเสธตัวเลือกใดๆที่อยู่นอกชุดดังกล่าว ตัวป้องกันขณะรันไทม์ (runtime guard) จะตรวจสอบ hash แต่ละรายการ ตัวระบุอัลกอริทึมลายเซ็น อัลกอริทึมการเข้ารหัสลับ และความแข็งแรงของคีย์ก่อนให้การดำเนินการทำงาน ชุดการทดสอบตนเองตอนเปิดเครื่อง (power-on self-test) จะทำงานหนึ่งครั้งเมื่อโพรเซสเริ่มต้น หากการทดสอบแบบทราบคำตอบ (known-answer test) ใดๆล้มเหลว โมดูลจะเข้าสู่สถานะข้อผิดพลาด หน้านี้อธิบายพฤติกรรมดังกล่าว ได้แก่ สิ่งที่นโยบายอนุญาต สิ่งที่ตัวป้องกันปฏิเสธ สิ่งที่การทดสอบตนเองครอบคลุม และจุดยืนเรื่องการรับรองอย่างชัดเจน
NextPDF Enterprise ช่วยสนับสนุนการปฏิบัติตามข้อกำหนด แต่ไม่ใช่โมดูลการเข้ารหัสลับที่ได้รับการรับรอง ดู ความปลอดภัยและการปฏิบัติตามข้อกำหนด สำหรับจุดยืนเรื่องการไม่ได้รับการรับรองอย่างชัดเจน
ส่วนหัว (front matter) แสดงรายการข้อกำหนดเบื้องต้น และ ข้อกำหนดเบื้องต้น แสดงรายการเดียวกันซ้ำอีกครั้ง
รุ่นและการให้สิทธิ์การใช้งาน
หัวข้อที่มีชื่อว่า “รุ่นและการให้สิทธิ์การใช้งาน”โปรไฟล์นโยบายการเข้ารหัสลับในโหมด FIPS ตัวป้องกันขณะรันไทม์ และตัวป้องกันการทดสอบตนเองตอนเปิดเครื่อง มาพร้อมกับแพ็กเกจ nextpdf/enterprise และต้องใช้แฟล็กฟีเจอร์ใบอนุญาต enterprise NextPDF Core และ NextPDF Pro ไม่มีโปรไฟล์โหมด FIPS ตัวป้องกันและการทดสอบตนเองทำงานภายในโพรเซส การตรวจสอบนโยบายและการทดสอบตนเองไม่ส่งเนื้อหาเอกสารออกไปนอกโฮสต์ เปรียบเทียบรุ่นต่างๆ
ความสามารถนี้ทำอะไร
หัวข้อที่มีชื่อว่า “ความสามารถนี้ทำอะไร”ความสามารถนี้ประกอบด้วยสามส่วน ได้แก่ นโยบายการเข้ารหัสลับ ตัวป้องกันขณะรันไทม์ และการทดสอบตนเองตอนเปิดเครื่อง
นโยบายการเข้ารหัสลับ จำกัดทางเลือกการเข้ารหัสลับให้อยู่เฉพาะชุดที่ได้รับอนุมัติ โดยมีพรีเซ็ตสองแบบ:
- Strict (สอดคล้องกับรุ่น FIPS 140-3) — hash แบบ SHA-256, SHA-384 และ SHA-512 ตัวระบุออบเจกต์ลายเซ็น (OID) ของ RSA และ ECDSA ที่ใช้ hash เหล่านั้น การเข้ารหัสลับแบบ AES-256-CBC และขนาดคีย์ขั้นต่ำของ RSA 2048 และ elliptic-curve 256
- Standard (สอดคล้องกับรุ่น FIPS 140-2) — เหมือนกับ strict และยังอนุญาต AES-128-CBC เพื่อความสามารถในการทำงานร่วมกันกับระบบรุ่นเก่า
สำหรับการสร้างลายเซ็น NIST SP 800-131A Rev.2 §3 ยอมรับคีย์ RSA ขนาดอย่างน้อย 2048 บิต และ order ของ ECDSA ขนาดอย่างน้อย 224 บิต ส่วนค่าขั้นต่ำ 2048/256 ของพรีเซ็ต strict เทียบเท่าหรือสูงกว่าค่าขั้นต่ำดังกล่าว นโยบายปฏิเสธชนิดคีย์ที่ไม่รู้จักโดยค่าเริ่มต้น — ไม่ยอมรับชนิดที่ไม่รู้จักอย่างเงียบๆ
ตัวป้องกันขณะรันไทม์ ห่อหุ้มนโยบายไว้และเปิดเมท็อดแบบ assert สำหรับ hash, signature OID, อัลกอริทึมการเข้ารหัสลับ และความแข็งแรงของคีย์ เมื่อมีตัวเลือกที่ไม่ได้รับอนุญาต ตัวป้องกันจะยกข้อยกเว้นการละเมิดแบบมีชนิด (typed violation) ที่ระบุชื่อนโยบายและรายการที่ละเมิด แล้วหยุดการดำเนินการ เส้นทางนี้ล้มเหลวแบบปิด นโยบายไม่ผ่อนปรนตัวเองและไม่แทนที่ด้วยอัลกอริทึมที่อ่อนแอกว่า สำหรับลายเซ็น RSASSA-PSS เกตการสร้างจะผูก message digest ไว้อย่างชัดเจน PSS ทุกรูปแบบใช้ signature OID เดียวกันร่วมกัน hash อยู่ในพารามิเตอร์ของ PSS ไม่ได้อยู่ใน OID รายการที่อนุญาต (allowlist) ของ OID เพียงอย่างเดียวไม่สามารถพิสูจน์ digest ที่ใช้งานจริงได้ ดังนั้นเกตจึงยืนยันว่า digest นั้นได้รับอนุมัติตาม FIPS (SHA-256/384/512) เกตจะปฏิเสธแบบล้มเหลวแบบปิดสำหรับโทเค็น PSS ใดๆที่ digest ไม่รู้จักหรือไม่ได้รับอนุมัติ เช่น SHA-1 PSS ก่อนส่งต่อให้ผู้ลงนามใดๆ (FIPS 186-5 §5.4(b))
การทดสอบตนเองตอนเปิดเครื่อง จะรันชุดการทดสอบแบบทราบคำตอบ (known-answer-test หรือ KAT) หนึ่งครั้งเมื่อโพรเซสเริ่มต้น ชุดการทดสอบครอบคลุมฟังก์ชันที่ได้รับอนุมัติ ได้แก่ hash, message-authentication, การเข้ารหัสลับ, authenticated-encryption, ลายเซ็น และ random-bit ภายใต้ ISO/IEC 19790:2025 §7.10.4.2 การทดสอบแบบทราบคำตอบจะล้มเหลวเมื่อผลลัพธ์ที่คำนวณได้ไม่เท่ากับคำตอบที่ทราบ เมื่อเกิดความล้มเหลวใดๆ โมดูลจะเข้าสู่สถานะข้อผิดพลาดและปฏิเสธบริการการเข้ารหัสลับ (ISO/IEC 19790:2025 §7.2.4.3) สถานะข้อผิดพลาดนี้ติดค้างอยู่กับโพรเซส (process-sticky) หลังจากตัวป้องกันตอนบูตใดๆในโพรเซสตรวจพบข้อผิดพลาด ทั้งโพรเซสจะยังคงล้มเหลวแบบปิดไปตลอดอายุการทำงาน การสร้างตัวป้องกันตอนบูตหรือนโยบายขึ้นใหม่ไม่สามารถล้างสถานะนี้ได้ การรันการทดสอบตนเองซ้ำที่ ผ่าน ในภายหลังจะไม่ ล้างข้อผิดพลาดที่ถูกล็อกไว้ — มีเพียงการรีสตาร์ตโพรเซส (การปิดเปิดเครื่องจริง) เท่านั้นที่ทำได้ ตาม ISO/IEC 19790:2025 §7.10.2 ผลลัพธ์จะถูกแคชไว้ตลอดอายุของโพรเซส คุณสามารถรันซ้ำตามต้องการสำหรับ endpoint ของผู้ดูแลระบบหรือคำสั่งหนึ่งได้ แต่การรันซ้ำนี้ทำหน้าที่ตามภาระผูกพันการทดสอบตนเองตามรอบเวลา ไม่ใช่การกู้คืนจากข้อผิดพลาด
นโยบายกำหนดให้ต้องใช้ initialization vector (IV) ที่ไม่ซ้ำกันต่อคีย์หนึ่งรายการสำหรับการใช้งาน authenticated-encryption ตาม NIST SP 800-38D §5.2.1
ข้อกำหนดเบื้องต้น
หัวข้อที่มีชื่อว่า “ข้อกำหนดเบื้องต้น”- ติดตั้ง NextPDF Core และแพ็กเกจ Enterprise และคงใบอนุญาต Enterprise ที่ยังใช้งานได้ไว้
- หากต้องการกล่าวอ้างการทำงานที่เข้ากันได้กับ FIPS ให้กำหนดค่า NextPDF ด้วยผู้ให้บริการด้านการเข้ารหัสลับที่ได้รับการตรวจรับรองตาม FIPS — ตัวอย่างเช่นผู้ให้บริการ OpenSSL ที่ได้รับการตรวจรับรองตาม FIPS — หรือ hardware security module (HSM) ที่ได้รับการตรวจรับรองตาม FIPS NextPDF Enterprise ดำเนินการประกอบโครงสร้าง การคำนวณ digest และการบังคับใช้นโยบาย ส่วนพรีมิทีฟพื้นฐานทำงานอยู่ในขอบเขตที่ได้รับการตรวจรับรองซึ่งคุณจัดเตรียมไว้
- เลือกพรีเซ็ต: strict สำหรับการบังคับใช้ที่สอดคล้องกับ FIPS 140-3 หรือ standard เมื่อจำเป็นต้องมีความสามารถในการทำงานร่วมกันกับ AES-128-CBC
การกำหนดค่า
หัวข้อที่มีชื่อว่า “การกำหนดค่า”- พรีเซ็ต — เลือก strict หรือ standard โดย strict อนุญาตเฉพาะ AES-256-CBC ส่วน standard อนุญาต AES-128-CBC ด้วย
- ตัวป้องกัน — สร้างตัวป้องกันด้วยนโยบายที่เลือกไว้ ใช้ตัวป้องกันเป็นขอบเขตที่คุณยืนยันแต่ละทางเลือกการเข้ารหัสลับ
- การเชื่อมต่อการทดสอบตนเอง — เชื่อมต่อตัวป้องกันตอนบูตที่ขั้นบูตสแตรปของแอปพลิเคชัน เพื่อให้โพรเซสเวิร์กเกอร์แต่ละรายการรันรอบการทดสอบตนเองของตนเอง อินสแตนซ์ของโพรเซสแต่ละรายการรันการทดสอบตนเองตอนเปิดเครื่องของตนเอง
ทีละขั้นตอน
หัวข้อที่มีชื่อว่า “ทีละขั้นตอน”- ที่ขั้นบูตสแตรปของแอปพลิเคชัน ให้รันการทดสอบตนเองตอนเปิดเครื่องผ่านตัวป้องกันตอนบูต และยืนยันว่าโมดูลทำงานได้ หากโมดูลทำงานไม่ได้ ให้หยุดโพรเซส
- สร้างตัวป้องกันด้วยนโยบาย strict หรือ standard
- ก่อนการดำเนินการเข้ารหัสลับแต่ละครั้ง ให้ยืนยัน hash, signature OID, อัลกอริทึมการเข้ารหัสลับ และความแข็งแรงของคีย์ผ่านตัวป้องกัน
- ดักจับข้อยกเว้นการละเมิดแบบมีชนิด บันทึกข้อความเชิงโครงสร้าง และปฏิเสธการดำเนินการ อย่าถอยกลับไปใช้ตัวเลือกที่อ่อนแอกว่า
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\Fips\FipsBootGuard;use NextPDF\Enterprise\Security\Fips\FipsCryptoPolicy;use NextPDF\Enterprise\Security\Fips\FipsModeGuard;use NextPDF\Enterprise\Security\Fips\FipsSelfTest;use NextPDF\Enterprise\Security\Fips\FipsModuleErrorStateException;use Psr\Log\LoggerInterface;
/** * Run the power-on self-test, then build a guard on the strict policy. * * The self-test runs once per process. A known-answer failure raises a * module-error-state exception; the caller must stop rather than proceed * with an unverified crypto path. * * @param LoggerInterface $logger Structural diagnostics only — never secrets. * * @throws FipsModuleErrorStateException When a power-on known-answer test fails. * * @return FipsModeGuard A guard ready to assert each cryptographic choice. */function bootFipsGuard(LoggerInterface $logger): FipsModeGuard{ $bootGuard = new FipsBootGuard(new FipsSelfTest());
try { $bootGuard->assertOperational(); } catch (FipsModuleErrorStateException $e) { $logger->critical('FIPS power-on self-test failed; refusing crypto services.', [ 'reason' => $e->getMessage(), ]);
throw $e; }
return new FipsModeGuard(FipsCryptoPolicy::strict());}<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\Fips\FipsModeGuard;use NextPDF\Enterprise\Security\Fips\FipsViolationException;use Psr\Log\LoggerInterface;
final readonly class FipsCheckedSigning{ public function __construct( private FipsModeGuard $guard, private LoggerInterface $logger, ) {}
/** * Assert the signing choices against the active policy before signing. * * A disallowed hash, signature OID, or key strength raises a typed * violation; the operation is refused rather than downgraded. * * @param string $hash The hash algorithm name (e.g. 'sha256'). * @param string $signatureOid The signature algorithm OID. * @param string $keyType The key type (e.g. 'rsa', 'ec'). * @param positive-int $keyBits The key length in bits. * * @throws FipsViolationException When any choice is not approved. */ public function assertApproved( string $hash, string $signatureOid, string $keyType, int $keyBits, ): void { try { $this->guard->assertHashAllowed($hash); $this->guard->assertSignatureAlgorithmAllowed($signatureOid); $this->guard->assertKeyStrengthAllowed($keyType, $keyBits); } catch (FipsViolationException $e) { $this->logger->error('FIPS policy violation', ['reason' => $e->getMessage()]);
throw $e; } }}การตรวจสอบยืนยัน
หัวข้อที่มีชื่อว่า “การตรวจสอบยืนยัน”- รันการทดสอบตนเองตอนเปิดเครื่อง และยืนยันว่ารายงานสถานะว่าทำงานได้ ยืนยันว่าการทดสอบครอบคลุมคลาสอัลกอริทึมที่ได้รับอนุมัติทุกคลาส — hash, message-authentication, การเข้ารหัสลับ, authenticated-encryption, ลายเซ็น และ random-bit
- ยืนยันตัวเลือกที่ได้รับอนุมัติ ตัวอย่างเช่น SHA-256, RSA 2048 และยืนยันว่าผ่าน ยืนยันตัวเลือกที่ไม่ได้รับอนุญาต ตัวอย่างเช่น SHA-1, RSA 1024 และยืนยันว่ายกข้อยกเว้นการละเมิดแบบมีชนิด
- ฉีด hash หรือแหล่งสุ่มที่จงใจให้เสียหายเข้าไปในการทดสอบตนเอง และยืนยันว่าโมดูลเข้าสู่สถานะข้อผิดพลาดและปฏิเสธบริการ
- ยืนยันว่าชนิดคีย์ที่ไม่รู้จักถูกปฏิเสธโดยค่าเริ่มต้น แทนที่จะได้รับการยอมรับ
ความปลอดภัยและการปฏิบัติตามข้อกำหนด
หัวข้อที่มีชื่อว่า “ความปลอดภัยและการปฏิบัติตามข้อกำหนด”- ล้มเหลวแบบปิด เมื่อตัวเลือกการเข้ารหัสลับหนึ่งไม่ได้รับอนุญาต ตัวป้องกันจะยกข้อยกเว้นการละเมิดแบบมีชนิดและหยุดการดำเนินการ นโยบายไม่ผ่อนปรนตัวเองและไม่แทนที่ด้วยอัลกอริทึมที่อ่อนแอกว่า
- การทดสอบตนเองปฏิเสธเมื่อไม่ตรงกัน ความล้มเหลวของการทดสอบแบบทราบคำตอบทำให้โมดูลเข้าสู่สถานะข้อผิดพลาดที่ติดค้างอยู่กับโพรเซส ทั้งโพรเซสจะยังคงล้มเหลวแบบปิด ตัวป้องกันตอนบูตหรือนโยบายที่สร้างขึ้นใหม่ไม่สามารถกู้คืนได้ และการรันซ้ำที่ผ่านก็ไม่ปลดล็อกที่ถูกล็อกไว้ มีเพียงการรีสตาร์ตโพรเซสเท่านั้นที่ล้างสถานะนี้ได้ (ISO/IEC 19790:2025 §7.10.4.2; §7.10.2)
- ความแข็งแรงของคีย์ พรีเซ็ต strict บังคับใช้ค่าขั้นต่ำ RSA 2048 และ elliptic-curve 256 ซึ่งเทียบเท่าหรือสูงกว่าค่าขั้นต่ำที่ยอมรับได้ใน NIST SP 800-131A Rev.2 §3
- ความไม่ซ้ำของ IV การใช้งาน authenticated-encryption กำหนดให้ต้องใช้ IV ที่ไม่ซ้ำกันต่อคีย์หนึ่งรายการ (NIST SP 800-38D §5.2.1)
หน้านี้ถูกทำเครื่องหมายว่า export_control_class: legal-review-required เนื่องจากเกี่ยวข้องกับนโยบายการเข้ารหัสลับ แหล่งอ้างอิงเชิงบรรทัดฐาน (normative) ทุกแหล่งถูกถอดความใหม่ ไม่มีการคัดลอกข้อความเชิงบรรทัดฐานมาแสดงซ้ำ ต้องได้รับการอนุมัติทางกฎหมายก่อนที่แฟล็ก publish จะถูกตั้งค่า
NextPDF Enterprise ไม่ใช่โมดูลการเข้ารหัสลับที่ได้รับการตรวจรับรองตาม FIPS และไม่ได้กล่าวอ้างการรับรองตาม FIPS ใดๆ โมดูลนี้ทำงานในโหมดที่เข้ากันได้กับ FIPS ก็ต่อเมื่อคุณกำหนดค่าด้วยผู้ให้บริการด้านการเข้ารหัสลับที่ได้รับการตรวจรับรองตาม FIPS — ตัวอย่างเช่นผู้ให้บริการ OpenSSL ที่ได้รับการตรวจรับรองตาม FIPS — หรือ hardware security module (HSM) ที่ได้รับการตรวจรับรองตาม FIPS เท่านั้น นโยบายโหมด FIPS ช่วยสนับสนุนการปฏิบัติตามข้อกำหนด แต่ไม่ใช่การรับรองและไม่ใช่ความเห็นทางกฎหมาย โปรดปรึกษาที่ปรึกษาด้านการปฏิบัติตามข้อกำหนดและด้านกฎหมายของคุณเองเกี่ยวกับภาระผูกพันตามกฎระเบียบของคุณ
การจัดการความล้มเหลว
หัวข้อที่มีชื่อว่า “การจัดการความล้มเหลว”- ความล้มเหลวของการทดสอบตนเองตอนบูต ตัวป้องกันตอนบูตจะยกข้อยกเว้นสถานะข้อผิดพลาดของโมดูล ให้หยุดโพรเซส อย่าดำเนินการต่อด้วยเส้นทางการเข้ารหัสลับที่ยังไม่ได้รับการตรวจสอบยืนยัน
- การละเมิดนโยบาย ตัวป้องกันจะยกข้อยกเว้นการละเมิดแบบมีชนิดที่ระบุชื่อนโยบายและรายการที่ละเมิด ปฏิเสธการดำเนินการ อย่าลดระดับ
- ชนิดคีย์ที่ไม่รู้จัก นโยบายปฏิเสธชนิดคีย์นี้โดยค่าเริ่มต้น แมปชนิดคีย์อย่างชัดเจนก็ต่อเมื่อชนิดคีย์นั้นได้รับอนุมัติจริงเท่านั้น
- การรันการทดสอบตนเองซ้ำ การรันซ้ำพร้อมใช้งานตามต้องการสำหรับ endpoint ของผู้ดูแลระบบหรือคำสั่งหนึ่ง โดยทำหน้าที่ตามภาระผูกพันการทดสอบตนเองตามรอบเวลาแบบตามต้องการ การรันซ้ำไม่ใช่กลไกการกู้คืน การรันซ้ำที่ล้มเหลวก็ล็อกโพรเซสด้วยเช่นกัน และการรันซ้ำที่ผ่านก็ไม่ปลดล็อกสถานะที่มีอยู่ การกู้คืนโมดูลที่อยู่ในสถานะข้อผิดพลาดต้องอาศัยการรีสตาร์ตโพรเซส
บริบทเชิงพาณิชย์
หัวข้อที่มีชื่อว่า “บริบทเชิงพาณิชย์”NextPDF Core มาพร้อมตัวลงนามแบบซอฟต์แวร์และการเข้ารหัสลับโดยไม่มีโปรไฟล์โหมด FIPS NextPDF Enterprise เพิ่มโปรไฟล์นโยบายการเข้ารหัสลับในโหมด FIPS ตัวป้องกันขณะรันไทม์ และตัวป้องกันการทดสอบตนเองตอนเปิดเครื่อง เพื่อให้คุณจำกัดตัวเลือกการเข้ารหัสลับให้อยู่เฉพาะชุดที่ได้รับอนุมัติและล้มเหลวแบบปิดเมื่อการทดสอบตนเองไม่ตรงกันได้ จับคู่กับ การลงนามด้วย HSM เพื่อรันพรีมิทีฟภายในอุปกรณ์ที่ได้รับการตรวจรับรองตาม FIPS เปรียบเทียบรุ่นต่างๆ
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- ความปลอดภัย — NextPDF Enterprise — ชุดการควบคุมความปลอดภัยของ Enterprise ที่ทำงานร่วมกัน
- การลงนามด้วย HSM — NextPDF Enterprise — การเก็บรักษาคีย์ในฮาร์ดแวร์ตาม Public-Key Cryptography Standards #11 (PKCS#11)
- ลายเซ็น — NextPDF Enterprise — ตัวสร้างลายเซ็นแบบระยะยาว PDF Advanced Electronic Signatures (PAdES) B-LT และ B-LTA
- ความปลอดภัย — NextPDF Core — พื้นผิวการเข้ารหัสลับและลายเซ็นหลัก
- โหมด FIPS · KAT · authenticated encryption (AEAD) — คำศัพท์ในอภิธานศัพท์