الدليل النهائي لـ "تحيز Modulo" وكيفية تجنبه (2020)

في هذه المقالة ، نتعرف على مخلوق غريب يُدعى Modulo Bias ، ونتعرف على كيفية ولادته ، وسبب كونه شديد الخطورة وكيفية محاربته.

الاكتشاف الدائم

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

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

كما سنرى ، تكمن المشكلة الكبيرة في تحيزات modulo في أنها تستطيع استرداد المفاتيح الخاصة لأنظمة معينة ، بما في ذلك تلك المستخدمة في Bitcoin و Ethereum والعديد من سلاسل الكتل الأخرى ، أو من قبل الشركات المصنعة لتوقيع البرامج الثابتة الخاصة بهم!

فلنفعل هذا: تعديل؟

أولاً ، نحتاج إلى مناقشة ماهية modulo . تُستخدم عملية modulo كثيرًا في التشفير ، حيث نتعامل عادةً مع نظرية الأرقام والهياكل الجبرية التي تعتمد على عملية modulo في جوهرها. لكنها تستخدم أيضًا على نطاق أوسع في الحوسبة. يتم تمثيله بشكل عام في الكود بواسطة الرمز٪ وهو عامل ثنائي يأخذ عددين صحيحين كمدخل ويعطي عددًا صحيحًا كإخراج. يحسب Modulo كما نعرفه في الكود ما تبقى من قسمة عدد صحيح أ عند قسمة عدد صحيح ب. أي:  a = k * b + r لأكبر  k \ leq a ، وبالتالي a٪ b == r ، الذي يقرأ" a modulo b يساوي r "، حيث r هو باقي قسمة a على b.

في الواقع ، المودولو كما هو محدد في الرياضيات هو علاقة تكافؤ محددة في حلقة الأعداد الصحيحة وتقول رقمين صحيحين  a و  r مكافئ للنمط  b (أي e s ، في نفس فئة التكافؤ) إذا وفقط إذا كان الاختلاف  a - r قابل للقسمة على  b . لكن لا داعي للقلق بشأن فئات التكافؤ لاستخدامنا النموذجي للوحدات النمطية ، وسننظر فقط في النموذج الذي نمتلكه عادةً في لغات البرمجة. (إنه متوافق مع التعريف الرياضي على أي حال ، حتى ...

الدليل النهائي لـ "تحيز Modulo" وكيفية تجنبه (2020)

في هذه المقالة ، نتعرف على مخلوق غريب يُدعى Modulo Bias ، ونتعرف على كيفية ولادته ، وسبب كونه شديد الخطورة وكيفية محاربته.

الاكتشاف الدائم

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

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

كما سنرى ، تكمن المشكلة الكبيرة في تحيزات modulo في أنها تستطيع استرداد المفاتيح الخاصة لأنظمة معينة ، بما في ذلك تلك المستخدمة في Bitcoin و Ethereum والعديد من سلاسل الكتل الأخرى ، أو من قبل الشركات المصنعة لتوقيع البرامج الثابتة الخاصة بهم!

فلنفعل هذا: تعديل؟

أولاً ، نحتاج إلى مناقشة ماهية modulo . تُستخدم عملية modulo كثيرًا في التشفير ، حيث نتعامل عادةً مع نظرية الأرقام والهياكل الجبرية التي تعتمد على عملية modulo في جوهرها. لكنها تستخدم أيضًا على نطاق أوسع في الحوسبة. يتم تمثيله بشكل عام في الكود بواسطة الرمز٪ وهو عامل ثنائي يأخذ عددين صحيحين كمدخل ويعطي عددًا صحيحًا كإخراج. يحسب Modulo كما نعرفه في الكود ما تبقى من قسمة عدد صحيح أ عند قسمة عدد صحيح ب. أي:  a = k * b + r لأكبر  k \ leq a ، وبالتالي a٪ b == r ، الذي يقرأ" a modulo b يساوي r "، حيث r هو باقي قسمة a على b.

في الواقع ، المودولو كما هو محدد في الرياضيات هو علاقة تكافؤ محددة في حلقة الأعداد الصحيحة وتقول رقمين صحيحين  a و  r مكافئ للنمط  b (أي e s ، في نفس فئة التكافؤ) إذا وفقط إذا كان الاختلاف  a - r قابل للقسمة على  b . لكن لا داعي للقلق بشأن فئات التكافؤ لاستخدامنا النموذجي للوحدات النمطية ، وسننظر فقط في النموذج الذي نمتلكه عادةً في لغات البرمجة. (إنه متوافق مع التعريف الرياضي على أي حال ، حتى ...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow