การแก้ไขปัญหา: การเข้ารหัสลับและแฟล็กสิทธิ์
ขอบเขตและข้อจำกัด
หัวข้อที่มีชื่อว่า “ขอบเขตและข้อจำกัด”ใช้รายการต่อไปนี้เพื่อแก้ไขความล้มเหลวของการถอดรหัสลับที่เอนจินแจ้งผ่าน NextPDF\Exception\EncryptionException และ NextPDF\Security\Exception\DecryptionFailedException รวมถึงทำความเข้าใจขอบเขตของแฟล็กสิทธิ์ Portable Document Format (PDF)
เริ่มจากข้อจำกัดก่อน เพราะช่วยป้องกันความเข้าใจผิดที่พบบ่อยที่สุด: แฟล็กสิทธิ์ PDF ในพจนานุกรมการเข้ารหัสลับเป็นการบันทึกเจตนาของผู้เขียน แฟล็กเหล่านี้ไม่ใช่กลไกควบคุมการเข้าถึงที่ไลบรารีนี้บังคับใช้ โปรแกรมอ่านที่ไม่สนใจแฟล็กยังคงสามารถพิมพ์ คัดลอก หรือแก้ไขเนื้อหาได้ ให้ถือว่าแฟล็กเป็นคำขอต่อโปรแกรมอ่านที่ให้ความร่วมมือ ไม่ใช่การบังคับใช้
รายการ: การดำเนินการเข้ารหัสลับล้มเหลว
หัวข้อที่มีชื่อว่า “รายการ: การดำเนินการเข้ารหัสลับล้มเหลว”- อาการ
EncryptionExceptionพร้อมข้อความในรูปแบบEncryption operation "<op>" failed using algorithm "<algorithm>" - สาเหตุที่เป็นไปได้ การดำเนินการของไซเฟอร์ไม่สำเร็จ โดยทั่วไปเกิดจากส่วนขยาย OpenSSL ขาดหายไปหรือกำหนดค่าผิด คีย์ไม่ถูกต้อง หรือขนาดของ initialization vector (IV) ไม่ถูกต้องที่ขอบเขตของไซเฟอร์
- หลักฐาน / การวินิจฉัย
getContext()คืนค่าalgorithmและoperationค่าoperationเป็นหนึ่งในencrypt,decryptหรือkey_derivationจึงระบุได้ว่าขั้นตอนใดล้มเหลว - การแก้ไข
- ยืนยันว่ามีการติดตั้งและโหลดส่วนขยาย OpenSSL ของ PHP แล้ว
- ใช้ฟิลด์
operationเพื่อค้นหาขั้นตอนที่ล้มเหลว - สำหรับ
key_derivationให้ตรวจสอบรหัสผ่านหรือคีย์ที่ป้อนเข้า - ลองเรียกการทำงานใหม่อีกครั้ง
- ที่เกี่ยวข้อง การอ้างอิง Exception
รายการ: การถอดรหัสลับล้มเหลวด้วยเหตุผลเชิงโครงสร้าง
หัวข้อที่มีชื่อว่า “รายการ: การถอดรหัสลับล้มเหลวด้วยเหตุผลเชิงโครงสร้าง”- อาการ
DecryptionFailedExceptionพร้อมข้อความในรูปแบบDecryption failed for "<algorithm>": <reason> - สาเหตุที่เป็นไปได้ ไม่สามารถประมวลผลไซเฟอร์เท็กซ์ได้ด้วยเหตุผลที่ไม่เกี่ยวกับการดัดแปลง เช่น ไซเฟอร์เท็กซ์ถูกตัดทอน IV ขาดหายไป หรือมีการป้อนคีย์ที่ไม่ถูกต้องที่ขอบเขตของ application programming interface (API) การตรวจสอบความสมบูรณ์จึงไม่ทำงาน เพราะมีข้อมูลไม่เพียงพอสำหรับการประเมิน
- หลักฐาน / การวินิจฉัย
getContext()คืนค่าalgorithmและreasonเอกสารต้นทางแยกความแตกต่างระหว่างDecryptionFailedExceptionกับTamperedDataException: ข้อยกเว้นนี้หมายถึงข้อผิดพลาดด้านการกำหนดค่าหรือการขนส่งข้อมูล ไม่ใช่การดัดแปลง อย่าถือว่าข้อยกเว้นนี้เป็นเหตุการณ์ด้านความปลอดภัยเพียงอย่างเดียว - การแก้ไข
- อ่าน
reasonเพื่อระบุข้อบกพร่องเชิงโครงสร้าง ตัวอย่างเช่นciphertext shorter than IV+tag - ตรวจสอบว่าไซเฟอร์เท็กซ์ถูกขนส่งโดยไม่มีการตัดทอน
- ยืนยันว่าคีย์ที่ป้อนที่ขอบเขตคือคีย์เดียวกับที่ใช้เข้ารหัสลับเอกสาร
- ลองเรียกการทำงานใหม่อีกครั้ง
- ที่เกี่ยวข้อง ความล้มเหลวของลายเซ็นและการประทับเวลา
รายการ: เกิดข้อยกเว้น “tampered data”
หัวข้อที่มีชื่อว่า “รายการ: เกิดข้อยกเว้น “tampered data””- อาการ ได้รับ
NextPDF\Security\Exception\TamperedDataExceptionแทนที่จะเป็นDecryptionFailedException - สาเหตุที่เป็นไปได้ การตรวจสอบความสมบูรณ์ทำงานแล้วและล้มเหลว กรณีนี้แตกต่างจากความล้มเหลวของการถอดรหัสลับเชิงโครงสร้าง: มีข้อมูลเพียงพอสำหรับประเมินความสมบูรณ์ และความสมบูรณ์ไม่ผ่านการตรวจสอบ
- หลักฐาน / การวินิจฉัย ต้นทางแยกความแตกต่างของสองคลาส:
DecryptionFailedExceptionเป็นข้อผิดพลาดเชิงโครงสร้างและไม่ใช่เหตุการณ์ด้านความปลอดภัย ส่วนTamperedDataExceptionบ่งชี้ว่าเนื้อหาที่ผ่านการรับรองความถูกต้องไม่ผ่านการตรวจสอบ - การแก้ไข
- ให้ถือว่าข้อมูลที่นำเข้าไม่น่าเชื่อถือ และอย่าใช้เนื้อหาที่ถอดรหัสลับแล้ว
- ดึงเอกสารใหม่จากแหล่งที่เชื่อถือได้
- หากความล้มเหลวยังคงเกิดขึ้นกับแหล่งที่ทราบว่าถูกต้อง ให้บันทึก
getContext()ไว้สำหรับรายงานเหตุการณ์
- ที่เกี่ยวข้อง ความล้มเหลวของลายเซ็นและการประทับเวลา
รายการ: แฟล็กสิทธิ์ไม่ได้หยุดการดำเนินการปลายทาง
หัวข้อที่มีชื่อว่า “รายการ: แฟล็กสิทธิ์ไม่ได้หยุดการดำเนินการปลายทาง”- อาการ เอกสารถูกสร้างขึ้นโดยตั้งค่าแฟล็กสิทธิ์ไว้ เช่น ไม่อนุญาตให้คัดลอกหรือพิมพ์ แต่โปรแกรมอ่านยังคงคัดลอกหรือพิมพ์เนื้อหาได้
- สาเหตุที่เป็นไปได้ นี่คือข้อจำกัดที่คาดหมายไว้ ไม่ใช่ข้อบกพร่อง ค่าจำนวนเต็มของสิทธิ์ที่ส่งไปยังตัวสร้างพจนานุกรมการเข้ารหัสลับของ Core ไม่ได้ถูกใช้เป็นการบังคับใช้โดยไลบรารีนี้ แฟล็กเป็นเมทาดาทาเชิงแนะนำ โปรแกรมอ่านที่ไม่ปฏิบัติตามแฟล็กจะไม่ถูกบล็อกโดย NextPDF
- หลักฐาน / การวินิจฉัย
src/Security/Encryption/EncryptionDictionaryBuilder.phpประกาศbuildDict(int $permissions, string $fileId)และระบุพารามิเตอร์ไว้ว่าignored; retained for forward compatibilityเมธอดเริ่มต้นด้วยunset($permissions, $fileId)แฟล็กสิทธิ์ที่แสดงผลโดยsrc/Inspect/PdfPermissions.phpเป็นฟิลด์ตรวจสอบแบบอ่านอย่างเดียว ไม่ใช่ชั้นการบังคับใช้ - การแก้ไข
- อย่าพึ่งพาแฟล็กสิทธิ์เพื่อหยุดการพิมพ์ การคัดลอก หรือการแก้ไข ไลบรารีฝั่งผู้ผลิตไม่สามารถบังคับใช้แฟล็กเหล่านี้ได้
- ในกรณีที่คุณต้องจำกัดการเข้าถึง ให้ควบคุมการเผยแพร่ตัวไฟล์เอง หรือใช้ระบบควบคุมการเข้าถึงภายนอก PDF
- ใช้
PdfPermissionsเพียงเพื่อรายงานแฟล็กที่เอกสารที่มีอยู่ประกาศไว้เท่านั้น ไม่ใช่เพื่อยืนยันว่าการดำเนินการเหล่านั้นถูกป้องกัน
- ที่เกี่ยวข้อง ความล้มเหลวของลายเซ็นและการประทับเวลา
รายการ: การเข้ารหัสลับถูกปฏิเสธภายใต้ PDF/A
หัวข้อที่มีชื่อว่า “รายการ: การเข้ารหัสลับถูกปฏิเสธภายใต้ PDF/A”- อาการ เกิด
NextPDF\Security\Exception\IncompatiblePdfAModeExceptionเมื่อบิลด์เปิดใช้งาน PDF/A และร้องขอการเข้ารหัสลับ - สาเหตุที่เป็นไปได้ โปรไฟล์ PDF/A ห้ามใช้คีย์
Encryptในเทรลเลอร์ เอนจินจึงปฏิเสธการรวมกันนี้ไม่ว่าจะเรียกใช้ในลำดับใด - หลักฐาน / การวินิจฉัย ดูรายการ PDF/A และ PDF/UA สำหรับข้อกำหนดที่อ้างถึง ฟิลด์
getContext()และการทดสอบเส้นทางความล้มเหลว - การแก้ไข
- ตัดสินใจว่าเอกสารต้องการความสอดคล้องสำหรับการจัดเก็บถาวรหรือการเข้ารหัสลับ
- นำการเรียกสำหรับคุณสมบัติที่คุณไม่ต้องการออก
- เรียกใช้ไปป์ไลน์ใหม่อีกครั้ง
- ที่เกี่ยวข้อง การตรวจสอบความถูกต้อง PDF/A และ PDF/UA
กรณีขอบและข้อควรระวัง
หัวข้อที่มีชื่อว่า “กรณีขอบและข้อควรระวัง”DecryptionFailedExceptionและTamperedDataExceptionมีความหมายต่างกัน: ความล้มเหลวเชิงโครงสร้างกับความสมบูรณ์ที่ล้มเหลว แยกการทำงานตามคลาส ไม่ใช่ตามข้อความ- ตัวสร้างพจนานุกรมการเข้ารหัสลับของ Core เพิกเฉยต่อค่าจำนวนเต็มของสิทธิ์ บิลด์ใดก็ตามที่พึ่งพาการบังคับใช้สิทธิ์จากแพ็กเกจ Core ตั้งอยู่บนความเข้าใจผิด
PdfPermissionsถูกเติมค่าเฉพาะสำหรับเอกสารที่เข้ารหัสลับในระดับความลึกของการตรวจสอบแบบเต็มเท่านั้น และสะท้อนแฟล็กที่ประกาศไว้ ฟิลด์ที่มีค่าไม่ได้หมายความว่าการดำเนินการถูกป้องกัน
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- การอ้างอิง Exception
- ความล้มเหลวของลายเซ็นและการประทับเวลา
- การตรวจสอบความถูกต้อง PDF/A และ PDF/UA
- ดัชนีฐานความรู้
อภิธานศัพท์: แฟล็กสิทธิ์ · การถอดรหัสลับแบบรับรองความถูกต้อง