Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
power_analysis — مفهوم إثبات يُظهر هجومًا جانبيًا لتحليل الطاقة ضد تنفيذ RSA ضعيف على Arduino (Atmega328P)، مع إعدادات الأجهزة التفصيلية ومنهجية القياس. | Kitploit
أدوات/GitHubGitHub/lord-feistel/power_analysis
أمان الأنظمة المدمجةالتشفيرأمن الأجهزةالأوراق والأبحاثالتعلم والتعليم
GitHublord-feistel/power_analysis

power_analysis

مفهوم إثبات يُظهر هجومًا جانبيًا لتحليل الطاقة ضد تنفيذ RSA ضعيف على Arduino (Atmega328P)، مع إعدادات الأجهزة التفصيلية ومنهجية القياس.

عرض المستودع
324منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

هجوم تحليل استهلاك الطاقة على RSA

الفهرس

الفهرس

  • مقدمة
  • هجمات تحليل استهلاك الطاقة
  • RSA: مقدمة قصيرة
  • مثال على RSA
  • المعدات
  • قياس الطاقة: مقدمة قصيرة
    • قانون أوم
    • قانون كيرشوف للجهد (KVL)
    • مقسم الجهد
    • مقاوم التحويل (Shunt Resistor)
  • مثال على قياس الطاقة
  • الأس السريع (Fast Exponentiation)
  • الأس السريع على 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: مقدمة قصيرة

RSA (Rivest-Shamir-Adleman) هي خوارزمية تشفير بالمفتاح العام واسعة الاستخدام، سُميت على اسم مخترعيها: رون ريفست، عدي شامير، وليونارد أدلمان، الذين قدموها في عام 1977 (Paar & Pelzl, 2010).

تظل واحدة من أكثر الطرق أمانًا لنقل البيانات بشكل آمن عبر الإنترنت.

يكمن أحد أسس أمان RSA في صعوبة تحليل الأعداد المركبة الكبيرة إلى عواملها الأولية (Menezes, van Oorschot, & Vanstone, 1996).

هذه المشكلة، المعروفة بمشكلة التحليل، تتضمن إيجاد الأعداد الأولية التي تتضاعف لتكوين عدد كبير معين.

يعتمد تشفير RSA على افتراض أن مشكلة التحليل هذه صعبة من الناحية الحسابية بما يكفي لجعل كسر التشفير عن طريق تحليل المعامل إلى عوامله الأولية أمرًا غير عملي (Menezes, van Oorschot, & Vanstone, 1996).

مثال على RSA

يوضح الشكل 1 عملية تشفير وفك تشفير RSA باستخدام مثال بسيط.

RSA Example

الشكل 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).

osciloscope

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

power_supply

الشكل 3 - مصدر الطاقة المستخدم في التجربة.

قياس الطاقة: مقدمة قصيرة

قانون أوم

قانون أوم هو مبدأ أساسي في مجال الهندسة الكهربائية والفيزياء.

ينص على أن التيار المار عبر موصل بين نقطتين يتناسب طرديًا مع الجهد عبر النقطتين وعكسيًا مع المقاومة بينهما (Boylestad, 2015).

يوضح الشكل 4 دائرة وقانون أوم.

ohm_law

الشكل 4 - توضيح قانون أوم.

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

ohm_example

الشكل 5 - مثال على قانون أوم.

قانون كيرشوف للجهد (KVL)

قانون كيرشوف للجهد (KVL) هو مبدأ أساسي في الهندسة الكهربائية والفيزياء (Boylestad, 2015).

ينص على أن مجموع كل فروق الجهد الكهربائي حول أي شبكة أو حلقة مغلقة يساوي صفرًا (Boylestad, 2015).

يوضح الشكل 6 قانون كيرشوف للجهد.

kirchoff_lay

الشكل 6 - توضيح قانون كيرشوف.

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

kirchoff_example

الشكل 7 - مثال على قانون كيرشوف.

مقسم الجهد

مقسم الجهد هو نتيجة لقانون كيرشوف للجهد (KVL) ويوضح طريقة لحساب Vout وهو الجهد بين المقاومة R1 و R2.

صيغة مقسم الجهد معروضة في الشكل 8.

مثال على تطبيق مقسم الجهد معروض في الشكل 9.

voltage_divisor

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

voltage_divisor_example

الشكل 9 - مثال على مقسم الجهد.

مقاوم التحويل (Shunt Resistor)

مقاوم التحويل هو مقاومة ذات قيمة منخفضة توضع على التوالي مع مصدر طاقة الدائرة لقياس التيار المار عبر الدائرة.

استخدام مقاوم تحويل لقياس التيار هو إحدى التقنيات المستخدمة في أجهزة القياس المتعددة الحديثة (Boylestad, 2015).

قياس انخفاض الجهد عبر مقاوم التحويل ومعرفة مقاومته يعطي معلومات كافية لحساب التيار باستخدام قانون أوم.

لقياس استهلاك التيار لجهاز Arduino، من الضروري وضع مقاوم تحويل على التوالي مع VCC (الموجب).

الطريقة التي سيتم توصيلها بها معروضة في الشكل 10.

ملاحظة 1: يرجى ملاحظة أنه في الإثبات المبدئي، بدلاً من استخدام لوحة Arduino Uno، يتم نقل الهدف (المتحكم الدقيق atmega328p) إلى لوحة تجارب منفصلة كما هو معروض في الشكل 11. يسمح ذلك بمعالجة أسهل لتوصيلات المتحكم الدقيق دون الحاجة إلى لحام.

ملاحظة 2: إذا كنت لا تعرف كيفية القيام بذلك، فإن مقالتي السابقة التي تشرح كيفية عمل التشويش (glitching) تعلم كيفية ذلك ويمكن العثور عليها على https://github.com/lord-feistel/hardware_hacking_lab)

voltage_divisor_arduino

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

arduino_shunt

الشكل 11 - دائرة مقاوم التحويل على لوحة التجارب.

مثال على قياس الطاقة

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

لاحظ أن استخراج المفتاح أو ملاحظة تأثير الحمل على استهلاك الطاقة لا يتطلب استخدام قانون أوم للحصول على التيار، فقط انخفاض الجهد يكفي (Johnson & Hilburn, 2013).

power_consumption_led

الشكل 12 - قياس الطاقة.

لملاحظة ذلك بشكل أفضل، يرجى مراجعة الفيديو 1 الذي يوضح كيفية انخفاض الجهد عند تشغيل الـ LED.

Video 1: Power consumption

الفيديو 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);

}

root@kitploit:~
من المهم توضيح أن انخفاض الجهد هذا يحدث أيضًا عند إجراء عملية حسابية معقدة (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);

}

إذا كان انخفاض الجهد يعكس الحساب، فيمكن استخدامه لتحديد البيانات التي تتم معالجتها.

heavy_calculus

الشكل 13 - استهلاك الطاقة في الحساب الثقيل.

الأس السريع

الطريقة التقليدية لإجراء عملية الأس هي ضرب الأساس n مرات.

افترض أن 23 سينتج 2*2*2 لأن 2 هو الأساس و3 هو n.

تعمل بشكل جيد جدًا، ولكنها ليست فعالة بما يكفي لجعل RSA قابلة للتطبيق.

لتحقيق مثل هذا التنفيذ، يتم استخدام خوارزمية الأس السريع.

الأس السريع، المعروف أيضًا باسم الأس بالتربيع، هو طريقة فعالة لرفع رقم إلى قوة.

فيما يلي الكود الزائف للأس السريع.```C

function fast_exponentiation(a, b): result = 1 base = a exponent = b

root@kitploit:~
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
root@kitploit:~
.

خطوات الأس السريع لـ 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 - مقارنة الكفاءة بين الأس التقليدي والأس السريع.

الأس السريع في Arduino (Atmega328P)

تم تنفيذ أس سريع في الأردوينو ورفعه إلى 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;

root@kitploit:~
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); }

root@kitploit:~
### النتائج

كما تم عرضه في البداية، بالنسبة لعملية التشفير وفك التشفير، المفتاح هو الأس، وبالتالي فإن اكتشاف الأس يؤدي إلى كشف مفتاح RSA.

باستخدام الجهاز المذكور سابقًا، يمكن رؤية طيف استهلاك الطاقة على راسم الذبذبات كما هو معروض في **Figure* 14* و **Figure 15**

الفترات التي ينخفض فيها الجهد لفترة طويلة تعني أن البت `1` من المفتاح قيد المعالجة، وإلا فهي البت `0`.

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

**Video 2** يظهر عملية التقاط المفتاح. يرجى الرجوع إلى دليل راسم الذبذبات لفهم كيفية ضبط الفترة والسعة.

![key_capture_using_shunt](https://raw.githubusercontent.com/lord-feistel/power_analysis/main/images/key_capture_using_shunt.jpg)

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

![showing_key](https://raw.githubusercontent.com/lord-feistel/power_analysis/main/images/with_delay_02.jpg)

**Figure 15** - كشف 0 و 1 من المفتاح باستخدام راسم الذبذبات

[![Video 2: Key_capture](https://raw.githubusercontent.com/lord-feistel/power_analysis/main/images/key_tumb.jpg)](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.
تنزيل الأداة
الأس (ب)الثنائي (ب)عمليات الأس التقليديعمليات الأس السريع
1111
21011
410032
8100073
1610000154
32100000315
641000000636
128100000001277
2561000000002558
51210000000005119
102410000000000102310