تخطَّ إلى المحتوى
getnextpdf.com

الوقت الموثوق به: كيف يثبت الطابع الزمني وقت الحدوث

Spec: RFC 3161Spec: RFC 5816Spec: ISO 32000-2, §12.8.5

يجيب الطابع الزمني عن سؤال واحد، بسيط في ظاهره وزلق على نحو مفاجئ: هل كانت هذه البيانات موجودة بعدُ؟ لا من صنعها، ولا ما إذا كانت صحيحة — بل فقط أنّ هذه البايتات بعينها، عند لحظة محدّدة، كانت في العالم فعلًا. تبني هذه الصفحة الفكرة من الأساس: ما الذي تفعله سلطة الطوابع الزمنية، وما الذي يحتويه الرمز فعليًّا، ولماذا يصير رقمٌ على ساعة دليلًا.

وهي الرفيق المنطلق من المبادئ الأولى للصفحة المركّزة على المحرّك الطوابع الزمنية والوقت الموثوق به. اقرأ هذه أولًا إذا بدت لك عبارة “الوقت الموثوق به” مصطلحًا غامضًا.

ساعة حاسوبك اعترافٌ، لا إثبات. يمكنك ضبطها على أيّ قيمة تشاء، وكذلك يستطيع أيُّ شخص آخر. وفي اللحظة التي يصبح فيها التاريخ مهمًّا لطرف ثانٍ — عقدٌ كان يجب توقيعه قبل موعد نهائي، أو سجلٌّ كان يجب أن يوجد قبل نزاع — تصبح ساعتك أنت عديمة القيمة كدليل، لأنّك تتحكّم بها. وكامل مشكلة الوقت الموثوق به هو إيجاد ساعة لا تستطيع تحريكها.

وهذا ليس شأنًا هامشيًّا. فكل ملف ⁨PDF⁩ موقَّع طويل العمر يتّكئ عليه. إذ تنتهي صلاحية شهادة التوقيع في النهاية؛ وبعد سنوات، يحتاج المتحقِّق إلى أن يعرف أنّ التوقيع أُنشئ بينما كانت الشهادة لا تزال صالحة. ومن دون سجلٍّ مستقلٍّ لـ”متى”، يبقى ذلك السؤال بلا إجابة صادقة. الوقت الموثوق به هو الأساس الصامت الذي يقوم عليه صرح التواقيع الدائمة بأكمله.

  • يثبت الطابع الزمني أنّ جزءًا من البيانات كان موجودًا قبل لحظة معلَنة. وهذا حدٌّ أعلى للعمر، لا أكثر.
  • يُنتجه طرف ثالث، هو سلطة الطوابع الزمنية (TSA)، تثق بساعتها تحديدًا لأنّها ليست ساعتك.
  • لا ترى الـ⁨TSA⁩ بياناتك أبدًا. فهي توقّع تجزئةً لها، مربوطةً بقيمة وقت، وتعيد رمزًا موقَّعًا صغيرًا.
  • يثبت الرمز ثلاثة أمور معًا: أنّ البيانات هي البيانات (تطابق التجزئة)، وأنّ الوقت هو وقت الـ⁨TSA⁩ (توقيعها)، وأنّ الرد يطابق الطلب الذي أرسلته (الـ⁨nonce⁩ الذي تعيده صدًى، حمايةً من إعادة تشغيل استجابة أقدم).
  • وهو لا يثبت من كتب البيانات، ولا أنّ البيانات صحيحة، ولا اللحظة الدقيقة للإنشاء. فقط: ليس بعد هذا الوقت.
  • تتدفّق الثقة إلى الـ⁨TSA⁩. والـ⁨TSA⁩ الموثوقة عمومًا تكفي لأغلب السجلّات؛ أمّا الـ⁨TSA⁩ المؤهَّلة وفق eIDAS فتحمل افتراضًا قانونيًّا في الاتحاد الأوروبي.

ابدأ بالحيلة التي تقع في صميم كل شيء. أنت تريد من غريب أن يشهد على متى كانت بياناتك موجودة، لكنك لا تستطيع أن تُريه البيانات — فقد تكون سرّية، وهي على أيّ حال قد تكون ضخمة. لذا فأنت لا تفعل. بل تحسب تجزئةً: بصمةً قصيرة ثابتة الطول تتغيّر تمامًا إذا تغيّر ولو بايت واحد من الأصل، ولا يمكن استرجاع الأصل منها. ترسل البصمة، لا الملف.

تأخذ الـ⁨TSA⁩ تلك البصمة، وتُرفق بها وقتها الجاري الخاص، وتوقّع الزوج بمفتاحها الخاص، وتعيد رمز طابع زمني (Spec: RFC 3161, §2.1). والرمز هو الربط مجعولًا دائمًا: هذه البصمة، عند هذا الوقت، بشهادتي. ولأنّ الرمز موقَّع، لا يستطيع أحد — ولا حتى الـ⁨TSA⁩ بعد ذلك — تغيير الوقت من دون كسر التوقيع. ولأنّه يحمل بصمتك، فهو عديم الفائدة لأيّ ملف آخر. ولأنّ الطلب يتضمّن nonce عشوائيًّا جديدًا تعيده الـ⁨TSA⁩ صدًى من دون تغيير، يمكنك أن تعرف أنّ الرد يقابل هذا الطلب بعينه وأنّه ليس إعادة تشغيل لاستجابة أقدم — فالـ⁨nonce⁩ يشهد للحداثة، لا لهويّة من سأل (Spec: RFC 3161, §2.4.2).

تخيّل ختمًا من الشمع مضغوطًا فوق رسالة مطويّة. الختم لا يقرأ الرسالة؛ بل يثبت فقط أنّ الرسالة كانت كاملةً وحاضرةً حين ضُغط الختم. الطابع الزمني ختمٌ تضغطه ساعة لا تملكها، فوق بصمةٍ لبياناتك.

  1. Fingerprint the dataCompute a one-way hash of the file or the signature value. The data itself never leaves your hands.
  2. Ask the authoritySend the hash and a fresh random nonce to the Time-Stamp Authority.
  3. The TSA seals a timeIt signs the hash bound to its own clock and echoes your nonce, producing a small signed token.
  4. Store the tokenFor a PDF, the token is placed inside the file so the proof travels with the document.
  5. Verify laterAnyone who trusts the TSA can check the token: its signature against the TSA certificate, the matching hash, the echoed nonce, and the time — then concludes an upper bound on age.
كيف يُحصَل على طابع زمني موثوق وما الذي يثبته: تذهب تجزئة مع nonce جديد إلى الـTSA، وتوقّع الـTSA تلك التجزئة مربوطةً بوقتها وتعيد الـnonce صدًى، ويفحص المتحقِّق كل رابط قبل اعتبار الرمز دليلًا على أنّ البيانات كانت موجودة قبل الوقت المعلَن.

في ملف ⁨PDF⁩، تلبس هذه الآليّة نفسها قبّعتين. الطابع الزمني للتوقيع يختم متى طُبّق التوقيع، بوضع طابع زمني على قيمة التوقيع. أمّا الطابع الزمني للمستند فيختم متى وُجد الملف بأكمله، بحساب تجزئة كامل ملف ⁨PDF⁩ (مستثنيًا الموضع المخصَّص الذي سيشغله الرمز) وتخزين الرمز المُعاد في ذلك الموضع (Spec: ISO 32000-2, §12.8.5). والنوع الثاني هو ما يجدّده التوقيع الأرشيفي الطويل العمر عبر السنين ليُبقي ثقته حديثة.

تفصيلٌ حديثٌ واحد جدير بالمعرفة: كانت صيغة طابع زمني أقدم تثبّت نفسها على خوارزمية تجزئة واحدة لتسمية شهادة الـ⁨TSA⁩ الخاصة. أمّا الملف التعريفي المحدَّث فيتيح للرمز أن يُسمّي شهادته بتجزئة حديثة بدلًا من ذلك (Spec: RFC 5816, §2.1)، فلا يرث الوقت الموثوق به بهدوء تشفير الأمس.

أنت لا تركّب رمزًا يدويًّا، ولا ينبغي أن ترغب في ذلك. الشيء الجدير بالفهم هو منفذ الثقة: أيّ ساعة تختار أن تصدّق. في ⁨NextPDF⁩، يجعل طلبُ مستوى توقيعٍ يحتاج إلى وقت موثوق به ذلك الاختيار صريحًا بدلًا من ضمنيّ.

<?php
declare(strict_types=1);
use NextPDF\Security\Signature\SignatureLevel;
// A baseline signature trusts only the signer's own clock.
$baseline = SignatureLevel::PAdES_B_B;
$baseline->requiresTimestamp(); // false → no third party vouches for "when"
// Stepping up to B-T means a Time-Stamp Authority must be supplied:
// from here on, "when" is attested by a clock you do not control.
$timestamped = SignatureLevel::PAdES_B_T;
$timestamped->requiresTimestamp(); // true → a TSA is now part of your trust model
// The decision is now visible at the call site, not buried in a default.
// Choosing the TSA is choosing whose time becomes your evidence.

ليست العبرة من المثال هي الـ⁨API⁩. بل هي أنّ سؤال “هل لديّ وقت موثوق به؟” حقيقةٌ بنعم أو لا حول مستندك، يحدّدها ما إذا كانت الـ⁨TSA⁩ في الحلقة — والمحرّك يرفض أن يدع تلك الحقيقة غامضة.

الفخّ هو قراءة الطابع الزمني على أنه “أُنشئ هذا عند الساعة 14:32.” فهو لا يقول شيئًا من هذا القبيل. بل يقول “وُجد هذا في موعد لا يتجاوز الساعة 14:32.” والفرق هو جوهر المسألة كلها. الطابع الزمني حدٌّ أعلى، لا حدٌّ أدنى أبدًا ولا لحظة دقيقة. فقد تكون بياناتك موجودة سنوات قبل أن تتفرّغ لوضع طابع زمني عليها؛ والرمز صامت عن ذلك. فهو يرسم خطًّا واحدًا ويقول: ليس بعد هنا.

ومفهوم خاطئ ثانٍ أكثر كلفةً: أنّ الطابع الزمني يثبت أنّ مستندك أصيل أو صحيح. فهو لا يثبت أيًّا منهما. إنّه غير مكترث بالمعنى. فالكذبة الموقَّعة بطابع زمني مثاليّ تظل كذبة — قديمةً الآن على نحو قابل للإثبات. الأصالة تأتي من التوقيع الذي يقول من؛ والصدق يأتي من العالم. أمّا الطابع الزمني فلا يتحدّث أبدًا إلا عن متى.

مدى الطابع الزمني يتوقّف تمامًا عند حدود نموذج ثقته. فهو يثبت حدًّا أعلى للعمر، وذلك فقط، وفقط إن وثقت بالسلطة التي ختمته.

ثمة طبقتان من السلطة جديرتان بالتمييز. الـTSA الموثوقة عمومًا تتسلسل إلى شهادة تقبلها برمجياتك أصلًا؛ فرموزها قابلة للتحقّق على نطاق واسع وملائمة لأغلب السجلّات. أمّا الـTSA المؤهَّلة وفق eIDAS فهي مزوّد خاضع للإشراف على قائمة موثوقة في الاتحاد الأوروبي، والطابع الزمني الإلكتروني المؤهَّل يحمل افتراضًا قانونيًّا بدقّة تاريخه وسلامة البيانات — افتراضًا لا يحمله الطابع الزمني العاديّ (Spec: eIDAS, Art. 41). والاختيار بينهما سؤالٌ عن الوزن الإثباتيّ الذي تحتاجه، لا عن كيفية عمل البايتات؛ فالتشفير هو نفسه.

كما يرث الطابع الزمني عمر مراسي ثقته الخاصة. فشهادة الـ⁨TSA⁩ قد تنتهي صلاحيتها أو تُلغى، وخوارزمية التجزئة التي استخدمتها قد تتقادم. ولذلك تحديدًا لا تضع المستندات الطويلة العمر طابعًا زمنيًّا واحدًا وتمضي بعيدًا — بل تجدّد، مُراكِمةً طابعًا زمنيًّا جديدًا للمستند فوق الدليل القديم قبل أن يضعف الدليل القديم. وحلقة التجديد تلك موضوعٌ بذاته؛ انظر التحقّق طويل الأمد.

RFC 3161 trusted timestamping (signature and document timestamps) — edition availability
EditionAvailability
Core

يدعم PAdES B-B وB-T. B-B هو التوقيع الأساسيّ بلا طابع زمني؛ وB-T يطلب ويضمّن طابعًا زمنيًّا متحقَّقًا منه على RFC 3161 للتوقيع مقابل TSA يوفّره النشر تختار ساعتها.

Pro

يضيف بيانات التحقّق طويل الأمد المضمَّنة (الشهادات، وOCSP، وCRLs) التي يحتاجها B-LT لإبقاء التوقيع قابلًا للتحقّق بعد انتهاء صلاحية شهاداته.

Enterprise

يضيف حلقة تجديد B-LTA، فيختم بيانات التحقّق تحت طابع زمني جديد للمستند ويُعيد ختمها قبل أن تضعف الحماية.

  • سلطة الطوابع الزمنية (TSA) — خدمة مستقلة تُصدِر رموز طوابع زمنية موقَّعة. تثق بساعتها تحديدًا لأنّها ليست ساعتك.
  • رمز الطابع الزمني — الكائن الموقَّع الصغير الذي تعيده الـ⁨TSA⁩، رابطًا تجزئةً لبياناتك بقيمة وقت (Spec: RFC 3161, §2.1).
  • التجزئة (بصمة الرسالة) — بصمة قصيرة أحادية الاتجاه للبيانات. توقّع الـ⁨TSA⁩ هذه، لا البيانات نفسها أبدًا، فيبقى محتواك خاصًّا.
  • Nonce — رقم عشوائيّ جديد يُرسَل مع الطلب ويُعاد صدًى من دون تغيير في الرد، يُظهِر أنّ الرمز يقابل ذلك الطلب بعينه وأنّه ليس استجابةً قديمةً معادة التشغيل (يشهد للحداثة، لا لهويّة السائل).
  • الحدّ الأعلى — ما يرسّخه الطابع الزمني: أنّ البيانات وُجدت في موعد لا يتجاوز اللحظة المعلَنة. وليس لحظة إنشاء دقيقة أبدًا.
  • الطابع الزمني المؤهَّل وفق eIDAS — طابع زمني من مزوّد أوروبيّ خاضع للإشراف يحمل افتراضًا قانونيًّا بدقّة التاريخ وسلامة البيانات.
  • الطابع الزمني للمستند — طابع زمني على كامل ملف ⁨PDF⁩، يُستخدَم لترسيخ وتجديد أدلّة التحقّق طويل الأمد (Spec: ISO 32000-2, §12.8.5).