افحص ملف PDF بحثًا عن حقول التوقيع، وعدّ علامات التوقيع، وحلل نافذة سلامة ByteRange.
افحص ملف PDF بحثًا عن حقول التوقيع، وعدّ علامات التوقيع، وحلل نافذة سلامة ByteRange. افحص ملف PDF بحثًا عن حقول التوقيع، وعدّ علامات التوقيع، وحلل نافذة سلامة ByteRange.
الخلفية
كيف تعمل توقيعات PDF
التوقيع الرقمي على ملف PDF ليس ختمًا مرسومًا على الصفحة (مع أنه قد يوجد
شكل مرئي للتوقيع أيضًا). إنه كائن تشفيري: قاموس توقيع تحتفظ قيمته /Contents
ببنية SignedData من نوع PKCS#7 مشفرة بـ DER. تحتوي تلك البنية على شهادة
الموقّع وخوارزمية الملخص وتوقيعًا محسوبًا على شريحة دقيقة من بايتات PDF.
تصف مصفوفة /ByteRange في قاموس التوقيع بالضبط نطاقات البايت في الملف التي
يغطيها التوقيع: عادةً [0, a, b, c] بمعنى "البايتات 0..a-1 و b..b+c-1". كل شيء
داخل تلك النطاقات موقّع؛ وكل شيء خارجها — قيمة التوقيع نفسها — غير موقّع.
يتيح هذا التصميم توقيع ملف PDF دون معرفة طوله النهائي مسبقًا.
لماذا تهم ByteRange في كشف العبث
للتحقق من التوقيع، يقوم الفاحص بتجزئة البايتات في النطاقات الموقعة
ومقارنتها بالملخص المضمّن في بنية PKCS#7. إذا عدّل شخص ما ملف PDF بعد
التوقيع، تتغير البايتات المغطاة، ويتباعد التجزئة المعاد حسابها، ويفشل
التحقق — وهذه هي إشارة العبث. لذلك تحدد /ByteRange نافذة السلامة: يمكن
للتوقيع حماية البايتات التي يغطيها فقط. التوقيع الذي لا تغطي نطاقاته
المستند كله يترك بقية الملف عرضة لتعديل غير مكتشف. يبلّغ هذا الفاحص
عما إذا كان النطاق موجودًا وما إذا كان يبدأ عند البايت 0 ويغطي
الرأس والذيل — الشكل الذي ينتجه كل أداة توقيع.
ما تفحصه هذه الأداة
توزّع ملف PDF باستخدام مكتبة pdf-lib المرفقة (Apache-2.0) وتبلّغ عن:
عدد الصفحات؛ عدد حقول التوقيع الموجودة في AcroForm؛ عدد علامات
/FT /Sig في تدفق البايتات الخام؛ ما إذا كانت مصفوفة /ByteRange موجودة؛
وما إذا كان لذلك النطاق الشكل القياسي [0, head, tailStart, tailLen].
ملف PDF بعدد علامات صفري لا يحتوي على أي توقيعات إطلاقًا. ملف PDF بعلامات
لكن دون نطاق قابل للتحليل أمر غير معتاد ويستحق نظرة أقرب. التحقق التشفيري
الكامل — إعادة حساب التجزئات والتحقق من سلسلة الشهادات — يتطلب سلسلة
الموقّع الكاملة ومخزن ثقة؛ تركز هذه الصفحة على التحليل الهيكلي الذي يكشف
ما إذا كانت التوقيعات موجودة وما إذا كانت نافذة السلامة سليمة.
تفسير النتائج
أكثر من علامة توقيع واحدة يعني عادةً توقيعات متعددة أو تحديثًا
تزايديًا أعاد توقيع المستند. قد يخفي ملف PDF مشفر قواميس التوقيع
عن المحلل؛ يُستخدم وضع ignoreEncryption بحيث لا يزال يتم الإبلاغ عن
البنية. تذكر: تفحص هذه الأداة البنية، وليس الهوية. لا يمكنها أن تخبرك
ما إذا كان الموقّع هو من يدّعي أنه — وهذا يتطلب التحقق من الشهادة ضد
جذر موثوق. استخدمها كفرز أولي للمستندات التي تستلمها، ثم تابع مع
التحقق الكامل لتوقيع منصة عملك لأي شيء مهم. يعمل التحليل بالكامل في
متصفحك؛ لا يُرفع ملف PDF الخاص بك أبدًا.
الأسئلة المتكررة
هل تتحقق هذه الأداة من التوقيع تشفيريًا؟
تقوم بتحليل هيكلي: تكشف حقول التوقيع، وتعد علامات /FT /Sig، وتفحص شكل نافذة سلامة ByteRange. إعادة الحساب الكامل للتجزئة والتحقق من سلسلة الشهادات يتطلب سلسلة الموقّع ومخزن ثقة، وهو ما لا يمكن لصفحة متصفح توفيره دون اتصال.
ماذا يعني تقرير ByteRange فارغ؟
إذا لم يتم العثور على مصفوفة /ByteRange لكن علامات التوقيع موجودة، فقد يستخدم ملف PDF تخطيط توقيع غير معتاد أو يكون تالفًا. ملف PDF بدون علامات ولا ByteRange ببساطة لا يحتوي على توقيعات.
ما هو التحديث التزايدي ولماذا يهم؟
تعلق العديد من أدوات PDF التغييرات على نهاية الملف بدلاً من إعادة كتابته. كل إلحاق يمكن أن يضيف أو يستبدل كائنات، ويظهر إعادة التوقيع كعلامة جديدة. لهذا يمكن أن يظهر ملف PDF موقع بأكثر من علامة توقيع واحدة.
هل يمكن فحص ملف PDF مشفر؟
نعم، ضمن حدود. يُحمّل الفاحص مع ignoreEncryption بحيث تبقى قواميس التوقيع مرئية. يعمل الفحص الخام للبايتات بحثًا عن /FT /Sig بغض النظر عن التشفير لأنه يبحث في تدفق النص العادي.
هل يُرفع ملف PDF الخاص بي إلى أي مكان؟
لا. تتم قراءة ملف PDF باستخدام FileReader وتحليله بالكامل في متصفحك باستخدام مكتبة pdf-lib المرفقة. يتم أيضًا توليد نموذج PDF محليًا. لا شيء يغادر جهازك.
ما هو PKCS#7 / CAdES / PAdES؟
PKCS#7 هو تنسيق الحاوية الذي يحمل بيانات التوقيع (وقد تم توحيده الآن باسم CMS). PAdES هو ملف تعريف PDF لذلك التنسيق المستخدم في قواعد التوقيع الإلكتروني الأوروبية؛ يضيف سمات تحقق طويلة الأمد بحيث تبقى التوقيعات قابلة للتحقق لسنوات.