Skip to content

مترجم+مفسّر: عشوائي_آمن CSPRNG حقيقيّ عبر نظام التشغيل (مرحلة ٠ من RFC توسيع مكتبة التشفير)#214

Merged
SalehKadah merged 1 commit into
devfrom
agent/crypto-phase0-csprng
Jul 20, 2026
Merged

مترجم+مفسّر: عشوائي_آمن CSPRNG حقيقيّ عبر نظام التشغيل (مرحلة ٠ من RFC توسيع مكتبة التشفير)#214
SalehKadah merged 1 commit into
devfrom
agent/crypto-phase0-csprng

Conversation

@SalehKadah

Copy link
Copy Markdown
Collaborator

الملخّص

المرحلة ٠ من RFC توسيع مكتبة التشفير:
عشوائي_آمن كانت تعتمد srand(time(NULL))+rand() القابل للتنبّؤ بالكامل في
وقت تشغيل المترجم — يُصلَح الآن بـCSPRNG حقيقيّ (BCryptGenRandom عبر تحميل
ديناميكيّ على Windows، /dev/urandom على POSIX)، مقصورًا على الأهداف
المستضافة (SAD_FREESTANDING يُبقي المسار القديم لهدف الوضع الحرّ الذي قد
لا يوجد تحته نظام تشغيل مضيف أصلًا).

علّتان إضافيّتان مكتشَفتان أثناء الفحص (مُصلَحتان معًا)

مسار المترجم لِـعشوائي_آمن (emitBuiltinSecuritySecureRandom) كان معطوبًا
فعليًّا قبل هذا الـPR بعلّتين منفصلتين تمامًا عمّا وصفه RFC الأصليّ:

  1. نداء مباشر لِـBCryptGenRandom في LLVM IR دون ربط bcrypt.lib في أيّ من
    مسارات الربط الثلاثة — فشل ربط دائم على أيّ برنامج مُترجَم على
    Windows يستدعي عشوائي_آمن (أُعيد إنتاجه حيًّا وتأكَّد قبل الإصلاح).
  2. تجاهل تامّ لمعاملَي الحدّ الأدنى/الأقصى — يُرجع عددًا شبه غير محدود بدل
    قيمة ضمن المدى المطلوب.

الإصلاح: المترجم يستدعي الآن sad_security_secure_random من وقت التشغيل
المضمَّن، بنفس نمط بقيّة عائلة الأمن المستضافة (هاش/شفّر/فك_تشفير).

التغييرات

  • tools/compiler/runtime/sad_embedded_runtime.csad_crypto_os_random (CSPRNG حقيقيّ)، يُستعمَل في نِتر شفّر/فك_تشفير وعشوائي_آمن كليهما.
  • tools/compiler/compiler_driver_build_utils.cpp — يمرّر SAD_FREESTANDING عند --freestanding.
  • compiler/src/backend/llvm/builders/builtins/security_builtins_ops.cpp — إعادة كتابة emitBuiltinSecuritySecureRandom.
  • tools/compiler/compiler_driver_android_linker.cpp — تحديث نسخة أندرويد المنفصلة (/dev/urandom، لا حاجة لحراسة حرّ — أندرويد مستضاف دومًا).
  • language-truth/builtins/assertions.yaml + التوليد — إثراء وصف SECURE_RANDOM.
  • اختبار جديد tests/behavior/sections/09_المكتبة_القياسية/04_تشفير/154_stdlib_security_secure_random.ص — شعاع تراجع للعلّتين (التزام المدى + عدم تكرار حتميّ).
  • تحديث COVERAGE.md.

خطة الاختبار

  • python x.py build --config Debug نجح.
  • 04_تشفير/ كاملًا (5 ملفّات) 100% تكافؤ مزدوج (مفسّر+مترجم).
  • الاختبار الجديد 154: burn-in نظيف 10/10 جولة.
  • python x.py gen --check نظيف (كل حرّاس SoT خضراء).
  • 01_مدمج/ (21 ملفًّا) بلا انحدار.
  • مراجعة أميليا المستقلّة قبل الدفع — لم تجد علّة تستدعي تعديلًا.

…C توسيع مكتبة التشفير)

يستبدل sad_security_secure_random ونِتر شفّر/فك_تشفير (sad_crypto_random_u64)
في sad_embedded_runtime.c من srand(time(NULL))+rand() القابل للتنبّؤ بالكامل
إلى CSPRNG حقيقيّ (BCryptGenRandom عبر تحميل ديناميكيّ على Windows، /dev/urandom
على POSIX)، مقصورًا على الأهداف المستضافة عبر SAD_FREESTANDING (الهدف الحرّ
قد لا يوجد تحته نظام تشغيل مضيف أصلًا).

يكشف الفحص أيضًا علّتين حقيقيّتين منفصلتين في مسار المترجم لعشوائي_آمن نفسه
كانتا موجودتين قبل هذه الجولة: نداء مباشر لِـBCryptGenRandom في LLVM IR دون
ربط bcrypt.lib في أيّ من مسارات الربط الثلاثة (فشل ربط دائم على Windows)،
وتجاهل تامّ لمعاملَي الحدّ الأدنى/الأقصى. يُصلَحان معًا بجعل المترجم يستدعي
sad_security_secure_random من وقت التشغيل المضمَّن، بنفس نمط بقيّة عائلة
الأمن المستضافة (هاش/شفّر/فك_تشفير).

يحدّث Android linker بنفس CSPRNG (/dev/urandom، أندرويد نظام تشغيل مضيف
دائمًا). يثري وصف SECURE_RANDOM في SoT، ويضيف اختبار تراجع (154) يتحقّق من
التزام المدى وعدم التكرار الحتميّ عبر 10 جولات burn-in.
@github-actions

Copy link
Copy Markdown

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

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

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

@SalehKadah
SalehKadah merged commit 38e15e8 into dev Jul 20, 2026
28 checks passed
@SalehKadah
SalehKadah deleted the agent/crypto-phase0-csprng branch July 20, 2026 04:22
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