ما هي مكتبة argon2-cffi
مكتبة argon2-cffi هي الغلاف الرسمي للغة Python لخوارزمية تشفير كلمات المرور Argon2، ويتم تنفيذها عبر واجهة CFFI (واجهة الدوال الأجنبية للغة C). Argon2 هي خوارزمية حديثة لتشفير كلمات المرور، فازت في مسابقة Password Hashing Competition عام 2015، وتُعتبر منذ ذلك الحين المعيار الذهبي للتخزين الآمن لكلمات المرور.
الميزة الرئيسية لـ argon2-cffi هي أنها توفر أداءً عاليًا بفضل تنفيذها بلغة C، مع توفير واجهة Python سهلة الاستخدام. المكتبة مدعومة بنشاط من قبل المجتمع ويتم تحديثها بانتظام وفقًا لأحدث معايير الأمان.
التثبيت والإعداد
التثبيت القياسي
pip install argon2-cffi
التثبيت مع التبعيات الإضافية
pip install argon2-cffi[dev] # للتطوير
pip install argon2-cffi[tests] # للاختبار
التحقق من التثبيت
import argon2
print(argon2.__version__)
أنواع خوارزمية Argon2
Argon2i (مستقل عن البيانات)
Argon2i مُحسّن للحماية من هجمات القنوات الجانبية (side-channel attacks). يصل إلى الذاكرة بشكل مستقل عن محتوى كلمة المرور، مما يجعله مقاومًا لهجمات وقت التنفيذ. يُوصى به في السيناريوهات التي تكون فيها الحماية من تحليل وقت التنفيذ مهمة.
Argon2d (معتمد على البيانات)
يوفر Argon2d أقصى حماية ضد هجمات GPU والهجمات باستخدام الأجهزة المتخصصة. يستخدم وصولاً إلى الذاكرة يعتمد على البيانات، مما يصعّب موازاة الهجمات. لكنه أقل حماية من هجمات القنوات الجانبية.
Argon2id (هجين)
Argon2id هو الوضع الهجين الذي يجمع مزايا كلا النوعين. يُستخدم افتراضيًا في argon2-cffi ويُوصى به لمعظم التطبيقات. يتم تنفيذ التمريرات الأولى كـ Argon2i، والباقي كـ Argon2d.
بداية سريعة
الاستخدام الأساسي
from argon2 import PasswordHasher
# إنشاء كائن التشفير
ph = PasswordHasher()
# تشفير كلمة المرور
password = "كلمة_المرور_الفائقة_السرية"
hash_result = ph.hash(password)
print(f"التشفير: {hash_result}")
# التحقق من كلمة المرور
try:
ph.verify(hash_result, password)
print("كلمة المرور صحيحة!")
except Exception as e:
print(f"كلمة المرور خاطئة: {e}")
العمل مع أنواع بيانات مختلفة
from argon2 import PasswordHasher
ph = PasswordHasher()
# تشفير سلسلة نصية
string_hash = ph.hash("كلمة_مرور_نصية")
# تشفير بايتات
bytes_password = b"bytes_password"
bytes_hash = ph.hash(bytes_password)
# التحقق
ph.verify(string_hash, "كلمة_مرور_نصية")
ph.verify(bytes_hash, bytes_password)
إعدادات PasswordHasher
معاملات المُنشئ
from argon2 import PasswordHasher, Type
ph = PasswordHasher(
time_cost=3, # عدد التكرارات (الافتراضي 2)
memory_cost=65536, # حجم الذاكرة بالكيلوبايت (الافتراضي 51200)
parallelism=2, # عدد الخيوط (الافتراضي 1)
hash_len=32, # طول التشفير بالبايت (الافتراضي 32)
salt_len=16, # طول الملح بالبايت (الافتراضي 16)
encoding="utf-8", # الترميز (الافتراضي "utf-8")
type=Type.ID # نوع Argon2 (الافتراضي Type.ID)
)
تأثير المعاملات على الأمان
time_cost يزيد وقت التنفيذ خطيًا. كل زيادة بمقدار 1 تضاعف وقت التشفير.
memory_cost يحدد حجم الذاكرة بالكيلوبايت. القيم الكبيرة تصعّب الهجمات باستخدام الأجهزة المتخصصة.
أيضاً في المكتبة
توصيات