كيفية الحصول على العشوائية الحقيقية من جهاز Apple الخاص بك باستخدام فيزياء الجسيمات والنتروبيا الحرارية

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

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

نظرًا لأن التشفير يتطلب الكثير من العشوائية التي لا يمكن التنبؤ بها ، فقد وجد العلماء العديد من مصادر الانتروبيا "الحقيقية" - العمليات الطبيعية التي تنتج باستمرار عن طريق قوانين الفيزياء أو الكيمياء نتائج عشوائية لا يمكن التنبؤ بها. لسوء الحظ ، كل هذه المصادر غير ملائمة للاستخدام ، لأنها تتطلب أجهزة ذات أغراض خاصة أو حتى إعدادات أكثر تعقيدًا. يسمح تشفير الحالة الحديثة بأخذ بذور عشوائية صغيرة لا يمكن التنبؤ بها من العالم المادي ، وتدويرها إلى تدفقات بيانات عشوائية لا نهاية لها ولا يمكن التنبؤ بها. أجهزة الكمبيوتر والهواتف الحديثة مجهزة بأنظمة متطورة للغاية تعمل على ذلك ، لذلك عمومًا يمكنك دائمًا استخدام جهاز الكمبيوتر / dev / urandom الخاص بك عندما تحتاج إلى مصدر عشوائي غير محدود. إذا كنت تقرأ هذا على جهاز MacBook الخاص بك الآن ، فيمكنك كتابة الأمر التالي في التطبيق الطرفي للحصول على أكبر عدد ممكن من السلاسل العشوائية التي تحتاجها: cat / dev / urandom | رئيس ج 32 | base64 (بديل 32 للحصول على سلاسل أطول أو أقصر).

أحد تطبيقات مصادر الانتروبيا الطبيعية هو بناء أنظمة تشفير آمنة مستضافة على خوادم "سحابية". في مثل هذه الحالات ، لم يعد لدينا أجهزة كمبيوتر فعلية تحت سيطرتنا الكاملة. هناك عدة طرق لتغذية الإنتروبيا في أجهزة الكمبيوتر الافتراضية ، ومع ذلك فهي جميعًا تتحمل نفس الضعف الذي يكرهه مشفرو التشفير - فهو يتطلب ثقة عمياء من طرف خارجي للقيام بـ "الشيء الصحيح". هذا ليس الأمثل. حتى أكثر مزودي الخدمات السحابية احتراماً لا يزالون يديرهم بشر معروفون بارتكابهم أخطاء من وقت لآخر. يفضل المشفرون أن يكونوا محميين ليس بالبشر ذوي النية الحسنة ، ولكن بالقوانين الرياضية الأساسية. وحتى أفضل الشركات يمكن اختراقها من قبل المتسللين والحكومات المعادية. كعميل للخدمات السحابية ، لا توجد ببساطة اختبارات يمكنك إجراؤها للتحقق من أن مضيفك الظاهري يحصل على العشوائية "الجيدة" من مزودك الموثوق ، أو العشوائية "السيئة" التي يتم تخريبها من قبل المتسللين - سيبدوون متماثلين تمامًا. في الواقع ، سيكون يكفي للمتسللين فقط إنشاء نسخة من العشوائية الحقيقية "الحقيقية" التي تم إنشاؤها بواسطة الأجهزة المضيفة: لا يزال سيكون العشوائية المثالية التي يتلقاها النظام الخاص بك ، ولكن في الوقت نفسه سيكون من المتوقع تماما (منذ سوف المتسللين نرى ذلك قبل أن تفعل). حتى أن إصدارًا واحدًا شائعًا من Linux قد أنشأ خدمة جديدة للمساعدة في "التلقيح" للأجهزة الافتراضية بعشوائية خارجية عند تشغيلها.

سنشرح لك في هذه المقالة كيفية إنشاء مصدر جديد للانتروبيا الحرارية "الحقيقية" من أي جهاز Apple iOS يخضع لسيطرتك الخاصة ولا يمكن لأحد آخر اعتراضه أو محاكاة ساخرة. إن امتلاك مصدر مستقل إضافي للإنتروبيا "الحقيقية" مفيد لأن إخفاقات الإنتروبيا يصعب اكتشافها - لا يوجد "ضوء أحمر وامض" لتنبيهنا عندما يفشل مصدرنا الرئيسي للإنتروبيا لأي سبب من الأسباب. عند استخدامها مع احتياطات معقولة ، تتيح لنا مصادر متعددة من الإنتروبيا "الحقيقية" بناء أنظمة تشفير أقوى.

هاتف صاخب

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

خلال hackathon الأخيرة ، قررنا تجربة بعض الأفكار من ورقة مثيرة للاهتمام. جوهر ذلك هو أن سيليكون أي هاتف ذكي يتكون من ملايين "البيكسلات" ، كل واحدة حساسة بما يكفي للكشف عن جزيئات الطاقة العالية والتأثيرات الحرارية. يقول الباحثون:

تولِّد المستشعرات قدرًا كبيرًا من الضوضاء التي يمكن أن تغمر عددًا صغيرًا نسبيًا من الإشارات من إشعاع جاما ، حتى عند استخدام الكاميرا مع العدسة المغطاة بحيث لا يمكن لأي ضوء مرئي أن يطمس الإشارة.

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

كل صورة تلتقطها بالكاميرا هي مزيج من شيئين: الإشارة ، وهي صورة ما أمام الكاميرا ، والضوضاء - كل التقلبات الصغيرة في كل بكسل مدفوعة بمجموعة كبيرة من العوامل التي لا يمكن التنبؤ بها - طاقة عالية جزيئات من الأشعة الكونية ، وإشعاع الخلفية ، والنشاط الحراري والكهربائي في الدوائر. كل صورة الكاميرا هي إشارة + الضوضاء. تخيل أننا نلتقط صورتين واحدة تلو الأخرى: الصورة # 1 = الإشارة + الضوضاء # 1 ، الصورة رقم 2 = الإشارة + الضوضاء # 2. الإشارة هي نفسها لأن ما أمام الكاميرا لم يتغير. ومع ذلك ، فإن الضوضاء ، كونها عشوائية ولا يمكن التنبؤ بها ، تغير كل ميكروثانية في كل بكسل كاميرا. الآن ، إذا طرحنا أحدهما من الآخر ، فسوف يترك لنا ضوضاء # 1 مطروحًا منها الضوضاء # 2 ، وهي أيضًا ضوضاء عشوائية لا يمكن التنبؤ بها. هذا هو بالضبط ما نريد استخراجه.

لشرح المفهوم ، التقطنا صورتين فارغتين (مع إغلاق عدسة الكاميرا وبالتالي عدم الحصول على أي إشارة على الإطلاق) وحساب الفرق تضخيمها بين هاتين الصورتين. يمكنك إعادة إنشاء هذا بنفسك باستخدام أي هاتف ومحرر صور مثل Photoshop [1].

الفرق بين تضخم 2 صور فارغة فون مأخوذة مع عدسة مغلقة

واو ، أنتجت هذه الكاميرا بدقة 12 ميجا بكسل الكثير من الانتروبيا! دعونا نرى ما إذا كنا نستطيع بناء نظام كامل حول هذا المفهوم.

البيانات الخام

لنقم بما يلي:

  • ابدأ تشغيل iPhone في وضع تسجيل الفيديو.
  • انسخ جميع وحدات بكسل RGB لكل إطار فيديو.
  • طرح من كل بكسل في إطار معين بكسل في نفس الموقف على الإطار التالي.

ما سنحصل عليه هو إطارات تتكون فقط من الضوضاء المتبقية. للمضي قدمًا ، عندما نتحدث عن "الإطار" ، فإننا نشير دائمًا إلى إطار واحد من "الضوضاء" - الإطار الذي نصنعه بطرح البكسل من هذا القبيل. بواسطة "بكسل" ، سنعني القيمة الفردية في قناة ألوان معينة (أحمر أو أخضر أو ​​أزرق). في الإطارات الأصلية ، تأخذ البيكسلات القيم في النطاق من 0 إلى 255 ، بينما في إطارات الفرق ستكون في النطاق من 255 إلى +255 ، اعتمادًا على أي من البيكسلتين يكون أكثر إشراقًا من سابقه.

دعنا نلتقط بعض إطارات الضوضاء ثم نحسب بعض الإحصاءات حول ما هو بداخله.

إطارات الفرق القليلة الأولى

إليك بعض إطارات الفرق التي تم التقاطها مباشرة بعد تشغيل الكاميرا. نظرًا لأننا نطرح بكسلًا واحدًا من إطار آخر ، يمكن أن تكون قيمة كل بكسل من -255 إلى 255. سيكون الوسط هو القيمة المتوسطة للاختلاف في قناة حمراء أو خضراء أو زرقاء. Min / Max يسجل القيم القصوى لكل إطار. هناك اتجاهات قليلة واضحة على الفور من هذه البيانات:

  • يستغرق الكاميرا بضعة إطارات للتركيز على المشهد. أثناء تركيز الكاميرا ، يكون الفرق بين كل إطار كبيرًا ، كما يتضح من القيم الكبيرة في المدى المتوسط ​​والانحراف والبكسل.
  • بمجرد تركيز الكاميرا ، يتحول المتوسط ​​بسرعة إلى الصفر تقريبًا. ستكون هذه سمة مفيدة لنا لاكتشاف ما إذا كان مجال رؤية الكاميرا قد تغير - يمكننا رفض جميع إطارات الفرق حيث يكون المتوسط ​​أكبر من قيمة صغيرة مثل 0.1.
  • في طريقة العرض المركزة والمستقرة ، يصبح نطاق min / max أصغر بكثير ، ويبلغ متوسطه 20 بكسل فقط ، ونادراً ما يبلغ شدته -40 بكسل. هذا هو بالضبط سلوك الضوضاء الحرارية الصغيرة نسبياً الموجودة في كل بكسل لصورة الكاميرا التي نبحث عنها.

صفر تسلسل

دعونا نلقي نظرة على البيانات الخام في كل قناة:

يبدو هذا ما نتوقعه من توزيع عشوائي للضوضاء ، ولكن هناك شيء واحد ينتقل على الفور - لماذا يوجد الكثير من الأصفار؟ إنهم ينفصلون بوضوح عن نمط توزيع "منحنى الجرس" الطبيعي الذي يجب أن نتوقعه من كتاب الفيزياء.

بالنظر إلى دفق البيانات الخام ، من الملاحظ بسرعة أن كل قناة تحتوي على تسلسلات طويلة جدًا من الأصفار ، وأحيانًا تذهب لأكثر من مائة من الأصفار. هل هذا طبيعي؟ وفقًا لبياناتنا ، فإن احتمال 0 في هذه العينة هو 14.33٪. إذا افترضنا أن هذه الأصفار عشوائية ، فإن أي تسلسل N-long من الأصفار سيكون له احتمال بنسبة 14.33٪ من قوة N.

من المتوقع تسلسل صفر في عينة 518 كيلو بايت

على ما يبدو ، لا توجد أي فرصة تقريبًا لرؤية سلسلة من الأصفار أطول من 5 أو 6 في نموذجنا. ومع ذلك فإننا نرى تسلسل 100 وأكثر. من الواضح أن هذا ليس عشوائيًا ، وهناك شيء آخر يجري. بعد البحث في البيانات والتجريب ، وجدنا الجاني.

المشكلة هي أن قناة معينة قد تشبعت المناطق. تخيل أن الكاميرا تركز على عنصر به بقع حمراء زاهية. فهي حمراء بشكل مكثف لدرجة أن الكاميرا سوف تسجل هذه البكسل كـ 255 على القناة الحمراء. بطبيعة الحال ، سيخضع ذلك البكسل لنفس الضوضاء مثل أي بكسل آخر ، ولكن نظرًا لأن الإشارة قوية للغاية ، فسيظل الإطار التالي هو نفسه بالضبط في هذا البكسل. بمعنى آخر ، بالنسبة لمستشعر مشبع 255 + الضوضاء = 255 ، يعني أن هذه البكسلات ستفقد القدرة على تسجيل الضوضاء على الإطلاق! عندما نطرحها من بعضها البعض ، نحصل على صفر ، ومع ذلك ، لم يعد هذا الصفر حدثًا حراريًا عشوائيًا - هذه الأصفار "بلا ضوضاء" تتبع ببساطة مساحة الحالة المشبعة في الصورة. وهذا يؤدي إلى بضعة دروس مهمة:

  • عند توليد إنتروبيا مع الكشف عن العدسة ، تجنب الظروف الساطعة للغاية التي تقضي على حساسية المستشعر.
  • يمثل التسلسل الطويل غير المحتمل للأصفار علامة خفية لمثل هذه البقع المشبعة في إطار الفرق. قبل أن نولد إنتروبيا ، سنقوم بالبحث عن هذه التسلسلات الطويلة بشكل غير صحيح ، ونستبعدها من بيانات العينة لأنها لا تحتوي على ضوضاء حرارية حقيقية.

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

ولكن قبل أن نتمكن من البدء في توليد الانتروبيا ، نحتاج إلى التعامل مع مشكلة أخرى.

التعامل مع الارتباطات

العلاقة هي العدو الطبيعي للانتروبيا. عندما يكون هناك شيئان مترابطان ، فهذا يعني أنه معًا يحتويان على قدر أقل من الانتروبيا ، فإنه يبدو من النظر إليهما بشكل فردي. فلنقم بتكبير "إنتروبيا" التي أنشأناها في وقت سابق من ضوضاء الكاميرا.

مجالات الارتباط عالية

كما ترون ، لا تتغير ألوان البكسل الفردية بشكل عشوائي تمامًا. يتم تجميع كل منهم في مجموعات صغيرة قليلة عرض بكسل. هذا أمر منطقي: إذا كان حدث حراري أو جزيء عالي الطاقة يصيب السيليكون المستشعر في مكان ما ، فلن يصل إلى بكسل واحد فقط. سيؤثر ذلك على بعض المناطق المحيطة بالبكسل. لذلك كل هذه الألوان عشوائية حتى الآن مترابطة. هذا هو عامل الارتباط الأول لدينا ، وهو ارتباط الفضاء.

إذا أخذنا في الاعتبار تداعيات المقالة الأصلية ، فإن النوع الثاني من الارتباط يصبح واضحًا أيضًا:

تمتلك أشعة جاما طاقة أكبر بكثير من فوتونات الضوء المرئية: على سبيل المثال ، قد يكون لديها 20،000 فولت مقارنة بما يتراوح بين 1.77 و 3.1eV للضوء المرئي من الأحمر إلى البنفسجي على التوالي. ولأن لديهم طاقة أعلى بكثير في البداية ، فإنهم ينتقلون أكثر بكثير إلى أي إلكترون أصابوه. هذا بدوره يعمل عبر المواد المؤينة للإلكترونات الأخرى حتى تبدد طاقتها. لذا فإن الإلكترون الذي يحتوي على 20 كيلو فولت يمكن أن يؤين 10000 إلكترون آخر قبل أن يتبدد. هذه إشارة إلى أن كاميرا الهاتف الذكي يجب أن تكون قادرة على رؤيتها.

لا تؤثر جزيئات الطاقة العالية التي تقصف مستشعرنا على وحدات البكسل في إطار واحد فقط ؛ إذا كانت الطاقة مرتفعة بدرجة كافية ، فسوف تؤثر بشكل مستمر على السيليكون في تلك المنطقة بينما تتبدد طاقة الاصطدام الأولي من خلال الوسط. لذلك بعض المناطق من صورتنا سيكون لها علاقة مستمرة في الوقت المناسب من خلال عدة أطر.

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

  • كسر المجموعة المحلية عن طريق الوصول إلى بكسل في ترتيب مختلف. على سبيل المثال ، يمكننا أن نأخذ جميع وحدات البكسل الحمراء بترتيبها الطبيعي ، بدءًا من أول بكسل إلى آخر بكسل في الإطار. سنتخذ وحدات البكسل الخضراء بالترتيب العكسي ، من الأول إلى الأول. بالنسبة للبكسلات الزرقاء ، يمكننا استخدام الترتيب المتعامد الذي يستبدل الصفوف بالأعمدة في الإطار (بدلاً من 0،1،2،3 سيكون الترتيب 0،10،20 ، ... 1،11،21 ...). بهذه الطريقة لن يتم استخدام وحدات البكسل المرتبطة في المجموعات التي رأيناها أعلاه معًا.
  • بدلاً من استخدام الإطارات واحدًا تلو الآخر ، يمكننا استخدام إطارات بعيدة عن بعضها البعض في الوقت المناسب. على سبيل المثال ، عند 30 إطارًا في الثانية ، يمكننا تخزين 15 إطارًا مؤقتًا ، ثم استخراج إنتروبيا باستخدام الإطار 1 و 16 و 2 و 17 ، وما إلى ذلك. وهذا يعني أننا سنخلط في إطارات تفصل بينها نصف ثانية - والتي يجب أن تكون بما فيه الكفاية لترابط الارتباطات بعيدا.
  • سنقوم بالخلط بين القنوات الأحمر والأخضر والأزرق بالتوازي مع الإطارات المختلفة ، حيث سيكون هناك ارتباط أقل بين وحدات البكسل ذات الألوان المختلفة في إطارات مختلفة. على سبيل المثال ، يكون البيكسل "الأحمر" 10 على الإطار 1 أقل ارتباطًا بالبكسل "الأزرق" 321 على الإطار 15 ، في حين أنه قد يرتبط ارتباطًا وثيقًا بالبكسل "الأزرق" 9 و 10 و 11 في نفس الإطار 1.

هناك تحذير واحد يستحق الذكر: مثل هذا التعديل وإعادة التجميع للقيم لا يلغي الارتباط على مستوى العالم. مهما كانت كمية الانتروبيا التي كانت لدينا في البداية (تم تقليلها من خلال الارتباطات) في عيّنتنا ، فسينتهي بنا المطاف بنفس مقدار الانتروبيا في النهاية ، بغض النظر عن كيفية إعادة التشكيل. ما نحصل عليه من خلال الوصول إلى القيم عبر الإطارات ، في قنوات مختلفة ، من البيكسلات البعيدة عن بعضها البعض ، هو التخلص من الارتباط المحلي في كل مجموعة من القيم المشكلة بهذه الطريقة [2] ، بحيث تكون كل قيمة في الدفعة التي تم تمريرها إلى مستخرجنا مستقلة من الاخرين.

من عادي إلى موحد

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

هذا هو التوزيع الطبيعي المثالي للضوضاء في إطار فرقنا. ومع ذلك ، لإنشاء إنتروبيا ، نحتاج إلى تحويل هذا التوزيع الطبيعي بطريقة ما إلى توزيع موحد. تتمثل الفكرة الأولى في استخدام الشكل العكسي لتحويل Box-Muller الأنيق ... والذي ، لسوء الحظ ، لن ينفعنا على الإطلاق. يتطلب تحويل Inverse Box-Muller توزيعًا مستمرًا ، وجميع بياناتنا الأولية هي قيم منفصلة.

في الواقع ، المشكلة أصعب مما تبدو للوهلة الأولى. انظر إلى الأرقام - على الرغم من أن نطاق القيم التي نراها في الضجيج يتراوح من -33 إلى +33 ، فإن أكثر من 96٪ من نقاط البيانات لدينا كلها في النطاق الضيق من -10 إلى +10. يعتمد حجم هذا النطاق على ظروف الكاميرا: إذا كانت الصورة تحتوي على عدد كبير جدًا من البقع المشبعة أو الكثير من البقع الداكنة [3] ، فسيكون هناك ضوضاء أقل بشكل عام ، وسوف ينخفض ​​النطاق أكثر من ذلك. بالنسبة للسواد "المغطى بالعدسات" ، يمكن أن تتقلص الغالبية العظمى من نقاط البيانات إلى 3: ما مجموعه 7 قيم مختلفة فقط. نحتاج إلى إنشاء إنتروبيا كاملة وموحدة من مجموعات محدودة من هذه القيم (حوالي 21 قيمة في ظروف مثالية ، أو إلى 7 قيم في أسوأ الظروف). وسيكون توزيع هذه القيم متحيزًا للغاية - في توزيعنا ، يحدث نموذج صفر في أغلب الأحيان بمعدل تكرار 8.69٪.

كم من الانتروبيا يمكن أن نأمل في استخراجها من الناحية النظرية؟ لهذا الغرض ، هناك مفهوم معروف لـ "الحد الأدنى من الانتروبيا" (يشار إليه عادةً باسم min-entropy). على عكس تعريف إنترون الخاص بشانون ، والذي يصف إنتروب للتوزيع العام ، يصف مين إنتروبور سيناريو الحالة الأسوأ - سمة القيمة التي تحدث في أغلب الأحيان وبالتالي هي الأكثر قابلية للتنبؤ. في هذه العينة ، يحدث الصفر 8.69٪ من الوقت. إن الحساب البسيط لـ -log2 (8.69٪) يعطينا إنتروبيا دقيقة نظرية تبلغ 3.52 بت - الحد الأقصى لعدد البتات التي يمكننا توقع استخراجها من نقطة بيانات واحدة. هناك طريقة أخرى للتعبير عن ذلك: في كل مرة نقرأ فيها قيمة بكسل للضوضاء ، بغض النظر عما إذا كانت القيمة -30 أو +10 أو 0 ، فإن قراءة هذه القيمة تقلل من حالة عدم اليقين الخاصة بنا فقط بمقدار 3.52 بت. على الرغم من أن 33 يتطلب أكثر من 5 بتات للتشفير (2 ^ 5 = 32) ، لا يهم - الكون الوحيد (عدم اليقين) المخفي داخل كل قيمة هو 3.52 بت فقط في أحسن الأحوال. إذا اضطررنا إلى التعامل مع ظروف أسوأ للكاميرا (أي تباين أقل للضوضاء) ، فسوف تنخفض إنتروبيا لكل نقطة بيانات أكثر. والخبر السار هو أن الكاميرا 12 ميجا بكسل لديها الكثير والكثير من نقاط البيانات تنتج كل ثانية!

لذلك ، وفقًا لظروف الكاميرا ، نقوم بتشفير جميع نقاط البيانات في 1 أو 2 أو 3 بت: quantized_value = raw_value٪ 2 ^ بت. ومع ذلك ، حتى بعد الترميز ، لا تزال وحدات البت الخاصة بنا متحيزة بشدة ، ومن الواضح أن نسبة البتات صفر هي الأكثر انتشارًا لأن القيمة الأكثر شيوعًا هي الصفر. كيف يمكن أن ننتقل من تيار بتات صفري متحيز إلى قطار بتات مع توزيع موحد؟ لحل هذا التحدي ، سوف نستخدم حفظة جميع مستخلصات العشوائية - مستخرج Von Neumann الشهير.

فون نيومان النازع

اكتشف جون فون نيومان كيف يمكنك الحصول على الانتروبيا المثالية حتى لو كان المصدر الخاص بك هو عملة منحازة للغاية: عملة معدنية تهبط على جانب في كثير من الأحيان ثم أخرى. دعنا نقول أن لدينا عملة معدنية ترفع الرؤوس (0) 80٪ من الوقت ، وذيول (1) 20٪ من الوقت. ومع ذلك ، على الرغم من وجود عملة معدنية بها عيوب ، فلا يزال بإمكاننا استخراج إنتروبيا موحدة تمامًا منها!

هذه هي الفكرة الأساسية من مستخرج Von Neumann. دعونا نفكر في كل زوج من العملات المعدنية. من الواضح ، أن إرم 0،0 هو أكثر احتمالا بكثير من إرم 1.1 حيث أن الصفر من المرجح أن يحدث. ولكن ماذا سيكون احتمال إرم 0،1 مقارنة بـ001 إرم؟ إرم الأول لديه احتمال 80 ٪ × 20 ٪ = 16 ٪. سيكون إرم الثاني احتمال 20 ٪ × 80 ٪ ... الانتظار ، هو نفس العدد! لقد غيرنا ترتيب المتغيرات ، لكن النتيجة هي نفسها تمامًا.

أدرك Von Neumann أنه حتى إذا كان المصدر الخاص بك متحيزًا ، فإن احتمال التوليفات 1،0 و 0،1 متساويان ويمكنك فقط تسمية المجموعة الأولى بـ "صفر" المستخرج الجديد ، والجمع الثاني "واحد". بغض النظر عن مدى سوء مصدرك ، فإن مجموعة الأصفار والأخرى "الجديدة" ستكون موحدة تمامًا. إليك مستخرج Von Neumann الكلاسيكي للبت العشوائية المتحيزة:

  • إذا كان لديك زوج من 0،0 أو 1،1 ، فعليك إلقاءهما بعيدًا: لا ينتج أي شيء.
  • إذا كان لديك زوجًا واحدًا أو 0،1 ، فاستخدم البت الأخير كنتيجة وسوف يكون له توزيع عشوائي موحد: احتمالات هذين الزوجين متماثلة تمامًا!

يعمل مستخرج Von Neumann جيدًا بشكل مثير للدهشة وله فائدة إضافية أننا لسنا بحاجة حتى إلى معرفة مدى انحياز وحداتنا الواردة. ومع ذلك ، فإننا نرمي الكثير من بياناتنا الأولية (كل هذه 0،0 و 1،1 أزواج). هل يمكننا استخراج مزيد من الانتروبيا؟ توصل إلياس (72) وبيريز (92) بطريقتين مختلفتين لتحسين مستخرج Von Neumann. سنشرح طريقة بيريز لأنه أبسط قليلاً في التفسير والتنفيذ.

نعلم بالفعل أن 1،0 و 0،1 لديهم نفس الاحتمال - لا يوجد فرق بين 80 × 20 و 20 × 80 إذا كان مصدر ثنائي متحيزًا بنسبة 80٪ / 20٪. ولكن ماذا عن سلاسل أطول؟ دعونا نفكر في تسلسل "التخلص من" 1100 و 0011. إذا استخدمنا طريقة Von Neumann المستقيمة ، فلن نحصل على أي شيء منها: سيتم إلقاء كل من 11 و 00. ولكن دعنا نحسب الاحتمالات: 1100 ستكون 20 × 20 × 80 × 80 ، في حين أن 0011 ستكون 80 × 80 × 20 × 20 - نفس الأرقام مرة أخرى.

من الواضح أن هناك شيئًا مشابهًا جدًا لما رأيناه بالفعل. لدينا تسلسلان مع نفس الاحتمالات. مرة أخرى ، يمكننا القول أن التسلسل الذي ينتهي بـ 00 هو "صفر" جديد ، في حين أن التسلسل الذي ينتهي بـ 11 سيكون "واحدًا" جديدًا. هذه هي حالة العودية: نحن نستخدم نفس الخوارزمية فقط على الأرقام التي تضاعفت بدلاً من النسخ الأصلية. هنا هو مستخرج Von Neumann مع تكرار بسيط:

  • إذا كان لديك زوجًا واحدًا أو 0،1 ، فاستخدم البت الأخير كنتيجة (كلاسيكي Von Neumann).
  • إذا كان لديك زوج 1.1 أو 0،0 ، فقم بتحويله إلى 1 أو 0 وإضافته إلى مخزن مؤقت مؤقت.
  • بعد الانتهاء من معالجة البيانات الأولية ، قم بتشغيل مستخرج Von Neumann مرة أخرى على المخزن المؤقت الذي جمعته.

نظرًا لأن جميع التسلسلات 1.1 و 0،0 أصبحت مجرد بتات مفردة ، فإن خوارزمية Von Neumann الكلاسيكية بحكم التعريف ستستخرج بتات أكثر انتظامًا إذا احتوت البيانات الأولية على 1،1،0،0 أو 0،1،1. ونظرًا لأن هذه الخوارزمية متكررة ، يمكننا الاستمرار في تشغيلها طالما أن هناك شيئًا يجمع في المخزن المؤقت المؤقت لدينا ونستخرج كل جزء صغير آخر من الإنتروبيا من تسلسلات أطول. أخيرًا ، تحتوي خوارزمية Peres على تجريد واحد يسمح لنا باستخراج مزيد من الإنتروبيا من مصدر Von Neumann باستخدام موضع التتابعات التي تنتج بتات في الدفق الأولي ، والتي يتم تنفيذها في قاعدة بياناتنا البرمجية.

الآن لدينا مستخرج قوي يمكنه التعامل مع مدخلات من البتات المنحازة ، ونحن مستعدون تقريبًا لاستخراج بعض الإنتروبيا. ولكن هناك خطوة أخرى نحتاج إلى القيام بها أولاً.

اختبار سريع: تشي تربيع

لا يوجد اختبار للانتروبيا "الحقيقية". ما قد يبدو وكأنه إنتروبيا عشوائية قادمة من ، على سبيل المثال ، فيزياء الكم ، يمكن أن يتم إنشاؤها في الواقع بشكل قاطع تمامًا من قِبل مولد البرامج والتحكم الكامل فيها بواسطة مهاجم يقوم بتحديد بذرة أولية. لا يوجد اختبار على البيانات التي يمكن تشغيلها والتي تحدد الفرق بين "العملية العشوائية الكمومية الحقيقية" و "التسلسل الناتج عن البرمجيات". إن النجاح الحقيقي للتشفير الحديث هو حقيقة أنه يمكننا جعل "التسلسل الناتج عن البرمجيات" (نتيجة لخوارزمية التشفير) لا يمكن تمييزه عن "الانتروبيا الحقيقية". ومع ذلك ، في الوقت نفسه ، هناك عدد من اختبارات البرمجيات للعشوائية: FIPS-140 ، SP800-90B. ما الذي يجري؟

لفهم الغرض من "اختبارات العشوائية" هذه ، سنقوم بمراجعة أحد أبسط الاختبارات: ملاءمة خيوط التربيع (وضوحا "كاي تربيع"). لدى خان أكاديمية فيديو ممتاز يشرح خطوة بخطوة كيفية استخدام اختبار التربيع - تحقق من ذلك لمعرفة المزيد. اختبار خي مربع بسيط إلى حد ما ويتكون من التالي:

  • قم بصياغة نظرية حول ما تريد اختباره ، ثم احسب ما تتوقع ملاحظته إذا كانت فكرتك صحيحة.
  • راقب أحداث العالم الحقيقي وسجل القيم المرصودة.
  • يتم حساب إحصاء chi-squared بالجمع معًا في جميع الأحداث التالية: (ObservedValue - ExpectedValue) ² / ExpectedValue
  • استخدم جدول بحث أو آلة حاسبة مربعة للإجابة على السؤال الرئيسي: ما هو احتمال أن تكون الأحداث المرصودة نتيجة لنظريتك؟

كما ترى ، فإن الصيغة تقول فقط بلغة الرياضيات: "سأجمع مربع جميع الاختلافات بين ما اعتقدت أنه صحيح وما يحدث في العالم الحقيقي في نسبة ما كنت تتوقعه. إذا كانت أي من توقعاتك بعيدة جدًا عن الواقع ، فإن الفرق التربيعي سينمو بسرعة كبيرة! كلما أصبح أكبر ، كلما كنت مخطئًا. "

دعنا ننجح في حالتنا - بناء مستخرج منتظم من الكون. نريد إنتاج بايتات عشوائية ، يمكن أن تأخذ قيمًا من 0 إلى 255. نريد توزيع وحدات البايت لدينا لتكون موحدة ، بحيث يكون احتمال كل بايت هو نفسه تمامًا. مراقبة كل بايت هو حدث ، لذلك لدينا 256 مجموع الأحداث. دعنا نقول أن برنامجنا أنتج 256000 بايت ونحن على استعداد لتشغيل اختبار chi-square عليها. من الواضح ، إذا كانت البايتات موحدة (نظريتنا) ، فإننا نتوقع أن نرى كل بايت مع احتمال 1/256. لذلك سوف نرى كل بايت بالضبط 256000/256 = 1000 مرة بالضبط. هذه هي القيمة المتوقعة لكل حدث. ثم نسجل القيمة المرصودة (عدد المرات التي نرى فيها بالفعل كل بايت في بياناتنا) ونلخص جميع قيم 256 (ObservedValue - 1000) ² / 1000. هذا الرقم هو إحصائياتنا المربعة. ماذا نفعل معها؟

يتم تنظيم جداول Chi-square بواسطة معلمتين - ما يسمى بدرجات الحرية - وهي طريقة خيالية لقول "عدد من الأحداث المستقلة التي لديك ناقص واحد". في حالتنا ، ستكون درجات الحرية 256-1 = 255. الجزء الأكثر إثارة للاهتمام هو المعامل الثاني P ، وهو احتمال يمكننا حسابه من 99.9 ٪ (مرجح للغاية) إلى 0.1 ٪ (من غير المرجح للغاية).

الجدول المطبوع الوحيد الذي يمكن أن نجده يقطع بشكل مذهل عند 250 - فقط 5 قصيرة عما نحتاج إليه! ومع ذلك ، يمكننا استخدام آلة حاسبة chi-squared للحصول على القيم الدقيقة التي نحتاجها.

ما يخبرنا به هذا الجدول هو احتمال أن تلائم ملاحظتنا فرضيتنا - الفرضية التي استخدمناها لصياغة جميع القيم المتوقعة. بمعنى آخر ، إذا حصلنا على تربيع حوالي 190 ، فهذا يضمن تقريبًا أن الأحداث المرصودة تتطابق مع نظريتنا عنها - النظرية القائلة بأن جميعها تأتي من توزيع موحد - ولكن لا تزال هناك فرصة بنسبة 0.1٪ لأننا مخطئون! للحصول على خي مربع في 284 ، هناك فرصة بنسبة 10 ٪ أن فرضيتنا صحيحة. هذا ليس بالأمر السيئ في الواقع - إذا قمت بإجراء اختبار chi-square 10 مرات على 10 عينات عشوائية تمامًا ، فمن المحتمل أن تحصل على عينة واحدة حوالي 284. إذا قمت بإجراء مئات العينات العشوائية ، فقد تحصل على قيمة chi-square من 310 ، أي عينة مع احتمال انخفاض 1 ٪. إذا كنت على استعداد لاختبار ألف عينة ، فقد تكون هناك قيمة واحدة مربعة لـ 330 (0.1٪).

كما ترون ، اختبار chi-square ، مثل كل اختبارات العشوائية الأخرى ، لا يخبرنا بأي شيء عن طبيعة العشوائية لدينا! لا يخبروننا ما إذا كانت عشوائية "حقيقية" أم لا ، أي أنها مشتقة من مصدر مادي "حقيقي" أو تم إنشاؤها بواسطة البرنامج. يجيب هذا الاختبار على السؤال الأكثر بساطة: بعد النظر إلى العينة المحددة ، ما هي فرصة أن تأتي هذه العينة من القيم العشوائية من مصدر بتوزيع موحد؟

منذ الاختبارات احتمالية في الطبيعة ، يجب توخي الحذر في تفسير النتائج. لا يعني ذلك أن هناك شيئًا ما "خاطئًا" من خلال درجة خيالية ، على سبيل المثال 310 (وهو احتمال منخفض بنسبة 1٪). لا يتطلب الأمر سوى بضع محاولات لتشغيل هذا البرنامج النصي لإنتاج درجات خيالية تزيد عن 300 (كما تم قياسها بواسطة ent) من حالة الفن / dev / urandom على نظام Mac OS X. إذا واصلت تكرار الاختبار أو حتى مئات مرات ، يجب أن تتوقع ظهور قيم أقل وأقل احتمالا.

لأني في {1..10} ؛ افعل dd إذا = / dev / urandom bs = 1k count = 1k &> / dev / null | الأنف والحنجرة | قطع د ، -4. فعله
194.700684 308.307617 260.475586 236.611328 316.724609 306.418945 262.301270 240.013184 205.627930 257.049805

ومع ذلك ، فإن الاحتمال يتراجع بسرعة أكبر من 330. إن احتمال أن تكون مربعة chi-400 هي 0.000001٪ فقط - قد يحدث مرة واحدة فقط لكل 100 مليون من العينات!

سيكون اختبار chi-squared هو رادار الإنذار المبكر الخاص بنا عندما ينهار شيء ما في مستخرجنا. يخبرنا الاختبار "مهلا ، هذا يبدو أقل فأقل أن أجزاءك تأتي من مصدر موحد!" إذا كانت درجة خي مربع ترتفع. لا يذكر شيئًا عن طبيعة أو صحة أو مصدر انتروبيا ، فقط مدى احتمال إنتاج البتات بواسطة مصدر عشوائي موحد.

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

كل ذلك معا مرة واحدة

كما رأينا ، فإن مستخرج الإنتروبيا الجيد هو عبارة عن قطعة معقدة من آلات التشفير! دعنا نراجع كيف نجمع كل القطع معًا:

  • خذ إطارين للفيديو كصفيفتين كبيرتين لقيم RGB.
  • اطرح إطارًا واحدًا من الآخر ، والذي يتركنا مع عينات من قيم الضوضاء الحرارية الخام.
  • احسب متوسط ​​إطار الضوضاء. إذا كان خارج نطاق ± 0.1 ، فإننا نفترض أن الكاميرا قد تحركت بين الإطارات ، ورفض هذا الإطار الضوضاء.
  • حذف تسلسلات طويلة بشكل غير صحيح من الأصفار التي تنتجها المناطق المشبعة. بالنسبة لعيناتنا 1920x1080 = 2 ميغابايت واحتمال الصفر الطبيعي بنسبة 8.69 ٪ ، سيتم إزالة أي تسلسل أطول من 7 أصفار من البيانات الخام.
  • قم بقياس القيم الأولية من نطاق ± 40 إلى 1،2 أو 3 بت: raw_value٪ 2 ^ بت.
  • قم بتجميع القيم المقدّمة في دفعات تم أخذ عينات منها من قنوات R و G و B مختلفة ، على مسافات بكسل كبيرة عن بعضها البعض وفي إطارات مختلفة لتقليل تأثير الارتباطات بين المكان والزمان في تلك المجموعة.
  • قم بمعالجة مجموعة من 6 إلى 8 قيم باستخدام خوارزمية Von Neumann لإنشاء عدد قليل من وحدات البتات الموحدة.
  • جمع البتات موحدة في كتلة إنتروبيا جديدة.
  • تحقق كتلة جديدة مع اختبار خي مربع. رفض الكتل التي ترتفع درجة عالية للغاية وبالتالي من غير المحتمل أن تأتي من مصدر إنتروبي موحد.

يا للعجب! كان ذلك بسيطا.

توليد الانتروبيا

حسنًا ، دعنا نولد إنتروبيا "حقيقية" فاضحة! تطبيق iOS موجود هنا أو يمكنك تجميعه من الكود المصدر وتتبع كل بت أثناء انتقاله عبر المستخرج. هناك طريقتان للحصول على entropy من التطبيق: AirDrop إلى MacBook الخاص بك (وقمنا بتضمين خيار تحميل block entropy كملف CSV وكذلك للتحليل اليدوي) ، أو استخدام ترحيل Zax للتحميل الآمن من جهاز إلى جهاز ، والتي سوف نغطيها لاحقا.

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

ومع ذلك ، تنهار الأمور بسرعة إذا كانت جودة الصورة سيئة ، أو بسبب التشبع أو وجود الكثير من المناطق المظلمة حيث تنخفض درجة تباين الضوضاء. مع تباين أقل ، سيؤدي تناول 3 بتات من كل نقطة بيانات إلى تغذية الكثير من القمامة في المستخرج. خوارزمية Von Neumann ليست سحرية ، ولن تخلق إنتروبيا من الهواء الرقيق إذا كنا نتفوق على نقاط البيانات الخام [4]. إحصائيات تشي التربيع التقاط ذلك على الفور.

3 بت مشبعة

يكون الإصلاح سهلاً - إذا كانت جودة الصورة رديئة ، فما عليك سوى تقليل عدد البتات المستخرجة من كل نقطة بيانات إلى 2 بت أو حتى 1 بت. بالنسبة لهذا العرض ، يؤدي تقليله إلى 2 بت إلى إرجاع مستخرجنا إلى النتائج الطبيعية.

2 بت مشبعة

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

3 بت ماك بوك رمادي

كل هذا مطلوب كان معدات عالية التقنية من قلم رصاص يرفع الكاميرا أعلى قليلا من سطح ماك بوك الرمادي. إنه المشهد المثالي لالتقاط مجموعتنا الكاملة من الضوضاء الحرارية [5].

جيل إنتروبيا عالي التقنية بقلم رصاص

إرسال الانتروبيا

بالطبع ، لن يكون كل خراطيم الحريق هذه ذات الانتروبيا الحرارية ذات فائدة تذكر إذا ظلت محلية على جهازك. والخبر السار هو أننا قمنا بالفعل ببناء مرحل Zax حول مكتبة NaCl ذات المستوى الأعلى لتقديم اتصالات عملية غير متزامنة ومجهولة ومشفرة. يسمح لنا ذلك بتشفير الإنتروبيا الحرارية (التي ينتجها المالك في حالة يتحكم فيها بالكامل) وإنشاء قناة آمنة من خلال مرحل NaCl لإرسال هذه الإنتروبيا إلى أي جهاز يحدده المالك. سيؤدي هذا إلى حصولنا على NaCl 256 بت "الأمان الحسابي" لمصادر إنتروبيا الشبكية هذه. تتم معالجة كل جهاز بواسطة مفتاح عام NaCl. لا تستخدم المرحلات المفاتيح العامة لأجهزة الاتصال مباشرة ، ويتم تعريف مساحة عنوان الترحيل بأنها "تجزئة المفتاح العمومي" (hpk). يتم تشفير الاتصالات مرتين - يتم تشفير الطبقة الداخلية بكل ما هو المفتاح العمومي المقصود بواسطة الجهاز الأصلي (أي أن المرحلات لدينا لا ترى البيانات الأولية أبدًا) ، ويتم تشفير الطبقة الخارجية بمفتاح جلسة NaMl مؤقت منفصل تم إنشاؤه عند محطة يتصل التتابع. إذا كنت ترغب في معرفة المزيد عن مرحلات Zax ، فيمكنك القراءة عن بنية تشفيرنا الكاملة وكذلك بروتوكولنا الجديد لتبادل الملفات الكبيرة.

باستخدام مرحل Zax ، يمكنك تشغيل عملية داخل خادم سحابي يتلقى مباشرة إنتروبيا مشفرة من جهاز Apple تحت سيطرتك ، وتفريغه في الذاكرة ، واستخدام هذا إنتروبيا كما يتطلب الموقف - لإدخال / dev / urandom محلي كإضافة إضافية مصدر أو لإنشاء خط أنابيب إنتروبيا منفصل يتحكم فيه المالك مباشرةً من الضوضاء الحرارية للكاميرا.

لكن أليس هذا منطقًا دائريًا - استخدام الخوادم لتأمين الخوادم؟ إذا فكرت من خلال التداعيات العملية ، فهذا ليس كذلك. السبب الرئيسي وراء وضعنا للخوادم في السحابة هو معالجة الحمل الحسابي الثقيل والوصول إلى اتصال نطاق ترددي عالي. لا يحتاج التتابع الفردي الذي يمر عبر إنتروبيا إلى خوادم سحابية إلى قوة حوسبة كثيفة أو عرض نطاق ترددي مرتفع ، لذلك لا يحتاج إلى استضافة في السحاب! في الواقع ، يمكن تشغيل التتابع على Raspberry Pi المتواضع المحشو في خزانة واحدة مثل مولد iPhone. مع كل من الترحيل و iPhone تحت السيطرة الكاملة للمالك ، يمكن للمالك إنشاء قناة قوية وآمنة في بيئة الخادم السحابي. والافتراض الوحيد الذي نحتاج إلى القيام به هو أن مفاتيح SSH للمالك ومقدمة الخادم أثناء الإعداد الأولي (مفاتيح SSH من جانب الخادم) لم يتم اختراقها ، وأنه يمكن للمالك نقل آمن للمفتاح الخاص إلى الخادم السحابي لإنشاء قناة آمنة مع تناوب.

هنا هو كيف يناسب الجميع:

  • للعمل مع مرحل Zax ، تحتاج إلى تثبيت مكتبة عملاء Glow: npm i -g theglow.
  • اختر مفتاحًا سريًا لجهازك أو الخادم المستهدف. هذا يمكن أن يكون أي 32 بايت عشوائي ولدت على أي حال تريد. على سبيل المثال ، قم بإنشاء ملف رئيسي cat / dev / urandom | رئيس ج 32 | base64> station_key.txt على جهاز آمن واستخدم هذا الملف على خادم هدف واحد. يمكنك أيضًا استخدام وضع "AirDrop" الخاص بـ TrueEntropy لإنشاء إنتروبيا للمفتاح الأولي مباشرةً.
  • ابدأ محطة باستخدام هذا المفتاح: cat station_key.txt | مفتاح توهج - مجموعة. أو يمكنك استخدام مفتاح التوهج - توليد لتجنب إنشاء ملف إضافي. سيقوم هذا الأمر أيضًا بطباعة المفتاح العمومي الناتج.
  • انسخ المفتاح العام لجهازك (PK): مفتاح التوهج - عام
  • الصق هذا المفتاح العمومي في فتحة مستلم تطبيق TrueEntropy وحدد عنوان URL للتتابع.
  • انسخ مفتاح الجهاز من تطبيق TrueEntropy.
  • قم بتنزيل الكتل المشفرة التي تم تحميلها بواسطة تطبيق TrueEntropy ، على سبيل المثال لتنزيل 5 كتل في آن واحد: glow download https://zax-test.vault12.com [Device / Sender Public Key] -n 5 استخدمنا مرحل الاختبار في هذا المثال [6] ، بالنسبة لأي استخدام للإنتاج ، يجب عليك نشر مرحلاتك الخاصة من المصدر. لاستخدام الإنتروبيا المباشر ، يمكنك توجيهه إلى أي وجهة: تنزيل الوهج https://zax-test.vault12.com [Device / Sender Key] --silent --stdout | أمراض الأنف والأذن والحنجرة

هذا هو! طالما أن TrueEntropy يعمل في وضع "Network" ، فسيتم تحميل الكتل المشفرة إلى مرحلتك ، والذي بدوره يمكنك تنزيله ، وفك تشفيره على جهاز مستهدف ، واستخدامه كما تراه مناسبًا.

إذا كنت تخطط لاستخدام هذا لأي غرض عملي غير البحث ، فتأكد من الحرص في اختيار طريقة عرض جيدة للكاميرا (أو تقليل إعداد بت TrueEntropy إلى 1-2 بت) ، قم بتمكين قطع chi-square في الإعدادات المتقدمة ، واستخدم شكلاً من أشكال التجزئة على الجهاز الوجهة قبل استخدام كل كتلة إنتروبيا. ضع في اعتبارك أن TrueEntropy هو نموذج أولي للبحث ، ولا نوصي باستخدامه في بيئة الإنتاج الفعلية.

الاختبار الحقيقي: SP800-90B

الآن نحن نعرف كيفية توليد وتسليم الانتروبيا إلى أي جهاز. ولكن إلى جانب اختبار تبسيط الخير الملائم للرضا ، كيف نعرف ما إذا كانت الإنتروبيا التي أنتجناها جيدة؟ لحسن الحظ ، كان الأشخاص الجيدون في NIST يفكرون منذ فترة طويلة في كيفية بناء وتقييم مستخلصات الانتروبيا ، وقد لخصوا جميع أفضل الممارسات في وثيقة SP800 - 90B [7]. هذا مورد يجب قراءته لأي شخص مهتم بالعمل الجاد حول كتابة مولدات العشوائية ومستخلصات الكون.

يتم تنفيذ العديد من اختبارات SP800 - 90B في البرامج ، ويمكن لأي شخص تشغيلها على أي مصدر إنتروبي. تقوم هذه الاختبارات بالكثير من عمليات التحقق من الرفع الثقيل بحثًا عن أنماط أعلى بكثير من اختبارنا المربّع البسيط - يستغرق الأمر عدة ساعات لمجموعة الاختبار هذه على ملف واحد. إذاً ، كيف تتراكم كتلة TrueEntropy أمام مجموعة اختبار الانتروبي الحديثة؟

python iid_main.py ~ / entropy-3b1.bin 8 -v
قراءة 2097152 بايت من البيانات
قراءة في الملف / home/fallout/entropy-3b1.bin ، 2097152 بايت.
مجموعة البيانات: 2097152 رموز من 8 بتات ، و 256 حرفًا بالحروف الأبجدية.
قيم رمز الإخراج: دقيقة = 0 ، الحد الأقصى = 255
حساب الإحصاءات على التسلسل الأصلي
حساب إحصائيات على تسلسل بيرمد
اختبارات التقليب: 99.99 في المئة كاملة
إحصاء C [i] [0] C [i] [1]
----
رحلة 3845 0
numDirectionalRuns 8304 3
lenDirectionalRuns 82 854
numIncreasesDecreases 5930 10
numRunsMedian 8144 2
lenRunsMedian 2288 1720
avgCollision 9654 0
maxCollision 433 204
الدورية (1) 1455 29
دورية (2) 28 1
الدورية (8) 2996 32
الدورية (16) 8229 35
الدورية (32) 41 3
التغاير (1) 229 0
التغاير (2) 799 0
التغاير (8) 421 0
التغاير (16) 7136 0
التغاير (32) 3487 0
ضغط 7488 6
(* يدل على فشل الاختبار)
** اجتاز اختبارات التقليب IID
تشي مربع الاستقلال
النتيجة = 65162.2 ، درجات الحرية = 65535 ، القطع = 66659.4
** مرت اختبار الاستقلال تشي مربع
تشي مربع الخير مناسبا
النتيجة = 2285.22 ، درجات الحرية = 2295 حد = 2510.06
** اجتاز اختبار الخير من مربع خي
** مرت اختبارات مربع تشي
اختبار LRS
W: 5 ، Pr (E> = 1): 0.864829
** اجتاز اختبار LRS
IID = صحيح
دقيقة الانتروبيا = 7.92358

ربما تكون هذه الاختبارات سهلة للغاية لدرجة أن أي شيء سوف يتجاوز هذه العتبة؟ كما اتضح ، هذا ليس هو الحال. لإجراء تجربة سريعة ، استبدلنا مستخرج Von Neumann بأخرى أكثر بساطة: نظرًا إلى قيمة الضوضاء والمخرجات 1 إذا كانت أعلى من الصفر ، و 0 إذا كانت أقل من الصفر. نظرًا لأن (على عكس Von Neumann) لا نتخطى مطلقًا أي تسلسلات غير قيم الصفر ، فإن هذا المستخرج ينتج ضعف الناتج (قمنا بإدراجه في الكود المصدري كمرجع). يكون توزيع منحنى الجرس الذي أظهرناه أعلاه متماثلًا تقريبًا ، لذلك يجب أن يكون عشوائيًا إلى حد كبير إذا كانت القيمة أعلى أو أقل من الصفر ، أليس كذلك؟ هل سيكون مستخرج جيد وله أداء أعلى؟

الحكم SP800-90B قاسٍ: مثل هذا النازع الساذج يفشل على الفور في أقل من 5 اختبارات:

$ python iid_main.py ~ / entropy-direct.bin 8 -v
قراءة 1999996 بايت من البيانات
قراءة في ملف /home/fallout/entropy-direct.bin ، 1999996 بايت طويلة.
مجموعة البيانات: 1999996 رموز من 8 بتات ، و 256 من الرموز> بالحروف الأبجدية.
قيم رمز الإخراج: دقيقة = 0 ، الحد الأقصى = 255
حساب الإحصاءات على التسلسل الأصلي
حساب إحصائيات على تسلسل بيرمد
اختبارات التقليب: 99.99 في المئة كاملة
إحصاء C [i] [0] C [i] [1]
----
رحلة 7875 0
numDirectionalRuns * 10000 0
lenDirectionalRuns 6435 3562
numIncreasesDecreases 394 4
numRunsMedian * 10000 0
lenRunsMedian 40 48
avgCollision * 10000 0
maxCollision 5222 1236
دورية (1) * 0 0
الدورية (2) 46 2
دورية (8) 1955 39
الدورية (16) 512 15
الدورية (32) 7632 39
التغاير (1) * 0 0
التغاير (2) 141 0
التغاير (8) 6251 0
التغاير (16) 5847 0
التغاير (32) 5980 0
ضغط 7540 3
(* يدل على فشل الاختبار)
** فشل اختبارات التقليب IID
IID = خطأ

هل يمكننا استخدام مستخرج Von Neumann من 3 بتات مع إمكانية عرض كاميرا جيدة؟ يمكننا بالتأكيد ، هنا كتلة إنتروبي أخرى يتم إنتاجها مع إعدادات 3 بت على عرض كاميرا متوازن:

الثعبان iid_main.py ~ / entropy-3b2.bin 8 -v
قراءة 2097152 بايت من البيانات
قراءة في الملف / home/fallout/entropy-3b2.bin ، 2097152 بايت.
مجموعة البيانات: 2097152 رموز من 8 بتات ، و 256 حرفًا بالحروف الأبجدية.
قيم رمز الإخراج: دقيقة = 0 ، الحد الأقصى = 255
حساب الإحصاءات على التسلسل الأصلي
حساب إحصائيات على تسلسل بيرمد
اختبارات التقليب: 99.99 في المئة كاملة
إحصاء C [i] [0] C [i] [1]
----
رحلة 5990 0
numDirectionalRuns 6878 8
lenDirectionalRuns 939 5563
numIncreasesDicreases 1204 13
numRunsMedian 220 1
lenRunsMedian 1198 966
avgCollision 8953 0
maxCollision 6838 1137
الدورية (1) 909 16
الدورية (2) 3748 45
الدورية (8) 8752 22
الدورية (16) 9318 16
الدورية (32) 8374 20
التغاير (1) 3183 0
التغاير (2) 4537 0
التغاير (8) 3617 0
التغاير (16) 2460 0
التغاير (32) 316 0
ضغط 1473 6
(* يدل على فشل الاختبار)
** اجتاز اختبارات التقليب IID
تشي مربع الاستقلال
النتيجة = 65285.8 ، درجات الحرية = 65535 ، القطع = 66659.4
** مرت اختبار الاستقلال تشي مربع
تشي مربع الخير مناسبا
النتيجة = 2269.05 ، درجات الحرية = 2295 قطع = 2510.06
** اجتاز اختبار الخير من مربع خي
** مرت اختبارات مربع تشي
اختبار LRS
W: 4 ، Pr (E> = 1): 1.000000
** اجتاز اختبار LRS
IID = صحيح
دقيقة الانتروبيا = 7.90724

خبر سار - خرج مستخرجنا من اختبار SP800 - 90B IID. [7]

التحسينات المستقبلية

لقد أصبح ما بدأ كمشروع عطلة نهاية أسبوع ممتعًا تطبيقًا مثيرًا للاهتمام ، وانتهينا بنا إلى إنفاق أكثر من أسبوع لتنفيذه إلى مستوى الحد الأدنى من MVP. عرضت مرة أخرى القوة المذهلة الموجودة في مليارات الهواتف الذكية التي نعتبرها أمرا مفروغا منه في هذه الأيام. بالطبع ، قد يكون MVP الأول خامًا جدًا للاستخدام الإنتاج. والخبر السار هو أن جميع التعليمات البرمجية المصدر الخاصة بنا مرخصة من قبل معهد ماساتشوستس للتكنولوجيا ، لذلك فنحن نرحب بك لإجراء طعنة لجعلها أفضل. في يوم من الأيام ، يمكنك استبدال الجدار الغالي الثمن الخاص بمصابيح الحمم بجهاز iPhone مستخدم بسيط في الخزانة!

ما الذي يمكن عمله لتحسين قاعدة البيانات هذه:

  • نحن نأخذ الكاميرا بثبات معين ، لكنه شكلي للغاية وجهاز قوي للغاية! ما هي إعدادات الكاميرا التي يمكن ضبطها وتأمينها إلى الحد الأقصى من تباين الضوضاء في جميع الظروف؟ سيكون التطبيق بعد ذلك أقل حساسية لاختيار طريقة عرض مناسبة ويمكنه ضبط نفسه لإنشاء إنتروبيا مثالية في أي ظرف من الظروف.
  • استخدمنا مستخرج Von Neumann لأنه كان أبسط طريقة للتنفيذ ، وقدم لوحة تربوية مثالية لإظهار كيفية تحويل كل تسلسل بت من مصدر خام متحيز إلى منتظم. ومع ذلك ، فإن المستخلصات المتطورة في صناعة الاستفادة من "نظرية منتج المجموع" (يتم خلط المصادر كـ X * Y + Z على حقل معين) وقد تكون أكثر قوة نظرًا لعدد قيم بكسل الضوضاء التي نحصل عليها من كل إطار .
  • تريد الاسترخاء افتراضات IID وتجنب الإعداد الدقيق للكمية غير مرتبطة؟ سهلة الاستخدام أي وظيفة تجزئة عالمية جيدة. الشرط الجديد الوحيد هو أن التجزئة العالمية سوف تتطلب بذرة لمرة واحدة. يمكننا أن نفترض بسهولة أن حالة / dev / urandom المحلية لـ iPhone مستقلة تمامًا عن كاميرا الضوضاء الحرارية التي نراها ، ونختار ببساطة تلك البذور من CSPRNG المفضلة لدى الجميع.
  • نحن في الواقع لا استخراج أقصى قدر من الانتروبيا. أجهزة iOS الأحدث تدعم دقة عالية تبلغ 3840 × 2160 لكل إطار. كلما زادت الدقة ، زاد تباين كل ضوضاء بالبكسل ، حتى نتمكن من البدء في استخراج نقاط بيانات 4 بت في نفس الظروف "المثالية". الجانب السلبي هو أنه على الجهاز الآن معالجة 8 ميغابايت من البيانات قبل إنشاء أول جزء من إنتروبي ، وهو يبطئ الإخراج الأولي ويتطلب مساحة ذاكرة ضخمة. لقد تركنا القيمة الافتراضية عند 2 ميغابايت لكل إطار لتحسين الاستجابة ، لكنك مدعو لتغيير ذلك إذا كنت تبحث عن أقصى إنتاجية للإنتروبيا [8].
  • ليس من المستغرب أن تنفق معظم الدورات في تطبيقنا على تشغيل منطق المستخرج على وحدة المعالجة المركزية لجهاز iOS - وهذا هو إلى حد بعيد عنق الزجاجة الرئيسي في الأداء في التطبيق الآن. يستغرق حساب ضجيج الفرق في الإطارات 0.1 ثانية فقط على iPhone7 عبر إطار 2 ميغابايت ، بينما يستغرق تشغيل النازع فوق نفس الإطار ما يصل إلى 5-7 ثواني. لتعظيم عرض النطاق الترددي للانتروبيا الحرارية ، سيكون أحد الحلول هو التقاط قيم الضوضاء الخام من iPhone وتشغيل المستخرج على الجهاز المستهدف. مثل هذا الإعداد سوف يسمح لنا بإنشاء إنتروبيا بأقصى سرعة نظرية لدقة الكاميرا بعشرات ميغابايت في الثانية.
  • اختبار خي مربع هو أبسط وأسرع اختبارات الوقت الحقيقي التي يمكننا تشغيلها مع إنشاء كتل الانتروبيا. يحتوي SP800-90B الذي استخدمناه للاختبار الثابت على مجموعة هائلة من خوارزميات تقييم الإنتروبيا والصحة. إضافة بعض الفحوصات الصحية في الوقت الفعلي ، يمكن أن توفر حزمة SP800-90B وسائل وقاية إضافية عند استخدامها في الإنتاج.

شيء اخر

حسنا ، هذا كل شيء! نأمل أن تستمتع بتجربتنا السريعة في استخراج العشوائية التي تنطوي على إمكانات مثيرة للاهتمام لتوليد كمية هائلة من الانتروبيا من أي هاتف ذكي مزود بكاميرا.

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

إحدى المشكلات الكبيرة التي تواجه جميع مالكي العملات المشفرة هي أنه لا توجد طريقة جيدة لتخزين المفاتيح والعبارات الخاصة ذات القيمة العالية بشكل آمن وموثوق. لسنوات عديدة ، كان أحدث ما توصلت إليه الأمان هو طباعة عبارة مكونة من 12 كلمة والاحتفاظ بها في صندوق ودائع آمن للبنوك [9]. لقد بدأنا Vault12 في بناء منصة أفضل بكثير لتأمين أصول التشفير ، وفي مقالتنا التالية سوف نخبرك بكل شيء! إذا كنت مهتمًا بالتشفير والعملات المشفرة ، فإننا نود الحصول على مزيد من اختبار بيتا للنسخة التجريبية العامة القادمة من منصتنا - لا تتردد في الانضمام إلى Slack لدينا إذا كنت ترغب في المشاركة!

، تيم Vault12

شكراً جزيلاً لكل من تيرينس جواسيس ، يفغيني دوديس ، لوكاس ريان ، نافال رافيكانت على قراءة مسودة هذا المقال والتعليقات القيمة.

المراجع

مقدمة لمستخلصات العشوائية https://cs.haifa.ac.il/~ronen/online_papers/ICALPinvited.pdf

النازع فون نيومان: https://cs.nyu.edu/courses/spring06/G22.3220-001/scribe/Lecture2.pdf http://www.eecs.harvard.edu/~michaelm/coinflipext.pdf

مستخرج إلياس وبيريز: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-441-information-theory-spring-2016/lecture-notes/MIT6_441S16_chapter_28.pdf

استخراج العشوائية باستخدام مصادر مستقلة قليلة http://www.boazbarak.org/Papers/msamples.pdf

ترحيل Zax "NaCl"
https://github.com/vault12/zax

المواصفات الفنية Zax
https://s3-us-west-1.amazonaws.com/vault12/crypto_relay.pdf

مكتبة عميل الوهج
https://github.com/vault12/glow

يمكن لهاتفك الذكي قياس التعرض للإشعاع الخاص بك https://medium.com/the-physics-arxiv-blog/your-smartphone-can-measure-your-radiation-exposure-ce9b464d68aa

أحد الأسرار التي تحرس الإنترنت الآمن هي جدار من مصابيح الحمم البركانية
https://sploid.gizmodo.com/one-of-the-secrets-guarding-the-secure-internet-is-a-wa-1820188866

هجمات الانتروبيا!
https://blog.cr.yp.to/20140205-entropy.html

SP800-90B
https://csrc.nist.gov/CSRC/media/Publications/sp/800-90b/draft/documents/sp800-90b_second_draft.pdf

إدارة وفهم استخدام الإنتروبي

مولدات تأثير الانهيار
http://holdenc.altervista.org/avalanche/
http://ubld.it/truerng_v3

القبعة الحمراء: تمرير إنتروبيا إلى نظام التشغيل الضيف

الأمازون HSM

[1] انسخ صورتين فارغتين من الكاميرا كطبقات ، واضبط مزج الطبقة على "Difference" واضبط "المستويات" على تضخيم يصل إلى 20 مرة تقريبًا.

[2] كل قيمة في مجموعة تصبح IID محليًا (مستقلة موزعة بشكل متطابق). هناك طرق أبطأ من الناحية الحسابية لبناء أداة القياس الكمي التي تلبي شرط IID "العالمي" ، لكن من الناحية العملية ، من الأسهل كثيرًا التعامل مع الارتباطات المتبقية عن طريق تمرير إخراج المستخرج ببساطة من خلال دالة هاش.

[3] يرتبط تباين ضوضاء المستشعر بكمية الضوء التي تصل إلى المستشعر - تنتج الكثافة الأعلى ضوضاء أكثر طالما أن المساحة غير مشبعة ، في حين تنتج البقع الداكنة تباينًا أصغر في قيم الضوضاء

[4] من الناحية الرسمية ، من خلال المبالغة في القيم التي لا تحتوي على تباين كافٍ ، فإننا نكسر افتراض IDD حول نقاط البيانات التي تتطلب خوارزمية Von Neumann / Peres للعمل - يمكن توقع عدد من البتات في القيم المفرطة.

[5] هناك خيار آخر وجدناه هو وضع الهاتف على الكاميرا المكتبية للتركيز على السقف في غرفة مضاءة بشكل خافت.

[6] نقوم بإعادة تشغيل وتحديث خادم اختبار zax هذا كثيرًا. مرحبًا بك لاستخدامه للاختبار السريع ولكن لا تتوقع أي نوع من الأداء الثابت من عنوان URL هذا! يمكن وسوف يذهب حاليا / إعادة تشغيل في أي لحظة.

[٧] نظرًا لأن مقالتنا تستغرق وقتًا طويلاً ، فعلى سبيل الإيجاز ، لا نعرض سوى اختبارات سريعة لمستخرج VN / Peres. لمزيد من التدقيق ، يمكنك تصدير القيم الأولية من فئة العينة وإجراء اختبارات غير IID لقياس خصائص البيانات الحرارية الخام (وداخلها) - يحتوي SP800 - 90B على الكثير من التفاصيل حول كيفية إجراء اختبار شامل لغير IID الخام البيانات.

[8] تغيير الخط 16 في Constants.swift إلى AVCaptureSession.Preset.hd4K3840x2160

[9] كما اكتشف بعض أصحابها بشكل مؤلم خلال الأزمة المصرفية في اليونان ، عندما تغلق البنوك ، فإنهم يغلقون الوصول إلى صناديق الودائع الآمنة - بالضبط عندما يكون أصحابها في أمس الحاجة إليها.