Cryptology Academy · درس

إنشاء المفاتيح وNonces وIVs بأمان

استخدم secrets وos.urandom وواجهات التغليف الآمنة في Python وNode

الدرس 4 من 413 خطوة

إنشاء المفاتيح وNonces وIVs بأمان درس مجاني في Cryptology Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cryptology Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

الفئات الثلاث

تحتاج ثلاث قيم تشفيرية متميزة إلى توليد آمن: (1) المفاتيح — طويلة الأمد، ويجب أن تكون غير قابلة للتنبؤ وسرية. (2) IV — لكل رسالة، وقد تكون علنية، لكن يجب أن تكون غير قابلة للتنبؤ في CBC أو فريدة في GCM. (3) قيم nonce — يجب أن تكون فريدة في كل استخدام، وقد تكون عشوائية أو غير عشوائية.

المفاتيح المتماثلة

AES-128: secrets.token_bytes(16). AES-256: secrets.token_bytes(32). ChaCha20: secrets.token_bytes(32). لا تشتقوا المفاتيح من كلمات المرور دون استخدام KDF ‏(PBKDF2/Argon2). ولا تعيدوا استخدام المفاتيح بين خوارزميات أو أغراض مختلفة.

توليد المفاتيح غير المتماثلة

from cryptography.hazmat.primitives.asymmetric import ec, rsa rsa_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) ec_key = ec.generate_private_key(ec.SECP256R1()) # تتولى المكتبة داخليًا توفير مصدر الإنتروبيا

IV لـ AES-CBC

يتطلب AES-CBC قيمة IV عشوائية موزعة توزيعًا منتظمًا بطول 16 بايت لكل رسالة. لا تعيدوا استخدام IV مع المفتاح نفسه مطلقًا. ولا تستخدموا عدادًا بوصفه IV في نمط CBC. وللتوليد: iv = os.urandom(16). أضيفوا IV إلى بداية النص المشفر؛ فلا يلزم أن يكون سريًا، بل يجب فقط ألا يكون قابلًا للتنبؤ.

Nonce لـ AES-GCM

يتطلب AES-GCM قيمة nonce فريدة بطول 96 بت لكل زوج (key, message). تؤدي إعادة استخدام nonce إلى كسر GCM بشكل كارثي؛ إذ يسترد المهاجم مفتاح المصادقة ويمكنه تزوير الرسائل. استخدموا إما nonce عشوائيًا بطول 12 بايت (يبلغ حد عيد الميلاد عند 2^32 رسالة) أو عدادًا.

قيم nonce المعتمدة على العداد

للتشفير عالي الحجم باستخدام مفتاح واحد: حافظوا على عداد مستمر لكل مفتاح. nonce = counter.to_bytes(12, "big"). زيدوا العداد بعد كل عملية تشفير. خزّنوا العداد في تخزين مستمر، إذ تؤدي إعادة ضبطه عند إعادة التشغيل إلى إعادة الاستخدام.

AEADs المقاومة لسوء استخدام nonce

تتميز AES-GCM-SIV وDeoxys-II بمقاومة سوء استخدام nonce: إذ تؤدي إعادة استخدام nonce إلى خفض الأمان إلى مستوى التشفير الحتمي، من دون تسريب مفتاح المصادقة. ويُنصح بهما عندما يصعب ضمان تفرد nonce، كما في الأنظمة الموزعة وسيناريوهات التعطل وإعادة التشغيل.

HKDF لاشتقاق المفاتيح

لا تستخدموا مادة المفتاح الخام مباشرة لأغراض متعددة. اشتقوا مفاتيح مخصصة لكل غرض: from cryptography.hazmat.primitives.kdf.hkdf import HKDF. hkdf = HKDF(SHA256(), 32, salt, info=b"enc_key"). key = hkdf.derive(master_key). استخدموا قيمة info مختلفة لكل غرض.

مفاتيح الجلسات

اشتقوا مفاتيح خاصة بكل جلسة من سر مشترك (مثل مخرجات ECDH) باستخدام HKDF. يشتق TLS 1.3 مفاتيح منفصلة للعميل والخادم من أجل المصافحة وبيانات التطبيق. وتعزل مفاتيح الجلسات أثر الاختراق؛ فمعرفة مفتاح جلسة واحدة لا تكشف شيئًا عن الجلسات الأخرى.

تغليف المفاتيح

لتخزين مفتاح بأمان، غلّفوه باستخدام مفتاح تشفير المفاتيح (KEK) مع AES-KW ‏(RFC 3394) أو AES-GCM. ويمكن تخزين المفتاح المغلف في قاعدة بيانات أو نقله. ويُخزن KEK في HSM أو مخزن مفاتيح مدعوم عتاديًا، مثل Android Keystore وApple Secure Enclave.

قائمة تدقيق

قبل النشر، تحققوا مما يلي: (1) جميع المفاتيح مولدة باستخدام os.urandom/secrets. (2) لا توجد مفاتيح أو IVs مضمنة في الشيفرة. (3) لا يعاد استخدام IVs مع المفتاح نفسه. (4) قيم nonce في GCM فريدة لكل رسالة. (5) تحديد جدول زمني لتدوير المفاتيح. (6) يستخدم اشتقاق المفاتيح HKDF مع سلاسل info متميزة.

اختبار سريع

ما نتيجة إعادة استخدام nonce في AES-GCM؟

مراجعة

تحتاج المفاتيح إلى توليد عشوائي حقيقي؛ وتحتاج IVs في CBC إلى العشوائية؛ وتحتاج قيم nonce في GCM إلى التفرد. استخدموا os.urandom/secrets، واشتقوا المفاتيح باستخدام HKDF، وغلّفوها باستخدام KEKs. تحمي AEADs المقاومة لسوء استخدام nonce من إعادة الاستخدام غير المقصودة. التالي: براهين المعرفة الصفرية.

البدء مجانًا

تعلم Cryptology Academy مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
67
الدروس
261

الأسئلة الشائعة

هل درس «إنشاء المفاتيح وNonces وIVs بأمان» مجاني؟

نعم — نص درس «إنشاء المفاتيح وNonces وIVs بأمان» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cryptology Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء المفاتيح وNonces وIVs بأمان»؟

استخدم secrets وos.urandom وواجهات التغليف الآمنة في Python وNode تتمرن على Cryptology Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cryptology Academy؟

لا تُشترط خبرة سابقة. Cryptology Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «إنشاء المفاتيح وNonces وIVs بأمان»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cryptology Academy هذا؟

نعم. كل درس في Cryptology Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. العشوائية الحقيقية مقابل شبه العشوائية
  2. مولّدات PRNG الآمنة تشفيريًا
  3. استنزاف الإنتروبيا وأخطاء المفاتيح الضعيفة
  4. إنشاء المفاتيح وNonces وIVs بأمان
← العودة إلى Cryptology Academy