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

نموذج أمان التشفير والتوقيع

تحدد هذه الصفحة نموذج الأمان للسطحين التشفيريين اللذين يتيحهما المحرك الأساسي: تشفير المستند باستخدام ⁨Advanced Encryption Standard 256-bit⁩ (⁨AES-256⁩)، وتوقيع المستند باستخدام ⁨Cryptographic Message Syntax⁩ (⁨CMS⁩)/⁨PDF Advanced Electronic Signatures⁩ (⁨PAdES⁩). وتوضح ما تحميه كل آلية، وما لا تحميه، وأين يقع حد الثقة.

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

Terminal window
composer require nextpdf/core:^3

يتطلب مسارا التوقيع و⁨CMS⁩ توفر ext-openssl.

في المحرك الأساسي، يستخدم التشفير معالج الأمان ⁨AES-256⁩ وفق ⁨ISO 32000-2⁩ §7.6 (⁨AESV3⁩, ⁨Revision 6⁩) (iso32000_2_sec7#x1.x65.p29). وهو يوفّر السرّية: فلا يستطيع طرف لا يملك كلمة المرور قراءة محتوى السلاسل النصية والتدفقات. وهو لا يوفّر السلامة أو الأصالة. فما زال من الممكن اقتطاع النص المشفّر أو استبداله. ينبغي أن يكتشف توقيع أو رمز مصادقة رسالة للمستند (⁨MAC⁩) تلك الحالة، أما معالج التشفير فلا يفعل ذلك.

الأذونات (الطباعة والنسخ والتعديل) قضية منفصلة يسهل إساءة فهمها. إن أعلام الأذونات في ⁨ISO 32000-2⁩ قائمة على تعاون القارئ (iso32000_2_sec7#x1.x71.p27). يحترمها القارئ المتوافق، لكنها بيانات وصفية إرشادية، وليست تحكماً تشفيرياً في الوصول. يمكن لأداة غير متعاونة تجاهلها. يخرجها المحرك كما هي محددة، لكنه لا يستطيع فرضها.

في التوقيع، يضمّن المحرك بنية ⁨CMS SignedData⁩ كما ترد في ⁨ISO 32000-2⁩ §12.8. نطاق البايتات الموقَّع كائن مباشر، ويستبعد الملخص عمداً قيمة Contents الخاصة بالتوقيع (iso32000_2_sec12#x1.x121.p45)، بحيث يغطي التوقيع المستند من دون أن يغطي نفسه.

لا تكرر هذه الصفحة مرجع التوقيع. نقاط دخول التشفير ومنسّق التوقيع موصوفة في /modules/core/security/ و/modules/core/security/signing/. يُعنى هذا النموذج بالمعنى والحدود، لا بصيغ التوابع.

يحمي التشفير السرّية تجاه الأطراف التي لا تملك كلمة المرور، ولا أكثر من ذلك:

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = new Document();
// AES-256 (AESV3 R6). The owner/user passwords gate read access only.
// Permission flags below are advisory: a conforming reader honors them.
$doc->encrypt(
userPassword: 'open-secret',
ownerPassword: 'owner-secret',
);
$doc->save('confidential.pdf');

يطبّق مسار توقيع إنتاجي توقيعاً أساسياً وفق ⁨CMS/PAdES⁩ باستخدام مفتاح محفوظ برمجياً. ينتج إصدار ⁨Core⁩ المستوى ⁨PAdES B-B⁩. وعند تهيئة سلطة طابع زمني، ينتج إصدار ⁨Core⁩ المستوى ⁨PAdES B-T⁩، وهو ⁨B-B⁩ مضافاً إليه سمة غير موقَّعة واحدة من نوع ⁨RFC 3161 signature-time-stamp⁩:

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Security\Signature\CertificateInfo;
use NextPDF\Security\Signature\SignatureLevel;
$cert = CertificateInfo::fromPkcs12('signer.p12', 'pin');
$doc = new Document();
// B-B is the default. B-T adds a trusted timestamp over the signature value.
$doc->setSignature($cert, SignatureLevel::PAdES_B_B);
$doc->save('signed.pdf');

⁨PAdES⁩ ⁨B-T⁩ هو تحديداً ⁨B-B⁩ مضافاً إليه سمة غير موقَّعة واحدة من نوع ⁨RFC 3161⁩ signature-time-stamp محمولة في ⁨CMS⁩ SignerInfo (rfc5652#p603). يربط الطابع الزمني قيمة التوقيع بوقت موثوق من سلطة طابع زمني (rfc3161#p208). وهو لا يضيف قاموس بيانات تحقق، ولا بنية معلومات إبطال، ولا حلقة طابع زمني للأرشفة. تلك مستويات طويلة الأمد متمايزة وذات نطاق مستقل، وهي ليست جزءاً من سطح ⁨B-B/B-T⁩ وخارجة عن نطاق هذه الصفحة.

⁨U-1.⁩ لا يدّعي ⁨NextPDF⁩ أي اعتماد مستقل وفق ⁨ETSI EN 319 142-1⁩ لـ⁨PAdES B-T.⁩ إن ⁨EN 319 142-1⁩ ليس ضمن مجموعة التحقق المستخدمة هنا. يُتحقَّق من متطلب ⁨B-T signature-time-stamp⁩ مقابل ⁨ETSI EN 319 122-1⁩ §5.3 — أساس ⁨CMS Advanced Electronic Signatures⁩ (⁨CAdES⁩) الذي تستورده عائلة ⁨EN 319 142⁩ ⁨PAdES⁩ بالإحالة (etsi_en_319_122_1#6.x40.p96) — إلى جانب ⁨RFC 3161⁩ و⁨RFC 5652⁩ و ⁨ISO 32000-2⁩ §12.8. لا يُعد دعم ملف التعريف ⁨B-T⁩ اعتماد توافق ولا اعتماد صلاحية قانونية. يتولى مُتحقِّق مستقل إصدار ذلك الحكم.

  • التشفير ≠ السلامة. قد يتلقى القارئ القادر على فتح المستند، رغم ذلك، نسخة عُبث بها. لا يكتشف ذلك إلا توقيع (أو ⁨MAC⁩ للمستند). “مقاومة العبث” ليست خاصية يوفّرها معالج التشفير، ولا يُستخدم المصطلح بوصفه ادعاءً للمنتج.
  • وجود التوقيع لا يعني صلاحيته. كون المستند يحمل قاموس توقيع لا يقول شيئاً عمّا إذا كانت الشهادة موثوقة أو غير منتهية الصلاحية أو غير مُبطَلة. إثبات الصلاحية عملية على جانب المُتحقِّق تحكمها سياسة الطرف المعتمِد، لا الموقِّع.
  • ثقة الطابع الزمني خارجية. لا يستمد الطابع الزمني ⁨B-T⁩ معناه إلا بقدر الثقة التي يوليها المُتحقِّق لسلطة الطابع الزمني (⁨TSA⁩) التي أصدرته. تحصل المكتبة على الرمز المميّز وتضمّنه. وهي لا تكفل ⁨TSA.⁩
  • وضع ⁨FIPS⁩ بيئي. التشغيل على وحدة تشفيرية معتمدة وفق ⁨FIPS⁩ خاصية للبيئة التشغيلية وللوحدة (fips_140_3#x12)، وليس شيئاً يمكن لمكتبة ⁨PHP⁩ أن تدّعيه نيابة عن الجهة المستدعية لها.

يحسب مسار التوقيع ملخصاً واحداً لنطاق البايتات وبنية ⁨CMS⁩ واحدة. يضيف امتداد ⁨B-T⁩ رحلة ذهاب وعودة متزامنة واحدة إلى سلطة الطابع الزمني. التشفير عملية متماثلة تُطبَّق ⁨per-string/per-stream.⁩ ولا يهيمن أيٌّ منهما على عملية عرض نمطية. رحلة الذهاب والعودة عبر الشبكة من أجل ⁨B-T⁩ هي الكلفة المتغيرة، وهي تعتمد على اختيار المستدعي لـ⁨TSA.⁩

بيانات الحدود، معادٌ صياغتها كقواعد قابلة للإنفاذ للمراجِعين:

  1. السرّية فقط. يحمي تشفير ⁨AES-256⁩ المحتوى من الأطراف التي لا تملك كلمة المرور. وهو لا يوفّر السلامة أو الأصالة أو التحكّم في الوصول (iso32000_2_sec7#x1.x65.p29).
  2. الأذونات استرشادية. أعلام الأذونات قائمة على تعاون القارئ وغير مفروضة تشفيرياً (iso32000_2_sec7#x1.x71.p27). يجب ألا تدّعي صياغة المنتج أنها تمنع إجراءً ما.
  3. ⁨B-B⁩ و⁨B-T⁩ فقط في هذه الصفحة. يغطي سطح التوقيع في ⁨core/Pro⁩ الموثَّق هنا ⁨B-B⁩ وامتداد الطابع الزمني ⁨B-T⁩ الخاص به، مع إيراد كل ذِكر لـ⁨B-T⁩ بمحاذاة تنبيه ⁨U-1⁩ الوارد أعلاه. المستويات الأرشيفية طويلة الأمد سطح منفصل خاص بالإصدارات المدفوعة، ولا تُوصف هنا عمداً. لا تدّعي هذه الصفحة أي قدرة على بيانات التحقق أو معلومات الإبطال أو الطابع الزمني للأرشفة.
  4. لا ادعاء بصلاحية قانونية. التوقيع المنتَج أثر تشفيري. أما كونه صالحاً قانونياً فيعتمد على الاختصاص القضائي وسياسة الشهادة والطرف المعتمِد، لا على هذه المكتبة.

الدعم ليس توافقاً. ينتج المحرك مخرجات تستخدم البنى المُستشهَد بها من ⁨ISO 32000-2⁩ و⁨RFC 3161⁩ و⁨RFC 5652⁩ و⁨ETSI EN 319 122-1.⁩ ولا يدّعي المحرك توافقاً وفق ⁨PAdES⁩ أو ⁨CAdES⁩ أو ⁨eIDAS.⁩ اعتماد ⁨FIPS 140-3⁩ خاصية ⁨module/environment⁩ (fips_140_3#x12)، وليس ادعاءً للمكتبة. يتولى مُتحقِّق أو مُقيِّم مستقل إصدار أي حكم بشأن التوافق أو الصلاحية القانونية.