0Pricing
Cryptology Academy · درس

أخطاء التشفير الشائعة في Python والأنماط الآمنة

تجنّب المفاتيح المضمّنة في الكود ونمط ECB والمقارنات غير ذات الزمن الثابت وغيرها

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

أخطر أخطاء التشفير

من السهل استخدام التشفير بطريقة خاطئة. ومن أكثر الأخطاء الشائعة في Python: المفاتيح المضمّنة في الشيفرة، ونمط ECB، والمقارنات غير ذات الزمن الثابت، والعشوائية الضعيفة، وإعادة استخدام المفاتيح أو nonce، وابتكار خوارزمية تشفير خاصة بكم.

المشكلة 1: المفاتيح المضمّنة في الشيفرة

لا تضمّنوا المفاتيح في الشيفرة المصدرية مطلقًا. فقد تظهر في سجل git، والسجلات، ورسائل الخطأ. استخدموا متغيرات البيئة أو KMS:

# WRONG
SECRET_KEY = b"my_secret_key_12"  # visible in git!

# RIGHT
import os
SECRET_KEY = os.environb.get(b"SECRET_KEY") or os.urandom(32)
# Or load from KMS at startup

المشكلة 2: نمط ECB

يشفّر AES-ECB كل كتلة على نحو مستقل — فتنتج الكتل المتطابقة من النص الواضح كتلًا مشفّرة متطابقة. ويكشف هجوم "بطريق ECB" الأنماط في الصور والبيانات المنظّمة. استخدموا دائمًا GCM أو CBC مع IV عشوائي.

# WRONG — never use ECB
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
cipher = Cipher(algorithms.AES(key), modes.ECB())  # insecure!

# RIGHT
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
aesgcm = AESGCM(key)  # authenticated encryption

المشكلة 3: مقارنة MAC غير ذات زمن ثابت

يؤدي استخدام == لمقارنة MAC إلى تسريب معلومات التوقيت. استخدموا دائمًا hmac.compare_digest:

import hmac

# WRONG — leaks timing
if received_mac == expected_mac:
    pass

# RIGHT — constant-time
if hmac.compare_digest(received_mac, expected_mac):
    pass

المشكلة 4: توليد أرقام عشوائية ضعيفة

لا تستخدموا وحدة random للأغراض التشفيرية مطلقًا — فهي ليست CSPRNG. استخدموا secrets أو os.urandom:

import random, secrets, os

# WRONG
key = bytes([random.randint(0, 255) for _ in range(32)])  # predictable!

# RIGHT
key = os.urandom(32)          # OS CSPRNG
token = secrets.token_bytes(32)  # secrets module wrapper

المشكلة 5: إعادة استخدام IV/Nonce

تؤدي إعادة استخدام IV مع CBC أو nonce مع GCM إلى كسر الأمان. أنشئوا IV/nonce عشوائية جديدة لكل عملية تشفير، وخزّنوها إلى جانب النص المشفّر:

import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)

# WRONG — fixed nonce
nonce = b"\x00" * 12  # reuse breaks GCM!

# RIGHT — fresh nonce every time
nonce = os.urandom(12)
ciphertext = aesgcm.encrypt(nonce, b"data", None)

المشكلة 6: استخدام MD5 أو SHA-1 للأمان

أصبح MD5 وSHA-1 مكسورين تشفيريًا فيما يتعلق بمقاومة التصادمات. لا تستخدموهما مطلقًا للتوقيعات الرقمية أو بصمات الشهادات أو HMAC. استخدموا SHA-256 أو SHA-3-256.

المشكلة 7: ابتكار خوارزمية تشفير خاصة بكم

يؤدي تنفيذ البدائيات التشفيرية من الصفر إلى إدخال أخطاء دقيقة في معظم الحالات. استخدموا حزم cryptography أو PyNaCl أو PyCA. ولا تنفذوا AES أو RSA أو ECDSA بأنفسكم مطلقًا.

نمط آمن: PyNaCl للتشفير عالي المستوى

تغلّف PyNaCl مكتبة NaCl/libsodium وتوفر واجهة ذات خيارات محددة يصعب إساءة استخدامها:

# pip install PyNaCl
import nacl.secret
import nacl.utils

key = nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE)
box = nacl.secret.SecretBox(key)

encrypted = box.encrypt(b"my secret message")
decrypted = box.decrypt(encrypted)
print("Decrypted:", decrypted)  # Uses XSalsa20-Poly1305

نمط آمن: تجزئة كلمات المرور باستخدام Argon2

استخدموا argon2-cffi لتجزئة كلمات المرور — ولا تستخدموا SHA-256 أو bcrypt مباشرةً مطلقًا:

# pip install argon2-cffi
from argon2 import PasswordHasher

ph = PasswordHasher(time_cost=3, memory_cost=65536, parallelism=4)
hash_val = ph.hash("user_password")
print("Hash:", hash_val[:40], "...")

# Verify
try:
    ph.verify(hash_val, "user_password")
    print("Password correct")
except Exception:
    print("Wrong password")

تصفير المفاتيح

بعد استخدام مفتاح في الذاكرة، صفّروه لتقليل الفترة التي تكون فيها الذاكرة عرضة لهجمات تفريغها. تجعل GC في Python ذلك صعبًا — استخدموا ctypes أو PyNaCl التي تتولى ذلك تلقائيًا.

اختبار المعرفة

ما الدالة في Python التي يجب استخدامها بدلًا من == عند مقارنة MAC التشفيرية؟

مراجعة الدرس

تجنبوا المفاتيح المضمّنة في الشيفرة، ونمط ECB، واستخدام == لمقارنة MAC، ووحدة random، وإعادة استخدام nonce. استخدموا os.urandom/secrets للعشوائية، وAESGCM للتشفير، وhmac.compare_digest للتحقق. توفر PyNaCl وargon2-cffi واجهات عالية المستوى وآمنة للتشفير المتماثل وكلمات المرور.

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

هل درس «أخطاء التشفير الشائعة في Python والأنماط الآمنة» مجاني؟

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

ماذا ستتعلم في «أخطاء التشفير الشائعة في Python والأنماط الآمنة»؟

تجنّب المفاتيح المضمّنة في الكود ونمط ECB والمقارنات غير ذات الزمن الثابت وغيرها تتمرن على Cryptology Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «أخطاء التشفير الشائعة في Python والأنماط الآمنة»؟

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

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

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

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

  1. نظرة عامة على مكتبة Python cryptography
  2. تشفير AES-GCM وفك تشفيره في Python
  3. أزواج مفاتيح RSA وECDSA في Python
  4. أخطاء التشفير الشائعة في Python والأنماط الآمنة
← العودة إلى Cryptology Academy