اعرف اللي قصادك. احمي أرضك.
الفرق الزرقاء — الدفاع

Cryptography & PKI — من غير فلسفة

AES و RSA و TLS و JWT — وفين الناس بتقع

المستوى
متقدم
المدة
60m
الترتيب
الدرس 14 من 85
AESRSATLSPKIJWT

ليه لازم تفهم التشفير حتى لو مش هتطبّقه بإيدك؟

تشبيه يقرّب الفكرة
بُص. التشفير زي القفل. مش لازم تصنّعه بنفسك.. بس لو ما تعرفش الفرق بين قفل ورق وقفل فولاذ — هتحط قفل هزيل وتقول "أنا مأمّن". الحقيقة المُرّة: 99% من اختراقات التشفير مش كسر للخوارزمية. سوء استخدام منك إنت. الخوارزمية صح. إنت اللي بتستعملها غلط.

الأنواع الأساسية

Symmetric — تماثلي
مفتاح واحد بيشفّر وبيفكّ. سريع جداً. مثال: AES-GCM, ChaCha20-Poly1305. المشكلة الكلاسيكية: إزاي تشارك المفتاح ده مع الطرف التاني بأمان؟
Asymmetric — غير تماثلي
مفتاحين: عام وخاص. أبطأ بكتير، لكنه بيحل مشكلة المشاركة. مثال: RSA, ECDSA, Ed25519, Curve25519.
Hash
دالة في اتجاه واحد. مفيش رجوع. مثال: SHA-256, BLAKE2, BLAKE3.ده مش تشفير — ده للسلامة والتحقق بس.
MAC / HMAC
Hash مع مفتاح — بيضمن السلامة والمصدر مع بعض. مثال: HMAC-SHA256.

تستخدم إيه في ؟

  • تشفير بيانات: AES-256-GCM أو ChaCha20-Poly1305 (مع AEAD دائماً، لا CBC وحده).
  • تبادل مفاتيح: ECDH على Curve25519 (X25519).
  • توقيع: Ed25519 (أسرع و أأمن من RSA).
  • كلمات مرور: Argon2id (الأفضل) أو bcrypt — أبداً MD5/SHA-1/SHA-256 وحدها.
  • هاش عام: SHA-256 / BLAKE3.
  • RNG: /dev/urandom, getrandom(), crypto.randomBytes — أبداً Math.random().

TLS — كيف يعمل بسرعة

  1. Client Hello: قائمة cipher suites مدعومة.
  2. Server Hello: يختار cipher + يرسل الشهادة.
  3. Certificate verification: العميل يتحقق من سلسلة الشهادات حتى CA موثوق.
  4. Key exchange (ECDHE): يولّد مفتاح جلسة فريد.
  5. Finished: التحقق من سلامة المصافحة.
  6. تبادل البيانات بـ AES-GCM أو ChaCha20-Poly1305.

PKI — البنية التحتية للمفاتيح

  • CA — سلطة الإصدار. الجذر offline دائماً. الإصدار الفعلي عبر Intermediate CAs.
  • CRL / OCSP / OCSP Stapling — للإلغاء.
  • Certificate Transparency (CT) — كل شهادة تُسجّل في سجل عام (crt.sh).
  • HSTS preload — يجبر المتصفح على HTTPS.
  • HPKP — اتشال خلاص لأنه كان بيوقّع المواقع في رجلها، استبدله بـ Expect-CT.

إدارة الشهادات داخلياً

  • step-ca, HashiCorp Vault PKI — للـ CA الداخلي.
  • cert-manager على Kubernetes.
  • Let's Encrypt + ACME للشهادات العامة.
  • تدوير قصير المدى (90 يوم أو أقل) أفضل من شهادات سنوية.

مزالق شائعة في التطبيق

JWT — الأخطاء الكلاسيكية

  • قبول alg: none.
  • السر ضعيف يُكسر بـ hashcat.
  • عدم التحقق من aud, iss, exp.
  • تخزين JWT في localStorage بدلاً من HttpOnly cookie.
  • عدم تدوير المفاتيح.
  • Algorithm confusion RS256 → HS256 (المفتاح العام كسر).

Password Hashing

Argon2id parameters (2026)
# OWASP recommended
m=19456 KiB (19 MB)
t=2 iterations
p=1 thread
salt=128 bits random per password

Encryption-at-Rest

  • تشفير على مستوى التطبيق + تشفير على مستوى التخزين (defense in depth).
  • المفتاح في HSM / KMS، ليس في الكود.
  • Envelope encryption — KEK يشفّر DEKs.

Post-Quantum Cryptography

الحواسيب الكمومية ستكسر RSA و ECC في النهاية. NIST اختار خوارزميات ما بعد الكم في 2024:

  • ML-KEM (Kyber) — لتبادل المفاتيح.
  • ML-DSA (Dilithium) — للتوقيع.
  • SLH-DSA (SPHINCS+) — توقيع مبني على hash.

القواعد الناشفة

  1. متخترعش تشفيرك بنفسك — استخدم مكتبات متشهد لها (libsodium, Tink, BoringSSL). أي حد بيقولك «أنا عملت تشفير خاص بيا» = خد بالك، ده لعب.
  2. استخدم AEAD دايماً (بيدمج التشفير + السلامة في عملية واحدة).
  3. Constant-time comparison للمفاتيح والتوكنز (متجاهلش timing attacks).
  4. متعيدش استخدام nonce/IV مع نفس المفتاح. ده الخطأ اللي بيقتل الكل.
  5. دوّر المفاتيح بانتظام، وخطّط للتدوير قبل ما تحتاجه فعلاً.
  6. وثّق Threat Model للتشفير قبل ما تصمّم — مش بعد ما تتحرق.

غلطات الـ junior — اللي بتفجّر الإنتاج

الخلاصة الناشفة

التشفير مش سحر. هو رياضيات + انضباط في الاستخدام.

اللي بيخترع crypto = بيلعب. اللي بيستخدم libsodium ويقرا الـ docs = شغل جاد.

اكتبها على ظهر إيدك: Don't roll your own crypto. Ever.

اختار صفك.

خلّصت الدرس؟

علّمه علشان تفضل عارف انت فين على السكة.