كيف يُثبِت التوقيع الرقميّ مَن وقّع
Spec: RFC 5652RFC 5652Spec: RFC 5280, §6RFC 5280 §6Spec: RFC 3161, §1RFC 3161 §1
لمحة سريعة
قسم بعنوان «لمحة سريعة»يفعل التوقيع الرقميّ ثلاثة أشياء، ويجدر إبقاؤها متمايزة منذ البداية: يُثبِت أنّ البايتات لم تتغيّر، ويُثبِت مَن وقّعها، و— بقليل من المساعدة — يُثبِت متى. تبني هذه الصفحة تلك الفكرة من العدم، فيكفّ علم التعمية عن كونه صندوقًا أسود.
لماذا يهمّ هذا
قسم بعنوان «لماذا يهمّ هذا»“مُوقَّع” كلمة يبني الناس عليها قرارات. عقد، أو فاتورة، أو ملاحظة إصدار لبرنامج سيُشغّله أحدهم. وإن كنتَ تعرف فقط أنّ أداةً طبعت علامة اختيار خضراء، فأنت لا تعرف فعلًا ما الذي أُثبِت. قد يكون لديك دليل على سلامة البايتات لكن لا فكرة عن أيّ مفتاح وقّعها. وقد يكون لديك مُوقِّع حقيقيّ لكن شهادة انتهت قبل سنوات. وفهم الأجزاء هو ما يتيح لك أن تقول، بدقّة، ما الذي يعنيه توقيع صالح — وبالقدر نفسه من الفائدة، ما الذي لا يعنيه.
باختصار
قسم بعنوان «باختصار»تخيّل ظرفًا ظاهر العبث بخاتم شخصيّ مضغوط في طيّته.
- الخاتم فريد لشخص واحد ويستحيل تزويره فعليًّا. يستطيع أيّ أحد التعرّف عليه؛ ولا يستطيع صنعه إلّا مالكه. ذلك هو زوج المفاتيح: مفتاح خاصّ تملكه وحدك، ومفتاح عامّ يستطيع الجميع رؤيته.
- أنت لا تضغط الخاتم فوق المستند كلّه. تضغطه فوق ملخّص صغير غير قابل للتزوير له — التجزئة. غيّر بايتةً واحدة من المستند فيتغيّر الملخّص كليًّا، فلا يعود الخاتم يلائم.
- التوقيع هو إنتاج توقيع على المستند بمفتاحك الخاصّ — على التجزئة لـRSA وECDSA، أو على المحتوى نفسه لـEdDSA، الذي يُجري تجزئته الخاصّة داخليًّا. والتحقّق هو إجراء فحص الخوارزمية بمفتاحك العامّ، والتوقيع، والمحتوى نفسه (تجزئةً، أو مباشرةً) — ويعيد صالحًا أو غير صالح. الرياضيات، لا الثقة، تربط الاثنين.
- الشهادة هي الجزء الذي يقول لمَن هذا الخاتم. دونها، تكون قد أثبتَّ أنّ مفتاحًا وقّع البايتات، لا أنّ المفتاح يخصّ أحدًا بعينه.
- الطابع الزمنيّ هو الجزء الذي يقول متى. ساعة المُوقِّع نفسه مجرّد ادّعاء؛ والوقت الموثوق يأتي من سلطة خارجية.
كيف يتعامل NextPDF مع ذلك
قسم بعنوان «كيف يتعامل NextPDF مع ذلك»ابدأ بالتجزئة، لأنّ كلّ شيء آخر يقوم عليها. تقرأ دالّة تجزئة تعموية أيّ كمّ من البيانات وتُنتج بصمةً قصيرة ثابتة الطول — لتوقيع PDF، عادةً قيمة بطول 256 بت. وخاصّيتان تجعلانها مفيدة: المُدخل نفسه يُنتِج البصمة نفسها دائمًا، ويتعذّر إيجاد مُدخل مختلف بالبصمة نفسها. فالتجزئة بديل أمين عن المستند. وإن تطابقت تجزئتان، تطابقت البايتات.
والآن زوج المفاتيح. المفتاح الخاصّ والمفتاح العامّ مرتبطان رياضيًّا، لكن لا يمكنك اشتقاق أحدهما من الآخر في أيّ قدر عمليّ من الوقت. ولا يستطيع إنتاج توقيع صالح إلّا المفتاح الخاصّ، ولا يستطيع فحصه إلّا المفتاح العامّ المطابق. يستخدم التوقيع ذلك اللاتماثل: يُطبّق المُوقِّع عملية مفتاح خاصّ على المُدخل الذي تُعرِّفه الخوارزمية المختارة — تجزئة المحتوى لـRSA وECDSA، أو المحتوى مباشرةً لـEdDSA، الذي يُجزِّئ داخليًّا. والنتيجة هي قيمة التوقيع. ولأنّ حامل المفتاح الخاصّ وحده كان بإمكانه إنتاجها، ولأنّها مربوطة بـهذا المحتوى، فهي تُثبِت أمرين دفعةً واحدة — أنّ الحامل وقّع، وأنّ البايتات لم تتحرّك منذئذٍ.
يعكس التحقّق ذلك المنطق. يعيد المُحقِّق بناء المُدخل نفسه — بتجزئة المستند لـRSA وECDSA، أو بأخذ المحتوى مباشرةً لـEdDSA — ثمّ يُجري عملية التحقّق لخوارزمية التوقيع على المفتاح العامّ، وقيمة التوقيع، وذلك المُدخل. وتعيد العملية صالحًا أو غير صالح — وهذا الشكل نفسه سواء كانت الخوارزمية RSA أو ECDSA أو EdDSA، وإن كان RSA وحده يمكن تصويره وكأنّه “يستعيد” التجزئة حرفيًّا. الصالح يعني سليمًا وأصيلًا. وغير الصالح يعني أنّ شيئًا تغيّر، أو أنّ المفتاح الخاطئ استُخدم، والجواب الصادق هو غير صالح.
- هيّئ المُدخليُجزِّئ RSA وECDSA المستند إلى بصمة قصيرة ثابتة الطول؛ ويُوقِّع EdDSA المحتوى مباشرةً ويُجزِّئه داخليًّا. وفي كلتا الحالتين، أيّ تغيير في البايتات يغيّر ما يُوقَّع.
- وقِّع بالمفتاح الخاصّيُطبّق المُوقِّع عملية مفتاح خاصّ على ذلك المُدخل — التجزئة لـ RSA وECDSA، والمحتوى لـ EdDSA. والمُخرَج هو قيمة التوقيع؛ ولا أحد سوى حامل المفتاح الخاصّ كان بإمكانه إنتاجها.
- أعِد بناء المُدخليعيد المُحقِّق بناء المُدخل نفسه من المحتوى مستقلًّا — تجزئة مُعاد حسابها لـ RSA وECDSA، والمحتوى نفسه لـ EdDSA. وهذا ما تفحصه عملية التحقّق إزاءه.
- تحقّق بالمفتاح العامّيُجري المُحقِّق عملية التحقّق للخوارزمية على المفتاح العامّ، وقيمة التوقيع، وذلك المُدخل. والشكل نفسه يعمل لـ RSA وECDSA وEdDSA.
- اقبل أو ارفضتعيد عملية التحقّق صالحًا أو غير صالح. الصالح يعني أنّ البايتات سليمة وأنّ حامل المفتاح الخاصّ وقّعها. وإلّا فالنتيجة غير صالح — بلا تخمين.
في ملفّ PDF حقيقيّ، لا يضغط NextPDF الخاتم فوق الصفحة المرئية — بل يضغطه فوق مدًى مُعلَن من البايتات، ويحزم التوقيع بوصفه كائن CMS منفصلًا (Spec: RFC 5652RFC 5652) موضوعًا داخل الملفّ (Spec: ISO 32000-2, §12.8ISO 32000-2 §12.8). وثمّة تنقيح واحد يهمّ: لا يُوقِّع المُوقِّع تجزئة المحتوى الخامّ مباشرةً. بل يُوقِّع مجموعة صغيرة من السمات المُوقَّعة التي تتضمّن تجزئة المحتوى، فيُختَم الوقت ونوع المحتوى ومُعرِّف شهادة المُوقِّع معًا. وأين تقطن تلك البايتات، ولماذا المدى مُشكَّل على ذلك النحو، هو موضوع كيف تقطن التوقيعات في PDF.
حتى الآن، تُثبِت الرياضيات أنّ مفتاحًا وقّع هذه البايتات. وهي لا تقول شيئًا عن أيّ مفتاح. وتلك الفجوة هي بالضبط ما تملؤه الشهادة. الشهادة هي ذاتها بيان مُوقَّع — من سلطة شهادات — بأنّ هذا المفتاح العامّ يخصّ هذا الموضوع المُسمّى. والوثوق بها يعني متابعة السلسلة من شهادة المُوقِّع صعودًا إلى سلطة قرّرتَ الوثوق بها، مع فحص صلاحية كلّ حلقة على الطريق (Spec: RFC 5280, §6RFC 5280 §6). دون تلك السلسلة، “مُوقَّع” مجهول الهوية. ومعها، لـ”مُوقَّع” اسم.
الجزء الأخير هو متى. يستطيع التوقيع تضمين وقت المُوقِّع المُدّعى، لكنّ ساعةً لا تتحكّم فيها ادّعاء، لا دليل. يربط طابع زمنيّ من سلطة طوابع زمنية تجزئةَ التوقيع بلحظة، مُشهَدًا عليها من طرف لا مصلحة له في المستند (Spec: RFC 3161, §1RFC 3161 §1). وذلك ما يتيح لتوقيع أن يبقى ذا معنى بعد انتهاء شهادة المُوقِّع: يمكنك إظهار أنّ التوقيع وُجِد بينما كانت الشهادة لا تزال صالحة. والمعالجة الأعمق في الطوابع الزمنية والوقت الموثوق.
مثال عملي
قسم بعنوان «مثال عملي»الأشكال أدناه هي العمليات المفاهيمية، مكتوبةً بوضوح. والمغزى ليس استدعاء واجهة برمجة تطبيقات — بل رؤية أنّ التوقيع والتحقّق صورتان متعاكستان، وأنّ بايتةً مُعبَثًا بها تكسر التطابق بحكم البناء.
<?php
declare(strict_types=1);
// SIGN — the holder of the private key seals the content.// RSA and ECDSA sign a hash; EdDSA signs the content directly (hashing inside).$signingInput = sign_input($content); // a digest for RSA/ECDSA, the content for EdDSA$signatureValue = private_key_transform( // only the key holder can do this privateKey: $signerPrivateKey, input: $signingInput,);
// VERIFY — anyone with the public key runs the algorithm's check.$recomputedInput = sign_input($content); // verifier rebuilds the same input$intactAndAuthentic = signature_verify( // RSA, ECDSA, EdDSA — same shape publicKey: $signerPublicKey, // taken from the certificate signatureValue: $signatureValue, input: $recomputedInput, // the freshly reconstructed input);// true -> bytes unchanged AND signed by the private-key holder// false -> a byte changed, or the wrong key — the honest answer is "invalid"
// The certificate answers a SEPARATE question: whose public key is this?// The timestamp answers ANOTHER: when did this signature exist?// "intact + authentic" alone proves neither identity nor time.تزوير تغيير لا يزال يتحقّق هو أمر يتعذّر حسابيًّا. تحمل التجزئة المحتوى بأمانة، فتبديل المحتوى يبدّل التجزئة، وعملية التحقّق ترفضه — ما لم يُعثَر على تصادم تجزئة، وهو ما صُمِّمت الدالّة المختارة لجعله غير عمليّ.
مفهوم خاطئ شائع
قسم بعنوان «مفهوم خاطئ شائع»الخطأ المتكرّر هو قراءة “توقيع صالح” بوصفه “مستندًا جديرًا بالثقة”. وهما ليسا الجملة نفسها. يُثبِت علم التعمية أنّ البايتات سليمة وأنّ حامل المفتاح الخاصّ وقّعها — لا أكثر. فمستند مُوقَّع بمفتاح لم تسمع به قطّ، مُشهَدًا عليه من لا سلطة تعرفها، يمكن أن يكون “صالحًا” بلا عيب ولا يساوي شيئًا. الهوية تأتي من الشهادة وسلسلتها؛ والوقت يأتي من طابع زمنيّ موثوق. وعلامة اختيار خضراء تطوي كلّ هذه بهدوء في قيمة منطقية واحدة قد قرّرت، نيابةً عنك، أيّ الأسئلة كان يهمّ. ومعرفة الأجزاء هي ما يتيح لك طرح البقيّة.
الحدود والنطاقات
قسم بعنوان «الحدود والنطاقات»تشرح هذه الصفحة فكرة التوقيع الرقميّ، لا إجراء التحقّق الكامل. الرياضيات هنا تُثبِت السلامة والأصالة. وهي لا تخبرك، بمفردها، أنّ شهادة التوقيع أُصدِرت لمَن تظنّ، ولا أنّها كانت صالحة وقت التوقيع، ولا أنّها أُبطِلت لاحقًا — فتلك أسئلة مسار الشهادة والإبطال، والتحقّق الصحيح يُجري كلّها. ومجموعة الفحوص الكاملة في التحقّق من التوقيع كما ينبغي.
يبني NextPDF بنية التوقيع ويُجري فحوص التعمية. وهو لا يختار مراسي الثقة لديك، ولا يضمن أيّ سلطة شهادات، ولا يقرّر الأثر القانونيّ لتوقيع — فتلك تعتمد على نشرك، وعلى الشهادة، وعلى الولاية القضائية. المحرّك يُثبِت الآليّة؛ وقرارات الثقة فوقها لك.
ما يَشحنه المحرّك، حسب المستوى، يُبنى نحو الخارج من هذا الأساس:
| Edition | Availability |
|---|---|
| Core | PAdES B-B: the hash-and-sign mechanism described here, packaged as a detached CMS SignedData object, plus certificate-path validation against a trust anchor you supply. |
| Pro | Adds PAdES B-T — a verified RFC 3161 trusted timestamp on the signature value, so the “when” is attested rather than self-claimed. |
| Enterprise | Adds the long-term profiles (B-LT, B-LTA): embedded validation material and document timestamps that keep the identity and time proofs answerable for years. |
وثائق ذات صلة
قسم بعنوان «وثائق ذات صلة»- كيف تقطن التوقيعات في PDF — أين تقطن فعلًا قيمة التوقيع ومدى بايتاته في الملفّ.
- التحقّق من التوقيع كما ينبغي — المجموعة الكاملة من الفحوص التي يجب أن يُجريها المُحقِّق، وراء الرياضيات في هذه الصفحة.
- الطوابع الزمنية والوقت الموثوق — ما الذي يُثبِته طابع RFC 3161 الزمنيّ، ولماذا ساعة المُوقِّع نفسه ليست هو.
- ملامح PAdES الأساسية — أيّ ملمح يُطبِّق الهوية والوقت والمادّة طويلة الأمد على هذا الأساس.
مسرد المصطلحات
قسم بعنوان «مسرد المصطلحات»- التجزئة (الموجز) — بصمة قصيرة ثابتة الطول للبيانات من دالّة تجزئة تعموية؛ أيّ تغيير في البيانات يغيّرها كليًّا.
- زوج المفاتيح — مفتاح خاصّ مرتبط (يملكه المُوقِّع وحده) ومفتاح عامّ (يُشارَك بحرّية)؛ لا يستطيع التوقيع إلّا المفتاح الخاصّ، ولا يستطيع التحقّق إلّا المفتاح العامّ المطابق.
- التوقيع — تطبيق عملية المفتاح الخاصّ على المُدخل الذي تُعرِّفه الخوارزمية: تجزئة المحتوى لـRSA وECDSA، أو المحتوى مباشرةً لـEdDSA (الذي يُجزِّئ داخليًّا). وفي PDF، ذلك المحتوى هو السمات المُوقَّعة، التي تتضمّن تجزئة المستند. والنتيجة قيمة التوقيع.
- التحقّق — إعادة بناء المُدخل نفسه (تجزئة مُعاد حسابها، أو المحتوى مباشرةً لـEdDSA)، ثمّ إجراء عملية التحقّق للخوارزمية على المفتاح العامّ، وقيمة التوقيع، وذلك المُدخل للحصول على جواب صالح-أو-غير-صالح.
- قيمة التوقيع — البايتات التي تُنتجها عملية المفتاح الخاصّ؛ ما يفحصه مُحقِّق إزاء مُدخل الخوارزمية المُعاد بناؤه حديثًا (موجز لـRSA وECDSA، والمحتوى نفسه لـEdDSA).
- الشهادة — بيان مُوقَّع يربط مفتاحًا عامًّا بهوية مُسمّاة؛ موثوق به بالتسلسل إلى سلطة تقبلها (RFC 5280 §6).
- مرساة الثقة — سلطة شهادات قرّرتَ الوثوق بها؛ جذر سلسلة شهادات مقبولة.
- الطابع الزمنيّ (RFC 3161) — رمز مُوقَّع من سلطة طوابع زمنية يربط تجزئةً بقيمة وقت، مُوفِّرًا دليلًا موثوقًا على متى.
- CMS SignedData — بنية صياغة رسائل التعمية (RFC 5652) التي تحمل قيمة التوقيع وشهادة المُوقِّع.
- PAdES — التوقيعات الإلكترونية المتقدّمة لـPDF: عائلة ملامح ETSI لتوقيع PDF. مشمولة بعمق في صفحات التوقيع.