Skip to content

مترجم+مفسّر: اشتق_مفتاح_مرور (PBKDF2) + اشتق_مفتاح (HKDF) — المرحلة ٢ من توسيع مكتبة التشفير#217

Merged
SalehKadah merged 2 commits into
devfrom
agent/crypto-phase2-kdf
Jul 20, 2026
Merged

مترجم+مفسّر: اشتق_مفتاح_مرور (PBKDF2) + اشتق_مفتاح (HKDF) — المرحلة ٢ من توسيع مكتبة التشفير#217
SalehKadah merged 2 commits into
devfrom
agent/crypto-phase2-kdf

Conversation

@SalehKadah

Copy link
Copy Markdown
Collaborator

الملخّص

المرحلة ٢ من RFC توسيع مكتبة التشفير (sadlang-rfcs/text/0000-توسيع-مكتبة-التشفير.md)، بعد دمج المرحلتين ٠ (عشوائي_آمن) و١ (بلايك3/هاش_مفتاح، #214/#215).

يضيف دالّتين جديدتين لوحدة تشفير:

  • اشتق_مفتاح_مرور(كلمة_مرور, ملح, عدد_التكرارات) — PBKDF2-HMAC-SHA256 (RFC 8018)، اشتقاق بطيء الحساب عمدًا من كلمة مرور، يُرجع مفتاحًا 32 بايت (سلسلة hex من 64 حرفًا).
  • اشتق_مفتاح(سرّ_مشترك, ملح, سياق_الاستخدام, الطول) — HKDF-SHA256 (RFC 5869)، اشتقاق مفاتيح فرعيّة مستقلّة من سرّ مشترك واحد.

كلتاهما ذاتيّتا التنفيذ بالكامل (SHA-256/HMAC مبنيّان محليًّا من الصفر، لا OpenSSL/libsodium)، مطابقتان حرفيًّا في الخوارزميّة بين المفسّر (C++) والمترجم (LLVM + وقت تشغيل C مضمَّن + رابط أندرويد).

التحقّق

  • PBKDF2: لا يوجد ملفّ شعاعات رسميّ ثابت لـPBKDF2-SHA256 (بخلاف RFC 6070 الخاصّ بـSHA-1) — تحقّق تفاضليّ مستقلّ بين hashlib.pbkdf2_hmac (بايثون) وبناء HMAC يدويّ مستقلّ وفق RFC 8018، عبر 7 حالات (تكرار واحد/عدّة كتل ناتج/كلمة مرور فارغة/بايتات صفريّة) — تطابق تامّ.
  • HKDF: تحقّق مباشر مقابل شعاعات RFC 5869 الملحق أ الرسميّة الثلاثة (PRK وOKM معًا) — تطابق تامّ.
  • شعاعا الاختبارين 157/158 أُعيد حسابهما عبر البرنامج المرجعيّ نفسه (لا شعاعات مكتوبة يدويًّا من الذاكرة — درس من محاولة أولى فاشلة هذه الجولة).

مراجعة أميليا (قبل الدفع)

راجعة مستقلّة كشفت 3 علل حقيقيّة، أُصلحت جميعًا في الـcommit الثاني:

  1. (الأخطر) نسخة المترجم كانت تستبدل عدد_التكرارات<=0/الطول<=0 صامتًا (1/32) بدل الرفض كالمفسّر — تباعُد سلوكيّ حقيقيّ يخالف توثيق SoT. أُصلح: رفض صريح (stderr + سلسلة فارغة) في كلا نسختَي C.
  2. HKDF بلا سقف طول حسب RFC 5869 (L≤255×32=8160 بايت) — عدّاد الكتلة بايت واحد يلتفّ صامتًا فوقه. أُصلح: تحقّق صريح من المدى 1–8160 في المفسّر والمترجم معًا.
  3. توثيق SoT كان يبالغ بادّعاء تطابق حرفيّ كامل — صُحِّح ليوثّق التباعد المتبقّي في آليّة الإبلاغ عن الخطأ (نفس نمط فك_تشفير الموثَّق سلفًا).

البناء والاختبار

  • بناء Debug لكلا المحرّكين (sad-run.exe/sad-build.exe) — نظيف، بلا تحذيرات جديدة.
  • ⚠️ فخّ بنائيّ جديد: السلسلة النصّية الخام في compiler_driver_android_linker.cpp تجاوزت حدّ MSVC C2026 (16380 حرفًا) بعد إضافة كتلة KDF — قُسِّمت إلى سلسلتين متتاليتين (rt_file << R"(...)" مرّتين) عند حدّ دالّة نظيف، بنفس نمط إصلاح المرحلة ١.
  • 04_تشفير: 9/9 اختبار، 3/3 جولة burn-in، 100% تكافؤ مزدوج بين المفسّر والمترجم.

المتبقّي من RFC

  • المرحلة ٣: شفّر_موثّق/فك_تشفير_موثّق (ChaCha20-Poly1305 AEAD).
  • المرحلة ٤: X25519 (تبادل مفاتيح) + Ed25519 (توقيع).
  • أرجون2id (مؤجَّل أصلًا في نصّ RFC، مُدرَج الآن بطلب صريح من المالك) — يتبع كمرحلة/PR منفصلة نظرًا لحجمه ومخاطره الأعلى (يحتاج BLAKE2b كلبنة أساسيّة وفق RFC 9106).

لا دمج بلا إذن صريح.

…SHA256) — المرحلة ٢ من توسيع مكتبة التشفير

يضيف اشتقاق مفاتيح بطيء الحساب من كلمات المرور (PBKDF2, RFC 8018) واشتقاق
مفاتيح فرعيّة من سرّ مشترك (HKDF, RFC 5869)، مبنيّان محليًّا فوق SHA-256/HMAC
ذاتيّي التنفيذ (لا OpenSSL/libsodium)، مطابقان حرفيًّا بين المفسّر (C++)
والمترجم (LLVM+C). مُتحقَّقان: PBKDF2 عبر تحقّق تفاضليّ بين hashlib.pbkdf2_hmac
وبناء HMAC يدويّ مستقلّ (7 حالات)، HKDF مباشرة مقابل شعاعات RFC 5869 الملحق أ.
راجعت أميليا الكود قبل الدفع ووجدت أنّ نسخة المترجم (وقت التشغيل C) كانت
تستبدل عدد_التكرارات<=0 بـ1 وطول HKDF<=0 بـ32 صامتًا بدل رفضهما كما يفعل
المفسّر — تباعُد سلوكيّ حقيقيّ يُخالف توثيق SoT. كما أُضيف حدّ RFC 5869 §2.3
الأقصى لطول HKDF (8160 بايت = 255×32) الذي كان غائبًا في كلا المحرّكين
(عدّاد الكتلة بايت واحد يلتفّ صامتًا فوقه). وُثِّق التباعد المتبقّي في آليّة
الإبلاغ عن الخطأ (استثناء بالمفسّر مقابل stderr بالمترجم) في crypto.yaml،
بنفس نمط التباعد الموثَّق سلفًا لـفك_تشفير.
@github-actions

Copy link
Copy Markdown

📚 تذكير مزامنة دليل المطوّرين

هذا الـPR يلمس مصادر موثَّقة في دليل المطوّرين. راجع الفصول الآتية وحدّثها إن تغيّر سلوكها، ثم ثبّت البصمات هناك (python scripts/check_sync.py --update):

بندٌ في معيار الإنجاز. تذكيرٌ آليّ — لا يحجب الدمج.

@SalehKadah
SalehKadah merged commit 29fc2d0 into dev Jul 20, 2026
36 of 38 checks passed
@SalehKadah
SalehKadah deleted the agent/crypto-phase2-kdf branch July 20, 2026 07:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant