التوقيع الرقمي وحماية البيانات الحساسة
كيف نثبت أن ملفًا من مصدره ولم يُعبث به، دون إخفائه؟ ⏱ نحو 45 دقيقة.
- تشرح التوقيع الرقمي وعكسه لأدوار المفاتيح.
- تستخدم التوقيع لضمان سلامة البيانات والتحديثات.
- تصمّم حماية البيانات الحسّاسة نقلًا وتخزينًا.
- تطبّق مبدأ تقليل البيانات.
١التوقيع الرقمي: من أرسل، وهل عُبث؟
التشفير يخفي المحتوى، لكن أحيانًا لا نريد إخفاءه بل إثبات مصدره وسلامته علنًا: أن هذا التحديث من الشركة فعلًا، ولم يُعدَّل. هذا التوقيع الرقمي، ويعكس أدوار المفاتيح غير المتماثلة:
| التشفير غير المتماثل | التوقيع الرقمي | |
|---|---|---|
| يوقّع/يشفّر بـ | المفتاح العام | المفتاح الخاص (للموقِّع وحده) |
| يفكّ/يتحقق بـ | المفتاح الخاص | المفتاح العام (للجميع) |
| يحقق | السرية | الأصل والسلامة وعدم الإنكار |
الموقِّع يوقّع ببصمة بياناته بمفتاحه الخاص، والجميع يتحقق بمفتاحه العام. من لا يملك الخاص لا يزوّر توقيعًا، وأي تعديل في البيانات يُفسد التحقق:
const express = require('express');const app = express();app.use(express.json());app.use(express.urlencoded({ extended: false })); app.get('/demo', async (req, res) => { const { subtle } = globalThis.crypto; // زوج مفاتيح للتوقيع (في الواقع يُولَّد مرة ويُحفظ المفتاح العام للنشر) const pair = await subtle.generateKey({ name: 'ECDSA', namedCurve: 'P-256' }, true, ['sign', 'verify']); const data = new TextEncoder().encode('تحديث رسمي v2'); const sig = await subtle.sign({ name: 'ECDSA', hash: 'SHA-256' }, pair.privateKey, data); const ok = await subtle.verify({ name: 'ECDSA', hash: 'SHA-256' }, pair.publicKey, sig, data); const bad = await subtle.verify({ name: 'ECDSA', hash: 'SHA-256' }, pair.publicKey, sig, new TextEncoder().encode('تحديث مزوّر')); // بيانات مختلفة res.json({ validSignature: ok, tamperedData: bad });}); app.listen(3000);
التوقيع على البيانات الأصلية صحيح (validSignature=true). والتحقق من التوقيع نفسه على بيانات مزوّرة يفشل (tamperedData=false). التوقيع يربط البيانات بموقّعها، ويكشف أي عبث.
٢سلامة البيانات والتحديثات
فئة A08 في OWASP: إخفاقات سلامة البرمجيات والبيانات. الثقة بتحديث أو حزمة أو بيانات دون التحقق من توقيعها تسمح للمهاجم بحقن شيفرة خبيثة. لذلك:
| الموضع | الحماية بالتوقيع |
|---|---|
| تحديثات البرامج | وقّعها، وتحقق المتلقّي قبل التثبيت |
| الحزم والمكتبات | تحقق من تواقيع المصدر (A06 و A08) |
| رموز JWT | توقيع يمنع العبث بالمطالبات (الدرس 18) |
| الوثائق الرسمية | توقيع يثبت المصدر وعدم التعديل |
التوقيع يقدّم ما لا يقدّمه التشفير وحده: عدم الإنكار — لا يستطيع الموقِّع إنكار أنه وقّع، لأن أحدًا سواه لا يملك مفتاحه الخاص.
٣حماية البيانات الحساسة
تجمع الدروس في سياسة واحدة للبيانات الحسّاسة (أرقام الهوية، العناوين، سجلّات الدفع):
| الحالة | الحماية |
|---|---|
| أثناء النقل | TLS (الدرس 20) |
| أثناء التخزين | تشفير متماثل (AES) للحقول الحسّاسة |
| كلمات المرور | تجزئة بـ bcrypt لا تشفير (الدرس 11) |
| ما لا يلزم | لا تجمعه ولا تخزّنه أصلًا (تقليل البيانات) |
توقّع وتحقّق
التوقيع الرقمي يتم بـ:
التوقيع يقدّم:
كلمات المرور تُحمى بـ:
أقوى حماية للبيانات الحسّاسة:
الخلاصة
- التوقيع الرقمي: يوقّع الموقِّع بالخاص، والجميع يتحقق بالعام.
- يقدّم الأصل والسلامة وعدم الإنكار؛ وأساس حماية التحديثات
(A08). - البيانات الحسّاسة:
TLSنقلًا، وAESتخزينًا، وbcryptلكلمات المرور. - أقوى حماية ألا تجمع ما لا يلزم؛ ما لا تخزّنه لا يُسرَّب.
تحدٍّ تصميمي: سياسة حماية البيانات
متوسطيحفظ متجر «رفيق»: كلمات مرور العملاء، وأرقام هويّاتهم، ويتلقّى تحديثات لنظامه من المورّد. ضع سياسة الحماية بملء الحقول.
- كيف تُحمى كلمات المرور، ولماذا تختلف عن أرقام الهوية.
- كيف تُحمى أرقام الهوية أثناء التخزين وأثناء النقل.
- كيف نضمن أن تحديث المورّد لم يُعبث به، وبأي مفتاح نتحقق.
- كلمات المرور بالتجزئة
- أرقام الهوية بالتشفير و TLS
- التحديث بالتوقيع
- التحقق بالمفتاح العام
💡 تلميح 1
💡 تلميح 2
💡 تلميح 3
نموذج واحد من إجابات كثيرة صحيحة.
- حماية كلمات المرور وسببها
- تُجزّأ بـ bcrypt البطيئة المملّحة، لا تُشفَّر؛ لأننا لا نحتاج استعادتها بل مقارنتها فقط، والتجزئة أحادية تمنع كشفها إن سُرّبت القاعدة.
- حماية أرقام الهوية (تخزين ونقل)
- عند التخزين تُشفَّر تشفيرًا متماثلًا
(AES)لأننا قد نحتاج استعادتها، وأثناء النقل يحميها TLS من التنصّت والعبث. - ضمان سلامة تحديث المورّد
- يوقّع المورّد التحديث بمفتاحه الخاص، ويتحقق المتجر من التوقيع بمفتاح المورّد العام قبل التثبيت؛ فأي عبث يُفسد التحقق.