الفرق الزرقاء — الدفاعمتقدم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 — كيف يعمل بسرعة
- Client Hello: قائمة cipher suites مدعومة.
- Server Hello: يختار cipher + يرسل الشهادة.
- Certificate verification: العميل يتحقق من سلسلة الشهادات حتى CA موثوق.
- Key exchange (ECDHE): يولّد مفتاح جلسة فريد.
- Finished: التحقق من سلامة المصافحة.
- تبادل البيانات بـ 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 passwordEncryption-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 سنين؟ ملفات استخباراتية؟ هويات مصادر؟ لو الإجابة "هتفضل" — يبقى الخصم بياخدها النهارده ويفك تشفيرها بكرة. ابدأ تنقل دلوقتي. اوعى تستنى.
القواعد الناشفة
- متخترعش تشفيرك بنفسك — استخدم مكتبات متشهد لها (libsodium, Tink, BoringSSL). أي حد بيقولك «أنا عملت تشفير خاص بيا» = خد بالك، ده لعب.
- استخدم AEAD دايماً (بيدمج التشفير + السلامة في عملية واحدة).
- Constant-time comparison للمفاتيح والتوكنز (متجاهلش timing attacks).
- متعيدش استخدام nonce/IV مع نفس المفتاح. ده الخطأ اللي بيقتل الكل.
- دوّر المفاتيح بانتظام، وخطّط للتدوير قبل ما تحتاجه فعلاً.
- وثّق 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.
اختار صفك.