تشفير AES للمطورين عندما تحتاجه وطريقة عمله

نُشرت في
تشفير AES للمطورين: متى تحتاجه وكيف يعمل 1
إعلان · حذف؟

إذا كنت تُخزن بيانات حساسة — مثل بيانات المستخدم (PII)، مفاتيح الـ API، السجلات المالية — فإن تشفير AES هو الأداة التي تلجأ إليها. فهو المعيار الصناعي لتشفير البيانات المُخزنة بشكل متماثل: سريع، مُختبر جيدًا، ويدعم بشكل مدمج في كل لغة رئيسية.

لكن استخدام AES بشكل خاطئ يكون أسوأ من غير فائدة. يُكشف نمط البيانات في وضع ECB. استخدام مفتاح مُكرر مع GCM يُهدد تأمينه تمامًا. ووضع مفتاحك بجانب النص المُشفّر يُفقد الهدف الأساسي.

إليك ما تحتاجه لاستخدام AES بشكل صحيح في التطبيقات الإنتاجية.

ما هو AES؟

AES (الإطار المُطور للتشفير) هو تشفير متماثل يُستخدم على وحدات محددة بحجم 128 بت. المُتماثل يعني أن نفس المفتاح يستخدم للتوثيق والتشفير. التشفير المُتماثل يعني أنه يعمل على وحدات محددة بحجم 128 بت.

أُدخل في عام 2001 بدل DES، ويتواجد اليوم في كل مكان: التشفير في الـ TLS، تشفير الأقراص، أدوات إدارة كلمات المرور، تشفير الحقول في قواعد البيانات. على عكس التشفير غير المتماثل (مثل RSA أو ECDH)، فإن AES سريع بما يكفي لتشفير كميات كبيرة من البيانات في الوقت الحقيقي. التنازل: يجب أن يكون لدى الطرفين نفس المفتاح، لذا يصبح توزيع المفتاح مشكلة.

AES-128 مقابل AES-256: أي حجم مفتاح؟

يأتي AES بثلاثة أحجام للفتح: 128، 192، و256 بت. في الممارسة، ستحدد بين 128 و256.

AES-128AES-256
طول المفتاح128 بت256 بت
الدورات1014
أداءأسرعبطء حوالي 40%
حمايةقوي — لا توجد هجوم مُمارَس مُعرفأقوى — مُقاوم للذكاء الاصطناعي في المستقبل
إدانةمقبول لمعظم التطبيقاتاستخدمه للبيانات عالية الحساسية أو للبيانات المُحتفظ بها لفترة طويلة

لا يُعتبر AES-128 مُهددًا. لا توجد هجوم مُمارَس. لكن إذا كنت تُشفّر بيانات تحتاج إلى الحفاظ عليها لمدة أكثر من 20 سنة — أو إذا كان نموذج التهديد يشمل الحواسيب الكمومية — فإن AES-256 يضيف مساحة مفيدة. بالنسبة لمعظم التطبيقات التي تُشفّر حقول قواعد البيانات اليوم، فإن AES-128 كافٍ. في حالة الشك، استخدم AES-256؛ فهذا التأثير على الأداء لا يُعدّ مُهمًا في الأحمال المعتادة.

نوع التشفير: لماذا GCM وليس ECB؟

AES وحده يُشفّر وحدة واحدة بحجم 128 بت. لبيانات حقيقية تحتاج إلى نوع من التشفير يُعالج الوحدات المتعددة ويُنظمها بشكل صحيح. هذا الاختيار له تأثير كبير.

الوضعمُعتمد على التحققمطلوب مفتاح تمهيد (IV)إدانة
ECBلالالا تستخدمه — يُنتج نفس النص المُشفّر عند وجود نفس النص المُدخل، ويُكشف نمط البيانات
CBCلانعممُتَّسِع — لا يوجد تحقق، عرضة للهجمات على التعبئة
GCMنعم (مُعتمد على البيانات المرتبطة)نعم (مفتاح تمهيد)استخدم هذا — يُشفّر ويتحقق في نفس العملية

استخدم GCM. GCM (وضع Galois/Counter) هو تشفير مُعتمد على التحقق — التشفير المُعتمد على البيانات المرتبطة. يقوم بعملين في نفس الوقت:

  1. يُشفّر بياناتك بحيث لا يمكن قراءتها بدون المفتاح
  2. يُنتج علامة تحقق بحيث يُكتشف أي تغيير فورًا

بدون التحقق، يمكن للغرض أن يُقلب بت في النص المُشفّر ويُستخرج محتوى غير صحيح دون أن تعرفه. مع GCM، يفشل التشفير بشكل واضح إذا تم تغيير النص المُشفّر — قبل عرض أي نص مُستخرج.

مفتاح التمهيد / المفتاح المُستخدم مرة واحدة

يتطلب GCM مفتاح تمهيد (IV)، يُعرف أيضًا باسم المفتاح المُستخدم مرة واحدة — "مفتاح مُستخدم مرة واحدة". لا يلزم أن يكون المفتاح سريًا، لكنه يجب أن يكون:

  • عشوائي — مُولَد باستخدام مولد عشوائي مُعتمد على الأمان
  • فريد — لا يُستخدم مجددًا مع نفس المفتاح

استخدام مفتاح تمهيد مُكرر مع نفس المفتاح في GCM هو كارثي. يمكن للغرض الذي يرى مسندتين مُشفّرتين باستخدام نفس المفتاح والـ IV أن يُجمع بينهما ويُسترجع كلا النصين. هذا ليس نظرية — وقع في أنظمة إنتاجية.

استخدم مفتاح تمهيد عشوائي بحجم 96 بت (12 بايت) لكل عملية تشفير. بما أنك تحتاجه للإلغاء، احتفظ به بجانب النص المُشفّر — وضع المفتاح قبل النص المُشفّر هو الشكل التقليدي.

كود مُختبر: AES-256-GCM

إليك نماذج جاهزة للإنتاج. تُحتفظ بها المفتاح والعلامة المُعتمدة مع النص المُشفّر بحيث يكون التشفير مُستقلًا.

نود.جي اس

const crypto = require('crypto');

const ALGORITHM = 'aes-256-gcm';
const KEY_LENGTH = 32; // 256 bits
const IV_LENGTH  = 12; // 96 bits — recommended for GCM
const TAG_LENGTH = 16; // 128-bit auth tag

function encrypt(plaintext, key) {
  const iv = crypto.randomBytes(IV_LENGTH);
  const cipher = crypto.createCipheriv(ALGORITHM, key, iv);

  const encrypted = Buffer.concat([
    cipher.update(plaintext, 'utf8'),
    cipher.final(),
  ]);
  const tag = cipher.getAuthTag();

  // Layout: [iv (12)] + [tag (16)] + [ciphertext]
  return Buffer.concat([iv, tag, encrypted]).toString('base64');
}

function decrypt(ciphertextB64, key) {
  const data      = Buffer.from(ciphertextB64, 'base64');
  const iv        = data.subarray(0, IV_LENGTH);
  const tag       = data.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);
  const encrypted = data.subarray(IV_LENGTH + TAG_LENGTH);

  const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
  decipher.setAuthTag(tag);

  return Buffer.concat([decipher.update(encrypted), decipher.final()]).toString('utf8');
}

// Usage
const key        = crypto.randomBytes(KEY_LENGTH); // store this securely
const ciphertext = encrypt('sensitive data here', key);
const plaintext  = decrypt(ciphertext, key);

بايثون

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

IV_LENGTH = 12  # 96 bits

def encrypt(plaintext: str, key: bytes) -> str:
    iv = os.urandom(IV_LENGTH)
    aesgcm = AESGCM(key)
    # encrypt() appends the 16-byte auth tag automatically
    ciphertext = aesgcm.encrypt(iv, plaintext.encode(), None)
    return base64.b64encode(iv + ciphertext).decode()

def decrypt(ciphertext_b64: str, key: bytes) -> str:
    data       = base64.b64decode(ciphertext_b64)
    iv         = data[:IV_LENGTH]
    ciphertext = data[IV_LENGTH:]
    aesgcm = AESGCM(key)
    return aesgcm.decrypt(iv, ciphertext, None).decode()

# Usage
key        = AESGCM.generate_key(bit_length=256)  # store this securely
ciphertext = encrypt('sensitive data here', key)
plaintext  = decrypt(ciphertext, key)

أدخل الاعتماد: pip install cryptography

يمكنك اختبار تشفير وفك تشفير AES بشكل تفاعلي — دون أي إعداد — باستخدام أداة تشفير/فك تشفير AES IO Tools.

إدارة المفتاح: الجزء الصعب

يكون تشفيرك فقط قويًا حسب إدارة المفتاح. الأخطاء الشائعة:

  • مفتاح داخل قاعدة البيانات ذاتها التي تحتوي على البيانات المُشفّرة — إذا استطاع المهاجم الحصول على نسخة من قاعدة البيانات، فإنه يحصل على كلاهما.
  • مفتاح مُدرج في نظام التحكم (مثل gitignored) — حتى في مُستبعد من git .env، يصبح تغيير المفتاح صعبًا ويستمر التاريخ.
  • مفتاح يظهر في السجلات — تُرسل السجلات التطبيقية إلى مُجمّعات. يجب أن لا يظهر المفتاح هناك.

أين يجب أن تُخزن مفاتيح التشفير:

  • AWS KMS / Google Cloud KMS / Azure Key Vault — تخزين مُدارة للمفاتيح مع سجلات مراجعة وتمكين تلقائي
  • HashiCorp Vault — مُستقر في الموقع، مناسب للبيئات متعددة السحابة
  • المتغيرات البيئية — مقبول للوظائف ذات الحساسية المنخفضة مع مساحة تعرّض محدودة

لإخفاء حقول قواعد البيانات، يُعدّ التشفير المُحيط بالطريقة القياسية: توليد مفتاح تشفير بيانات (DEK) لكل سجل أو حقل، ثم تشفير المفتاح المُحيط باستخدام مفتاح رئيسي يُخزن في KMS. تحتوي قاعدة البيانات فقط على المفاتيح المُشفّرة والنص المُشفّر — لا يُلامس المفتاح الرئيسي قاعدة البيانات.

متى تستخدم AES — ومتى لا تستخدمه؟

AES هو الأداة المناسبة للإغلاق:

  • تشفير الحقول في قاعدة البيانات — أرقام الهوية، أرقام البطاقات، السجلات الطبية
  • تشفير الملفات عند الراحة قبل تخزينها في السحابة
  • مشاركة السر بين الخدمات التي تمتلك مفتاحًا مُسبقًا

AES ليس الأداة المناسبة عندما:

  • تُنقل البيانات عبر الشبكة — استخدم TLS. لا تُنشئ طبقة نقل خاصتك.
  • تحتاج إلى تشفير غير متماثل — إذا لم يكن من الممكن مشاركة المفتاح مسبقًا، استخدم RSA أو ECDH للتبادل.
  • تُخزن كلمات المرور — استخدم bcrypt، scrypt، أو Argon2. يمكن فك تشفير كلمات المرور؛ أما التشفير الصحيح، فلا يمكن فكه.
  • حل مُدارة يناسبك — مثل AWS Secrets Manager، Vault، ونماذج مشابهة، تُدير التحديث، التحكم في الوصول، وسجلات المراجعة بشكل تلقائي. يفضل ذلك على استخدام AES يدويًا إذا كان يغطي استخدامك.

الخطأ الأكثر ارتكابه من قبل المطورين هو اعتبار AES حلًا كاملًا للسلامة. هو عنصر أساسي — مكون بناء. اجمعه مع وضع مُعتمد على التحقق (GCM)، مفاتيح تمهيد فريدة لكل عملية، وإدارة مفتاح مناسبة، وستكون فعالة جدًا. تجاهل أي من هذه العناصر، فستُنشئ شيئًا يبدو آمنًا لكنه ليس كذلك.

هل تريد حذف الإعلانات؟ تخلص من الإعلانات اليوم

تثبيت ملحقاتنا

أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع

أضف لـ إضافة كروم أضف لـ امتداد الحافة أضف لـ إضافة فايرفوكس أضف لـ ملحق الأوبرا

وصلت لوحة النتائج!

لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!

إعلان · حذف؟
إعلان · حذف؟
إعلان · حذف؟

ركن الأخبار مع أبرز التقنيات

شارك

ساعدنا على الاستمرار في تقديم أدوات مجانية قيمة

اشتري لي قهوة
إعلان · حذف؟