العشوائية الكمومية المتوقعة: لما الـ Beacon اللي يدعي الاستقلال عن الجهاز يكون مجرد Hash function بزي رسمي

🇺🇸EN🇸🇦AR

تخيل بنك يقفل مليار دولار ورا مفتاح خاص، وبعدين يقول للعالم إن المفتاح طلع من فيزياء كمية نقية. مو شخص يكتب أرقام. مو كمبيوتر عادي. مولّد أرقام عشوائية كمي مستقل عن الجهاز. النوع اللي يشغّل تجربة فيزياء صغيرة، يفحص متباينة Bell، ويعدك إن البتات ما يقدر أحد يخمنها، حتى لو كمبيوتر كمي بعد ألف سنة.

الوعد هذا حلو لين تلاحظ إن التجربة أصلاً ما صارت. العملية "الكمية" كلها دالة حتمية على seed معروف للجميع. أي واحد يقدر يقرأ الـ seed يقدر يعيد الحسابات ويسترجع المفتاح.

المقال هذا يمشي معاك خطوة بخطوة: كيف يفترض إن CHSH randomness beacon يشتغل، وين تنكسر فرضيات الثقة، مثال اصطناعي على الفشل، والحلول العملية اللي فعلاً تفرق.


وش هو Device-Independent QRNG أصلاً؟

مولّد الأرقام العشوائية الكلاسيكي مجرد كود يوسّع seed إلى سلسلة أطول. إذا الـ seed ضعيف أو مسرب، الناتج ضعيف.

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

التصاميم المستقلة عن الجهاز تروح خطوة أبعد. ما تثق في الهاردوير أصلاً. بدل كذا تشغّل اختبار Bell (عادة لعبة CHSH) بين طرفين أو أكثر. إذا الارتباطات المرصودة خرقت الحد الكلاسيكي بقوة كافية، النظرية تقول إن بعض بتات الناتج لازم تحتوي عشوائية حقيقية، حتى لو الأجهزة نفسها خبيثة أو مكسورة.

متباينة CHSH الكلاسيكية شكلها كذا:

[ S = E(0,0) + E(0,1) + E(1,0) - E(1,1) ]

الواقعية المحلية الكلاسيكية توقف (S) عند 2. الميكانيكا الكمية تسمح لحد (2\sqrt{2} \approx 2.828). خرق تجريبي قوي يُعتبر دليل إن النتائج ما تقدر تكون محددة مسبقاً بالكامل بأي متغيرات محلية مخفية.

في مختبر حقيقي هذا شغل غالي ودقيق. في تسويق البرمجيات غالباً سلايد يقول "Bell-certified" وبعدين حلقة حتمية ما أحد يدقق فيها.


ليش يهمك الموضوع؟

لأن عبارة "عشوائية كمية مستقلة عن الجهاز" صارت تظهر في صفحات المنتجات لـ HSM ومحافظ باردة ومراسم توليد مفاتيح عالية القيمة. لما التسويق أعلى صوت من التنفيذ، الفجوة تصير سطح هجوم.

أماكن تظهر فيها:

  • توليد مفاتيح محفظة باردة تدعي أصل كمي
  • nonces أو salts "غير متوقعة" تطلع من beacon برمجي
  • أنظمة يانصيب أو عدالة تنشر درجة CHSH للتحقق العام
  • أي بروتوكول يعامل seed عام + محاكاة CHSH حتمية كأنها تجربة كمية حقيقية

النتائج لما الـ beacon يكون حتمي:

  • استرجاع كامل لكل ناتج "عشوائي" بمجرد معرفة الـ seed
  • مفاتيح خاصة ما كانت خاصة أصلاً
  • ثقة كاذبة تنجو من تدقيقات تنظر فقط لدرجة CHSH
  • لغة تنظيمية أو تأمينية لسا تدعي أمان "بدرجة كمية"

درجة CHSH تقدر تطلع مثالية والناتج الأساسي لسا كود كلاسيكي بحت.


كيف يفترض إن الـ Beacon يشتغل

تطبيق برمجي نموذجي لـ CHSH randomness beacon شكله تقريباً كذا:

  1. ابدأ بـ seed طوله 32 بايت (H).
  2. لكل تجربة (i = 0 \dots N-1):
    • استخرج بايتات التجربة: (tb = \mathrm{SHA256}(H | \text{"|trial|"} | i))
    • خذ إعدادات القياس (a, b) من البايت الأول
    • خذ عينة منتظمة (\lambda \in [0,1)) من بايتات لاحقة
    • اختبر النتائج ((x, y)) حسب الارتباطات الكمية المثالية (E(a,b))
  3. اربط كل أزواج النتائج في سلسلة طويلة.
  4. اعمل hash للسلسلة عشان تطلع العشوائية النهائية (W).

الارتباطات مختارة عشان القيمة المتوقعة لـ CHSH تقعد قريبة من حد Tsirelson. لما (N) كبيرة (مثلاً 1024 تجربة) الدرجة المقاسة (S) تقريباً دايماً تتجاوز الحد الكلاسيكي 2.0. النظام بعدها يعلن إن الناتج "مستقل عن الجهاز" ويعطي (W) لدالة اشتقاق مفتاح.

على الورق هذا يبدو صارم. عملياً كل خطوة بعد الـ seed رياضيات حتمية بحتة. ما في فوتون، ما في كاشف، ما في ثغرة، وما تحتاج أي هاردوير كمي. درجة CHSH مجرد أثر جانبي لاختبار من التوزيع الكمي المثالي باستخدام PRNG.


مثال عملي: الـ Seed العام اللي فتح كل شيء

تخيل نظام محفظة باردة اصطناعي. المشغّلين ينشرون hash لكتلة توليد (قيمة عامة الكل يقدر يشوفها) ويدّعون إن المفتاح الخاص اشتُق من QRNG مستقل عن الجهاز بذرته هذا الـ hash. المفتاح العام منشور كمان عشان العالم يتأكد إن الفلوس لسا موجودة.

محلل يلاحظ ثلاث أشياء:

  • معاملات الـ beacon موثقة بالكامل (عدد التجارب، الارتباطات بالضبط، قاعدة الاختبار بالضبط).
  • الـ seed إما الـ hash المنشور نفسه أو دالة تافهة منه.
  • الناتج النهائي (W) يُستخدم، ربما مع hash بسيط أو اختزال معياري، كمفتاح خاص secp256k1.

لأن كل تجربة محددة بالـ seed، سلسلة النتائج كلها تقدر تُحسب من جديد offline. SHA-256 واحد في النهاية يطلع (W). هالقيمة هي المفتاح الخاص.

ما تحتاج كمبيوتر كمي. ما تحتاج side-channel. الهجوم الوحيد هو قراءة التوثيق العام وتشغيل نفس الرياضيات اللي النظام شغّلها أصلاً.

الزاوية الكسولة اللي اتقطعت هي معاملة محاكاة حتمية لاختبار Bell كأنها التجربة الفيزيائية. درجة CHSH طلعت ممتازة لأن الكود مكتوب عشان الدرجة تطلع ممتازة. العشوائية ما كانت موجودة أصلاً.

متغيرات مجاورة لنفس الغلطة:

  • بذرة الـ beacon من timestamp متوقع أو حالة نظام منخفضة الإنتروبيا
  • نشر الـ seed عشان "التحقق العام" مع استخدام نفس الـ seed للمفتاح السري
  • استخدام extractor ضعيف أو بدون extractor بعد سلسلة النتائج
  • الثقة في رقم CHSH لوحده بدون التحقق إن الأجهزة طلعت من نطاق المحاكاة الكلاسيكية

مثال كود ضعيف

نسخة Python مبسطة من الـ beacon الحتمي:

from hashlib import sha256
import struct

def generate_w(seed: bytes, trials: int = 1024) -> str:
    E = {
        (0, 0):  1 / (2 ** 0.5),
        (0, 1):  1 / (2 ** 0.5),
        (1, 0):  1 / (2 ** 0.5),
        (1, 1): -1 / (2 ** 0.5),
    }
    outcomes = []
    for i in range(trials):
        tb = sha256(seed + b"|trial|" + i.to_bytes(4, "big")).digest()
        a = tb[0] & 1
        b = (tb[0] >> 1) & 1
        lam = int.from_bytes(tb[8:16], "big") / 2**64
        pairs = [(0,0), (0,1), (1,0), (1,1)]
        cum = 0.0
        chosen = pairs[-1]
        for x, y in pairs:
            p = (1 + ((-1)**(x + y)) * E[(a, b)]) / 4
            cum += p
            if lam < cum:
                chosen = (x, y)
                break
        outcomes.append(f"{chosen[0]}{chosen[1]}")
    return sha256("".join(outcomes).encode()).hexdigest()

الـ seed عام أو قابل للاسترجاع. الناتج بالتالي عام أو قابل للاسترجاع.

حطه مباشرة في خانة مفتاح خاص = الثغرة.

نسخة مصلحة ما تدّعي إن المحاكاة كمية:

from secrets import token_bytes
from hashlib import sha256

def generate_private_key() -> bytes:
    # إنتروبيا حقيقية من نظام التشغيل (أو QRNG هاردوير مدقق بنموذج ثقة واضح)
    raw = token_bytes(32)
    # اختياري: KDF مفصول بالمجال
    return sha256(b"wallet-key|" + raw).digest()

ما في seed عام، ما في إعادة تشغيل حتمية، ما في درجة Bell مزيفة تستخدم كادعاء أمني.


الدفاع / كيف تصلح

  1. لا تستخدم أبداً قيمة عامة أو قابلة للاسترجاع كـ seed لمادة مفتاح سري. إذا الـ seed معروف، ناتج الـ beacon كله معروف.
  2. افصل مصدر العشوائية عن درجة التحقق. درجة CHSH مفيدة لمراقبة جهاز فيزيائي حقيقي. ما هي بديل عن الإنتروبيا نفسها.
  3. إذا شغّلت محاكاة برمجية للاختبار أو التعليم، سمّها محاكاة. لا تنشر لغة تسويقية توحي بأصل كمي فيزيائي.
  4. فضّل واجهات CSPRNG اللي يوفرها نظام التشغيل ( getrandom ، secrets ، CryptGenRandom ، إلخ) لتوليد المفاتيح إلا إذا عندك QRNG هاردوير موثق ومدقق بنموذج ثقة واضح.
  5. لما تستخدم QRNG حقيقي، خلّ الإنتروبيا الخام خاصة. الـ beacons العامة (مثل اللي تستخدم في اليانصيب أو الإجماع) نموذج تهديد مختلف عن توليد مفاتيح سرية.
  6. دقق مسار البيانات كامل. Seed → تجارب → نتائج → extractor → مفتاح خاص. أي نقطة يصير فيها الـ seed عام كسر كامل لحالات استخدام المفاتيح السرية.
  7. لا تعامل رقم CHSH عالي كإثبات سرية. هو دليل على ارتباطات غير كلاسيكية تحت فرضيات اختبار Bell. هالفرضيات ما تنطبق على محاكاة برمجية بحتة.

أفكار ختامية

تسمية حلقة hash حتمية بـ "عشوائية كمية مستقلة عن الجهاز" خطأ تصنيفي. الرياضيات تقدر تعيد إنتاج الارتباطات المثالية وتطلع درجة CHSH مقنعة. هذا ما يخترع إنتروبيا ما كانت موجودة.

إذا الـ seed عام، المفتاح عام. الفيزياء ما دخلت الغرفة أصلاً. المفتاح الكمي الأكثر أماناً هو اللي فعلاً احتاج تجربة كمية، مو اللي احتاج بس كم سطر SHA-256 وسلايد تسويقي.

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