การแมประดับพื้นฐาน PAdES
ภาพรวมโดยสังเขป
หัวข้อที่มีชื่อว่า “ภาพรวมโดยสังเขป”PDF Advanced Electronic Signatures (PAdES) คือกลุ่มโปรไฟล์ที่กำหนดเป็นมาตรฐานใน ETSI EN 319 142 มาตรฐานนี้กำหนดระดับความสอดคล้องพื้นฐานสี่ระดับ ได้แก่ B-B, B-T, B-LT และ B-LTA โดยระดับที่สูงขึ้นแต่ละระดับจะเพิ่มเนื้อหาทับบนระดับที่ต่ำกว่า หน้านี้แมประดับเหล่านั้นกับสิ่งที่ NextPDF สร้างขึ้น พร้อมแยกขอบเขตการทำงานของ Core ออกจากรุ่น Pro และ Enterprise การแมปนี้อิงตามพฤติกรรม โดยอธิบายสิ่งที่เอนจินสร้างออกมา ไม่ใช่คลาสภายใน
กล่าวโดยสรุป NextPDF Core สร้างโครงสร้างลายเซ็นที่สอดคล้องกับ B-B และ B-T ส่วนเส้นทางการสร้าง B-LT และ B-LTA มาพร้อมในรุ่น Pro และ Enterprise การที่ลายเซ็นที่สร้างขึ้นจะได้รับการยอมรับว่าสอดคล้องกับระดับใดระดับหนึ่งหรือไม่นั้นขึ้นอยู่กับตัวตรวจสอบและจุดยึดความเชื่อถือ (trust anchor) ที่ตั้งค่าไว้ ผู้สร้างไม่สามารถยืนยันความสอดคล้องแทนตัวตรวจสอบได้
การติดตั้ง
หัวข้อที่มีชื่อว่า “การติดตั้ง”composer require nextpdf/core:^3ภาพรวมเชิงแนวคิด
หัวข้อที่มีชื่อว่า “ภาพรวมเชิงแนวคิด”ลายเซ็นดิจิทัลของ PDF คือโครงสร้าง Cryptographic Message Syntax (CMS) SignedData ที่จัดเก็บไว้ในรายการ Contents ของดิกชันนารีลายเซ็น อาร์เรย์ ByteRange ระบุช่วงไบต์ที่ไดเจสต์ครอบคลุม — ISO 32000-2 §12.8.1 ส่วน CMS SignerInfo บรรจุแอตทริบิวต์ที่ลงนาม รวมถึงแอตทริบิวต์ content-type และ message-digest — RFC 5652 §5.3 ไดเจสต์ข้อความเหนือแอตทริบิวต์เหล่านั้นคำนวณตามกระบวนการใน §5.4 PAdES ใช้โมเดลแอตทริบิวต์แบบ CMS Advanced Electronic Signatures (CAdES) ภายในดิกชันนารีลายเซ็นของ PDF
ระดับพื้นฐานทั้งสี่มีลักษณะเพิ่มสะสมต่อกัน:
- B-B บรรจุลายเซ็นพื้นฐานพร้อมแอตทริบิวต์ที่ลงนามซึ่งจำเป็นต้องมี
- B-T เพิ่มแอตทริบิวต์ไทม์สแตมป์ลายเซ็นที่คำนวณเหนือค่าลายเซ็น แอตทริบิวต์ไทม์สแตมป์พิสูจน์ว่าลายเซ็นมีอยู่แล้ว ณ เวลาที่ประทับ — ETSI PAdES §5.4.3 โดย Time-Stamping Authority ตาม RFC 3161 เป็นผู้สร้างโทเค็น — RFC 3161 §2.4.1
- B-LT เพิ่มข้อมูลสำหรับการตรวจสอบความถูกต้องระยะยาว ได้แก่ ใบรับรอง ข้อมูล Online Certificate Status Protocol (OCSP) และข้อมูลรายการเพิกถอนใบรับรอง (CRL) ซึ่งวางไว้ใน Document Security Store — ETSI PAdES §6.2.2, ISO 32000-2 §12.8.4.3 และตำแหน่งการวางข้อมูลตรวจสอบความถูกต้องที่อธิบายไว้ใน ETSI EN 319 142-2 §6.3
- B-LTA เพิ่มไทม์สแตมป์เอกสารแบบเก็บถาวร (archive document time-stamp) เพื่อคงความถูกต้องไว้ในระยะยาว — ETSI PAdES §6.2.2
ระดับทั้งสี่เพิ่มสะสมต่อกันอย่างเคร่งครัด โดยระดับที่สูงขึ้นแต่ละระดับจะคงทุกสิ่งที่ระดับต่ำกว่ามีอยู่ไว้ และเพิ่มชั้นเนื้อหาใหม่เพียงหนึ่งชั้น ป้ายกำกับการเปลี่ยนผ่านแสดงรุ่นผู้สร้างที่จัดส่งแต่ละขั้นตอน
พื้นผิว API
หัวข้อที่มีชื่อว่า “พื้นผิว API”ใช้ enum SignatureLevel เพื่อเลือกระดับ enum นี้กำหนดเคส PAdES_B_B, PAdES_B_T, PAdES_B_LT และ PAdES_B_LTA เมท็อด requiresTimestamp(), requiresDss(), requiresDocumentTimestamp() และ isAvailableInEnvironment() รายงานข้อกำหนดของแต่ละระดับ และบอกว่ารันไทม์ปัจจุบันสามารถตอบสนองข้อกำหนดเหล่านั้นได้หรือไม่ ในการแจกจ่ายแบบ Core นั้น isAvailableInEnvironment() คืนค่า true สำหรับ B-B และ B-T และคืนค่า false สำหรับ B-LT และ B-LTA โดยคืนค่า false สำหรับ B-LT และ B-LTA เนื่องจากผู้สร้างสำหรับการตรวจสอบความถูกต้องระยะยาวถูกแก้ไขปลายทาง (resolve) ขณะรันไทม์และไม่ได้เป็นส่วนหนึ่งของแพ็กเกจโอเพนซอร์ส โค้ดสำหรับใช้งานจริงควรใช้สัญญา (contract) SignerInterface แทนการอ้างอิงชนิดข้อมูลภายในเหล่านี้
ตารางการรองรับแต่ละระดับ
หัวข้อที่มีชื่อว่า “ตารางการรองรับแต่ละระดับ”| ระดับ | สิ่งที่เพิ่มเข้ามา | รุ่น Core (nextpdf/core) | รุ่น Pro / Enterprise |
|---|---|---|---|
| B-B | ลายเซ็นพื้นฐานพร้อมแอตทริบิวต์ที่ลงนามซึ่งจำเป็นต้องมี | สร้างโครงสร้างที่สอดคล้อง และทดสอบเทียบกับเกณฑ์มาตรฐาน (golden baseline) สังเคราะห์ | พื้นผิวเดียวกัน |
| B-T | ไทม์สแตมป์ลายเซ็นเหนือค่าลายเซ็น | สร้างโครงสร้างที่สอดคล้องเมื่อมีบริการไทม์สแตมป์ตาม RFC 3161 ให้ใช้งาน | พื้นผิวเดียวกัน |
| B-LT | ข้อมูลตรวจสอบความถูกต้องใน Document Security Store | ไม่ได้จัดส่งผู้สร้างใน Core การเลือก B-LT โดยไม่มีแพ็กเกจ Enterprise จะล้มเหลวแบบปิด (fail closed) | จัดส่งผู้สร้าง |
| B-LTA | ไทม์สแตมป์เอกสารแบบเก็บถาวร | ไม่ได้จัดส่งผู้สร้างใน Core ล้มเหลวแบบปิดเช่นเดียวกับข้างต้น | จัดส่งผู้สร้าง |
“สร้างโครงสร้างที่สอดคล้อง” หมายความว่า NextPDF สร้างลายเซ็นที่มีโครงสร้างเป็นไปตามข้อกำหนดที่อ้างถึง อาร์ทิแฟกต์ tests/Corpus/pades/ และ tests/Golden/baselines/ ของโปรเจกต์ใช้ทดสอบโครงสร้างดังกล่าว แต่ไม่ได้หมายความว่าตัวตรวจสอบภายนอกรับรองผลลัพธ์ที่ระดับนั้น ดูส่วนความสอดคล้อง
ตัวอย่างโค้ด — เริ่มต้นอย่างรวดเร็ว
หัวข้อที่มีชื่อว่า “ตัวอย่างโค้ด — เริ่มต้นอย่างรวดเร็ว”<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Contracts\SignerInterface;
/** * Sign a byte range with any SignerInterface implementation. * * @param SignerInterface $signer A Core or Premium signer. * @param string $byteRange The PDF byte range to sign. * * @return string Hex-encoded CMS SignedData for the PDF /Contents field. */function signByteRange(SignerInterface $signer, string $byteRange): string{ return $signer->sign($byteRange)->toHex();}ฟังก์ชันนี้ขึ้นอยู่กับสัญญา SignerInterface ไม่ใช่คลาสรูปธรรม ทั้งซอฟต์แวร์ผู้ลงนามของ Core (B-B หรือ B-T) และผู้ลงนามแบบ hardware security module (HSM) ของ Premium ต่างก็ทำตามสัญญานี้ได้ โค้ดฝั่งผู้เรียกจึงไม่เปลี่ยนแปลงเมื่อเปลี่ยนรุ่น
ตัวอย่างโค้ด — การใช้งานจริง
หัวข้อที่มีชื่อว่า “ตัวอย่างโค้ด — การใช้งานจริง”<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Security\Signature\SignatureLevel;
/** * Resolve the highest baseline level the current runtime can produce. * * B-B and B-T are produced by the Core distribution. B-LT and B-LTA * require the Enterprise long-term-validation package; without it the * level reports unavailable so callers fail closed rather than emit a * structure that does not carry the validation material the level names. * * @return SignatureLevel The highest level available in this runtime. */function highestAvailableLevel(): SignatureLevel{ foreach ([ SignatureLevel::PAdES_B_LTA, SignatureLevel::PAdES_B_LT, SignatureLevel::PAdES_B_T, SignatureLevel::PAdES_B_B, ] as $level) { if ($level->isAvailableInEnvironment()) { return $level; } }
return SignatureLevel::PAdES_B_B;}isAvailableInEnvironment() คืนค่า true สำหรับ B-B และ B-T โดยไม่ต้องมีแพ็กเกจเพิ่มเติม และคืนค่า true สำหรับ B-LT และ B-LTA เฉพาะเมื่อติดตั้งแพ็กเกจการตรวจสอบความถูกต้องระยะยาวของ Enterprise แล้วเท่านั้น หากคุณเลือกระดับที่ไม่พร้อมใช้งานโดยไม่ได้เลือกใช้การลดระดับ (degradation) NextPDF จะยกข้อยกเว้นแบบมีชนิด (typed exception) ของระดับที่เข้าถึงไม่ได้ โดยข้อความจะระบุชื่อแพ็กเกจที่ขาดหายไป การปรับใช้ที่ตั้งค่าไม่ถูกต้องจึงล้มเหลวแบบปิด แทนที่จะปล่อยลายเซ็นระดับต่ำกว่าที่ผู้เรียกร้องขอออกมาอย่างเงียบ ๆ
กรณีขอบและข้อควรระวัง
หัวข้อที่มีชื่อว่า “กรณีขอบและข้อควรระวัง”- ลายเซ็นที่เป็น B-T ในเชิงโครงสร้างไม่เหมือนกับลายเซ็นที่ได้รับการตรวจสอบความถูกต้องว่าเป็น B-T การตรวจสอบความถูกต้องเกิดขึ้นในตัวตรวจสอบ โดยใช้จุดยึดความเชื่อถือและความสดใหม่ของข้อมูลเพิกถอนของตัวตรวจสอบนั้น ผู้สร้างไม่สามารถยืนยันผลลัพธ์ได้
- PAdES B-LT และ B-LTA ต้องใช้แพ็กเกจ NextPDF Enterprise (
nextpdf/enterprise) หากไม่ได้ติดตั้งไว้ ผู้ลงนามจะล้มเหลวแบบปิดและ B-LT/B-LTA จะไม่พร้อมใช้งาน Core ให้บริการ B-B/B-T ผ่านNextPDF\Contracts\SignerInterfaceสาธารณะ ส่วนการตรวจสอบความถูกต้องระยะยาวยังคงอยู่หลังLtvManagerInterfaceการเลือกระดับที่ไม่พร้อมใช้งานใน Core จะล้มเหลวแบบปิดตามค่าเริ่มต้น ข้อยกเว้นแบบมีชนิดระบุชื่อแพ็กเกจสาธารณะที่ขาดหายไป ไม่ใช่ชนิดข้อมูลภายใน การลดระดับลงสู่ระดับที่ต่ำกว่าอย่างนุ่มนวล (graceful degradation) เป็นตัวเลือกที่ต้องเลือกใช้เอง ไม่ใช่ค่าเริ่มต้น - ไดเจสต์ของช่วงไบต์ต้องไม่รวมค่าลายเซ็น หากไดเจสต์ครอบคลุมออกเทตของ
Contentsด้วย การตรวจสอบจะไม่มีทางสำเร็จได้เลย — ISO 32000-2 §12.8.1 - ใน B-T ไทม์สแตมป์ลายเซ็นอยู่เหนือค่าลายเซ็น ไม่ใช่เหนือไบต์ของเอกสาร ใน B-LTA ไทม์สแตมป์แบบเก็บถาวรเป็นไทม์สแตมป์เอกสารที่แยกออกมา ทั้งสองอย่างใช้แทนกันไม่ได้ — ETSI PAdES §5.4.3 และ §6.2.2
- ETSI EN 319 142-1 (ส่วนที่ว่าด้วยระดับพื้นฐาน) ไม่ได้อยู่ในคลังหลักฐานของโปรเจกต์นี้ ข้อกล่าวอ้างเกี่ยวกับโครงสร้างของระดับในที่นี้ยึดโยงกับ ETSI EN 319 142-2, เอกสารโปรไฟล์
pades, ISO 32000-2 §12.8 และ RFC 5652 / RFC 3161 ชื่อระดับและโครงสร้างแบบเพิ่มสะสมระบุไว้ตามที่นำไปใช้งานจริงใน v3.x หน้านี้ไม่ได้อ้างถึงผลการทดสอบความสอดคล้องหรือการรับรองจากบุคคลที่สาม
ประสิทธิภาพ
หัวข้อที่มีชื่อว่า “ประสิทธิภาพ”ต้นทุนเพิ่มขึ้นตามระดับ B-B เป็นการดำเนินการลงนามเพียงครั้งเดียว และใช้เวลาในระดับมิลลิวินาทีหลักหน่วยสำหรับคีย์แบบซอฟต์แวร์ B-T เพิ่มการรับส่งข้อมูลผ่านเครือข่ายไปกลับหนึ่งครั้งกับ Time-Stamping Authority B-LT เพิ่มการดึงข้อมูลเพิกถอนหนึ่งครั้งต่อใบรับรองหนึ่งใบในห่วงโซ่ B-LTA เพิ่มไทม์สแตมป์เอกสารอีกหนึ่งรายการ งบประมาณ wall time 1500 ms ครอบคลุมลายเซ็น B-T หนึ่งรายการกับ Time-Stamping Authority (TSA) ระยะไกลบนการเชื่อมต่อที่อุ่นเครื่องแล้ว B-LT หรือ B-LTA ที่ใช้ปลายทางข้อมูลเพิกถอนที่ช้าจะเกินงบประมาณนี้และควรอยู่นอกเส้นทางคำขอ โปรไฟล์ความสามารถในการทำซ้ำ (reproducibility profile) คือ structural ไม่ใช่ bitwise ไทม์สแตมป์ฝังเวลาที่ลงนามไว้ ดังนั้นการรันสองครั้งจะแตกต่างกันที่ไบต์ไทม์สแตมป์ ขณะที่โครงสร้างเอกสารยังคงเหมือนเดิม
หมายเหตุด้านความปลอดภัย
หัวข้อที่มีชื่อว่า “หมายเหตุด้านความปลอดภัย”ระดับที่ลายเซ็นอ้างกับระดับที่ลายเซ็นได้รับการตรวจสอบความถูกต้องเป็นข้อเท็จจริงคนละเรื่องกัน หน้านี้อธิบายเฉพาะฝั่งผู้สร้างเท่านั้น การตรวจสอบความถูกต้องระยะยาวขึ้นอยู่กับข้อมูลตรวจสอบความถูกต้องที่รวบรวมไว้ในเวลาที่ลงนาม และการที่ตัวตรวจสอบยังเชื่อถือจุดยึดเดียวกันนั้นในภายหลัง ผู้สร้างไม่สามารถรับประกันข้อเท็จจริงทั้งสองข้อนี้ได้ ความเชื่อถือในไทม์สแตมป์ลดรูปเหลือเพียงความเชื่อถือใน Time-Stamping Authority ซึ่งการปรับใช้ปักหมุดไว้ผ่านผู้ให้บริการที่ฉีดเข้าได้ (injectable provider) หน้านี้ทำเครื่องหมายว่า export_control_class: legal-review-required เนื่องจากเกี่ยวข้องกับโปรไฟล์ลายเซ็นเชิงวิทยาการรหัสลับ แหล่งข้อมูลเชิงบรรทัดฐานทั้งหมดถูกถอดความ และไม่มีแหล่งใดถูกทำซ้ำ ตามหลักสุขอนามัยการอ้างอิง
ความสอดคล้อง
หัวข้อที่มีชื่อว่า “ความสอดคล้อง”| ข้อกล่าวอ้าง | มาตรฐาน | ข้อกำหนด | หลักฐาน |
|---|---|---|---|
ค่าลายเซ็นถูกจัดเก็บแบบเข้ารหัส DER เป็น CMS SignedData หรือ TimeStampToken ในรายการ Contents ของดิกชันนารีลายเซ็น | ISO 32000-2 | §12.8.1 | |
ไดเจสต์คำนวณเหนือช่วง ByteRange และไม่รวมค่าลายเซ็น | ISO 32000-2 | §12.8.1 | |
| แอตทริบิวต์ไทม์สแตมป์ลายเซ็นคำนวณเหนือค่าลายเซ็น (B-T) | ETSI PAdES (EN 319 142) | §5.4.3 | |
| ข้อมูลตรวจสอบความถูกต้องระยะยาวบรรจุอยู่ใน Document Security Store (B-LT) | ETSI PAdES (EN 319 142) / ISO 32000-2 | §6.2.2 / §12.8.4.3 | , |
| ข้อมูลตรวจสอบความถูกต้องถูกวางไว้ในดิกชันนารี DSS และ VRI | ETSI EN 319 142-2 | §6.3 | , |
| ไทม์สแตมป์เอกสารแบบเก็บถาวรรักษาความถูกต้องตลอดช่วงเวลายาวนาน (B-LTA) | ETSI PAdES (EN 319 142) | §6.2.2 | |
| SignerInfo บรรจุแอตทริบิวต์ที่ลงนาม content-type และ message-digest | RFC 5652 | §5.3 | |
| ไดเจสต์ข้อความคำนวณเหนือแอตทริบิวต์ที่ลงนามซึ่งเข้ารหัสแบบ DER (กระบวนการ §5.4) | RFC 5652 | §5.4 | |
| ไทม์สแตมป์ถูกร้องขอจาก RFC 3161 TSA และคืนค่าโครงสร้าง TSTInfo | RFC 3161 | §2.4.1 |
ข้อกำหนดทั้งหมดถูกถอดความ NextPDF ไม่ทำซ้ำข้อความเชิงบรรทัดฐาน โปรดดูถ้อยคำที่มีผลบังคับจากมาตรฐานที่เผยแพร่ ETSI EN 319 142-1 ไม่ได้อยู่ในคลังหลักฐาน ข้อกล่าวอ้างเชิงโครงสร้างเกี่ยวกับระดับพื้นฐานยึดโยงกับแหล่งข้อมูลข้างต้น และระบุไว้ตามที่นำไปใช้งานจริงใน v3.x
บริบทเชิงพาณิชย์
หัวข้อที่มีชื่อว่า “บริบทเชิงพาณิชย์”Core สร้างโครงสร้างลายเซ็น B-B และ B-T ส่วนเส้นทางการสร้าง B-LT และ B-LTA, การเก็บรักษาคีย์แบบ HSM และ PKCS#11 และโปรไฟล์นโยบายวิทยาการรหัสลับ FIPS 140-3 มาพร้อมในรุ่น Pro และ Enterprise Core แก้ไขปลายทางผู้สร้างสำหรับการตรวจสอบความถูกต้องระยะยาวขณะรันไทม์ ดังนั้นเอนจินโอเพนซอร์สจึงไม่มีการพึ่งพาเชิงพาณิชย์ใด ๆ API ของ SignerInterface ไม่เปลี่ยนแปลงเมื่ออัปเกรด
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- Security / Signing — พื้นที่การนำไปใช้งานของ CMS, ไทม์สแตมป์, การตรวจสอบความถูกต้องระยะยาว (LTV), ห่วงโซ่ความเชื่อถือ และการเพิกถอน
- Contracts / Signing — service provider interface (SPI) ของ
SignerInterfaceและระดับความเสถียร - Security — พื้นที่การนำไปใช้งานด้านการเข้ารหัสลับและลายเซ็น
- Conformance — การบังคับใช้ PDF/A และโปรไฟล์ที่เข้าคู่กับการจัดเก็บถาวรแบบลงนาม
- PAdES · PAdES B-T · DSS · CAdES — คำศัพท์ในอภิธานศัพท์