
مفهوم إثبات يُظهر هجومًا جانبيًا لتحليل الطاقة ضد تنفيذ RSA ضعيف على Arduino (Atmega328P)، مع إعدادات الأجهزة التفصيلية ومنهجية القياس.
في الآونة الأخيرة، لاحظت أشخاصًا يقومون بتنفيذ التشفير على Arduino بأنفسهم، كما هو موضح في هذا الموضوع على Stackoverflow:
https://stackoverflow.com/questions/39189065/rsa-encryption-decryption-functions-for-arduino
يمكن العثور على العديد منهم على الإنترنت، بعضها بالمناسبة موجود في مكتبات معروفة.
قررت القيام بهذا الإثبات المبدئي الصغير (PoC) لأظهر لماذا من المهم ألا تخترع خوارزمية التشفير الخاصة بك فحسب، بل أيضًا استخدام تنفيذ قوي لمثل هذه الخوارزميات.
يقوم هذا الإثبات المبدئي بتنفيذ هجوم جانبي (هجوم تحليل استهلاك الطاقة) ضد تنفيذ سيء لروتين مساعد مستخدم في تنفيذ RSA (الأس السريع).
الهجوم الجانبي هو طريقة لاختراق نظام تشفير من خلال استغلال تسرب غير مباشر للمعلومات بدلاً من مهاجمة الخوارزمية أو البروتوكول التشفيري نفسه.
يمكن أن ينشأ هذا النوع من التسرب من مصادر مختلفة مثل معلومات التوقيت، استهلاك الطاقة، الانبعاثات الكهرومغناطيسية، أو حتى الصوت.
يمكن أن تكون هذه الهجمات فعالة للغاية في اختراق أنظمة التشفير مثل RSA دون أن يحتاج المهاجم إلى حل المشكلات الرياضية الأساسية التي تضمن أمن المخطط التشفيري (Kocher, Jaffe, & Jun, 1999).
ستقوم هذه الورقة بإجراء هجوم تحليل استهلاك الطاقة على ثغرة معروفة في تنفيذ خوارزمية RSA في برنامج ثابت لـ Arduino (Atmega328P).
ملاحظة: قمت بذلك على عجل، فأرجو منك مسامحتي على الأخطاء الإملائية/النحوية التي قد تجدها.
تتضمن هجمات تحليل استهلاك الطاقة قياس استهلاك الطاقة لجهاز ما أثناء العمليات التشفيرية.
يتضمن تحليل الطاقة التفاضلي (DPA) تحليلًا إحصائيًا لأنماط استهلاك الطاقة عبر عمليات تشفير متعددة لاستخراج الأسرار، مما يجعله أكثر تطورًا من تحليل الطاقة البسيط (SPA)، الذي يربط مباشرة تقلبات الطاقة بعمليات تشفير محددة لاستنتاج الأسرار.
يمكن استخدام تحليل الطاقة التفاضلي (DPA) وتحليل الطاقة البسيط (SPA) لاستخراج المفاتيح الخاصة من خلال تحليل الأنماط في استهلاك الطاقة أثناء عمليات حساب RSA.
يمكن لهذه الهجمات الكشف عن المفتاح الخاص من خلال تحديد أنماط استهلاك الطاقة المميزة المرتبطة ببتات المفتاح المختلفة (Kocher, Jaffe, & Jun, 1999).
RSA (Rivest-Shamir-Adleman) هي خوارزمية تشفير بالمفتاح العام واسعة الاستخدام، سُميت على اسم مخترعيها: رون ريفست، عدي شامير، وليونارد أدلمان، الذين قدموها في عام 1977 (Paar & Pelzl, 2010).
تظل واحدة من أكثر الطرق أمانًا لنقل البيانات بشكل آمن عبر الإنترنت.
يكمن أحد أسس أمان RSA في صعوبة تحليل الأعداد المركبة الكبيرة إلى عواملها الأولية (Menezes, van Oorschot, & Vanstone, 1996).
هذه المشكلة، المعروفة بمشكلة التحليل، تتضمن إيجاد الأعداد الأولية التي تتضاعف لتكوين عدد كبير معين.
يعتمد تشفير RSA على افتراض أن مشكلة التحليل هذه صعبة من الناحية الحسابية بما يكفي لجعل كسر التشفير عن طريق تحليل المعامل إلى عوامله الأولية أمرًا غير عملي (Menezes, van Oorschot, & Vanstone, 1996).
يوضح الشكل 1 عملية تشفير وفك تشفير RSA باستخدام مثال بسيط.

الشكل 1 - مثال على RSA.
يرجى ملاحظة أنه في هذه الحالة، 3 و 33 عموميان. الرقم 7 في المثال هو المفتاح الخاص.
دالة Phi (N)، دالة أويلر (Euler's totient function)، تحسب جميع الأعداد الأولية نسبيًا في الفترة من 1 إلى 33.
القيمة 33 تم الحصول عليها من ضرب P و Q؛ في هذه الحالة، 11 مضروبًا في 3.
يتم الحصول على نتيجة دالة Phi بضرب (P - 1) في (Q - 1)؛ في هذه الحالة، 10 مضروبًا في 2.
العملية e<sup>-1</sup> mod 20 تشير إلى عملية المعكوس النمطي (Menezes, van Oorschot, & Vanstone, 1996).
ملاحظة: إذا كنت ترغب في التعمق في RSA، وهو أمر غير ضروري لفهم هذه الورقة. توجد مقدمة سريعة لعمليات نظرية الأعداد الأساسية هذه داخل هذا المستودع في ملف number_theory.md. يمكن أن يعزز الشرح فهمك لعمليات RSA.
استخدمت التجربة راسم ذبذبات DS1102 (معروض في الشكل 2) من إنتاج Rigol.
يمكن العثور على دليل راسم الذبذبات في المراجع (RIGOL Technologies, Inc., 2017).
كما تم استخدام مصدر طاقة عام (معروض في الشكل 3).

الشكل 2 - راسم الذبذبات المستخدم في التجربة.

الشكل 3 - مصدر الطاقة المستخدم في التجربة.
قانون أوم هو مبدأ أساسي في مجال الهندسة الكهربائية والفيزياء.
ينص على أن التيار المار عبر موصل بين نقطتين يتناسب طرديًا مع الجهد عبر النقطتين وعكسيًا مع المقاومة بينهما (Boylestad, 2015).
يوضح الشكل 4 دائرة وقانون أوم.

الشكل 4 - توضيح قانون أوم.
يعني قانون أوم أنه إذا قمت بزيادة الجهد عبر موصل، فسيزيد التيار أيضًا، بشرط أن تظل المقاومة ثابتة (Johnson & Hilburn, 2013). يقدم الشكل 5 مثالاً على تطبيق قانون أوم حيث الهدف هو إيجاد التيار في الدائرة.

الشكل 5 - مثال على قانون أوم.
قانون كيرشوف للجهد (KVL) هو مبدأ أساسي في الهندسة الكهربائية والفيزياء (Boylestad, 2015).
ينص على أن مجموع كل فروق الجهد الكهربائي حول أي شبكة أو حلقة مغلقة يساوي صفرًا (Boylestad, 2015).
يوضح الشكل 6 قانون كيرشوف للجهد.

الشكل 6 - توضيح قانون كيرشوف.
يوجد مثال على تطبيق قانون كيرشوف في الشكل 7 من أجل إيجاد التيار عبر المقاومات R1 و R2.

الشكل 7 - مثال على قانون كيرشوف.
مقسم الجهد هو نتيجة لقانون كيرشوف للجهد (KVL) ويوضح طريقة لحساب Vout وهو الجهد بين المقاومة R1 و R2.
صيغة مقسم الجهد معروضة في الشكل 8.
مثال على تطبيق مقسم الجهد معروض في الشكل 9.

الشكل 8 - توضيح مقسم الجهد.

الشكل 9 - مثال على مقسم الجهد.
مقاوم التحويل هو مقاومة ذات قيمة منخفضة توضع على التوالي مع مصدر طاقة الدائرة لقياس التيار المار عبر الدائرة.
استخدام مقاوم تحويل لقياس التيار هو إحدى التقنيات المستخدمة في أجهزة القياس المتعددة الحديثة (Boylestad, 2015).
قياس انخفاض الجهد عبر مقاوم التحويل ومعرفة مقاومته يعطي معلومات كافية لحساب التيار باستخدام قانون أوم.
لقياس استهلاك التيار لجهاز Arduino، من الضروري وضع مقاوم تحويل على التوالي مع VCC (الموجب).
الطريقة التي سيتم توصيلها بها معروضة في الشكل 10.
ملاحظة 1: يرجى ملاحظة أنه في الإثبات المبدئي، بدلاً من استخدام لوحة Arduino Uno، يتم نقل الهدف (المتحكم الدقيق atmega328p) إلى لوحة تجارب منفصلة كما هو معروض في الشكل 11. يسمح ذلك بمعالجة أسهل لتوصيلات المتحكم الدقيق دون الحاجة إلى لحام.
ملاحظة 2: إذا كنت لا تعرف كيفية القيام بذلك، فإن مقالتي السابقة التي تشرح كيفية عمل التشويش (glitching) تعلم كيفية ذلك ويمكن العثور عليها على https://github.com/lord-feistel/hardware_hacking_lab)

الشكل 10 - مقاوم تحويل مع Arduino.

الشكل 11 - دائرة مقاوم التحويل على لوحة التجارب.
لإثبات قياس استهلاك التيار باستخدام مقاوم تحويل، سيتم توصيل LED (Sedra & Smith, 2014) بـ GPIO للمتحكم الدقيق (الشكل 12) وسيتم استخدام راسم الذبذبات لملاحظة كيف يؤثر ذلك على استهلاك الطاقة عبر مقاوم التحويل في حالتي تشغيل وإطفاء الـ LED.
لاحظ أن استخراج المفتاح أو ملاحظة تأثير الحمل على استهلاك الطاقة لا يتطلب استخدام قانون أوم للحصول على التيار، فقط انخفاض الجهد يكفي (Johnson & Hilburn, 2013).

الشكل 12 - قياس الطاقة.
لملاحظة ذلك بشكل أفضل، يرجى مراجعة الفيديو 1 الذي يوضح كيفية انخفاض الجهد عند تشغيل الـ LED.
الفيديو 1 - انخفاض الجهد بسبب استهلاك الـ LED.
تم استخدام الكود التالي لتشغيل الـ LED بشكل وميض. يمكن العثور عليه أيضًا في هذا المستودع.```C const int PIN_CHARGE = 9 ; void setup() { pinMode(PIN_CHARGE, OUTPUT);
}
void loop() {
digitalWrite(PIN_CHARGE, HIGH);
delay(10);
digitalWrite(PIN_CHARGE, LOW);
delay(10);
}
من المهم توضيح أن انخفاض الجهد هذا يحدث أيضًا عند إجراء عملية حسابية معقدة (Kocher, Jaffe, & Jun, 1999).
الكود التالي يسبب انخفاض الجهد الموضح في **الشكل 13**```C
void setup() {
}
void loop() {
volatile unsigned long i = 0;
i = ((i + 1) * (i - 1) + (i * i) - (i / 2) * (i % 3) + (i * i * i * i)) * ((i + 2) * (i - 2) + (i * i) - (i / 3) * (i % 5) + (i * i * i * i));
delayMicroseconds(100);
}
إذا كان انخفاض الجهد يعكس الحساب، فيمكن استخدامه لتحديد البيانات التي تتم معالجتها.

الشكل 13 - استهلاك الطاقة في الحساب الثقيل.
الطريقة التقليدية لإجراء عملية الأس هي ضرب الأساس n مرات.
افترض أن 23 سينتج 2*2*2 لأن 2 هو الأساس و3 هو n.
تعمل بشكل جيد جدًا، ولكنها ليست فعالة بما يكفي لجعل RSA قابلة للتطبيق.
لتحقيق مثل هذا التنفيذ، يتم استخدام خوارزمية الأس السريع.
الأس السريع، المعروف أيضًا باسم الأس بالتربيع، هو طريقة فعالة لرفع رقم إلى قوة.
فيما يلي الكود الزائف للأس السريع.```C
function fast_exponentiation(a, b): result = 1 base = a exponent = b
while exponent > 0:
if (exponent % 2 == 1): // If exponent is odd
result = result * base
base = base * base // Square the base
exponent = exponent // 2 // Divide exponent by 2
return result
.
خطوات الأس السريع لـ 2<sup>4</sup> موجودة في **الجدول 1**
| التكرار | القيمة الأساسية | الأس في النظام الثنائي | العملية | النتيجة |
|---------|----------------|------------------------|---------|---------|
| البداية | 2 | 100 | ابدأ | 1 |
| 1 | 4 | 010 | تربيع | 1 |
| 2 | 16 | 001 | تربيع | 1 |
| 3 | 256 | 000 | ضرب | 16 |
| النهاية | - | - | نهاية | 16 |
**الجدول 1** - تكرارات الأس السريع لـ 2<sup>4</sup>.
فيما يلي شرح العملية:```
- **Initialization:**
Start with base = 2 , exponent = 4 ( binary 100) , result = 1.
- **Iteration 1:** exponent = 4 (binary 100, even)
Square base to get 4 .
result remains 1.
- **Iteration 2:** exponent = 2 (binary 010, even)
Square base to get 16 .
result remains 1.
- **Iteration 3:** exponent = 1 (binary: 001, odd)
Multiply result by a = 16 to get 16.
result becomes 16.
- **Final:** n = 0 (binary: 000)
The loop ends with result = 16.
لاحظ أنه بالنسبة للأعداد الصغيرة لا يتغير شيء أو قد يصبح أسوأ، ولكن بالنسبة للأعداد الكبيرة يحقق تحسنًا كبيرًا في الكفاءة.
فهو يقلل عدد عمليات الضرب مقارنة بالطريقة الساذجة، وهو مفيد بشكل خاص للأسس الكبيرة.
الجدول 2 يوضح مقارنة التكرارات لمثل هذا العدد باستخدام الأس الساذج والأس السريع.
الأس السريع حاسم في RSA لكل من عمليات التشفير وفك التشفير، حيث تتضمن هذه العمليات رفع أعداد كبيرة إلى قوى كبيرة مع باقي القسمة لعدد كبير آخر (Paar & Pelzl, 2010).
كما هو معروض في قسم مثال RSA فإن المفتاح هو الأس وعادة ما يكون عددًا كبيرًا جدًا.
الجدول 2 - مقارنة الكفاءة بين الأس التقليدي والأس السريع.
تم تنفيذ أس سريع في الأردوينو ورفعه إلى atmega328p. وبما أنه برهان مفهوم (PoC) قمنا بتنفيذه بأسهل طريقة ليتم تصوره.
على سبيل المثال، عادةً ما يتم استخدام عملية الإزاحة على متغير عدد صحيح، لكننا قمنا بتنفيذ الأس كمصفوفة لتكون أفضل فهمًا.
لاحظ أن الأس الذي يمثل المفتاح هو المصفوفة {0, 1, 0, 1, 0, 1, 0, 1} والتي ستخلق نمطًا في القياس الملتقط بواسطة راسم الذبذبات كدليل على أنه يعمل.```C
#include <Arduino.h>
volatile long long dumb_vulnerableExponentiation(volatile long long base, const volatile int* exponentArray, volatile int arrayLength, volatile long long modulo) { volatile long long result = 1; base %= modulo;
for (volatile int i = 0; i < arrayLength; ++i) {
result = (result * result) % modulo;
if (exponentArray[i] == 1) {
result = (result * base) % modulo;
}
}
return result;
}
void setup() { }
void loop() { volatile long long base = 3; volatile long long modulo = 1000000007; const volatile int exponentArray[] = {0, 1, 0, 1, 0, 1, 0, 1}; volatile int arrayLength = sizeof(exponentArray) / sizeof(exponentArray[0]); delay(2); volatile long long result = dumb_vulnerableExponentiation(base, exponentArray, arrayLength, modulo); }
### النتائج
كما تم عرضه في البداية، بالنسبة لعملية التشفير وفك التشفير، المفتاح هو الأس، وبالتالي فإن اكتشاف الأس يؤدي إلى كشف مفتاح RSA.
باستخدام الجهاز المذكور سابقًا، يمكن رؤية طيف استهلاك الطاقة على راسم الذبذبات كما هو معروض في **Figure* 14* و **Figure 15**
الفترات التي ينخفض فيها الجهد لفترة طويلة تعني أن البت `1` من المفتاح قيد المعالجة، وإلا فهي البت `0`.
يرجى ملاحظة أنه عندما يكون الأس زوجيًا، هناك عملية ضرب إضافية تجعل انخفاض الطاقة يستغرق وقتًا أطول، مما يكشف معلومات المفتاح.
**Video 2** يظهر عملية التقاط المفتاح. يرجى الرجوع إلى دليل راسم الذبذبات لفهم كيفية ضبط الفترة والسعة.

**Figure 14** - التقاط المفتاح

**Figure 15** - كشف 0 و 1 من المفتاح باستخدام راسم الذبذبات
[](https://youtu.be/MBZ1abtTN_k)
**Video 2** - التقاط المفتاح باستخدام راسم الذبذبات.
يمكن استخدام مثل هذا الهجوم في سيناريو حيث يستخدم المتحكم الدقيق مكتبة معروفة، ولكن البرنامج الثابت مقفل ولا يسمح للمهاجم بالحصول على المفتاح مباشرة من الذاكرة.
يمكن أيضًا استخدام هذا النوع من الهجمات ضد الأجهزة.
### الاستنتاج
لا يُنصح بشدة بتنفيذ نظام تشفير RSA (Rivest-Shamir-Adleman) خاص بك لعدة أسباب حاسمة، ولا سيما الضعف أمام الهجمات المتطورة مثل هجمات تحليل الطاقة.
تشفير RSA، على الرغم من متانته الرياضية عند تنفيذه بشكل صحيح، يتطلب اهتمامًا دقيقًا بالتفاصيل في تنفيذه لضمان الأمان.
حتى العيوب أو الإغفالات البسيطة في التنفيذ يمكن أن تتسبب عن غير قصد في تسريب معلومات حول المفتاح الخاص، مما يعرض أمن النظام بأكمله للخطر.
علاوة على ذلك، تخضع المكتبات وأطر العمل المشفرة الراسخة لتدقيق واختبار صارمين من قبل مجتمع الأمن، مما يضمن مرونتها ضد الهجمات والثغرات المعروفة. استخدام هذه المكتبات الموثوقة لا يوفر الوقت والجهد فحسب، بل يقلل أيضًا بشكل كبير من خطر إدخال ثغرات عن غير قصد في النظام.
### المراجع
1. فهم التشفير - Paar, C., & Pelzl, J. (2010). **فهم التشفير**. Springer.
2. دليل التشفير التطبيقي - Menezes, A. J., van Oorschot, P. C., & Vanstone, S. A. (1996). **دليل التشفير التطبيقي**. CRC Press.
3. تحليل الطاقة التفاضلي - Kocher, P., Jaffe, J., & Jun, B. (1999). **تحليل الطاقة التفاضلي**. Proceedings of CRYPTO '99, Lecture Notes in Computer Science, vol 1666. Springer, Berlin, Heidelberg. DOI: 10.1007/3-540-48405-1_25.
4. ورقة بيانات راسم الذبذبات DS1102 - RIGOL Technologies, Inc. (2017). **ورقة بيانات راسم الذبذبات الرقمية من سلسلة DS1000E, DS1000D**. تم الاسترجاع من [RIGOL Datasheet](https://beyondmeasure.rigoltech.com/acton/attachment/1579/f-03b8/1/-/-/-/-/DS1000E_DS1000D_DataSheet_EN.pdf)
5. التحليل التمهيدي للدوائر - Boylestad, R. L. (2015). **التحليل التمهيدي للدوائر** (الطبعة 13). Pearson.
6. أساسيات الدوائر الكهربائية - Johnson, D., & Hilburn, J. L. (2013). **أساسيات الدوائر الكهربائية**. McGraw-Hill Education.
7. الدوائر الإلكترونية الدقيقة - Sedra, A. S., & Smith, K. C. (2014). **الدوائر الإلكترونية الدقيقة** (الطبعة 7). Oxford University Press.
| الأس (ب) | الثنائي (ب) | عمليات الأس التقليدي | عمليات الأس السريع |
|---|
| 1 | 1 | 1 | 1 |
| 2 | 10 | 1 | 1 |
| 4 | 100 | 3 | 2 |
| 8 | 1000 | 7 | 3 |
| 16 | 10000 | 15 | 4 |
| 32 | 100000 | 31 | 5 |
| 64 | 1000000 | 63 | 6 |
| 128 | 10000000 | 127 | 7 |
| 256 | 100000000 | 255 | 8 |
| 512 | 1000000000 | 511 | 9 |
| 1024 | 10000000000 | 1023 | 10 |