الفرق الزرقاء — الدفاعمتقدم60mL14

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

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

#AES#RSA#TLS#PKI#JWT

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

تشبيه — شرح مبسط
بُص. التشفير زي القفل. مش لازم تصنّعه بنفسك.. بس لو ما تعرفش الفرق بين قفل ورق وقفل فولاذ — هتحط قفل هزيل وتقول "أنا مأمّن". الحقيقة المُرّة: 99% من اختراقات التشفير مش كسر للخوارزمية. سوء استخدام منك إنت. الخوارزمية صح. إنت اللي بتستعملها غلط.
واقعة Adobe 2013
153 مليون باسورد اتسرّبت. الـ Adobe كانت بتستخدم 3DES في ECB mode + بدون salting حقيقي. اللي بيحصل فعلياً: نفس الباسورد بياخد نفس الـ ciphertext لكل user. فيه واحد عمل crossword puzzle من الـ password hints وحلّها كلها. الخوارزمية ما اتكسرتش — Adobe بنفسها بنت "زتونة" تشفير.

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

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

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

  • تشفير بيانات: 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().
ما تقربش من دول
MD5, SHA-1, RC4, DES/3DES, ECB mode, CBC من غير MAC، RSA بـ PKCS#1 v1.5 padding، والـ hardcoded IVs. أي حد بيستخدم حاجة من دول في 2026 = إما ما يعرفش، أو ما يهمّوش.

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.
TLS 1.3 يحذف
MD5, SHA-1, RC4, DES, RSA key transport, CBC modes, compression، و كل ما لا يدعم AEAD.افرض TLS 1.2 كحد أدنى، 1.3 مفضّل.

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.
Harvest now, decrypt later
المهاجمين دلوقتي بيجمعوا البيانات المشفّرة وبيستنّوا. - طب يا حضرتك ده هيحصل امتى يعني؟ ٢٠٤٠؟ ٢٠٥٠؟ يا نجم، انت متأكد إن الداتا اللي عندك دلوقتي مش هتفضل حساسة بعد 10 سنين؟ ملفات استخباراتية؟ هويات مصادر؟ لو الإجابة "هتفضل" — يبقى الخصم بياخدها النهارده ويفك تشفيرها بكرة. ابدأ تنقل دلوقتي. اوعى تستنى.

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

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

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

لو فات عليك ده، يبقى مش بتراقب
  • بيستخدم Math.random() لتوليد session tokens. الـ token متوقّع. الـ account takeover في 5 دقائق.
  • الـ JWT secret = "secret123". hashcat بيكسره في ثواني.
  • بيشفّر بـ AES-CBC من غير MAC. Padding oracle attack بيفك كل الـ ciphertext.
  • بيخزّن المفتاح جنب الداتا في نفس الـ DB. اختراق واحد = كل حاجة بايظة.
  • الـ TLS cert منتهي من 6 شهور والـ alerting مقفول "علشان كان بيدوّش".

الخلاصة: لو الـ developer مش فاهم AEAD ولا nonce reuse — مش هيعرف يأمّن أي حاجة. التدريب أرخص من الـ breach.

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

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

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

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

اختار صفك.