Enterprise รุ่น
การตรวจสอบลายเซ็น — เอกสารอ้างอิงเชิงลึก
ภาพรวมโดยสังเขป
หัวข้อที่มีชื่อว่า “ภาพรวมโดยสังเขป”หน้านี้เป็นเอกสารอ้างอิงเชิงลึกสำหรับพื้นผิวฝั่งตรวจสอบ AdES ใน NextPDF Enterprise จุดเข้าใช้งานคือ NextPDF\Enterprise\Security\Validation\AdESValidationEngine โดยรองรับกระบวนการตรวจสอบที่จำลองตาม ETSI ของ NextPDF สำหรับการตรวจพื้นฐาน แบบมีเวลา แบบระยะยาว และการตรวจ timestamp แบบจัดเก็บถาวร ได้แก่ การตรวจสอบพื้นฐาน การตรวจสอบพร้อมเวลา การตรวจสอบพร้อมข้อมูลระยะยาว และการตรวจสอบสายโซ่ครอบคลุม DocTimeStamp แบบจัดเก็บถาวร ผลลัพธ์เป็นค่า ValidationReport ที่บรรจุกรณี enum MainIndication และ SubIndication พร้อมค่าสตริง URN ตาม ETSI พื้นผิวสนับสนุนที่บันทึกไว้ที่นี่ ได้แก่ SPI SignatureDataExtractor และการนำไปใช้ CmsSignatureDataExtractor, ตัวสแกนระดับไบต์ PdfSignatureDictionaryScanner, พื้นผิวการตรวจสอบเส้นทาง NextPDF\Enterprise\Security\Pki และ BatchSignatureValidator สำหรับคำแนะนำระดับกระบวนการทำงาน ดู การตรวจสอบลายเซ็น: การตรวจสอบเชิงเข้ารหัสฝั่งตรวจสอบ AdES / PAdES
ความพร้อมใช้งานและการอนุญาต
หัวข้อที่มีชื่อว่า “ความพร้อมใช้งานและการอนุญาต”ความสามารถนี้มาพร้อมกับ NextPDF Enterprise (nextpdf/enterprise) และเปิดใช้งานด้วยชุดใบอนุญาตระดับ Enterprise การนำไปใช้งานที่ไม่มีสิทธิ์นั้นจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและรับใบอนุญาต
พื้นผิว API สาธารณะ
หัวข้อที่มีชื่อว่า “พื้นผิว API สาธารณะ”| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
AdESValidationEngine::__construct | พารามิเตอร์ทางเลือก 11 ตัว: ?PathValidatorInterface $chainValidator, ?SignatureDataExtractor $extractor, ClockInterface $clock, ?LoggerInterface $logger, string $defaultPolicy, NetworkPolicy $networkPolicy และตัวช่วยตรวจสอบทางเลือกอีกห้าตัว | ค่าเริ่มต้นทั้งหมดเป็นแบบ fail-closed: ตัวตรวจสอบเส้นทาง Pki บนนาฬิกาของเอ็นจิน ไม่มีตัวแยกข้อมูล ไม่มีคลังความเชื่อถือ TSA | เอ็นจินใหม่ | ไม่โยนข้อยกเว้น | เมื่อไม่มีคลังความเชื่อถือ การประเมินสายโซ่ TSA จะรายงานว่าไม่น่าเชื่อถือ ซึ่งจับคู่กับ INDETERMINATE ไม่ใช่การผ่านเลย |
AdESValidationEngine::validateBasic | string $signedData, string $signature | การตรวจสอบพื้นฐาน: รูปแบบ, ไดเจสต์, การเข้ารหัส, อัลกอริทึมที่อ่อนแอ, สายโซ่, การเพิกถอนที่กำกับด้วยที่มา | ValidationReport | ไม่โยนข้อยกเว้น; ความล้มเหลวในการแยกข้อมูลและเส้นทางจับคู่กับรายงานแบบ fail-closed | หากไม่มีตัวแยกข้อมูล จะตรวจเฉพาะการป้องกันเท่านั้น; ดูกรณีขอบ |
AdESValidationEngine::validateWithTime | string $signedData, string $signature, DateTimeImmutable $claimedTime | การตรวจสอบพื้นฐานก่อน; หน้าต่างใบรับรองและการเพิกถอนถูกเทียบกับเวลาที่อ้าง | ValidationReport | ไม่โยนข้อยกเว้น | ประตูตรวจ signature-timestamp อย่างเข้มงวดเมื่อมีแอตทริบิวต์นี้; $claimedTime ยังคงเป็นจุดยึดเวลา |
AdESValidationEngine::validateWithLongTermData | string $signedData, string $signature, array $dssData (certs/ocsps/crls) | ต้องผ่านการตรวจพื้นฐาน; ประตู signature-timestamp เตรียมพร้อมด้วย TSA-at-genTime; ประตู POE, การเพิกถอน DSS และการจัดเก็บถาวร | ValidationReport | ไม่โยนข้อยกเว้น | NetworkPolicy::STRICT_OFFLINE ที่มีข้อมูลฝังตัวไม่เพียงพอจะให้ผล INDETERMINATE / TRY_LATER |
AdESValidationEngine::validateArchivalTimestampChain | string $pdfBytes, array $dssData = [], ?TrustAnchorStoreInterface $anchors = null | สายโซ่ครอบคลุม DocTimeStamp ที่อิงหลักฐานบนไบต์ ByteRange ที่แม่นยำ | ValidationReport | ไม่โยนข้อยกเว้นเมื่อเจอไบต์ที่เป็นอันตราย | TOTAL_PASSED เฉพาะสำหรับสายโซ่ที่น่าเชื่อถือและครอบคลุมถึง EOF เท่านั้น |
MainIndication | — | enum ที่หนุนด้วยสตริง สามกรณี | — | — | ค่า URN ตาม ETSI; ดูรายการกรณีด้านล่าง |
SubIndication | — | enum ที่หนุนด้วยสตริง สิบห้ากรณี | — | — | ค่า URN ตาม ETSI; ดูรายการกรณีด้านล่าง |
ValidationReport::__construct | MainIndication $mainIndication, ?SubIndication $subIndication, DiagnosticData $diagnosticData, DateTimeImmutable $validationTime, string $validationPolicy = '' | ผลการตรวจสอบที่ไม่เปลี่ยนแปลง (final readonly) | รายงานใหม่ | ไม่โยนข้อยกเว้น | isPassed(), isFailed(), isIndeterminate(), toArray() |
DiagnosticData::__construct | array $certificateChain, array $timestamps, array $revocationData, string $validationPolicy, string $signatureFormat, array $warnings (มีค่าเริ่มต้นทั้งหมด) | ภาชนะเก็บหลักฐานที่ไม่เปลี่ยนแปลง; เป็นร่องรอยตรวจสอบเท่านั้น | ค่าใหม่ | ไม่โยนข้อยกเว้น | toArray() ทำการซีเรียลไลซ์การอ้างอิงเพื่อการรายงาน |
SignatureDataExtractor::extract | string $signedData, string $signature | SPI: แจงส่วน CMS และดึงส่วนประกอบสำหรับการตรวจสอบ | ExtractedSignatureData | SignatureExtractionException เมื่อไม่สามารถแจงส่วนลายเซ็นได้ | อินเทอร์เฟซ; แยกการแจงส่วน ASN.1 ออกจากเอ็นจิน |
CmsSignatureDataExtractor::extract | string $signedData, string $signature | ดึงข้อมูลพร้อมตรวจสอบเชิงเข้ารหัสของลายเซ็นพื้นฐาน PAdES แบบแยกส่วน | ExtractedSignatureData | SignatureExtractionException เฉพาะเมื่อไม่สามารถแจงส่วน CMS ได้เลยเท่านั้น | ความล้มเหลวของการเข้ารหัสหรือการผูกจะคืนข้อมูลโดยมี cryptoValid / hashValid เป็นเท็จ; และจะไม่โยนข้อยกเว้นสำหรับกรณีนั้น |
PdfSignatureDictionaryScanner::scan | string $pdfBytes | การสแกนระดับไบต์สำหรับพจนานุกรม /ByteRange + /Contents พร้อมการตรวจสอบไขว้กันปลอมแปลงแบบพอดีเป๊ะ | list<PdfSignatureOccurrence> | เป็นฟังก์ชันสมบูรณ์; ไม่โยนข้อยกเว้น; ตัวเลือกที่ผิดรูปจะถูกข้าม | เรียงลำดับตามจุดสิ้นสุดของการครอบคลุม เร็วสุดก่อน |
PathValidatorInterface::validate | array $chain, ?DateTimeImmutable $validationTime = null, array $initialPolicies = [] | การตรวจสอบเส้นทางตาม RFC 5280 §6.1.4 พร้อมการประมวลผลนโยบาย | PathValidationResult | PathValidationException เมื่อสายโซ่ไม่ถูกต้องเชิงโครงสร้างหรือมีการฝ่าฝืนขีดจำกัดเชิงปฏิปักษ์ | สายโซ่เรียงลำดับ end-entity ก่อน และ anchor ท้ายสุด |
PathValidatorInterface::validateWithAiaChasing | array $chain, ?DateTimeImmutable $validationTime = null | การแก้ปัญหาผ่าน AIA สำหรับตัวกลางที่ขาดหาย แล้วจึงตรวจสอบ | PathValidationResult | PathValidationException | การดึงข้อมูลถูกจำกัดด้วยการหมดเวลาและขีดจำกัดจำนวนไบต์ |
CertificateChainValidator | ตัวสร้าง: เอ็นจิน, PathValidationOptions, นาฬิกา, ล็อกเกอร์; static withDefaults() | การนำ SPI ไปใช้พร้อมขีดจำกัดเชิงปฏิปักษ์เริ่มต้น | PathValidationResult จากทั้งสองเมท็อด | PathValidationException | ถูกโยนด้วยเมื่อไม่สามารถส่งออก OpenSSLCertificate เป็น PEM ได้ |
PathValidationOptions::__construct | ขีดจำกัด (maxDepth, maxPolicyFanout, fetchTimeoutSeconds, fetchSizeCapBytes) พร้อมแฟล็กนโยบาย, ?TrustAnchorStoreInterface $trustAnchors, bool $requireTrustedAnchor | ความลึก 32, fanout 64, 5 s ต่อการดึง, 10 MiB ต่อการดึง; แฟล็กทั้งหมดเป็นเท็จ | ตัวเลือกใหม่ | ไม่โยนข้อยกเว้น | แฟกทอรี: defaults(), strict(), withTrustAnchors() |
PathValidationResult::__construct | bool $valid, string $trustAnchorFingerprint, DateTimeImmutable $validatedAt, array $validPolicies, ?RevocationCheckResult $revocation, bool $trustAnchorTrusted, array $fetchedCertificates, array $failureReasons | ผลลัพธ์ที่ไม่เปลี่ยนแปลง; trustAnchorTrusted มีค่าเริ่มต้นเป็นเท็จ (fail-closed) | ค่าใหม่ | ไม่โยนข้อยกเว้น | การเป็นสมาชิกความเชื่อถือแยกต่างหากจากความถูกต้องเชิงโครงสร้าง |
PolicyProcessor | ตัวสร้าง: PolicyTreeState $state, PathValidationOptions $options; processCertificate(string $certDer, int $depth, bool $selfIssued), finalizeWrapUp(), tree() | การขยาย จับคู่ และสรุปต้นไม้นโยบายตาม RFC 5280 §6.1.4 | void / list<non-empty-string> / PolicyTree | PathValidationException เมื่อการประมวลผลนโยบายล้มเหลวใดๆ (fail-closed) | การสรุปคืนค่า OID นโยบายที่รอด โดยไม่รวม anyPolicy |
PolicyTree | attach(PolicyTreeNode $node, PathValidationOptions $options), enforceFanout(...), remove(...) พร้อมการสอบถามแบบอ่าน | สถานะ valid_policy_tree พร้อมดัชนีความลึก | แตกต่างกันไปตามเมท็อด | PathValidationException เมื่อจำนวนใบที่ยังคงอยู่เกินขีดจำกัด fanout | เปิดเผย ANY_POLICY_OID (2.5.29.32.0) |
NameConstraintsChecker::processCertificate | string $certDer, bool $applyNameCheck | สะสมและบังคับใช้ซับทรีที่อนุญาต / ที่ถูกกันออกตาม RFC 5280 §6.1.4(g) | void | PathValidationException เมื่อมีการละเมิดซับทรี รูปแบบ GeneralName ที่ไม่รองรับในข้อจำกัด หรือการฝ่าฝืนขีดจำกัด | ชื่อที่เทียบกันไม่ได้จะถูกจัดการแบบ fail-closed |
TrustAnchorStoreInterface::containsFingerprint | string $anchorDerSha256Hex | การเป็นสมาชิกโดยใช้ SHA-256 แบบเลขฐานสิบหกตัวพิมพ์เล็กบนใบรับรอง DER ของจุดยึด | bool | ไม่โยนข้อยกเว้น | จุดเชื่อมความเชื่อถือที่ตัวตรวจสอบเส้นทางใช้อ้างอิง |
BatchSignatureValidator::validate | array $inputs (list<DocumentSignatureInput>) | การตรวจสอบลายเซ็นหลายเอกสารพร้อมการแคชการเพิกถอนต่อชุด | BatchValidationReport | InvalidArgumentException เมื่อรายการว่างเปล่า; ตัวป้องกันทรัพยากรปฏิเสธชุดที่มีเอกสารเกิน 1000 ฉบับ | อยู่ใน NextPDF\Enterprise\Signature |
final class AdESValidationEnginepublic function validateBasic(string $signedData, string $signature): ValidationReportpublic function validateWithTime( string $signedData, string $signature, DateTimeImmutable $claimedTime,): ValidationReportpublic function validateWithLongTermData( string $signedData, string $signature, array $dssData,): ValidationReportpublic function validateArchivalTimestampChain( string $pdfBytes, array $dssData = [], ?TrustAnchorStoreInterface $anchors = null,): ValidationReportpublic function validate( array $chain, ?DateTimeImmutable $validationTime = null, array $initialPolicies = [],): PathValidationResult;public function validateWithAiaChasing( array $chain, ?DateTimeImmutable $validationTime = null,): PathValidationResult;public static function withDefaults( ?ClockInterface $clock = null, ?AiaChaser $aiaChaser = null, ?LoggerInterface $logger = null,): selfpublic function containsFingerprint(string $anchorDerSha256Hex): bool;public function extract(string $signedData, string $signature): ExtractedSignatureData;public function scan(string $pdfBytes): arraypublic function validate(array $inputs): BatchValidationReportenum ตัวบ่งชี้ กรณีของ MainIndication: TOTAL_PASSED, TOTAL_FAILED, INDETERMINATE ค่าที่หนุนอยู่เป็นไปตามรูปแบบ urn:etsi:019102:mainindication:total-passed (ตัวพิมพ์เล็ก ใช้ยัติภังค์) กรณีของ SubIndication: HASH_FAILURE, SIG_CRYPTO_FAILURE, REVOKED, EXPIRED, NOT_YET_VALID, NO_POE, TRY_LATER, CERTIFICATE_CHAIN_GENERAL_FAILURE, FORMAT_FAILURE, REVOKED_CA_NO_POE, CRYPTO_CONSTRAINTS_FAILURE, POLICY_PROCESSING_FAILURE, REVOCATION_OUT_OF_BOUNDS_NO_POE, NO_SIGNING_CERTIFICATE_FOUND, TIMESTAMP_ORDER_FAILURE แต่ละกรณีหนุนด้วย urn:etsi:019102:subindication:<CASE_NAME> โดยใช้ชื่อกรณีที่ตรงเป๊ะ
สัญญาว่าด้วยพฤติกรรม
หัวข้อที่มีชื่อว่า “สัญญาว่าด้วยพฤติกรรม”- รับเป็นรายงาน คืนเป็นรายงาน จุดเข้าใช้งานทั้งสี่ของเอ็นจินจะคืนค่า
ValidationReportสำหรับอินพุตที่เป็นอันตรายแทนการโยนข้อยกเว้นSignatureExtractionExceptionที่ถูกจับจะถูกส่งไปยังเส้นทางป้องกัน;PathValidationExceptionที่ถูกจับจะจับคู่กับTOTAL_FAILED/CERTIFICATE_CHAIN_GENERAL_FAILURE - ลำดับการตรวจสอบพื้นฐาน ตรวจรูปแบบก่อน; โครงสร้างที่แจงส่วนไม่ได้คือ
TOTAL_FAILED/FORMAT_FAILURE(EN 319 102-1 §5.3.4) จากนั้นไดเจสต์ (HASH_FAILURE) และการตรวจสอบเชิงเข้ารหัส (SIG_CRYPTO_FAILURE) ซึ่งสอดคล้องกับผลลัพธ์ของบล็อกส่วนประกอบใน EN 319 102-1 §5.2.7.4 ไดเจสต์ถูกคำนวณใหม่โดยตัวตรวจสอบและเทียบกับแอตทริบิวต์ที่ลงนามmessageDigest(RFC 5652 §5.6); ไดเจสต์ที่ผู้ผลิตจัดหามาจะไม่ถูกเชื่อถือเลย - อัลกอริทึมที่อ่อนแอถูกลดระดับ ลายเซ็นที่ตรวจสอบผ่านภายใต้ SHA-1 หรือมีการผูกใบรับรองการลงนามที่อ่อนแอ จะคืนค่า
INDETERMINATE/CRYPTO_CONSTRAINTS_FAILUREไม่ใช่TOTAL_PASSEDเลย เส้นทางแบบมีเวลายืนยันสิ่งนี้ซ้ำ เพื่อไม่ให้ลายเซ็นที่อ่อนแอถูกฟอกให้กลายเป็นการผ่านแบบมีเวลาที่ถูกต้อง - ประตูที่มาของการเพิกถอน แฟล็กการเพิกถอนของตัวแยกข้อมูลจะถูกอ้างอิงเฉพาะเมื่อตัวแยกข้อมูลได้ทำการตรวจการเพิกถอนจริง (
revocationCheckedเป็นจริง) ค่าเริ่มต้นที่ยังไม่ตรวจไม่ใช่ทั้ง “ยืนยันแล้วว่าไม่ถูกเพิกถอน” และไม่ใช่ตัวกระตุ้นREVOKEDหลักฐานการเพิกถอนถูกสร้างขึ้นโดยเส้นทาง DSS - การส่งต่อผลที่ไม่ผ่าน เส้นทางแบบมีเวลาและแบบระยะยาวจะไม่ยกระดับผลพื้นฐานที่ไม่ผ่านเลย มีข้อยกเว้นหนึ่งกรณี: ผลพื้นฐาน
INDETERMINATE/REVOKEDจะถูกแก้ไขเทียบกับ$claimedTime; การเพิกถอน ณ เวลาที่อ้างหรือก่อนหน้านั้นคือTOTAL_FAILED/REVOKEDสิ่งนี้สะท้อนรูปแบบใน EN 319 102-1 §5.3.4 ที่แก้ผลไม่ชี้ขาดเกี่ยวกับการเพิกถอนด้วยหลักฐานเวลา เมื่อไม่สามารถทำการเปรียบเทียบได้ รายงานพื้นฐานที่ยังแก้ไม่ได้จะถูกส่งต่อตามเดิมทุกประการ - การผูก signature-timestamp อย่างเข้มงวด (fail-closed; BC break) เมื่อ CMS มีแอตทริบิวต์ที่ไม่ได้ลงนาม
id-aa-timeStampTokenการมีอยู่ของมันจะกระตุ้นการบังคับใช้ทั้งในเส้นทางแบบมีเวลาและแบบระยะยาว; ไม่มีโหมดเตือนอย่างเดียว จำนวนสมาชิกต้องเป็นแอตทริบิวต์เดียวที่มีค่าเดียวเป๊ะ (EN 319 122-1 §5.3); รูปแบบอื่นใดคือTOTAL_FAILED/FORMAT_FAILUREโทเคนต้องตรวจสอบผ่านเชิงเข้ารหัสตั้งแต่ต้นจนจบ; โทเคนที่ตรวจสอบไม่ได้ ความขัดแย้งจากความต่างของตัวแจงส่วน หรือ imprint ที่ไม่ตรงกันคือINDETERMINATE/TIMESTAMP_ORDER_FAILUREอัลกอริทึม imprint ที่ไม่รองรับหรือเป็น SHA-1 คือINDETERMINATE/CRYPTO_CONSTRAINTS_FAILUREกฎการผูกคือ RFC 3161 Appendix A:messageImprintของโทเคนต้องเท่ากับแฮชของออกเท็ตค่าsignatureใน SignerInfo โดยเปรียบเทียบในเวลาคงที่ - ประตูเส้นทางแบบระยะยาว ในเส้นทางที่กำกับด้วยข้อ 5.4 signature timestamp ที่ผูกไว้จะได้รับการประเมินใบรับรอง TSA เพิ่มเติม ณ
genTimeของโทเคน; จุดยึดที่ไม่น่าเชื่อถือคือINDETERMINATE/CERTIFICATE_CHAIN_GENERAL_FAILUREไม่ใช่การผ่านเลยNetworkPolicy::STRICT_OFFLINEที่มีวัสดุ DSS ฝังตัวไม่เพียงพอจะคืนค่าINDETERMINATE/TRY_LATERผลของ proof-of-existence การเพิกถอน DSS และสายโซ่จัดเก็บถาวรแต่ละอย่างจะลัดวงจรไปยังINDETERMINATEพร้อม sub-indication ที่จับคู่ไว้ - ประตูสายโซ่จัดเก็บถาวร การไม่มี DocTimeStamp คือ
INDETERMINATE/NO_POEByteRange ที่ไม่สอดคล้องเชิงโครงสร้างคือTOTAL_FAILED/FORMAT_FAILUREโทเคนแต่ละตัวต้องตรวจสอบผ่าน ผูก imprint กับไบต์ที่ครอบคลุมโดย ByteRange อย่างแม่นยำ และผ่านการจับคู่แง่มุม TSA-at-genTime (EXPIRED,NOT_YET_VALID,REVOKED_CA_NO_POE,CERTIFICATE_CHAIN_GENERAL_FAILUREหรือTRY_LATERภายใต้ strict-offline) มีการบังคับลำดับ:genTimeไม่ลดลง การครอบคลุมก้าวหน้าอย่างเคร่งครัด และโทเคนที่ตามมาต้องบรรจุช่องว่าง/Contentsของโทเคนก่อนหน้า โทเคนล่าสุดต้องครอบคลุมไบต์สุดท้าย; ไบต์ที่ตามหลังคือTIMESTAMP_ORDER_FAILUREgenTimeที่ล้ำหน้านาฬิกาตัวตรวจสอบเกิน 300 วินาทีคือTIMESTAMP_ORDER_FAILURE - การวินิจฉัยไม่เคยตัดสิน รายการ proof-of-existence ใน
DiagnosticData::$timestampsเป็นเพียงร่องรอยตรวจสอบเท่านั้น มันไม่เคยเปลี่ยนตัวบ่งชี้ และตัวสะสมจะรีเซ็ตทุกจุดเข้าใช้งาน - ขีดจำกัด Pki มาก่อนการเข้ารหัส ขีดจำกัดของ
PathValidationOptions(ความลึก 32, policy fanout 64, 5 s และ 10 MiB ต่อการดึง) ถูกตรวจก่อนงานที่มีต้นทุนสูงPathValidationResult::$trustAnchorTrustedแยกต่างหากจาก$valid;requireTrustedAnchorทำให้ปลายทางที่ไม่ได้รับการยืนยันเป็นโมฆะstrict()เปิดใช้requireExplicitPolicyการขนส่งการเพิกถอนแบบล้มเหลวเด็ดขาด และrequireTrustedAnchorความถูกต้องของเส้นทางสัมพันธ์กับจุดยึดตาม RFC 5280 §6.1: เส้นทางที่ถูกต้องเริ่มต้นที่จุดยึดความเชื่อถือที่จัดหาเป็นอินพุต - พื้นผิวแบบชุด
BatchSignatureValidator::validate()โยนInvalidArgumentExceptionสำหรับรายการว่างเปล่า และปฏิเสธชุดที่มีเอกสารเกิน 1000 ฉบับผ่านตัวป้องกันทรัพยากร PHP เป็นเจ้าของการตรวจสอบเชิงเข้ารหัสทั้งหมดในไปป์ไลน์นั้น
กรณีขอบและโหมดความล้มเหลว
หัวข้อที่มีชื่อว่า “กรณีขอบและโหมดความล้มเหลว”- เอ็นจินเริ่มต้นไม่มีตัวแยกข้อมูล
new AdESValidationEngine()ทำเพียงการตรวจป้องกันเท่านั้น: ลายเซ็นหรือข้อมูลที่ลงนามว่างเปล่าคือTOTAL_FAILED; คู่ที่ไม่ว่างเปล่าใดๆ จะได้ผลเป็นINDETERMINATE/NO_SIGNING_CERTIFICATE_FOUNDไม่ใช่TOTAL_PASSEDเลย ให้ฉีดNextPDF\Enterprise\Security\Validation\CmsSignatureDataExtractorเพื่อให้ได้การตรวจสอบเชิงเข้ารหัส - การตรวจความเชื่อถือ TSA เริ่มต้นไม่มีคลัง สายโซ่ TSA ทุกอันจะรายงานว่าไม่น่าเชื่อถือ ดังนั้นผลของ signature-timestamp แบบจัดเก็บถาวรและแบบระยะยาวจะยังคงเป็น
INDETERMINATEให้จัดหาจุดยึดผ่านvalidateArchivalTimestampChain(..., $anchors)หรือTsaCertificateAtGenTimeCheckที่กำหนดค่าไว้ $pdfBytesว่างเปล่าvalidateArchivalTimestampChain('')คืนค่าTOTAL_FAILED/FORMAT_FAILURE- signature timestamp ก่อนการแก้ไขไม่สามารถผ่านได้ โทเคนที่สร้างโดย NextPDF เวอร์ชันก่อนการแก้ไข strict-binding ได้ทำ imprint จากอินพุตที่ต่างออกไป โทเคนเหล่านั้นจะล้มเหลวการผูกตาม Appendix A อย่างถาวร; ให้ลงนามใหม่และประทับเวลาใหม่เพื่อคืนผลลัพธ์เชิงบวก นี่คือ BC break ที่จงใจและมีบันทึกไว้
- DocTimeStamp ที่ซ้ำหรือทับซ้อน ตัวซ้ำในรุ่นแก้ไขเดียวกัน การครอบคลุมที่เท่ากันหรือทับซ้อน หรือโทเคนที่ตามมาซึ่งไม่บรรจุช่องว่างลายเซ็นของโทเคนก่อนหน้า จะล้มเหลวประตูการจัดลำดับ
- ตัวสแกนเป็นแบบสมบูรณ์และระดับไบต์
scan()ข้ามตัวเลือกที่ผิดรูปหรือถูกปลอมแปลงอย่างเงียบๆ;/ByteRangeลวงภายในสตรีมเนื้อหาจะถูกปฏิเสธ มันไม่แก้ไขวัตถุทางอ้อมหรือเดินตารางอ้างอิงไขว้ - การครอบคลุม ไม่ใช่การเข้าถึง
validateArchivalTimestampChain()พิสูจน์การครอบคลุมช่วงไบต์เชิงเข้ารหัสถึงจุดสิ้นสุดไฟล์ การวิเคราะห์การเข้าถึงระดับวัตถุ (ตัวอย่างเช่น รากเอกสารที่ถูกชี้ใหม่ภายในรุ่นแก้ไขที่ครอบคลุม) ถูกประกาศให้อยู่นอกขอบเขต - การใช้ Pki โดยตรงจะโยนข้อยกเว้น การเรียกการนำ
PathValidatorInterfaceไปใช้โดยตรงจะเปิดเผยPathValidationExceptionสำหรับสายโซ่ที่ไม่ถูกต้องเชิงโครงสร้าง ขีดจำกัดที่ถูกฝ่าฝืน รูปแบบข้อจำกัดที่ไม่รองรับ และการส่งออก PEM ของแฮนเดิลOpenSSLCertificateที่ล้มเหลว เอ็นจินจับคลาสนี้; ตัวเรียกของคุณเองต้องจัดการมัน
พฤติกรรมในโหมด FIPS
หัวข้อที่มีชื่อว่า “พฤติกรรมในโหมด FIPS”ฝั่งตรวจสอบยอมรับ RSA PKCS#1 v1.5 ที่ใช้ SHA-2 และ ECDSA บน P-256/P-384/P-521 โทเคน RSASSA-PSS, EdDSA และ SHA-3 จะล้มเหลวแบบปิดเนื่องจากไม่รองรับ; SHA-1 ถูกลดระดับเป็น CRYPTO_CONSTRAINTS_FAILURE ภายใต้โปรไฟล์นโยบายการเข้ารหัส Enterprise FIPS 140-3 (มีบันทึกไว้ในโมดูลความปลอดภัย) ข้อจำกัดนี้ใช้กับว่าอัลกอริทึมใดถูกยอมรับ; ตัวกระบวนการตรวจสอบเอง — การคำนวณไดเจสต์ใหม่ การตรวจลายเซ็น การผูก การตรวจสอบเส้นทาง — ไม่เปลี่ยนแปลง NextPDF ไม่ถือใบรับรอง FIPS 140-3 และหน้านี้ไม่กล่าวอ้างใดๆ
ความสอดคล้อง
หัวข้อที่มีชื่อว่า “ความสอดคล้อง”| ข้อกล่าวอ้าง | มาตรฐาน | ข้อ |
|---|---|---|
| การตรวจสอบ Basic Signature เป็นบล็อกส่วนประกอบที่นำกลับมาใช้ซ้ำได้สำหรับการตรวจสอบ time-stamp และแบบมีเวลา | ETSI EN 319 102-1 | §5.3.1 |
ความล้มเหลวด้านความสมบูรณ์จับคู่กับ HASH_FAILURE; การตรวจลายเซ็นที่ล้มเหลวจับคู่กับ SIG_CRYPTO_FAILURE | ETSI EN 319 102-1 | §5.2.7.4 |
| การตรวจรูปแบบทำงานก่อนและผลที่ไม่ผ่านจะหยุดกระบวนการ | ETSI EN 319 102-1 | §5.3.4 |
| ผลไม่ชี้ขาดเกี่ยวกับการเพิกถอนสามารถแก้ไขได้ด้วยหลักฐานเวลา | ETSI EN 319 102-1 | §5.3.4 |
| เส้นทางการรับรองที่ถูกต้องเริ่มต้นที่จุดยึดความเชื่อถือที่จัดหาเป็นอินพุต | RFC 5280 | §6.1 |
ตัวตรวจสอบคำนวณไดเจสต์เนื้อหาใหม่; มันต้องเท่ากับแอตทริบิวต์ที่ลงนาม messageDigest | RFC 5652 | §5.6 |
messageImprint ของ signature timestamp ทำแฮชค่าฟิลด์ signature ใน SignerInfo | RFC 3161 | Appendix A |
แอตทริบิวต์ signature-time-stamp บรรจุ AttributeValue เพียงหนึ่งเดียวเป๊ะ | ETSI EN 319 122-1 | §5.3 |
ทุกข้อเป็นการถอดความ; NextPDF ไม่ได้ทำซ้ำข้อความเชิงบรรทัดฐาน NextPDF ไม่ได้กล่าวอ้างความสอดคล้องหรือการรับรอง AdES / PAdES ใดๆ การรองรับมาตรฐานไม่ใช่ความสอดคล้องกับมาตรฐานนั้น และความสอดคล้องก็ไม่ใช่การรับรอง — NextPDF ไม่ถือการรับรองใดและไม่มอบให้ใคร เอ็นจินนำกระบวนการตรวจสอบที่อ้างถึงไปใช้เป็นความสามารถ; มันไม่ใช่บริการตรวจสอบที่มีคุณสมบัติหรือได้รับการรับรอง และรายงาน TOTAL_PASSED เป็นข้อความเชิงเข้ารหัส ไม่ใช่การตัดสินทางกฎหมาย ค่า enum นำรูปแบบตัวระบุ ETSI URN กลับมาใช้ซ้ำเพื่อความสามารถทำงานร่วมกันของข้อมูลรายงาน; การนำกลับมาใช้ซ้ำนั้นไม่ได้ยืนยันการรับรองใดๆ
หมายเหตุการพัฒนา
หัวข้อที่มีชื่อว่า “หมายเหตุการพัฒนา”- การจับคู่ป้ายข้อ ซอร์สของแพ็กเกจกำกับจุดเข้าใช้งานเป็นข้อ 5.2, 5.3 และ 5.4 ของ EN 319 102-1 คลังข้อมูลความสอดคล้องจัดวางกระบวนการตรวจสอบ Basic Signature เองไว้ที่ข้อ 5.3 โดยมีบล็อกส่วนประกอบเชิงเข้ารหัสที่ 5.2.7.4 หน้านี้อ้างเลขข้อที่สืบค้นมา; สัญญาว่าด้วยพฤติกรรม ไม่ใช่ป้าย คือสิ่งที่มีอำนาจ
- การทดสอบเชิงกำหนดแน่นอน การเปรียบเทียบเวลาทุกครั้งไหลผ่าน
ClockInterfaceตาม PSR-20 ที่ถูกฉีดเข้ามา ให้ฉีดนาฬิกาที่ถูกตรึงเพื่อทดสอบการตรวจหน้าต่าง ขอบเขตความคลาดเคลื่อน genTime 300 วินาที และการตัดสินความสดของ CRL - การประกอบ ตัวช่วยทั้งหมดของเอ็นจินถูกฉีดผ่านตัวสร้างและเป็นทางเลือก โดยมีค่าเริ่มต้นแบบ fail-closed ตัวตรวจสอบเส้นทางเริ่มต้นคือ
CertificateChainValidator::withDefaults()บนนาฬิกาของเอ็นจิน; ตัวเลือกเริ่มต้นทำให้การประมวลผลนโยบายและข้อจำกัดชื่อไม่ทำงานสำหรับอินพุตที่สอดคล้องและไม่มีข้อจำกัด - เนมสเปซ พื้นผิวเอ็นจินอยู่ใน
NextPDF\Enterprise\Security\Validationพื้นผิวการตรวจสอบเส้นทางอยู่ในNextPDF\Enterprise\Security\Pkiและตัวจัดการแบบชุดอยู่ในNextPDF\Enterprise\Signature - สุขอนามัยของรายงาน รายงานไม่เปลี่ยนแปลงและซีเรียลไลซ์ได้ผ่าน
toArray()บริบทการวินิจฉัยรีเซ็ตที่ทุกจุดเข้าใช้งาน ดังนั้นรายงานจะไม่พาหลักฐานจากการรันก่อนหน้าบนอินสแตนซ์เอ็นจินเดียวกัน
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- การตรวจสอบลายเซ็น: การตรวจสอบเชิงเข้ารหัสฝั่งตรวจสอบ AdES / PAdES — หน้าความสามารถ: กระบวนการทำงาน ตารางอัลกอริทึม หมายเหตุการอัปเกรด
- ลายเซ็น — เอกสารอ้างอิงเชิงลึก — ฝั่งผู้ผลิต PAdES B-LT / B-LTA
- การตรวจสอบ — เอกสารอ้างอิงเชิงลึก — การตรวจนโยบายเชิงโครงสร้างโดยไม่ใช้การเข้ารหัส
- ความปลอดภัย — เอกสารอ้างอิงเชิงลึก — พื้นผิวความปลอดภัย Enterprise แบบรวม รวมถึงโปรไฟล์ FIPS
- การจับคู่พื้นฐาน PAdES — B-B, B-T, B-LT, B-LTA ในทุกรุ่น
ขอบเขตการเผยแพร่
หัวข้อที่มีชื่อว่า “ขอบเขตการเผยแพร่”หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว API สาธารณะที่รองรับเท่านั้น เส้นทางเนมสเปซภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้าตั๋วอยู่นอกขอบเขต