<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cryptography on kenji.blog</title><link>http://kenji.blog/ar/categories/cryptography/</link><description>Recent content in Cryptography on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ar</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 22:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ar/categories/cryptography/index.xml" rel="self" type="application/rss+xml"/><item><title>أساسيات وتنفيذ التشفير باستخدام مبرهنة فيرما الصغرى</title><link>http://kenji.blog/ar/p/fermats-little-theorem-cryptography-implementation/</link><pubDate>Fri, 11 Sep 2026 22:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/fermats-little-theorem-cryptography-implementation/</guid><description>&lt;img src="http://kenji.blog/p/fermats-little-theorem-cryptography-implementation/img/eyecatch.jpg" alt="Featured image of post أساسيات وتنفيذ التشفير باستخدام مبرهنة فيرما الصغرى" />&lt;h2 id="1-مقدمة-الغموض-الرياضي-الذي-يدعم-التشفير-الحديث">1. مقدمة: الغموض الرياضي الذي يدعم التشفير الحديث
&lt;/h2>&lt;p>في المجتمع الرقمي الحديث، وخاصة في الاتصالات عبر الإنترنت، أصبح &amp;ldquo;التشفير&amp;rdquo; تقنية أساسية لا غنى عنها. إن قدرتنا على تصفح مواقع الويب بأمان عبر HTTPS في متصفحات الويب، وإجراء المعاملات المالية عبر الخدمات المصرفية عبر الإنترنت، والتواصل الخاص عبر تطبيقات المراسلة، كلها ممكنة بفضل بروتوكولات التشفير المدعومة بنظريات رياضية متقدمة تعمل في الخلفية. من بين هذه البروتوكولات، يلعب &amp;ldquo;تشفير المفتاح العام&amp;rdquo; دورًا مهمًا للغاية، وأبرز مثال عليه هو &lt;strong>تشفير RSA&lt;/strong>.&lt;/p>
&lt;p>تعتمد سلامة وصحة العديد من خوارزميات التشفير، بما في ذلك تشفير RSA، بشكل كبير على مبرهنة جميلة وقوية جدًا اكتشفها عالم الرياضيات الفرنسي في القرن السابع عشر بيير دي فيرما (Pierre de Fermat). هذه المبرهنة هي &lt;strong>مبرهنة فيرما الصغرى (Fermat&amp;rsquo;s Little Theorem)&lt;/strong>. علاوة على ذلك، فإن مبرهنة ليونهارت أويلر (Leonhard Euler)، التي تعمم هذه المبرهنة، تلعب أيضًا دورًا حاسمًا في نظرية التشفير.&lt;/p>
&lt;p>في هذا المقال، سنشرح بالتفصيل ومن الأساسيات كيف يتم تطبيق اكتشاف رياضي بحت مثل مبرهنة فيرما الصغرى في تقنيات التشفير العملية الحديثة، وخاصة في &amp;ldquo;اختبار الأولية&amp;rdquo; و &amp;ldquo;تشفير RSA&amp;rdquo;. سيكون هذا دليلًا تقنيًا مفصلاً للغاية يغطي الإثباتات الرياضية، وآليات التشفير وفك التشفير، وصولاً إلى تطبيقات الخوارزميات المحددة باستخدام C++ و Python.&lt;/p>
&lt;hr>
&lt;h2 id="2-أساسيات-التطابق-والحساب-المعياري">2. أساسيات التطابق والحساب المعياري
&lt;/h2>&lt;p>لفهم مبرهنة فيرما الصغرى، يجب أولاً التعرف على المفهوم الرياضي لـ &amp;ldquo;الحساب المعياري (التطابق)&amp;rdquo;. الحساب المعياري هو نظام حسابي يركز على &amp;ldquo;الباقي&amp;rdquo; بعد القسمة على عدد ثابت (يسمى المعيار أو المقياس). نظرًا لأنه يشبه الحساب على مينا الساعة (التي تكمل دورة كل 12 ساعة)، يُطلق عليه أيضًا &amp;ldquo;رياضيات الساعة&amp;rdquo;.&lt;/p>
&lt;p>عندما يكون باقي قسمة العددين الصحيحين $a$ و $b$ على عدد صحيح موجب $n$ متساويًا، يتم التعبير عن ذلك رياضيًا على النحو التالي:&lt;/p>
$$
a \equiv b \pmod n
$$
&lt;p>يُقرأ هذا &amp;quot; $a$ و $b$ متطابقان بمقياس $n$ &amp;ldquo;. على سبيل المثال، باقي قسمة 17 على 5 هو 2، وباقي قسمة 12 على 5 هو 2 أيضًا. لذلك، يمكننا كتابة ما يلي:&lt;/p>
$$
17 \equiv 12 \pmod 5 \equiv 2 \pmod 5
$$
&lt;p>في الحساب المعياري، تنطبق العمليات الحسابية الأساسية الأربع (الجمع والطرح والضرب) كما هي:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>الجمع&lt;/strong>: إذا كان $a \equiv b \pmod n$ و $c \equiv d \pmod n$، فإن $a + c \equiv b + d \pmod n$&lt;/li>
&lt;li>&lt;strong>الطرح&lt;/strong>: إذا كان $a \equiv b \pmod n$ و $c \equiv d \pmod n$، فإن $a - c \equiv b - d \pmod n$&lt;/li>
&lt;li>&lt;strong>الضرب&lt;/strong>: إذا كان $a \equiv b \pmod n$ و $c \equiv d \pmod n$، فإن $a \times c \equiv b \times d \pmod n$&lt;/li>
&lt;li>&lt;strong>الأسس&lt;/strong>: إذا كان $a \equiv b \pmod n$، فإنه لأي عدد طبيعي $k$، يكون $a^k \equiv b^k \pmod n$&lt;/li>
&lt;/ol>
&lt;p>ومع ذلك، يجب توخي الحذر فيما يتعلق بـ &lt;strong>القسمة&lt;/strong>. بشكل عام، فقط لأن $a \times c \equiv b \times c \pmod n$، فهذا لا يعني أنه يمكنك قسمة كلا الجانبين على $c$ للحصول على $a \equiv b \pmod n$. هذا ينطبق فقط عندما يكون $c$ و $n$ أوليين فيما بينهما (القاسم المشترك الأكبر هو 1). هذا المفهوم لـ &amp;ldquo;المعكوس الضربي المعياري&amp;rdquo; سيكون في غاية الأهمية في توليد مفاتيح تشفير RSA، والذي سيتم مناقشته لاحقًا.&lt;/p>
&lt;hr>
&lt;h2 id="3-الخلفية-الرياضية-لمبرهنة-فيرما-الصغرى-وإثباتها">3. الخلفية الرياضية لمبرهنة فيرما الصغرى وإثباتها
&lt;/h2>&lt;p>الآن وقد فهمنا أساسيات الحساب المعياري، دعونا ننتقل إلى الموضوع الرئيسي وهو مبرهنة فيرما الصغرى.&lt;/p>
&lt;h3 id="31-تعريف-المبرهنة">3.1 تعريف المبرهنة
&lt;/h3>&lt;p>تُصاغ مبرهنة فيرما الصغرى على النحو التالي:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>مبرهنة فيرما الصغرى (Fermat&amp;rsquo;s Little Theorem)&lt;/strong>
ليكن $p$ عددًا أوليًا، و $a$ أي عدد صحيح ليس من مضاعفات $p$ (بمعنى أن $a$ و $p$ أوليان فيما بينهما). عندئذ، تتحقق علاقة التطابق التالية:
&lt;/p>
$$ a^{p-1} \equiv 1 \pmod p $$
&lt;/blockquote>
&lt;p>من الشائع أيضًا التعبير عنها بشكل ينطبق على جميع الأعداد الصحيحة $a$ عن طريق إزالة شرط &amp;quot; $a$ ليس من مضاعفات $p$ &amp;ldquo;. في هذه الحالة، نضرب كلا الجانبين في $a$ لنحصل على:&lt;/p>
$$
a^p \equiv a \pmod p
$$
&lt;h3 id="32-التحقق-باستخدام-أمثلة-محددة">3.2 التحقق باستخدام أمثلة محددة
&lt;/h3>&lt;p>دعونا نستخدم أرقامًا محددة للتحقق مما إذا كانت المبرهنة صحيحة حقًا.
لنفترض أن العدد الأولي $p = 5$. إذن $p-1 = 4$. سنختار عددًا صحيحًا لـ $a$ ليس من مضاعفات $p$.&lt;/p>
&lt;ul>
&lt;li>في حالة $a = 2$: $2^{5-1} = 2^4 = 16$. $16 \div 5 = 3$ والباقي $1$. لذلك $16 \equiv 1 \pmod 5$. (صحيح)&lt;/li>
&lt;li>في حالة $a = 3$: $3^{5-1} = 3^4 = 81$. $81 \div 5 = 16$ والباقي $1$. لذلك $81 \equiv 1 \pmod 5$. (صحيح)&lt;/li>
&lt;li>في حالة $a = 4$: $4^{5-1} = 4^4 = 256$. $256 \div 5 = 51$ والباقي $1$. لذلك $256 \equiv 1 \pmod 5$. (صحيح)&lt;/li>
&lt;/ul>
&lt;p>وبهذه الطريقة، بغض النظر عن قيمة $a$ التي تختارها (طالما أنها ليست من مضاعفات 5)، فإن رفعها للقوة الرابعة وقسمتها على 5 سيؤدي دائمًا إلى باقي مقداره 1. يبدو الأمر كالسحر، لكن هذا ينبع من الخصائص الجميلة للأعداد الأولية.&lt;/p>
&lt;h3 id="33-الإثبات-الرياضي-للمبرهنة">3.3 الإثبات الرياضي للمبرهنة
&lt;/h3>&lt;p>لماذا هذا صحيح؟ هنا سنقدم إثباتًا أنيقًا باستخدام فئات البواقي.&lt;/p>
&lt;p>لننظر في المجموعة $S = \{1, 2, 3, \dots, p-1\}$. هذه هي ممثلات الأعداد الصحيحة التي يكون باقي قسمتها على $p$ من $1$ إلى $p-1$.
الآن، لننظر في مجموعة جديدة $T$ عن طريق ضرب كل عنصر في عدد صحيح $a$ أولي نسبيًا مع $p$.
&lt;/p>
$$ T = \{1a, 2a, 3a, \dots, (p-1)a\} $$
&lt;p>لننظر في باقي قسمة كل عنصر من عناصر هذه المجموعة $T$ على $p$. والمثير للدهشة أن هذه البواقي، على الرغم من أن ترتيبها قد يتغير، تتطابق تمامًا مع عناصر المجموعة الأصلية $S$.
والسبب هو:&lt;/p>
&lt;ol>
&lt;li>عناصر $T$ لا تكون أبدًا من مضاعفات $p$ (لأن كلاً من $a$ والعناصر الأصلية ليست من مضاعفات $p$).&lt;/li>
&lt;li>لا يوجد عنصران مختلفان في $T$ متطابقان بمقياس $p$. إذا افترضنا أن $ia \equiv ja \pmod p$ ($i \neq j$)، بما أن $a$ و $p$ أوليان نسبيًا، يمكننا القسمة على $a$ للحصول على $i \equiv j \pmod p$، وهو تناقض.&lt;/li>
&lt;/ol>
&lt;p>لذلك، حاصل ضرب جميع عناصر $S$ متطابق مع حاصل ضرب جميع عناصر $T$ بمقياس $p$.&lt;/p>
$$
(1a) \times (2a) \times \dots \times ((p-1)a) \equiv 1 \times 2 \times \dots \times (p-1) \pmod p
$$
&lt;p>بترتيب الجانب الأيسر، يوجد $p-1$ من $a$، لذلك:&lt;/p>
$$
a^{p-1} \cdot (p-1)! \equiv (p-1)! \pmod p
$$
&lt;p>بما أن $(p-1)!$ أولي نسبيًا مع $p$، يمكننا قسمة كلا الجانبين على $(p-1)!$ لنحصل في النهاية على المبرهنة التالية:&lt;/p>
$$
a^{p-1} \equiv 1 \pmod p
$$
&lt;p>هذا هو إثبات مبرهنة فيرما الصغرى.&lt;/p>
&lt;hr>
&lt;h2 id="4-دالة-مؤشر-أويلر-ومبرهنة-أويلر">4. دالة مؤشر أويلر ومبرهنة أويلر
&lt;/h2>&lt;p>مبرهنة فيرما الصغرى هي مبرهنة تتعلق بـ &amp;ldquo;الأعداد الأولية $p$&amp;quot;، ولكن تم تعميمها على &amp;ldquo;أي عدد صحيح موجب $n$&amp;rdquo; بواسطة ليونهارت أويلر. لفهم تشفير RSA، هذا التوسيع ضروري.&lt;/p>
&lt;h3 id="41-دالة-مؤشر-أويلر-phin">4.1 دالة مؤشر أويلر $\phi(n)$
&lt;/h3>&lt;p>دالة مؤشر أويلر (أو دالة فاي لأويلر) $\phi(n)$ هي دالة تمثل &amp;ldquo;عدد الأعداد الصحيحة من $1$ إلى $n$ التي هي أولية نسبيًا مع $n$&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>في حالة العدد الأولي $p$، جميع الأعداد الصحيحة من $1$ إلى $p-1$ أولية نسبيًا مع $p$، لذلك $\phi(p) = p - 1$.&lt;/li>
&lt;li>بالنسبة لعددين أوليين مختلفين $p, q$، وحاصلهما $n = p \times q$، يمكن إيجاد $\phi(n)$ بصيغة بسيطة جدًا:
$$ \phi(p \times q) = \phi(p) \times \phi(q) = (p - 1)(q - 1) $$&lt;/li>
&lt;/ul>
&lt;p>هذه الخاصية هي المنطق الأساسي في توليد مفاتيح تشفير RSA.&lt;/p>
&lt;h3 id="42-مبرهنة-أويلر">4.2 مبرهنة أويلر
&lt;/h3>&lt;p>عمم أويلر مبرهنة فيرما الصغرى على النحو التالي:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>مبرهنة أويلر (Euler&amp;rsquo;s Theorem)&lt;/strong>
لأي عدد صحيح موجب $n$ وعدد صحيح $a$ أولي نسبيًا معه، يتحقق ما يلي:
&lt;/p>
$$ a^{\phi(n)} \equiv 1 \pmod n $$
&lt;/blockquote>
&lt;p>إذا كان $n$ عددًا أوليًا $p$، فإن $\phi(p) = p - 1$، وبالتالي تصبح هذه المبرهنة هي مبرهنة فيرما الصغرى نفسها ($a^{p-1} \equiv 1 \pmod p$). وبعبارة أخرى، مبرهنة فيرما الصغرى ليست سوى حالة خاصة من مبرهنة أويلر.&lt;/p>
&lt;hr>
&lt;h2 id="5-العثور-على-أعداد-أولية-ضخمة-اختبار-فيرما-للأولية">5. العثور على أعداد أولية ضخمة: اختبار فيرما للأولية
&lt;/h2>&lt;p>في تقنيات التشفير (مثل تشفير RSA وتبادل مفاتيح Diffie-Hellman)، من الضروري العثور بسرعة على &amp;ldquo;أعداد أولية ضخمة&amp;rdquo; قد تصل إلى مئات الأرقام. ومع ذلك، لتحديد ما إذا كان رقم ضخم $N$ أوليًا، فإن &amp;ldquo;طريقة القسمة التجريبية&amp;rdquo;، والتي تختبر قابلية القسمة على كل الأرقام من $2$ إلى $\sqrt{N}$، ستستغرق وقتًا يعادل عمر الكون.&lt;/p>
&lt;p>هنا يأتي دور &amp;ldquo;اختبار الأولية الاحتمالي&amp;rdquo; الذي يعكس مبرهنة فيرما الصغرى، وهو &lt;strong>اختبار فيرما (Fermat Primality Test)&lt;/strong>.&lt;/p>
&lt;h3 id="51-ما-هو-اختبار-الأولية-الاحتمالي">5.1 ما هو اختبار الأولية الاحتمالي
&lt;/h3>&lt;p>وفقًا لمبرهنة فيرما الصغرى، إذا كان $p$ أوليًا، فبالنسبة لأي $a$ ($1 &lt; a &lt; p$)، فإن $a^{p-1} \equiv 1 \pmod p$ يتحقق دائمًا.
بأخذ المعاكس الإيجابي لهذا، يمكننا القول: &amp;ldquo;إذا كان $a^{p-1} \not\equiv 1 \pmod p$ بالنسبة لـ $a$ معين، فإن $p$ &lt;strong>ليس عددًا أوليًا بالتأكيد (إنه عدد مركب)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>لذلك، إذا أردنا تحديد ما إذا كان $N$ أوليًا أم لا، نختار عددًا قليلاً من قيم $a$ عشوائيًا ونحسب $a^{N-1} \pmod N$ للتحقق مما إذا كان يساوي $1$. إذا كانت الإجابة بخلاف $1$ ولو مرة واحدة، فهذا يؤكد أن $N$ هو عدد مركب. وإذا كانت النتيجة $1$ بغض النظر عن عدد المرات التي نختبر فيها ذلك، فيمكننا استنتاج باحتمال كبير أن $N$ هو &amp;ldquo;على الأرجح عدد أولي&amp;rdquo;.&lt;/p>
&lt;h3 id="52-شرح-الخوارزمية-ومخطط-الانسياب">5.2 شرح الخوارزمية ومخطط الانسياب
&lt;/h3>&lt;p>خوارزمية اختبار فيرما هي كما يلي:&lt;/p>
&lt;div class="mermaid">flowchart TD
Start["البداية"] --> Input["إدخال العدد p المراد اختباره، وعدد مرات الاختبار k"]
Input --> LoopStart["حلقة من i = 0 إلى k-1"]
LoopStart --> Condition{"i &lt; k ؟"}
Condition -- "نعم" --> RandomA["اختيار عدد صحيح عشوائي a في النطاق 1 &lt; a &lt; p-1"]
RandomA --> Calc["حساب الأس المعياري a^(p-1) mod p"]
Calc --> CheckPrime{"هل النتيجة هي 1 ؟"}
CheckPrime -- "لا" --> ReturnComposite["p هو عدد مركب (مؤكد)"]
CheckPrime -- "نعم" --> Increment["زيادة i"]
Increment --> Condition
Condition -- "لا" --> ReturnPrime["p على الأرجح عدد أولي (احتمالي)"]
ReturnComposite --> End["النهاية"]
ReturnPrime --> End&lt;/div>
&lt;h3 id="53-فخ-أرقام-كارمايكل-الأعداد-شبه-الأولية">5.3 فخ أرقام كارمايكل (الأعداد شبه الأولية)
&lt;/h3>&lt;p>اختبار فيرما سريع للغاية، ولكن به عيب خطير. وهو وجود أرقام شيطانية تحقق $a^{N-1} \equiv 1 \pmod N$ لجميع قيم $a$ على الرغم من أنها أعداد مركبة. تسمى هذه بـ &lt;strong>أرقام كارمايكل (Carmichael numbers)&lt;/strong>. أصغر رقم كارمايكل هو $561$ ($3 \times 11 \times 17$).&lt;/p>
&lt;p>نظرًا لوجود أرقام كارمايكل، لا يمكن لاختبار فيرما النقي وحده تقديم تحديد قاطع للأولية. لذلك، في أنظمة التشفير الفعلية (مثل OpenSSL)، يُستخدم عادةً &lt;strong>اختبار ميلر-رابين للأولية (Miller-Rabin)&lt;/strong>، وهو نسخة محسنة من اختبار فيرما. يمكن لاختبار ميلر-رابين اكتشاف أرقام كارمايكل، مما يقلل بشكل فعال احتمال التحديد الخاطئ إلى الصفر.&lt;/p>
&lt;h3 id="54-الأس-المعياري-السريع-طريقة-التربيع-المتكرر">5.4 الأس المعياري السريع (طريقة التربيع المتكرر)
&lt;/h3>&lt;p>يتطلب خوارزمية اختبار الأولية حساب $a^{N-1} \pmod N$، ولكن عندما يكون $N$ ضخمًا، يصبح $a^{N-1}$ عددًا هائلاً بأرقام فلكية، ولن يتسع في ذاكرة الكمبيوتر.
يتم حل هذه المشكلة بواسطة &lt;strong>التربيع المتكرر (Exponentiation by Squaring)&lt;/strong> أو حساب الأس المعياري. من خلال أخذ الباقي (mod N) في كل خطوة من العملية الحسابية، تظل القيمة دائمًا أقل من $N$، مما يتيح حسابها بسرعة كبيرة (تعقيد زمني $O(\log N)$).&lt;/p>
&lt;hr>
&lt;h2 id="6-تنفيذ-اختبار-الأولية-والأس-المعياري">6. تنفيذ اختبار الأولية والأس المعياري
&lt;/h2>&lt;p>دعونا ننفذ اختبار فيرما للأولية والتربيع المتكرر في C++ و Python.&lt;/p>
&lt;h3 id="61-التنفيذ-بلغة-c">6.1 التنفيذ بلغة C++
&lt;/h3>&lt;p>في C++، تكون أنواع الأعداد الصحيحة القياسية عرضة لتجاوز السعة (overflow)، لذلك هناك حاجة إلى مكتبة أعداد صحيحة متعددة الدقة (مثل GMP) للتعامل مع الأرقام الضخمة. ومع ذلك، لفهم الخوارزمية، سنعرض التنفيذ ضمن نطاق الأعداد الصحيحة 64 بت (&lt;code>unsigned long long&lt;/code>).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;random&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// حساب الأس المعياري السريع (a^b mod m) - طريقة التربيع المتكرر
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="nf">power_mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// إذا كان البت الأقل أهمية لـ b هو 1، نضرب النتيجة في a
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__int128&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">result&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// تمديد لـ 128 بت لمنع تجاوز السعة
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// تربيع a
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__int128&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// إزاحة b لليمين (قسمة على 2)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">/=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// اختبار فيرما للأولية
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">bool&lt;/span> &lt;span class="nf">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">iterations&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">random_device&lt;/span> &lt;span class="n">rd&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">mt19937_64&lt;/span> &lt;span class="n">gen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rd&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">uniform_int_distribution&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">dis&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">iterations&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dis&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">gen&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// إذا كان a^(p-1) mod p لا يساوي 1، فهو عدد مركب
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">power_mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// على الأرجح أولي
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1000000007&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// عدد أولي معروف
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; is probably prime.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; is composite.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="62-التنفيذ-بلغة-python">6.2 التنفيذ بلغة Python
&lt;/h3>&lt;p>تدعم أنواع الأعداد الصحيحة القياسية في Python الدقة المتعددة، لذلك لا داعي للقلق بشأن تجاوز السعة. علاوة على ذلك، تستخدم الدالة المدمجة &lt;code>pow(a, b, m)&lt;/code> في Python التربيع المتكرر داخليًا، مما يجعلها سريعة للغاية.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">random&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">iterations&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> اختبار الأولية الاحتمالي باستخدام اختبار فيرما
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">iterations&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># اختيار عدد عشوائي a بين 2 و p-2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># حساب a^(p-1) mod p. الدالة المدمجة pow سريعة.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span> &lt;span class="c1"># عدد مركب مؤكد&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">True&lt;/span> &lt;span class="c1"># على الأرجح أولي&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># اختبار&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">number_to_test&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">104729&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> على الأرجح عدد أولي.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> هو عدد مركب.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="7-التطبيق-في-تشفير-rsa-حيث-تلتقي-أفكار-فيرما-وأويلر">7. التطبيق في تشفير RSA: حيث تلتقي أفكار فيرما وأويلر
&lt;/h2>&lt;p>إن التطبيق الأعظم لمبرهنة فيرما الصغرى (ومبرهنة أويلر) هو &lt;strong>تشفير RSA&lt;/strong>، الذي طوره ريفست (Rivest)، وشامير (Shamir)، وأدلمان (Adleman) في عام 1977.
تشفير RSA هو نظام رائد يُعرف باسم &amp;ldquo;تشفير المفتاح العام&amp;rdquo;، حيث يتم نشر مفتاح التشفير (المفتاح العام) للعالم بأسره، بينما مفتاح فك التشفير (المفتاح الخاص) لا يعرفه سوى المستلم نفسه.&lt;/p>
&lt;p>يعتمد عدم التماثل هذا على الأمان الحسابي المتمثل في أن &amp;ldquo;تحليل الأعداد المركبة الضخمة إلى عواملها الأولية أمر صعب للغاية&amp;rdquo;.&lt;/p>
&lt;h3 id="71-آلية-تشفير-rsa-توليد-المفتاح-التشفير-فك-التشفير">7.1 آلية تشفير RSA (توليد المفتاح، التشفير، فك التشفير)
&lt;/h3>&lt;p>دعونا نتحقق من سير الاتصال الشامل لتشفير RSA باستخدام مخطط تسلسل Mermaid.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Alice["أليس (المستلم)"]
participant Bob["بوب (المرسل)"]
Alice->>Alice: "توليد عددين أوليين ضخمين p, q"
Alice->>Alice: "حساب N = p * q و φ(N) = (p-1)(q-1)"
Alice->>Alice: "حساب المفتاح العام e والمفتاح الخاص d (e*d ≡ 1 mod φ(N))"
Alice->>Bob: "إرسال المفتاح العام (N, e)"
Note over Bob: "تجهيز النص الواضح M (M &lt; N)"
Bob->>Bob: "حساب النص المشفر C = M^e mod N"
Bob->>Alice: "إرسال النص المشفر C"
Alice->>Alice: "حساب النص الواضح M = C^d mod N وفك التشفير"&lt;/div>
&lt;p>فيما يلي، سنشرح الخطوات الرياضية التفصيلية.&lt;/p>
&lt;h4 id="الخطوة-1-توليد-المفتاح-مهمة-المستلم-أليس">الخطوة 1: توليد المفتاح (مهمة المستلم أليس)
&lt;/h4>&lt;ol>
&lt;li>قم بتوليد عددين أوليين ضخمين عشوائيًا $p$ و $q$ (هنا يتم استخدام اختبار الأولية المذكور أعلاه).&lt;/li>
&lt;li>احسب حاصل ضربهما $N = p \times q$. هذا الـ $N$ يصبح علنيًا.&lt;/li>
&lt;li>باستخدام دالة مؤشر أويلر، احسب $\phi(N) = (p-1)(q-1)$.&lt;/li>
&lt;li>اختر عددًا صحيحًا $e$ (الأس العام) يكون أوليًا نسبيًا مع $\phi(N)$ (غالبًا ما يُستخدم $e = 65537$).&lt;/li>
&lt;li>احسب المعكوس الضربي المعياري $d$ لـ $e$ (الأس الخاص). أي، أوجد $d$ بحيث يتحقق ما يلي:
$$ e \cdot d \equiv 1 \pmod{\phi(N)} $$
يُستخدم &lt;strong>خوارزمية إقليدس الممتدة&lt;/strong> في هذه العملية الحسابية.&lt;/li>
&lt;/ol>
&lt;p>بهذا، يكون &lt;strong>المفتاح العام هو $(N, e)$&lt;/strong>، و&lt;strong>المفتاح الخاص هو $(N, d)$&lt;/strong>. (يجب التخلص من $p, q, \phi(N)$ على الفور أو إخفائها بصرامة).&lt;/p>
&lt;h4 id="الخطوة-2-التشفير-مهمة-المرسل-بوب">الخطوة 2: التشفير (مهمة المرسل بوب)
&lt;/h4>&lt;p>لنفترض أن بوب يريد إرسال الرسالة $M$ إلى أليس (يتم تحويل $M$ من حروف إلى أرقام، حيث $0 \le M &lt; N$).
يستخدم بوب المفتاح العام لأليس $(N, e)$ لإجراء العملية الحسابية التالية لإنشاء النص المشفر $C$.&lt;/p>
$$
C \equiv M^e \pmod N
$$
&lt;p>يرسل بوب هذا الـ $C$ إلى أليس عبر الشبكة.&lt;/p>
&lt;h4 id="الخطوة-3-فك-التشفير-مهمة-المستلم-أليس">الخطوة 3: فك التشفير (مهمة المستلم أليس)
&lt;/h4>&lt;p>تقوم أليس، التي تستقبل النص المشفر $C$، بإجراء العملية الحسابية التالية باستخدام مفتاحها الخاص $d$ الذي تعرفه وحدها.&lt;/p>
$$
M' \equiv C^d \pmod N
$$
&lt;p>بشكل مثير للدهشة، تتطابق نتيجة هذا الحساب $M'$ تمامًا مع الرسالة الأصلية $M$.&lt;/p>
&lt;h3 id="72-لماذا-يمكن-فك-التشفير-إثبات-رياضي">7.2 لماذا يمكن فك التشفير؟ (إثبات رياضي)
&lt;/h3>&lt;p>هنا، تظهر مبرهنة فيرما الصغرى (ومبرهنة أويلر) قيمتها الحقيقية. لماذا يعود $C^d \pmod N$ إلى $M$؟&lt;/p>
&lt;p>دعونا نوسع معادلة فك التشفير.
بما أن $C \equiv M^e \pmod N$، إذن:
&lt;/p>
$$ C^d \equiv (M^e)^d \equiv M^{ed} \pmod N $$
&lt;p>في خطوة توليد المفتاح، اخترنا $d$ بحيث يكون $e \cdot d \equiv 1 \pmod{\phi(N)}$. هذا يعني أنه يوجد عدد صحيح $k$ بحيث يمكن كتابته على النحو التالي:
&lt;/p>
$$ e \cdot d = 1 + k \cdot \phi(N) $$
&lt;p>نعوض بهذا في المعادلة السابقة:
&lt;/p>
$$ M^{ed} = M^{1 + k \cdot \phi(N)} = M \cdot M^{k \cdot \phi(N)} = M \cdot (M^{\phi(N)})^k \pmod N $$
&lt;p>هنا تظهر &lt;strong>مبرهنة أويلر&lt;/strong> ($M^{\phi(N)} \equiv 1 \pmod N$). (※ بدقة، يجب أن يكون $M$ و $N$ أوليين نسبيًا، ولكن في RSA، فإن احتمال عدم كون $M$ و $N$ أوليين نسبيًا منخفض فلكيًا، وباستخدام مبرهنة الباقي الصينية، يمكن إثبات أنها تظل صحيحة حتى لو لم يكونا أوليين نسبيًا).&lt;/p>
&lt;p>وبتطبيق مبرهنة أويلر، حيث $M^{\phi(N)} \equiv 1$:
&lt;/p>
$$ M \cdot (1)^k \equiv M \pmod N $$
&lt;p>لقد تم استعادة $M$ بنجاح! إن خصائص الأرقام التي اكتشفها فيرما وأويلر قبل مئات السنين تضمن تمامًا سرية الاتصالات الرقمية الحديثة.&lt;/p>
&lt;hr>
&lt;h2 id="8-تنفيذ-مبسط-لتشفير-rsa-بلغة-python">8. تنفيذ مبسط لتشفير RSA بلغة (Python)
&lt;/h2>&lt;p>نظرًا لأن النظرية وحدها قد تكون صعبة الاستيعاب، دعونا نستخدم Python لتنفيذ عملية توليد مفتاح تشفير RSA والتشفير وفك التشفير بالفعل. هذا &amp;ldquo;تنفيذ مبسط (لعبة)&amp;rdquo; للأغراض التعليمية، لكن الرياضيات المستخدمة فيه مطابقة تمامًا لتلك الحقيقية.&lt;/p>
&lt;p>سنقوم أيضًا بتضمين &amp;ldquo;خوارزمية إقليدس الممتدة&amp;rdquo; لإيجاد المعكوس الضربي المعياري $d$.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;span class="lnt">68
&lt;/span>&lt;span class="lnt">69
&lt;/span>&lt;span class="lnt">70
&lt;/span>&lt;span class="lnt">71
&lt;/span>&lt;span class="lnt">72
&lt;/span>&lt;span class="lnt">73
&lt;/span>&lt;span class="lnt">74
&lt;/span>&lt;span class="lnt">75
&lt;/span>&lt;span class="lnt">76
&lt;/span>&lt;span class="lnt">77
&lt;/span>&lt;span class="lnt">78
&lt;/span>&lt;span class="lnt">79
&lt;/span>&lt;span class="lnt">80
&lt;/span>&lt;span class="lnt">81
&lt;/span>&lt;span class="lnt">82
&lt;/span>&lt;span class="lnt">83
&lt;/span>&lt;span class="lnt">84
&lt;/span>&lt;span class="lnt">85
&lt;/span>&lt;span class="lnt">86
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">random&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># إيجاد القاسم المشترك الأكبر&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># خوارزمية إقليدس الممتدة (إيجاد x, y في ax + by = gcd(a,b))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># تُستخدم لإيجاد d في e*d ≡ 1 (mod φ(N))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">raise&lt;/span> &lt;span class="ne">Exception&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;المعكوس الضربي غير موجود&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># دالة توليد الأعداد الأولية (نسخة مبسطة: توليد أعداد أولية صغيرة)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">getrandbits&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># استخدام اختبار مبسط بدلاً من اختبار فيرما المذكور سابقاً&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">p&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># توليد مفاتيح RSA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_keypair&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># التأكد من أن p و q غير متساويين&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># غالباً ما يُستخدم 65537 للأس e، ولكن هنا سنختاره عشوائياً&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randrange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randrange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># حساب المفتاح الخاص d&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># المفتاح العام (e, n)، المفتاح الخاص (d, n)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">((&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pk&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">plaintext&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># حساب plaintext^e mod n&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">plaintext&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">cipher&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">sk&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># حساب cipher^d mod n وتحويله مرة أخرى إلى حروف&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plain&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plain&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># مثال على التنفيذ&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;--- تنفيذ مبسط لتشفير RSA ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">public_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">private_key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_keypair&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># استخدام أعداد أولية 12 بت&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;المفتاح العام (e, n): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">public_key&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;المفتاح الخاص (d, n): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">private_key&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;Hello Math!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">الرسالة الأصلية: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># التشفير&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">encrypted_msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">public_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;النص المشفر: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">encrypted_msg&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># فك التشفير&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decrypted_msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">private_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">encrypted_msg&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;الرسالة التي تم فك تشفيرها: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted_msg&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>عند تشغيل هذا الكود، ستتمكن من رؤية كيف تتحول مصفوفة من الأحرف إلى مصفوفة من الأرقام غير المألوفة (نص مشفر)، وكيف يتم استعادتها ببراعة إلى السلسلة الأصلية بواسطة المفتاح الخاص.&lt;/p>
&lt;hr>
&lt;h2 id="9-خاتمة-تقاطع-الجمال-الرياضي-مع-التطبيق-العملي">9. خاتمة: تقاطع الجمال الرياضي مع التطبيق العملي
&lt;/h2>&lt;p>في القرن السابع عشر، عندما اكتشف بيير دي فيرما هذه &amp;ldquo;المبرهنة الصغرى&amp;rdquo;، لم يعتقد أحد أنها ستكون مفيدة لأي شيء. فيرما نفسه أجرى أبحاثه في نظرية الأعداد بدافع من الفضول الرياضي البحت.&lt;/p>
&lt;p>ومع ذلك، بعد حوالي 300 عام، وتحديدًا في السبعينيات أثناء فجر شبكات الكمبيوتر، عادت مبرهنة فيرما للظهور بشكل دراماتيكي كتقنية تشفير لا غنى عنها لإنشاء بروتوكولات اتصال آمنة. تقنيات اختبار الأولية القائمة على مبرهنة فيرما الصغرى، وتشفير RSA القائم على مبرهنة أويلر، تدعم حرفياً البنية التحتية للإنترنت الحديثة.&lt;/p>
&lt;p>إن رسائل LINE التي نرسلها دون تفكير كل يوم، ومشترياتنا من أمازون، كلها ترقص على أنغام هذه الصيغة البسيطة والجميلة $a^{p-1} \equiv 1 \pmod p$. تعلمنا مبرهنة فيرما الصغرى أنه مهما كانت الرياضيات مجردة، فسيأتي يوم تكون فيه مفيدة للبشرية.&lt;/p>
&lt;p>أثناء دراسة البرمجة ونظرية التشفير، فإن فهم الهياكل الرياضية التي تكمن في أساسها سيكون سلاحًا رائعًا لفهم سلوك المكتبات المقدمة كـ &amp;ldquo;صناديق سوداء&amp;rdquo; بعمق، ولتصميم أنظمة أكثر أمانًا.&lt;/p></description></item><item><title>الحدس الرياضي للتشفير القائم على الشبكة (Lattice-based cryptography)</title><link>http://kenji.blog/ar/p/lattice-based-cryptography-math-intuition/</link><pubDate>Fri, 11 Sep 2026 21:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/lattice-based-cryptography-math-intuition/</guid><description>&lt;img src="http://kenji.blog/p/lattice-based-cryptography-math-intuition/img/eyecatch.jpg" alt="Featured image of post الحدس الرياضي للتشفير القائم على الشبكة (Lattice-based cryptography)" />&lt;h1 id="1-مقدمة-فجر-التشفير-ما-بعد-الكوانتوم-pqc-وصعود-التشفير-القائم-على-الشبكة">1. مقدمة: فجر التشفير ما بعد الكوانتوم (PQC) وصعود التشفير القائم على الشبكة
&lt;/h1>&lt;p>يتم دعم البنية التحتية الرقمية لمجتمعنا الحديث من خلال تقنيات تشفير المفتاح العام مثل تشفير RSA وتشفير المنحنى الإهليلجي (ECC). تعتمد هذه الأساليب التشفيرية في أمانها على صعوبة مسائل رياضية مثل &amp;ldquo;مسألة التحليل إلى عوامل أولية&amp;rdquo; و&amp;quot;مسألة اللوغاريتم المنفصل&amp;quot;، والتي يُعتقد أنه لا يمكن حلها بكفاءة (تتطلب وقتاً أسياً) بواسطة أجهزة الكمبيوتر الكلاسيكية التقليدية.&lt;/p>
&lt;p>ومع ذلك، أحدثت &amp;ldquo;خوارزمية شور&amp;rdquo; (Shor&amp;rsquo;s Algorithm) التي نشرها بيتر شور (Peter Shor) في عام 1994 صدمة في عالم التشفير. أثبتت هذه الخوارزمية رياضياً أنه عند تحقيق أجهزة كمبيوتر كمومية واسعة النطاق، سيكون من الممكن حل مسألة التحليل إلى عوامل أولية ومسألة اللوغاريتم المنفصل في وقت كثير الحدود. وهذا يعني أن تشفير المفتاح العام المستخدم على نطاق واسع حالياً سيصبح قابلاً لفك التشفير بالكامل في المستقبل.&lt;/p>
&lt;p>لمواجهة &amp;ldquo;التهديد الكمومي&amp;rdquo; (Quantum Threat)، أصبح من الملح إجراء أبحاث حول طرق تشفير جديدة يصعب فك تشفيرها حتى باستخدام أجهزة الكمبيوتر الكمومية. يُطلق على هذا المجال اسم &amp;ldquo;التشفير ما بعد الكوانتوم&amp;rdquo; (Post-Quantum Cryptography: PQC) أو &amp;ldquo;التشفير المقاوم للحوسبة الكمومية&amp;rdquo;.&lt;/p>
&lt;p>هناك عدة مرشحين أقوياء في PQC. تشمل هذه التشفير القائم على التجزئة، والتشفير القائم على الكود، وتشفير متعدد الحدود متعدد المتغيرات، وتشفير التماثل الفائق. ومع ذلك، فإن التشفير الذي يحظى بأكبر قدر من الاهتمام حالياً ويحتل مركز الصدارة في عملية توحيد معايير PQC من قبل المعهد الوطني للمعايير والتكنولوجيا (NIST) هو &amp;ldquo;التشفير القائم على الشبكة&amp;rdquo; (Lattice-based cryptography). يتميز التشفير القائم على الشبكة بسرعات معالجة سريعة جداً للتشفير وفك التشفير مقارنة بالطرق الأخرى، كما يتميز بامتلاكه دليلاً أمنياً قوياً للغاية في نظرية التشفير، وهو تقليل &amp;ldquo;التعقيد في أسوأ الحالات&amp;rdquo; (Worst-case complexity) إلى &amp;ldquo;التعقيد في الحالة المتوسطة&amp;rdquo; (Average-case complexity).&lt;/p>
&lt;p>في هذا المقال، سننطلق من التعريف الرياضي لـ &amp;ldquo;الشبكة&amp;rdquo; (Lattice) الذي يشكل أساس التشفير القائم على الشبكة، وسنشرح بتعمق المشاكل الصعبة على الشبكة مثل SVP (مسألة المتجه الأقصر) و CVP (مسألة المتجه الأقرب)، بالإضافة إلى &amp;ldquo;مسألة LWE&amp;rdquo; (التعلم مع الأخطاء - Learning With Errors) التي تعد قلب التشفير القائم على الشبكة الحديث، باستخدام المعادلات الرياضية والحدس الهندسي والأمثلة العددية المحددة.&lt;/p>
&lt;h1 id="2-التعريف-الرياضي-والحدس-الهندسي-للشبكة-lattice">2. التعريف الرياضي والحدس الهندسي للشبكة (Lattice)
&lt;/h1>&lt;h2 id="21-الفضاء-المتجهي-والشبكة">2.1 الفضاء المتجهي والشبكة
&lt;/h2>&lt;p>في الرياضيات، تشير &amp;ldquo;الشبكة&amp;rdquo; (Lattice) إلى مجموعة من النقاط المنفصلة المرتبة بانتظام داخل فضاء متجهي حقيقي ذو $n$ بُعد $\mathbb{R}^n$. إنها تشبه الفضاء المتجهي (Vector Space) الذي ندرسه في الجبر الخطي، ولكن هناك فرق حاسم. في حين أن الفضاء المتجهي هو فضاء مستمر يتم التعبير عنه بتركيبة خطية ذات &amp;ldquo;معاملات حقيقية&amp;rdquo; لمتجهات الأساس، فإن الشبكة هي فضاء منفصل يتم التعبير عنه بتركيبة خطية ذات &amp;ldquo;معاملات صحيحة&amp;rdquo; لمتجهات الأساس.&lt;/p>
&lt;p>دعونا نقدم تعريفاً رياضياً دقيقاً. نعتبر $n$ ($n \le m$) من المتجهات المستقلة خطياً $\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n$ في فضاء متجهي حقيقي ذو $m$ بُعد $\mathbb{R}^m$. نضع المصفوفة التي تحتوي على هذه المتجهات كمتجهات عمودية كـ $B = [\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n] \in \mathbb{R}^{m \times n}$. تُسمى هذه $B$ &amp;ldquo;أساس&amp;rdquo; (Basis) الشبكة.&lt;/p>
&lt;p>الشبكة $\mathcal{L}(B)$ الناتجة عن هذا الأساس $B$ تُعرّف على النحو التالي:&lt;/p>
$$
\mathcal{L}(B) = \left\{ \sum_{i=1}^{n} x_i \mathbf{b}_i \mathrel{\bigg|} x_i \in \mathbb{Z} \right\} = \{ B \mathbf{x} \mid \mathbf{x} \in \mathbb{Z}^n \}
$$
&lt;p>النقطة المهمة هنا هي أن المعاملات $x_i$ تقتصر على الأعداد الصحيحة $\mathbb{Z}$ بدلاً من الأعداد الحقيقية $\mathbb{R}$. ونتيجة لذلك، تتشكل &amp;ldquo;مجموعة من النقاط المنفصلة&amp;rdquo; مثل نقاط التقاطع المتباعدة بمسافات متساوية، بدلاً من النقاط المستمرة التي توجد بأعداد لا حصر لها في الفضاء.&lt;/p>
&lt;h2 id="22-الصورة-الهندسية">2.2 الصورة الهندسية
&lt;/h2>&lt;p>دعونا نفكر في مثال على المستوى ثنائي الأبعاد $\mathbb{R}^2$. إذا اخترنا متجهات الأساس $\mathbf{b}_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$ و $\mathbf{b}_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$، فإن الشبكة الناتجة عنها ستكون مجموعة من جميع الإحداثيات الصحيحة $(x, y) \in \mathbb{Z}^2$ على مستوى الإحداثيات. هذه هي أبسط &amp;ldquo;شبكة مربعة&amp;rdquo;.&lt;/p>
&lt;p>ومع ذلك، لا تكون الشبكات متعامدة دائماً. على سبيل المثال، إذا أخذنا الأساس $\mathbf{b}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix}$ و $\mathbf{b}_2 = \begin{pmatrix} 1 \\ 3 \end{pmatrix}$، فستكون النقاط الناتجة أشبه بنقاط تقاطع شبكة مائلة ومائلة.&lt;/p>
&lt;h2 id="23-عدم-تفرد-الأساس-والتحويل-الأحادي-المعيار-unimodular">2.3 عدم تفرد الأساس والتحويل الأحادي المعيار (Unimodular)
&lt;/h2>&lt;p>هناك خاصية مهمة تتعلق بأساس أمان التشفير القائم على الشبكة. وهي &amp;ldquo;وجود عدد لا حصر له من الأسس التي تولد نفس الشبكة&amp;rdquo;.&lt;/p>
&lt;p>على سبيل المثال، الشبكة $\mathbb{Z}^2$ الناتجة عن الأساس المذكور أعلاه $\mathbf{b}_1 = (1, 0)^T, \mathbf{b}_2 = (0, 1)^T$، يمكن إنتاجها أيضاً بشكل مطابق للشبكة $\mathbb{Z}^2$ باستخدام الأساس $\mathbf{b}'_1 = (1, 1)^T, \mathbf{b}'_2 = (2, 3)^T$.&lt;/p>
&lt;p>الشرط الضروري والكافي لأساس معين $B$ وأساس آخر $B'$ لتوليد نفس الشبكة هو وجود مصفوفة ذات عناصر صحيحة $U \in \mathbb{Z}^{n \times n}$، بحيث تكون المحددات $\det(U) = \pm 1$، ويُعبَّر عنها بـ:
&lt;/p>
$$ B' = B U $$
&lt;p>
تُسمى مثل هذه المصفوفة $U$ بـ &amp;ldquo;مصفوفة أحادية المعيار&amp;rdquo; (Unimodular matrix).&lt;/p>
&lt;p>الفكرة الأساسية في تطبيقات التشفير هي استخدام &amp;ldquo;أساس جيد&amp;rdquo; (أساس قريب من التعامد ومكون من متجهات قصيرة) كمفتاح سري، واستخدام &amp;ldquo;أساس سيء&amp;rdquo; (أساس مائل بشكل متبادل للغاية ومكون من متجهات طويلة جداً) كمفتاح عام. يصبح حساب الأساس الجيد من الأساس السيء أمراً صعباً للغاية عندما يزداد البعد. هذا هو الحدس الأساسي للتشفير القائم على الشبكة.&lt;/p>
&lt;h1 id="3-مسائل-صعبة-الحساب-في-الشبكة">3. مسائل صعبة الحساب في الشبكة
&lt;/h1>&lt;p>يعتمد أمان التشفير القائم على الشبكة على صعوبة حل مسائل رياضية معينة على الشبكة. هنا نقدم اثنتين من المسائل الأساسية والأكثر شهرة.&lt;/p>
&lt;h2 id="31-مسألة-المتجه-الأقصر-shortest-vector-problem-svp">3.1 مسألة المتجه الأقصر (Shortest Vector Problem: SVP)
&lt;/h2>&lt;p>تعد مسألة SVP هي المسألة الأكثر كلاسيكية وشهرة في نظرية الشبكة.&lt;/p>
&lt;p>&lt;strong>التعريف (SVP):&lt;/strong>
بالنظر إلى أي أساس شبكة $B$، ابحث عن المتجه $\mathbf{v}$ الذي له أصغر معيار إقليدي (طول) من بين المتجهات غير الصفرية التي تنتمي إلى تلك الشبكة $\mathcal{L}(B)$.&lt;/p>
&lt;p>مُعبّراً عنها رياضياً، إنها مسألة إيجاد المتجه $\mathbf{v}$ الذي يحقق $\min_{\mathbf{v} \in \mathcal{L}(B) \setminus \{\mathbf{0}\}} \| \mathbf{v} \|$. يُكتب هذا الطول الأدنى $\lambda_1(\mathcal{L})$ ويُسمى &amp;ldquo;الحد الأدنى المتتالي الأول للشبكة&amp;rdquo; (First successive minimum).&lt;/p>
&lt;p>في الأبعاد المنخفضة مثل الأبعاد الثنائية أو الثلاثية، يمكن العثور على أقصر متجه بصرياً عن طريق رسم شكل. أو يمكن حله بكفاءة باستخدام خوارزميات مثل خوارزمية تقليل شبكة غاوس. ومع ذلك، عندما تصبح الأبعاد $n$ عالية في نطاق مئات إلى آلاف، فمن المعروف أن حل مسألة SVP بدقة هي مسألة NP-صعبة (NP-hard).&lt;/p>
&lt;p>في التشفير الحقيقي، بدلاً من المتجه الأقصر الدقيق، يتم استخدام مسألة SVP التقريبية ($\gamma$-SVP) التي تعثر على &amp;ldquo;متجه قصير تقريباً&amp;rdquo;. عندما يكون معامل التقريب $\gamma$ بحجم كثير الحدود، لا تزال هذه المسألة تعتبر صعبة للغاية.&lt;/p>
&lt;h2 id="32-مسألة-المتجه-الأقرب-closest-vector-problem-cvp">3.2 مسألة المتجه الأقرب (Closest Vector Problem: CVP)
&lt;/h2>&lt;p>مسألة CVP هي أيضاً مسألة بالغة الأهمية في التشفير القائم على الشبكة.&lt;/p>
&lt;p>&lt;strong>التعريف (CVP):&lt;/strong>
بالنظر إلى أي أساس شبكة $B$ وأي متجه مستهدف $\mathbf{t} \in \mathbb{R}^m$ في الفضاء (ليس بالضرورة نقطة شبكة)، ابحث عن نقطة الشبكة $\mathbf{v} \in \mathcal{L}(B)$ الأقرب إلى $\mathbf{t}$ من بين نقاط الشبكة.&lt;/p>
&lt;p>رياضياً، هي مسألة البحث عن نقطة الشبكة $\mathbf{v}$ التي تحقق $\min_{\mathbf{v} \in \mathcal{L}(B)} \| \mathbf{v} - \mathbf{t} \|$.&lt;/p>
&lt;p>على غرار مسألة SVP، فإن CVP هي مسألة NP-صعبة في الأبعاد العالية. من وجهة نظر التطبيق التشفيري، فإن مسألة LWE، التي سيتم وصفها لاحقاً، مرتبطة ارتباطاً وثيقاً بمتغير خاص من CVP يُعرف باسم &amp;ldquo;فك التشفير ذي المسافة المحدودة&amp;rdquo; (Bounded Distance Decoding: BDD).&lt;/p>
&lt;h2 id="33-لماذا-لا-يمكن-حلها-عندما-تصبح-الأبعاد-عالية-حدود-lll-و-bkz">3.3 لماذا لا يمكن حلها عندما تصبح الأبعاد عالية؟ (حدود LLL و BKZ)
&lt;/h2>&lt;p>خوارزمية LLL (خوارزمية Lenstra-Lenstra-Lovász) هي خوارزمية مشهورة لحل مسائل الشبكة ذات الأبعاد العالية. تعمل خوارزمية LLL في وقت كثير الحدود ويمكنها تقليل (Reduction) أساس الشبكة إلى &amp;ldquo;أساس جيد&amp;rdquo; إلى حد ما. ومع ذلك، فإن أقصر متجه يمكن أن تجده خوارزمية LLL له معامل تقريب أسي ($2^{\mathcal{O}(n)}$) بالنسبة لطول المتجه الأقصر الحقيقي، وبالتالي لا يصل إلى مستوى كسر أمان التشفير.&lt;/p>
&lt;p>باستخدام خوارزميات تقليل الأساس الأقوى مثل خوارزمية BKZ (Block Korkine-Zolotarev)، وهي تحسين لـ LLL، يمكن العثور على متجهات أقصر، ولكن كمية الحسابات تزداد بشكل أسي مع حجم الكتلة. في التشفير القائم على الشبكة، يتم تحديد البارامترات الآمنة (مثل حجم البعد $n$) عن طريق تقدير وقت تنفيذ خوارزمية BKZ. في المعايير القياسية الحالية لـ PQC، يتم اختيار قيم للبعد $n$ تتراوح من 500 إلى أكثر من 1000، ويقال إن فك التشفير سيستغرق وقتاً أطول من عمر الكون، حتى باستخدام أجهزة الكمبيوتر العملاقة أو الحواسيب الكمومية المستقبلية.&lt;/p>
&lt;h1 id="4-الصياغة-الرياضية-لمسألة-lwe-التعلم-مع-الأخطاء---learning-with-errors">4. الصياغة الرياضية لمسألة LWE (التعلم مع الأخطاء - Learning With Errors)
&lt;/h1>&lt;p>تعتمد معظم التشفيرات الحديثة القائمة على الشبكة على &amp;ldquo;مسألة LWE&amp;rdquo; (التعلم مع الأخطاء) التي اقترحها عوديد ريغيف (Oded Regev) في عام 2005. يكمن جمال مسألة LWE في بساطة صياغتها، وحقيقة أنها تمتلك دليلاً رياضياً قوياً يسمى &amp;ldquo;التقليل من التعقيد في أسوأ الحالات إلى التعقيد في الحالة المتوسطة&amp;rdquo;.&lt;/p>
&lt;h2 id="41-نظام-المعادلات-الخطية-بدون-ضوضاء">4.1 نظام المعادلات الخطية بدون ضوضاء
&lt;/h2>&lt;p>لفهم مسألة LWE، دعونا نفكر أولاً في نظام بسيط من المعادلات الخطية المتزامنة بدون ضوضاء.
لنفترض أن هناك متجهاً سرياً غير معروف $\mathbf{s} \in \mathbb{Z}_q^n$ (كل مكون هو عدد صحيح من $0$ إلى $q-1$). حيث $q$ هو عدد أولي.&lt;/p>
&lt;p>نختار متجهات معاملات عشوائية $\mathbf{a}_1, \mathbf{a}_2, \dots \in \mathbb{Z}_q^n$، ونحسب الضرب النقطي (الجداء الداخلي) مع المتجه السري $\mathbf{s}$ في المعيار $q$ (mod $q$).
$b_1 = \langle \mathbf{a}_1, \mathbf{s} \rangle \pmod q$
$b_2 = \langle \mathbf{a}_2, \mathbf{s} \rangle \pmod q$
$\vdots$&lt;/p>
&lt;p>إذا أُعطينا عدداً كافياً (أكثر من $n$) من أزواج $(\mathbf{a}_i, b_i)$، يمكننا بسهولة استعادة المتجه السري $\mathbf{s}$ باستخدام &amp;ldquo;الحذف الغاوسي&amp;rdquo; (Gaussian elimination) في الجبر الخطي. هذه مسألة يمكن حلها بسهولة في وقت كثير الحدود.&lt;/p>
&lt;h2 id="42-تعريف-مسألة-lwe-إضافة-الضوضاء">4.2 تعريف مسألة LWE: إضافة الضوضاء
&lt;/h2>&lt;p>الآن، ماذا سيحدث إذا أضفنا &amp;ldquo;ضوضاء&amp;rdquo; (خطأ) طفيفة إلى هذه المسألة؟
هذا هو جوهر مسألة LWE.&lt;/p>
&lt;p>بالنسبة للمتجه السري غير المعروف $\mathbf{s} \in \mathbb{Z}_q^n$، نضيف خطأً صغيراً $e_i \in \mathbb{Z}_q$ إلى نتيجة كل معادلة.
$b_i = \langle \mathbf{a}_i, \mathbf{s} \rangle + e_i \pmod q$&lt;/p>
&lt;p>هنا، $e_i$ هو قيمة صحيحة صغيرة بمتوسط 0 وانحراف معياري صغير نسبياً (على سبيل المثال، يتم اختياره من توزيع غاوسي منفصل يشبه التوزيع الطبيعي).
المعلومات المعطاة هي قائمة بأزواج من المتجهات العشوائية $\mathbf{a}_i$ والقيمة المحسوبة $b_i$ مع الخطأ المضاف إليها.
$( \mathbf{a}_1, b_1 ), ( \mathbf{a}_2, b_2 ), \dots, ( \mathbf{a}_m, b_m )$&lt;/p>
&lt;p>التعبير عن هذا كمصفوفة يجعله أنيقاً جداً.
باستخدام مصفوفة عشوائية $A \in \mathbb{Z}_q^{m \times n}$، والمتجه السري $\mathbf{s} \in \mathbb{Z}_q^n$، ومتجه الخطأ $\mathbf{e} \in \mathbb{Z}_q^m$، يمكن كتابته كـ:
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q $$
&lt;p>
يُعطى فقط $A$ و $\mathbf{b}$. إيجاد $\mathbf{s}$ من هذه المعلومات هو &amp;ldquo;مسألة LWE البحثية&amp;rdquo; (Search LWE problem).&lt;/p>
&lt;p>نظراً لوجود الخطأ $e_i$، إذا حاولت استخدام الحذف الغاوسي، فسوف يتضخم الخطأ بشكل أسي أثناء عملية جمع وطرح المعادلات، ولن تتمكن من الوصول إلى الإجابة الصحيحة. على الرغم من أنها تبدو للوهلة الأولى وكأنها معادلات خطية متزامنة بسيطة، إلا أن إضافة هذه الضوضاء الصغيرة ترفع مستوى صعوبة المسألة إلى مستوى NP-صعب.&lt;/p>
&lt;h2 id="43-مسألة-lwe-التقريرية-decision-lwe">4.3 مسألة LWE التقريرية (Decision LWE)
&lt;/h2>&lt;p>غالباً ما يُستخدم في إثباتات نظرية التشفير متغير من مسألة LWE البحثية يسمى &amp;ldquo;مسألة LWE التقريرية&amp;rdquo; (Decision LWE problem).&lt;/p>
&lt;p>مسألة LWE التقريرية هي مسألة تحديد من أي التوزيعين التاليين تم أخذ قائمة معينة من العينات:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>توزيع LWE&lt;/strong>: $(A, \mathbf{b} = A\mathbf{s} + \mathbf{e} \pmod q)$ المحسوب عمداً.&lt;/li>
&lt;li>&lt;strong>توزيع عشوائي منتظم&lt;/strong>: $(A, \mathbf{u})$ يتكون من مصفوفة مختارة عشوائياً بالكامل $A$ ومتجه $\mathbf{u}$.&lt;/li>
&lt;/ol>
&lt;p>المدهش هو أنه إذا تم اختيار بارامترات مسألة LWE بشكل مناسب، فإن الأزواج التي يتم الحصول عليها من توزيع LWE تصبح &amp;ldquo;غير قابلة للتمييز حسابياً&amp;rdquo; (Computationally Indistinguishable) عن أزواج البيانات العشوائية تماماً. تُشكل هذه الخاصية الأساس الذي يجعل التشفير القائم على LWE قادراً على توليد &amp;ldquo;نصوص مشفرة لا يمكن تمييزها عن الأرقام العشوائية&amp;rdquo;.&lt;/p>
&lt;h2 id="44-التقليل-من-التعقيد-في-أسوأ-الحالات-إلى-التعقيد-في-الحالة-المتوسطة-مبرهنة-regev">4.4 التقليل من التعقيد في أسوأ الحالات إلى التعقيد في الحالة المتوسطة (مبرهنة Regev)
&lt;/h2>&lt;p>الإنجاز الأكبر لعوديد ريغيف كان الربط الرياضي لصعوبة مسألة LWE هذه بصعوبة مسائل الشبكة المذكورة أعلاه (SVP و CVP).&lt;/p>
&lt;p>لقد استخدم التقليل الكمومي (Quantum reduction) لإثبات أنه &amp;ldquo;إذا كانت هناك خوارزمية ذات وقت كثير الحدود يمكنها حل مسألة LWE في المتوسط (لـ $A$ و $\mathbf{e}$ المختارة عشوائياً)، فهناك خوارزمية كمومية ذات وقت كثير الحدود يمكنها حل مسألة Gap-SVP في الحالة الأسوأ (أصعب حالة) لأي شبكة.&amp;rdquo; (في وقت لاحق، أوضح Peikert وآخرون تقليلاً كلاسيكياً أيضاً).&lt;/p>
&lt;p>هذه خاصية حالمة في نظرية التشفير. وذلك لأنها تبدد المخاوف القائلة بأن &amp;ldquo;التشفير قد يُكسر لأننا ربما اخترنا بالصدفة مفتاحاً ضعيفاً (جزء من الحالة المتوسطة)&amp;quot;، وتوفر ضماناً قوياً بأنه &amp;ldquo;إذا كان من الممكن حل LWE المتوسط، فسيتم حل جميع المسائل الصعبة للشبكة (لذلك فإن LWE صعب بالتأكيد)&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">graph TD
A["مسائل الشبكة في أسوأ الحالات (Gap-SVP, SIVP)"] -->|تقليل كمومي/كلاسيكي| B["مسألة LWE في الحالة المتوسطة"]
B -->|البناء التشفيري| C["أنظمة التشفير القائمة على LWE (PKE, KEM, FHE)"]
style A fill:#ffcccc,stroke:#ff0000,stroke-width:2px,color:#000
style B fill:#ccffcc,stroke:#00aa00,stroke-width:2px,color:#000
style C fill:#ccccff,stroke:#0000ff,stroke-width:2px,color:#000&lt;/div>
&lt;h1 id="5-بناء-نظام-تشفير-المفتاح-العام-باستخدام-lwe-تشفير-regev">5. بناء نظام تشفير المفتاح العام باستخدام LWE (تشفير Regev)
&lt;/h1>&lt;p>الآن وقد فهمنا صعوبة مسألة LWE، دعونا نرى كيف يتم استخدامها للتشفير وفك التشفير في نظام تشفير المفتاح العام الأساسي الذي اقترحه عوديد ريغيف. سنشرح هنا الآلية الأساسية لتشفير رسالة من بت واحد $M \in \{0, 1\}$.&lt;/p>
&lt;h2 id="51-توليد-المفتاح-key-generation">5.1 توليد المفتاح (Key Generation)
&lt;/h2>&lt;ol>
&lt;li>كمعلمات للنظام، نحدد العدد الأولي الأساسي $q$، والبعد $n$، وعدد المعادلات $m$ ($m > n \log q$).&lt;/li>
&lt;li>كمفتاح سري، نختار بشكل عشوائي متجهاً $\mathbf{s} \in \mathbb{Z}_q^n$.&lt;/li>
&lt;li>نقوم بتوليد مصفوفة عشوائية $A \in \mathbb{Z}_q^{m \times n}$.&lt;/li>
&lt;li>نختار متجه خطأ صغيراً $\mathbf{e} \in \mathbb{Z}_q^m$ من توزيع أخطاء مثل التوزيع الغاوسي المنفصل.&lt;/li>
&lt;li>نحسب المتجه $\mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q$.&lt;/li>
&lt;li>المفتاح العام (Public Key) هو $(A, \mathbf{b})$.&lt;/li>
&lt;li>المفتاح السري (Secret Key) هو $\mathbf{s}$.&lt;/li>
&lt;/ol>
&lt;p>المفتاح العام هو بالضبط &amp;ldquo;مثيل لمسألة LWE&amp;rdquo; بحد ذاتها. إيجاد المفتاح السري $\mathbf{s}$ من المفتاح العام $(A, \mathbf{b})$ يعادل حل مسألة LWE البحثية، مما يضمن الأمان.&lt;/p>
&lt;h2 id="52-التشفير-encryption">5.2 التشفير (Encryption)
&lt;/h2>&lt;p>تقوم أليس بتشفير رسالة من بت واحد $M \in \{0, 1\}$ باستخدام المفتاح العام لبوب $(A, \mathbf{b})$.&lt;/p>
&lt;ol>
&lt;li>تختار متجهاً ثنائياً عشوائياً (مكوناته 0 أو 1) $\mathbf{r} \in \{0, 1\}^m$.&lt;/li>
&lt;li>كجزء أول من النص المشفر، تحسب المتجه $\mathbf{u} = A^T \mathbf{r} \pmod q$. ($A^T$ هي المصفوفة المنقولة لـ $A$. بعبارة أخرى، تقوم بجمع صفوف $A$ التي يكون فيها المكون المقابل في $\mathbf{r}$ يساوي 1).&lt;/li>
&lt;li>كجزء ثانٍ من النص المشفر، تحسب العدد القياسي (scalar) $v = \mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q$.
(إذا كانت الرسالة $M$ هي 0 فلا تجمع شيئاً، وإذا كانت $1$ تجمع قيمة نصف $q$ تماماً $\lfloor \frac{q}{2} \rfloor$).&lt;/li>
&lt;li>النص المشفر (Ciphertext) هو $(\mathbf{u}, v)$.&lt;/li>
&lt;/ol>
&lt;p>المعنى الحدسي للتشفير هو أخذ &amp;ldquo;مجموع مجموعة فرعية عشوائية&amp;rdquo; لمتجه المفتاح العام المصفوفة $A$ والمتجه $\mathbf{b}$. نظراً لصعوبة مسألة LWE التقريرية، يبدو هذا النص المشفر $(\mathbf{u}, v)$ غير قابل للتمييز عن متجه عشوائي تماماً وعدد عشوائي منتظم (الأمان الدلالي: Semantic Security).&lt;/p>
&lt;div class="mermaid">flowchart LR
M["رسالة M في {0,1}"] --> Enc
PK["مفتاح عام (A, b)"] --> Enc
r["متجه ثنائي عشوائي r"] --> Enc
subgraph Enc ["عملية التشفير"]
direction TB
u_calc["u = A^T * r mod q"]
v_calc["v = b^T * r + M * floor(q/2) mod q"]
end
Enc --> CT["نص مشفر (u, v)"]&lt;/div>
&lt;h2 id="53-فك-التشفير-decryption">5.3 فك التشفير (Decryption)
&lt;/h2>&lt;p>يقوم بوب بفك تشفير النص المشفر $(\mathbf{u}, v)$ باستخدام مفتاحه السري $\mathbf{s}$.&lt;/p>
&lt;ol>
&lt;li>يحسب القيمة التالية: $D = v - \mathbf{s}^T \mathbf{u} \pmod q$&lt;/li>
&lt;li>إذا كانت النتيجة المحسوبة قريبة من $0$، فإنه يُخرج $M=0$. وإذا كانت قريبة من $\lfloor \frac{q}{2} \rfloor$، فإنه يُخرج $M=1$.&lt;/li>
&lt;/ol>
&lt;p>لماذا يمكن فك التشفير بهذه الطريقة؟ دعونا نوسع ذلك رياضياً.
تذكر أن $\mathbf{b} = A \mathbf{s} + \mathbf{e}$.&lt;/p>
$$
\begin{aligned}
v - \mathbf{s}^T \mathbf{u} &amp;= (\mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T (A^T \mathbf{r}) \\
&amp;= ((A \mathbf{s} + \mathbf{e})^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= (\mathbf{s}^T A^T \mathbf{r} + \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q
\end{aligned}
$$
&lt;p>هنا، تم إلغاء $\mathbf{s}^T A^T \mathbf{r}$ بشكل جميل من المعادلة!
ما تبقى هو $\mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor$.&lt;/p>
&lt;p>$\mathbf{e}$ هو متجه ضوضاء بمكونات صغيرة جداً، و $\mathbf{r}$ هو متجه ثنائي بمكونات 0 أو 1. لذلك، فإن حاصل الضرب النقطي $\mathbf{e}^T \mathbf{r}$ يظل أيضاً قيمة صغيرة نسبياً (إذا تم اختيار المعلمات بشكل مناسب).&lt;/p>
&lt;ul>
&lt;li>إذا كان $M=0$، فإن النتيجة تكون $\mathbf{e}^T \mathbf{r}$، وهي قيمة صغيرة قريبة من $0$.&lt;/li>
&lt;li>إذا كان $M=1$، فإن النتيجة تكون $\mathbf{e}^T \mathbf{r} + \lfloor \frac{q}{2} \rfloor$، وستقع حول قيمة نصف $q$ وهي $\lfloor \frac{q}{2} \rfloor$.&lt;/li>
&lt;/ul>
&lt;p>إذا تم تصميم المعلمات بحيث تظل القيمة المطلقة للخطأ $\mathbf{e}^T \mathbf{r}$ أقل من $\frac{q}{4}$، فيمكن لبوب تحديد (فك تشفير) الرسالة $M$ بدقة بمجرد النظر إلى ما إذا كانت نتيجة الحساب أقرب إلى $0$ أو $\lfloor \frac{q}{2} \rfloor$. هذه هي الآلية الجميلة التي يعمل بها التشفير القائم على LWE.&lt;/p>
&lt;div class="mermaid">flowchart LR
CT["نص مشفر (u, v)"] --> Dec
SK["مفتاح سري s"] --> Dec
subgraph Dec ["عملية فك التشفير"]
direction TB
calc["حساب D = v - s^T * u mod q"]
check["تحقق مما إذا كان D أقرب إلى 0 أو q/2"]
end
calc --> check
Dec --> M_out["رسالة مستردة M"]&lt;/div>
&lt;h1 id="6-مثال-لعبة-toy-example-لتشفير-lwe-باستخدام-قيم-عددية-محددة">6. مثال لعبة (Toy Example) لتشفير LWE باستخدام قيم عددية محددة
&lt;/h1>&lt;p>نظراً لأن سلسلة المعادلات وحدها قد تجعل من الصعب استيعاب المفهوم، دعونا نتبع الحساب من التشفير إلى فك التشفير عن طريق تعيين قيم عددية صغيرة جداً بالفعل.
(※ في أنظمة التشفير الحقيقية، لضمان الأمان، يتم استخدام $n$ بقيمة 500 أو أكثر، و $q$ بقيمة آلاف أو أكثر).&lt;/p>
&lt;p>&lt;strong>【إعداد البارامترات】&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>المعيار $q = 17$ (عدد أولي. وبالتالي تأخذ القيم النطاق من $0$ إلى $16$)&lt;/li>
&lt;li>البعد $n = 2$&lt;/li>
&lt;li>عدد المعادلات $m = 4$&lt;/li>
&lt;li>لنفترض أننا نريد تشفير الرسالة $M = 1$.&lt;/li>
&lt;li>مقدار إزاحة الرسالة: $\lfloor \frac{q}{2} \rfloor = \lfloor \frac{17}{2} \rfloor = 8$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>【1. مرحلة توليد المفتاح】&lt;/strong>
يختار بوب المفتاح السري $\mathbf{s}$ والمصفوفة $A$ ومتجه الخطأ $\mathbf{e}$ عشوائياً.
&lt;/p>
$$ \mathbf{s} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \in \mathbb{Z}_{17}^2 $$
$$ A = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \in \mathbb{Z}_{17}^{4 \times 2} $$
$$ \mathbf{e} = \begin{pmatrix} 1 \\ -1 \\ 0 \\ 2 \end{pmatrix} \equiv \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} \pmod{17} $$
&lt;p>ثم يحسب المفتاح العام $\mathbf{b}$.
&lt;/p>
$$ A \mathbf{s} = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = \begin{pmatrix} 2\times 3 + 15\times 4 \\ 1\times 3 + 8\times 4 \\ 14\times 3 + 5\times 4 \\ 9\times 3 + 10\times 4 \end{pmatrix} = \begin{pmatrix} 6 + 60 \\ 3 + 32 \\ 42 + 20 \\ 27 + 40 \end{pmatrix} = \begin{pmatrix} 66 \\ 35 \\ 62 \\ 67 \end{pmatrix} $$
&lt;p>
نحسب هذا بالنسبة للمعيار 17. (على سبيل المثال $66 = 17 \times 3 + 15$)
&lt;/p>
$$ A \mathbf{s} \pmod{17} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} $$
&lt;p>
نضيف متجه الخطأ $\mathbf{e}$.
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} + \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} = \begin{pmatrix} 16 \\ 17 \\ 11 \\ 18 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 0 \\ 11 \\ 1 \end{pmatrix} \pmod{17} $$
&lt;p>المفتاح العام هو $A$ و $\mathbf{b} = (16, 0, 11, 1)^T$.&lt;/p>
&lt;p>&lt;strong>【2. مرحلة التشفير】&lt;/strong>
تقوم أليس بتشفير الرسالة $M = 1$.
تختار متجهاً عشوائياً $\mathbf{r}$. هنا نفترض $\mathbf{r} = (1, 0, 1, 0)^T$.&lt;/p>
&lt;p>تحسب $\mathbf{u}$.
&lt;/p>
$$ \mathbf{u} = A^T \mathbf{r} = \begin{pmatrix} 2 &amp; 1 &amp; 14 &amp; 9 \\ 15 &amp; 8 &amp; 5 &amp; 10 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 2 \times 1 + 14 \times 1 \\ 15 \times 1 + 5 \times 1 \end{pmatrix} = \begin{pmatrix} 16 \\ 20 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 3 \end{pmatrix} \pmod{17} $$
&lt;p>تحسب $v$.
&lt;/p>
$$ \mathbf{b}^T \mathbf{r} = (16, 0, 11, 1) \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = 16 \times 1 + 11 \times 1 = 27 \equiv 10 \pmod{17} $$
&lt;p>
تضيف القيمة $\lfloor 17/2 \rfloor = 8$ المطابقة للرسالة $M=1$.
&lt;/p>
$$ v = \mathbf{b}^T \mathbf{r} + M \cdot 8 = 10 + 1 \times 8 = 18 \equiv 1 \pmod{17} $$
&lt;p>ترسل أليس النص المشفر $(\mathbf{u}, v) = \left( \begin{pmatrix} 16 \\ 3 \end{pmatrix}, 1 \right)$ إلى بوب.&lt;/p>
&lt;p>&lt;strong>【3. مرحلة فك التشفير】&lt;/strong>
يقوم بوب، الذي استلم النص المشفر، بفك التشفير باستخدام المفتاح السري $\mathbf{s} = (3, 4)^T$.
معادلة فك التشفير: يحسب $D = v - \mathbf{s}^T \mathbf{u} \pmod{17}$.&lt;/p>
$$ \mathbf{s}^T \mathbf{u} = (3, 4) \begin{pmatrix} 16 \\ 3 \end{pmatrix} = 3 \times 16 + 4 \times 3 = 48 + 12 = 60 \equiv 9 \pmod{17} $$
$$ D = v - \mathbf{s}^T \mathbf{u} = 1 - 9 = -8 \pmod{17} $$
&lt;p>هنا، في عالم المعيار 17، $-8$ تساوي $9$ (لأن $-8 + 17 = 9$).
يحدد بوب ما إذا كانت القيمة الناتجة $D = 9$ أقرب إلى $0$ أو $8$ ($\lfloor 17/2 \rfloor$).
نظراً لأن $9$ هي بالتأكيد أقرب إلى $8$ من $0$، فقد تمكن بوب من استعادة $M = 1$ بنجاح!&lt;/p>
&lt;p>لماذا أصبحت $9$؟ لنتذكر الإثبات السابق.
جزء الخطأ هو $\mathbf{e}^T \mathbf{r} = (1, -1, 0, 2) (1, 0, 1, 0)^T = 1 \times 1 + 0 \times 1 = 1$.
لذلك، فإن نتيجة الحساب هي $\mathbf{e}^T \mathbf{r} + M \cdot 8 = 1 + 8 = 9$، وتم تأكيد حساب القيمة كما هو متوقع نظرياً.&lt;/p>
&lt;h1 id="7-التطور-نحو-التطبيق-العملي-ring-lwe-و-module-lwe">7. التطور نحو التطبيق العملي: Ring-LWE و Module-LWE
&lt;/h1>&lt;p>في حين أن مسألة LWE القياسية (Standard LWE) التي تم شرحها حتى الآن تحتوي على إثبات أمان قوي للغاية، إلا أن لها عيوباً قاتلة في التطبيق العملي. هذه العيوب هي &amp;ldquo;حجم المفتاح يصبح ضخماً&amp;rdquo; و &amp;ldquo;تكلفة الحساب عالية&amp;rdquo;.&lt;/p>
&lt;p>في LWE القياسية، يتضمن المفتاح العام مصفوفة ضخمة $A \in \mathbb{Z}_q^{m \times n}$. عندما تصل المعلمة $n$ إلى المئات أو الآلاف، يصل حجم هذه المصفوفة إلى عدة ميغابايت، مما يجعلها ثقيلة جداً بحيث لا يمكن إرسالها واستقبالها في كل مرة على بروتوكولات الاتصال عبر الإنترنت (مثل TLS). بالإضافة إلى ذلك، يتطلب ضرب المصفوفات والمتجهات تعقيداً حسابياً قدره $\mathcal{O}(n^2)$.&lt;/p>
&lt;p>لحل هذه المشكلة، تم تقديم &amp;ldquo;Ring-LWE (RLWE)&amp;rdquo; و &amp;ldquo;Module-LWE (MLWE)&amp;quot;، والتي تدمج بنية جبرية تسمى حلقات متعددات الحدود (Polynomial rings) في الشبكة.&lt;/p>
&lt;h2 id="71-حدس-ring-lwe">7.1 حدس Ring-LWE
&lt;/h2>&lt;p>في Ring-LWE، يتم استبدال المتجهات والمصفوفات بعناصر (متعددات حدود) في حلقة متعددة الحدود $\mathcal{R}_q = \mathbb{Z}_q[X]/(X^n + 1)$. (حيث يتم اختيار $n$ كقوة للعدد 2).&lt;/p>
&lt;p>في حين كان المفتاح العام في LWE القياسية هو المصفوفة $A$، فإن Ring-LWE يستخدم متعددة حدود واحدة $a(x)$. كما يصبح المفتاح السري $s(x)$ والخطأ $e(x)$ أيضاً متعددات حدود.
تصبح المعادلة كما يلي:
&lt;/p>
$$ b(x) = a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>نظراً لأن هذا ضرب متعددات الحدود، باستخدام &amp;ldquo;تحويل العدد النظري&amp;rdquo; (Number Theoretic Transform: NTT) المشابه لتحويل فورييه السريع (FFT)، يمكن تقليل التعقيد الحسابي بشكل كبير إلى $\mathcal{O}(n \log n)$. علاوة على ذلك، نظراً لأن حجم المفتاح العام يتضاءل من مصفوفة إلى متعددة حدود مفردة، يتم تقليل حجم البيانات إلى $\mathcal{O}(n)$. يوفر هذا ميزة ساحقة في النطاق الترددي للاتصالات.&lt;/p>
&lt;p>من الناحية الرياضية، لا تنتمي Ring-LWE إلى شبكة عامة، بل يتم إرجاعها إلى مسألة على شبكة ذات تماثل خاص تسمى &amp;ldquo;الشبكة المثالية&amp;rdquo; (Ideal Lattice).&lt;/p>
&lt;h2 id="72-module-lwe-ومعايير-nist-kyber--ml-kem">7.2 Module-LWE ومعايير NIST (Kyber / ML-KEM)
&lt;/h2>&lt;p>في حين أن Ring-LWE فعالة، كان هناك قلق بسيط من أن البنية الجبرية الخاصة للشبكة المثالية قد تصبح نقطة انطلاق لهجمات مستقبلية. لذلك، فإن &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; هو الذي أخذ &amp;ldquo;أفضل ما في العالمين&amp;rdquo;: الأمان المحافظ لـ LWE القياسية وكفاءة Ring-LWE.&lt;/p>
&lt;p>في Module-LWE، نأخذ في الاعتبار مصفوفات ومتجهات صغيرة حيث تكون عناصرها متعددات حدود. بعبارة أخرى، نتعامل مع وحدات (Modules) فوق حلقات.
حالياً، تعتمد &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; (الاسم الموحد: ML-KEM)، التي اختارها NIST كمعيار لخوارزمية تبادل المفاتيح (KEM) لـ PQC، بالضبط على صعوبة مسألة Module-LWE هذه.&lt;/p>
&lt;h1 id="8-لماذا-يعتبر-آمنا-ضد-أجهزة-الكمبيوتر-الكمومية">8. لماذا يعتبر آمناً ضد أجهزة الكمبيوتر الكمومية؟
&lt;/h1>&lt;p>أخيراً، سنتطرق إلى النقطة الأساسية: &amp;ldquo;لماذا يُعتقد أن التشفير القائم على الشبكة لا يمكن فك تشفيره حتى باستخدام جهاز كمبيوتر كمومي؟&amp;rdquo;.&lt;/p>
&lt;p>إن خوارزمية شور، التي يستخدمها الكمبيوتر الكمومي لكسر تشفير RSA وتشفير المنحنى الإهليلجي، هي في جوهرها خوارزمية تحل &amp;ldquo;مسألة المجموعة الفرعية المخفية&amp;rdquo; (Hidden Subgroup Problem: HSP). تتمتع البنية الرياضية (المجموعات الأبيلية المحدودة - Finite abelian groups) وراء RSA و ECC بدورية (Periodicity)، ومن خلال استخدام عملية كمومية خاصة تسمى تحويل فورييه الكمومي (QFT)، يمكن استخراج هذه الفترة (المجموعة الفرعية المخفية) دفعة واحدة.&lt;/p>
&lt;p>ومع ذلك، فإن مسائل الشبكة تختلف بشكل أساسي. في حين أن للشبكات أيضاً دورية، فإن المطلوب في SVP و CVP هو خصائص هندسية غير خطية مثل &amp;ldquo;أقصر مسافة&amp;rdquo; و &amp;ldquo;إزالة الضوضاء&amp;rdquo;. حتى لو تم تطبيق &amp;ldquo;تحويل فورييه الكمومي على مجموعة أبيلية&amp;rdquo; كما هو الحال في خوارزمية شور مباشرة، لا يمكن استخراج المعلومات المفيدة التي يمكن أن تشكل حلاً لمسألة الشبكة بكفاءة. حتى يومنا هذا، لم يتم اكتشاف أي خوارزمية كمومية يمكنها حل SVP أو LWE في وقت كثير الحدود، ويُعتقد على نطاق واسع أنه حتى مع قوة الحوسبة المتوازية لأجهزة الكمبيوتر الكمومية، فإن الاستكشاف الذي يقترب من القوة الغاشمة (فقط تحسين الجذر التربيعي بواسطة خوارزمية غروفر - Grover&amp;rsquo;s algorithm) هو الطريقة الوحيدة الفعالة.&lt;/p>
&lt;h1 id="9-الخلاصة">9. الخلاصة
&lt;/h1>&lt;p>في هذا المقال، شرحنا بالتفصيل الحدس الرياضي للتشفير القائم على الشبكة، بدءاً من التعريف الهندسي للشبكة، وصياغة مسألة LWE، ووصولاً إلى بناء تشفير المفتاح العام.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>الشبكة (Lattice)&lt;/strong> هي فضاء منفصل يتم التعبير عنه بتركيبة خطية ذات معاملات صحيحة لمتجهات الأساس، وفي الأبعاد العالية، يصبح من الصعب العثور على &amp;ldquo;أساس جيد&amp;rdquo; قريب من التعامد (SVP).&lt;/li>
&lt;li>&lt;strong>مسألة LWE (التعلم مع الأخطاء)&lt;/strong> هي مسألة حل نظام من المعادلات الخطية المتزامنة مع الضوضاء، ونظراً لأن هذه المسألة مرتبطة بصعوبة أسوأ حالة لمسائل الشبكة، فإنها توفر أساساً قوياً للأمان.&lt;/li>
&lt;li>باستخدام مسألة LWE، يتم تحقيق التشفير وفك التشفير (&lt;strong>تشفير Regev&lt;/strong>) من خلال آلية بارعة لإضافة وإزالة الضوضاء عمداً.&lt;/li>
&lt;li>في البروتوكولات الحقيقية، لزيادة كفاءة الاتصال وسرعة الحساب، يتم اعتماد &lt;strong>Ring-LWE&lt;/strong> و &lt;strong>Module-LWE&lt;/strong> باستخدام حلقات متعددة الحدود، وهي تُشكل أساس &lt;strong>ML-KEM&lt;/strong> القياسي لـ NIST.&lt;/li>
&lt;/ol>
&lt;p>في خضم اقتراب نقلة نموذجية حسابية غير مسبوقة متمثلة في أجهزة الكمبيوتر الكمومية، من الرومانسي للغاية أن نرى &amp;ldquo;التشفير القائم على الشبكة&amp;rdquo;، الذي نشأ من أعماق الجبر الخطي الكلاسيكي ونظرية الأعداد، يتولى دور الأساس لأمن الإنترنت في المستقبل. الرياضيات التي تكمن وراء التشفير القائم على الشبكة ليست غامضة للغاية بأي حال من الأحوال، ومع المعرفة الأساسية بالجبر الخطي والاحتمالات، يمكن فهم بنيتها الجميلة بالكامل. نأمل أن يكون هذا المقال قد ساعدك على فهم التشفير القائم على الشبكة، الذي يشكل نواة PQC.&lt;/p></description></item><item><title>آلية إثبات المعرفة الصفرية (ZKP) وتطبيقاتها الحديثة في Web3 والأمن</title><link>http://kenji.blog/ar/p/zero-knowledge-proofs-zkp-web3-security/</link><pubDate>Fri, 11 Sep 2026 19:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/zero-knowledge-proofs-zkp-web3-security/</guid><description>&lt;img src="http://kenji.blog/p/zero-knowledge-proofs-zkp-web3-security/img/eyecatch.jpg" alt="Featured image of post آلية إثبات المعرفة الصفرية (ZKP) وتطبيقاتها الحديثة في Web3 والأمن" />&lt;h2 id="مقدمة">مقدمة
&lt;/h2>&lt;p>في المجتمع الرقمي الحديث، تعد خصوصية البيانات وقابلية التوسع من أهم التحديات. مع تزايد مخاطر تسرب المعلومات الشخصية والاستخدام غير المصرح به، هناك حاجة ملحة لتقنية &amp;ldquo;تثبت أنك تمتلك معلومات معينة دون الكشف عنها للطرف الآخر&amp;rdquo;. ما يحقق ذلك هو &lt;strong>إثبات المعرفة الصفرية (Zero-Knowledge Proof: ZKP)&lt;/strong>.&lt;/p>
&lt;p>إثبات المعرفة الصفرية هو مفهوم في نظرية التشفير اقترحه لأول مرة شافي غولدفاسر (Shafi Goldwasser)، سيلفيو ميكالي (Silvio Micali)، وتشارلز راكوف (Charles Rackoff) في الثمانينيات، ولكنه ظل لفترة طويلة مقتصرًا على البحث النظري. ومع ذلك، مع ظهور تقنية البلوكتشين و Web3، تغير الوضع تمامًا. برز ZKP فجأة كـ &amp;ldquo;عصا سحرية&amp;rdquo; تحل في الوقت نفسه مشكلة قابلية التوسع (حدود القدرة على المعالجة) ومشكلة الخصوصية (أن جميع المعاملات عامة ومكشوفة) التي تواجهها شبكات البلوكتشين العامة مثل الإيثريوم (Ethereum).&lt;/p>
&lt;p>في هذه المقالة، سنشرح بتفصيل عميق وتقني كل شيء بدءًا من المفاهيم الأساسية لإثبات المعرفة الصفرية، مرورًا بالآليات الرياضية والتشفيرية العميقة لـ &lt;strong>zk-SNARKs&lt;/strong> و &lt;strong>zk-STARKs&lt;/strong> السائدة حاليًا، وصولاً إلى أحدث أمثلة تطبيقاتها في Web3 والأمن مثل ZK-Rollups والهويات اللامركزية (DID).&lt;/p>
&lt;hr>
&lt;h2 id="ما-هو-إثبات-المعرفة-الصفرية-zkp">ما هو إثبات المعرفة الصفرية (ZKP)؟
&lt;/h2>&lt;p>إثبات المعرفة الصفرية (ZKP) يشير إلى بروتوكول يسمح للمُثبِت (Prover) بإثبات صحة قضية معينة للمُتَحَقِّق (Verifier) &amp;ldquo;دون نقل أي معلومات أخرى سوى حقيقة أن القضية صحيحة&amp;rdquo;.&lt;/p>
&lt;h3 id="المتطلبات-الثلاثة-التي-يجب-أن-يفي-بها-zkp">المتطلبات الثلاثة التي يجب أن يفي بها ZKP
&lt;/h3>&lt;p>لكي يعتبر البروتوكول ZKP صالحًا، يجب أن يستوفي بدقة الخصائص الثلاث التالية:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>الكمال (Completeness)&lt;/strong>
إذا كانت القضية صحيحة واتبع كل من المُثبِت والمُتَحَقِّق البروتوكول بشكل صحيح، فيجب على المُتَحَقِّق قبول (Accept) الإثبات باحتمالية ساحقة.&lt;/li>
&lt;li>&lt;strong>السلامة (Soundness)&lt;/strong>
إذا كانت القضية خاطئة، فإنه من المستحيل (باستثناء احتمالية ضئيلة يمكن تجاهلها) لأي مُثبِت، مهما كانت قدرته الحسابية عالية أو نواياه سيئة، أن يخدع المُتَحَقِّق ويجعله يقبل الإثبات.&lt;/li>
&lt;li>&lt;strong>المعرفة الصفرية (Zero-Knowledge)&lt;/strong>
إذا كانت القضية صحيحة، لا يمكن للمُتَحَقِّق الحصول على أي معلومات من عملية الإثبات سوى حقيقة &amp;ldquo;أن القضية صحيحة&amp;rdquo;. يتم إثبات ذلك رياضيًا من خلال وجود &amp;ldquo;محاكي (Simulator)&amp;rdquo; يمكنه محاكاة عملية الإثبات من منظور المُتَحَقِّق.&lt;/li>
&lt;/ol>
&lt;h3 id="الإثبات-التفاعلي-والإثبات-غير-التفاعلي">الإثبات التفاعلي والإثبات غير التفاعلي
&lt;/h3>&lt;p>هناك نوعان من ZKP: &lt;strong>الإثبات التفاعلي (Interactive ZKP)&lt;/strong>، حيث يتبادل المُثبِت والمُتَحَقِّق الاتصالات عدة مرات، و&lt;strong>الإثبات غير التفاعلي (Non-Interactive ZKP)&lt;/strong>، حيث يرسل المُثبِت بيانات الإثبات مرة واحدة فقط.&lt;/p>
&lt;h4 id="الإثبات-التفاعلي-interactive-zkp">الإثبات التفاعلي (Interactive ZKP)
&lt;/h4>&lt;p>تم تصميم ZKP في البداية كبروتوكول تفاعلي. وتعتبر قصة &amp;ldquo;كهف علي بابا&amp;rdquo; الشهيرة مثالاً على ذلك. التسلسل العام للبروتوكول هو كما يلي:&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Prover as "المُثبِت (Prover)"
participant Verifier as "المُتَحَقِّق (Verifier)"
Note over Prover, Verifier: "التدفق الأساسي لبروتوكول الإثبات التفاعلي"
Prover->>Verifier: "1. إرسال الالتزام (Commitment)"
Verifier->>Prover: "2. إرسال تحدي عشوائي (Challenge)"
Prover->>Verifier: "3. حساب وإرسال الاستجابة (Response)"
Note over Verifier: "التحقق من الاستجابة (Verification)"
Verifier-->>Prover: "4. القبول أو الرفض (Accept / Reject)"
Note over Prover, Verifier: "※ لتأكيد الدقة، يتم تكرار هذا عشرات المرات"&lt;/div>
&lt;p>هذه الطريقة قوية، ولكنها تتطلب أن يكون المُتَحَقِّق متصلاً بالإنترنت (أونلاين)، مما يجعلها غير مريحة للتطبيق في أنظمة موزعة غير متزامنة مثل البلوكتشين. في البلوكتشين، يجب أن يكون أي شخص قادرًا على التحقق من الإثباتات السابقة في أي وقت.&lt;/p>
&lt;h4 id="تحويل-فيات-شامير-fiat-shamir-heuristic-وعدم-التفاعلية">تحويل فيات-شامير (Fiat-Shamir Heuristic) وعدم التفاعلية
&lt;/h4>&lt;p>الطريقة الثورية لتحويل الإثبات التفاعلي إلى إثبات غير تفاعلي (Non-Interactive Zero-Knowledge Proof: NIZK) هي &lt;strong>تحويل فيات-شامير&lt;/strong>.&lt;/p>
&lt;p>بدلاً من &amp;ldquo;التحدي العشوائي&amp;rdquo; الذي يرسله المُتَحَقِّق، يقوم المُثبِت بإنشاء &amp;ldquo;تحدي شبه عشوائي&amp;rdquo; ذاتيًا باستخدام تجزئة (Hash) لالتزامه الخاص والمعلومات العامة. بافتراض أن دالة التجزئة التشفيرية (مثل SHA-256 أو Keccak) تعمل كـ &amp;ldquo;أوراكل عشوائي (Random Oracle)&amp;quot;، لا يمكن للمُثبِت التنبؤ بالتحدي أو التلاعب به مسبقًا. وبهذا يمكنه إكمال الإثبات بإرسال رسالة واحدة مع الحفاظ على نفس مستوى أمان الإثبات التفاعلي.&lt;/p>
&lt;hr>
&lt;h2 id="التفاصيل-التقنية-لـ-zk-snarks">التفاصيل التقنية لـ zk-SNARKs
&lt;/h2>&lt;p>حاليًا، يعتبر &lt;strong>zk-SNARKs&lt;/strong> (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) هو الأكثر استخدامًا بين أنواع ZKP. كما يوحي اسمه، يمتلك خاصية المعرفة الصفرية (zk)، حجم إثباته صغير جدًا و التحقق منه سريع (Succinct)، غير تفاعلي (Non-Interactive)، وهو نقاش حول المعرفة (Argument of Knowledge).&lt;/p>
&lt;p>يعتمد zk-SNARKs على الهندسة الجبرية المتقدمة ونظرية التشفير. يقوم بتحويل تنفيذ البرامج أو الحسابات إلى التحقق من معادلات متعددات الحدود المحددة.&lt;/p>
&lt;h3 id="1-الدوائر-الحسابية-والتحويل-إلى-r1cs-rank-1-constraint-system">1. الدوائر الحسابية والتحويل إلى R1CS (Rank-1 Constraint System)
&lt;/h3>&lt;p>أولاً، يتم تحويل أي حساب مراد إثباته (خوارزمية أو منطق عقد ذكي) إلى &lt;strong>دائرة حسابية (Arithmetic Circuit)&lt;/strong> تتكون من بوابات الجمع وبوابات الضرب.&lt;/p>
&lt;p>بعد ذلك، يتم تحويل هذه الدائرة الحسابية إلى مجموعة من معادلات المصفوفات تسمى &lt;strong>R1CS (Rank-1 Constraint System)&lt;/strong>. R1CS هي مسألة إيجاد مصفوفات $A, B, C$ التي تفي بالشرط التالي بالنسبة لمتجه المتغيرات $x$:&lt;/p>
$$ (A \cdot x) \circ (B \cdot x) = C \cdot x $$
&lt;p>هنا، يمثل $\circ$ جداء هادامارد (الضرب عنصر بعنصر). يضمن هذا القيد أن جميع البوابات المنطقية (خاصة بوابات الضرب) في الدائرة قد تم حسابها بشكل صحيح.&lt;/p>
&lt;h3 id="2-التحويل-إلى-qap-quadratic-arithmetic-program">2. التحويل إلى QAP (Quadratic Arithmetic Program)
&lt;/h3>&lt;p>نظرًا لوجود عدد لا يحصى من قيود مصفوفات R1CS، فإن التحقق منها بشكل فردي غير فعال للغاية. لذلك، باستخدام استيفاء لاغرانج (Lagrange interpolation)، يتم ضغط هذه القيود إلى معادلة متعددة حدود واحدة. هذا هو &lt;strong>QAP (Quadratic Arithmetic Program)&lt;/strong>.&lt;/p>
&lt;p>من خلال التحويل إلى QAP، تتلخص المشكلة المراد إثباتها في: &amp;ldquo;هل تقبل متعددة الحدود المعينة $P(x)$ القسمة على متعددة حدود أخرى معروفة $Z(x)$؟&amp;rdquo;.&lt;/p>
$$ P(x) = L(x) \cdot R(x) - O(x) $$
&lt;p>هنا، $L(x), R(x), O(x)$ هي متعددات حدود مجتمعة تتوافق مع كل صف من المصفوفات $A, B, C$ على التوالي. إذا كان المُثبِت يعرف الحل الصحيح (Witness)، فإن القيمة عند كل جذر (نقطة تقييم) لـ $P(x)$ ستكون 0، مما يعني أن $P(x)$ تمتلك متعددة الحدود المستهدفة $Z(x)$ كعامل. أي أنه توجد متعددة حدود $H(x)$ بحيث تتحقق المعادلة التالية:&lt;/p>
$$ P(x) = H(x) \cdot Z(x) $$
&lt;p>يكفي أن يتحقق المُتَحَقِّق مما إذا كانت هذه المعادلة $P(s) = H(s) \cdot Z(s)$ صحيحة عند نقطة سرية عشوائية $s$، وبذلك يمكنه التحقق فورًا من أن الحساب بأكمله قد تم بشكل صحيح. هذا هو سر الـ &amp;ldquo;الإيجاز (Succinctness)&amp;rdquo;.&lt;/p>
&lt;h3 id="3-تشفير-المنحنى-الإهليلجي-والازدواج-bilinear-pairings">3. تشفير المنحنى الإهليلجي والازدواج (Bilinear Pairings)
&lt;/h3>&lt;p>ومع ذلك، إذا كان المُتَحَقِّق يعرف النقطة السرية $s$، فسيكون بإمكان المُثبِت تلفيق متعددة حدود مزيفة وتلبية المعادلة (انهيار السلامة). لذلك، يجب إجراء الحسابات بينما تظل $s$ مشفرة (باستخدام التشفير المتماثل) بحيث لا يعرفها أحد.&lt;/p>
&lt;p>ما يحقق ذلك هو &lt;strong>ازدواج المنحنى الإهليلجي (Bilinear Pairings)&lt;/strong>.
الازدواج $e$ هو دالة خاصة يمكنها، من قيمتين مشفرتين، حساب قيمة تعادل تشفير حاصل ضربهما.&lt;/p>
$$ e(g_1^a, g_2^b) = e(g_1, g_2)^{ab} $$
&lt;p>حتى بدون معرفة $s$ نفسها، يمكن للمُثبِت حساب القيم المشفرة لمتعددات الحدود $P(s)$ و $H(s)$ باستخدام القيم المشفرة لقوى $s$ (والتي تسمى السلسلة المرجعية المشتركة: CRS - Common Reference String). يستخدم المُتَحَقِّق دالة الازدواج للتحقق مما إذا كانت العلاقة $P(s) = H(s) \cdot Z(s)$ قائمة على القيم وهي مشفرة.&lt;/p>
&lt;h3 id="4-الإعداد-الموثوق-trusted-setup">4. الإعداد الموثوق (Trusted Setup)
&lt;/h3>&lt;p>أكبر نقطة ضعف في zk-SNARKs (وخاصة الأنظمة المبكرة مثل Groth16) هي أنها تتطلب عملية لإنشاء النقطة السرية $s$، أو ما يسمى بـ &lt;strong>الإعداد الموثوق (Trusted Setup)&lt;/strong>. إذا احتفظ منشئ النقطة $s$ بقيمتها بدلاً من تدميرها، فسيكون بإمكانه إنشاء أي إثبات مزيف (مشكلة النفايات السامة - Toxic Waste).&lt;/p>
&lt;p>لمنع ذلك، يتم تنفيذ &amp;ldquo;مراسم (Ceremony)&amp;rdquo; باستخدام الحوسبة متعددة الأطراف (MPC). حيث يتعاون العديد من المشاركين لتوفير العشوائية، وإذا قام مشارك واحد على الأقل بتدمير قيمته العشوائية بصدق، فسيتم الحفاظ على أمان النظام بأكمله. ومع ذلك، فقد استمرت الأبحاث لسنوات للتخلص من هذا الاعتماد.&lt;/p>
&lt;hr>
&lt;h2 id="التفاصيل-التقنية-لـ-zk-starks">التفاصيل التقنية لـ zk-STARKs
&lt;/h2>&lt;p>ظهر &lt;strong>zk-STARKs&lt;/strong> (Zero-Knowledge Scalable Transparent Argument of Knowledge) كاستجابة للاعتماد على الإعداد الموثوق ومخاطر فك تشفير المنحنى الإهليلجي بواسطة أجهزة الكمبيوتر الكمومية.&lt;/p>
&lt;p>تم تطوير STARKs بواسطة إيلي بن ساسون (Eli Ben-Sasson) وآخرين. وكما يدل اسم &amp;ldquo;الشفافية (Transparent)&amp;quot;، فإنه لا يتطلب إعدادًا موثوقًا على الإطلاق. وكما يدل اسم &amp;ldquo;القابلية للتوسع (Scalable)&amp;quot;، فإنه يحافظ على كفاءة حجم الإثبات ووقت التحقق حتى مع زيادة حجم الحسابات.&lt;/p>
&lt;h3 id="1-التزامات-متعددات-الحدود-وبروتوكول-fri">1. التزامات متعددات الحدود وبروتوكول FRI
&lt;/h3>&lt;p>لا يعتمد zk-STARKs على تشفير المنحنى الإهليلجي، بل يؤسس أمانه &lt;strong>فقط على دوال التجزئة&lt;/strong>. ولذلك، يمتلك خصائص مقاومة للتشفير ما بعد الكم (Post-Quantum Cryptography).&lt;/p>
&lt;p>يتم التحقق من الحسابات بعد تحويلها إلى تنسيق يسمى AIR (Algebraic Intermediate Representation)، باستخدام خصائص متعددات الحدود أحادية أو متعددة الأبعاد. يكمن جوهر STARKs في بروتوكول &lt;strong>FRI (Fast Reed-Solomon Interactive Oracle Proof of Proximity)&lt;/strong>.&lt;/p>
&lt;p>بروتوكول FRI هو تقنية للتحقق مما &amp;ldquo;إذا كانت دالة معينة قريبة بما فيه الكفاية من متعددة حدود بدرجة معينة (Proximity)&amp;rdquo;. يلتزم المُثبِت بقيم متعددة الحدود كأوراق (Leaves) في شجرة ميركل (Merkle Tree) (وهو ما يعرف بالتزام متعددة الحدود).&lt;/p>
&lt;div class="mermaid">graph TD
Root["جذر ميركل (الالتزام)"] --> Node0["العقدة 0"]
Root --> Node1["العقدة 1"]
Node0 --> Leaf0["P(x_0)"]
Node0 --> Leaf1["P(x_1)"]
Node1 --> Leaf2["P(x_2)"]
Node1 --> Leaf3["P(x_3)"]&lt;/div>
&lt;p>يطلب المُتَحَقِّق الكشف عن عدة نقاط عشوائية، ويستخدم براهين ميركل للتأكد من أنها مضمنة في الالتزام. من خلال تكرار ذلك بشكل متكرر، يُضمن باحتمالية ساحقة أن درجة متعددة الحدود الأصلية منخفضة بالفعل.&lt;/p>
&lt;h3 id="مقارنة-بين-zk-snarks-و-zk-starks">مقارنة بين zk-SNARKs و zk-STARKs
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">الميزة&lt;/th>
&lt;th style="text-align:left">zk-SNARKs&lt;/th>
&lt;th style="text-align:left">zk-STARKs&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>الافتراضات التشفيرية&lt;/strong>&lt;/td>
&lt;td style="text-align:left">المنحنيات الإهليلجية، الازدواج&lt;/td>
&lt;td style="text-align:left">دوال التجزئة المقاومة للتصادم&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>الإعداد الموثوق&lt;/strong>&lt;/td>
&lt;td style="text-align:left">مطلوب (البعض مثل Plonk يعتبر عامًا Universal)&lt;/td>
&lt;td style="text-align:left">غير مطلوب (شفاف Transparent)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>مقاومة الحوسبة الكمومية&lt;/strong>&lt;/td>
&lt;td style="text-align:left">لا يوجد&lt;/td>
&lt;td style="text-align:left">يوجد&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>حجم الإثبات&lt;/strong>&lt;/td>
&lt;td style="text-align:left">صغير جدًا (~200 بايت)&lt;/td>
&lt;td style="text-align:left">كبير نسبيًا (عشرات الكيلوبايتات)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>التكلفة الحسابية لإنشاء الإثبات&lt;/strong>&lt;/td>
&lt;td style="text-align:left">عالية&lt;/td>
&lt;td style="text-align:left">أقل نسبيًا من SNARKs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>تكلفة التحقق (رسوم الغاز)&lt;/strong>&lt;/td>
&lt;td style="text-align:left">منخفضة جدًا (ثابتة)&lt;/td>
&lt;td style="text-align:left">منخفضة (تزداد لوغاريتميًا)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>في السنوات الأخيرة، ظهرت أنواع من SNARKs &amp;ldquo;لا تتطلب إعدادًا موثوقًا، أو تتطلبه مرة واحدة فقط&amp;rdquo; مثل Plonk و Halo2، وبدأت الحدود بين SNARKs و STARKs تتلاشى تدريجيًا، لكن الاختلافات الأساسية في النهج الرياضي تظل مهمة.&lt;/p>
&lt;hr>
&lt;h2 id="أحدث-التطبيقات-لإثبات-المعرفة-الصفرية-في-web3-والأمن">أحدث التطبيقات لإثبات المعرفة الصفرية في Web3 والأمن
&lt;/h2>&lt;p>انتقل ZKP من النظرية إلى التطبيق العملي، وهو الآن يحدث ثورة في طليعة Web3 والأمن السيبراني.&lt;/p>
&lt;h3 id="1-التوسع-الجذري-للإيثريوم-باستخدام-zk-rollups">1. التوسع الجذري للإيثريوم باستخدام ZK-Rollups
&lt;/h3>&lt;p>تواجه شبكات البلوكتشين من الطبقة الأولى (L1) مثل الإيثريوم قيودًا كبيرة في قابلية التوسع (المعضلة الثلاثية) بسبب تركيزها القوي على اللامركزية والأمن. الحل النهائي للطبقة الثانية (L2) لحل هذه المشكلة هو &lt;strong>ZK-Rollups&lt;/strong>.&lt;/p>
&lt;p>في ZK-Rollups، يتم تنفيذ ومعالجة آلاف المعاملات خارج السلسلة (L2)، ويتم إنشاء &amp;ldquo;ZKP واحد (Validity Proof)&amp;rdquo; يثبت أنها قد تم تنفيذها جميعًا بشكل صحيح. يحتاج العقد الذكي على سلسلة L1 فقط للتحقق من هذا الإثبات.&lt;/p>
&lt;div class="mermaid">flowchart LR
Users["المستخدمون (إرسال المعاملات)"] --> Sequencer["المنظم (جمع وتنفيذ المعاملات)"]
Sequencer --> Prover["المُثبِت (إنشاء ZKP)"]
Sequencer --> L1Contract["عقد L1 الذكي (نشر بيانات المعاملات)"]
Prover --> L1Contract["تقديم ZKP (الإثبات)"]
L1Contract --> Verify["التحقق وتحديث الحالة"]&lt;/div>
&lt;p>الميزة الكبرى لـ ZK-Rollups، على عكس Optimistic Rollups (مثل Arbitrum و Optimism)، هي أنها لا تتطلب فترة تحدي (عادة 7 أيام) لإثبات الاحتيال (Fraud Proof). نظرًا لأن الصحة مضمونة تشفيريًا، يكتمل سحب الأموال (النهائية - Finality) إلى L1 في اللحظة التي يتم فيها التحقق من الإثبات. تتنافس حاليًا مشاريع مثل zkSync، Starknet، Scroll، و Polygon zkEVM بشراسة في التطوير، وتحقيق &lt;strong>zkEVM&lt;/strong> المتوافق مع آلة الإيثريوم الافتراضية (EVM) يؤدي إلى نمو سريع في النظام البيئي.&lt;/p>
&lt;h3 id="2-الهوية-المحافظة-على-الخصوصية-zkp-for-identity">2. الهوية المحافظة على الخصوصية (ZKP for Identity)
&lt;/h3>&lt;p>ستتغير أيضًا طريقة التحقق من الهوية الشخصية في العالم الرقمي بشكل جذري بفضل ZKP.
على سبيل المثال، عند الإجابة على سؤال &amp;ldquo;هل عمرك 18 عامًا أو أكثر؟&amp;quot;، تتطلب الأنظمة التقليدية تقديم رخصة قيادة أو جواز سفر، مما يؤدي إلى مشاركة معلومات شخصية غير ضرورية كاسمك وعنوانك مع الطرف الآخر.&lt;/p>
&lt;p>باستخدام ZKP، بناءً على شهادة رقمية (Verifiable Credential) صادرة عن جهة حكومية، يصبح من الممكن &lt;strong>إثبات الحقيقة رياضيًا&lt;/strong> وهي &amp;ldquo;استنادًا إلى تاريخ ميلادي، عمري 18 عامًا أو أكثر في تاريخ اليوم&amp;rdquo; فقط. كل ما يحتاجه المُتَحَقِّق هو التحقق من التوقيع على الشهادة و ZKP، ولا يمكنه معرفة تاريخ ميلادك الفعلي أو هويتك.&lt;/p>
&lt;p>حتى في مشاريع &amp;ldquo;إثبات الإنسانية (Proof of Personhood)&amp;rdquo; مثل Worldcoin، بدلاً من تخزين أو مشاركة بيانات قزحية العين مباشرة، يتم استخدام ZKP لإثبات &amp;ldquo;أنك إنسان فريد&amp;rdquo; فقط.&lt;/p>
&lt;h3 id="3-العقود-الذكية-السرية-والاستخدام-المؤسسي">3. العقود الذكية السرية والاستخدام المؤسسي
&lt;/h3>&lt;p>طالما شكلت خاصية &amp;ldquo;جميع البيانات علنية&amp;rdquo; في شبكات البلوكتشين العامة عائقًا كبيرًا أمام الشركات للتعامل مع المعاملات السرية ومعلومات سلسلة التوريد على البلوكتشين.&lt;/p>
&lt;p>باستخدام تقنية ZKP (مثل الشبكات المتخصصة في الخصوصية مثل Aleo و Aztec)، من الممكن نقش صحة تحديث الحالة فقط على السلسلة العامة مع الحفاظ على تشفير قيم الإدخال والإخراج للمعاملات، وحتى منطق العقد الذكي المنفذ. هذا يتيح منع الاستباق (Front-running / MEV) في التمويل اللامركزي (DeFi)، وبناء شبكات اتحاد سرية (Consortium) بين الشركات مع التمتع بالأمن العالي للسلاسل العامة.&lt;/p>
&lt;hr>
&lt;h2 id="التحديات-المستقبلية-والآفاق-لـ-zkp">التحديات المستقبلية والآفاق لـ ZKP
&lt;/h2>&lt;p>على الرغم من أن ZKP بلا شك تقنية أساسية للجيل القادم، إلا أن هناك بعض التحديات المتبقية.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>تكلفة حساب إنشاء الإثبات وتسريع الأجهزة&lt;/strong>
يتطلب إنشاء ZKP حسابات هائلة لمتعددات الحدود، وتحويل فورييه السريع (FFT)، والضرب القياسي المتعدد (MSM). في الوقت الحاضر، تتقدم الأبحاث بسرعة لتطوير أجهزة مخصصة (FPGA و ASIC) لتسريع إنشاء هذا الإثبات، وهو ما يسمى بـ &lt;strong>تعدين ZKP&lt;/strong> (Prover Network).&lt;/li>
&lt;li>&lt;strong>التقييس وتحسين تجربة المطورين (DX)&lt;/strong>
تنتشر العديد من اللغات المخصصة لكتابة دوائر ZKP مثل Circom، Cairo، Noir، و Leo. سيكون توحيد المعايير لهذه اللغات، ونضوج المترجمات (Compilers) التي تنشئ تلقائيًا دوائر ZKP من لغات موجودة مثل Rust أو C++، هو المفتاح لتبني ZKP من قبل مهندسي البرمجيات العامين.&lt;/li>
&lt;/ol>
&lt;h2 id="خاتمة">خاتمة
&lt;/h2>&lt;p>لقد تطور إثبات المعرفة الصفرية (ZKP) من مجرد &amp;ldquo;تقنية لزيادة سرية العملات المشفرة&amp;rdquo; إلى &amp;ldquo;تقنية متعددة الأغراض تعيد تعريف الثقة (Trust) على الإنترنت بأكمله&amp;rdquo;. الإثباتات الصغيرة المحسوبة في أعماق المعادلات الرياضية ونظرية التشفير، ستوسع من قابلية التوسع في البلوكتشين بشكل لا نهائي، وستكون بمثابة درع قوي لحماية خصوصيتنا.&lt;/p>
&lt;p>نحو تحقيق التبني الجماعي الحقيقي لـ Web3 وبناء جيل قادم من الإنترنت آمن وخاص، سيستمر إثبات المعرفة الصفرية في العمل كأهم قطعة. علينا أن نراقب عن كثب تطور تقنية ZKP في المستقبل.&lt;/p>
&lt;hr>
&lt;p>&lt;em>المراجع والروابط ذات الصلة&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Groth, J. (2016). &amp;ldquo;On the Size of Pairing-based Non-interactive Arguments&amp;rdquo;&lt;/li>
&lt;li>Ben-Sasson, E., et al. (2018). &amp;ldquo;Scalable, transparent, and post-quantum secure computational integrity&amp;rdquo;&lt;/li>
&lt;li>Vitalik Buterin&amp;rsquo;s blog on zk-SNARKs and zk-STARKs&lt;/li>
&lt;/ul></description></item><item><title>فرضية ريمان وتوزيع الأعداد الأولية: علاقة عميقة مع تقنيات التشفير الحديثة</title><link>http://kenji.blog/ar/p/riemann-hypothesis-prime-distribution-cryptography/</link><pubDate>Fri, 11 Sep 2026 16:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/riemann-hypothesis-prime-distribution-cryptography/</guid><description>&lt;img src="http://kenji.blog/p/riemann-hypothesis-prime-distribution-cryptography/img/eyecatch.jpg" alt="Featured image of post فرضية ريمان وتوزيع الأعداد الأولية: علاقة عميقة مع تقنيات التشفير الحديثة" />&lt;h1 id="1-مقدمة-غموض-الأعداد-الأولية-في-الكون-وفرضية-ريمان">1. مقدمة: غموض الأعداد الأولية في الكون وفرضية ريمان
&lt;/h1>&lt;p>&amp;ldquo;الأعداد الأولية (Prime Numbers)&amp;rdquo; هي الأعداد الطبيعية التي لا تقبل القسمة إلا على 1 وعلى نفسها، وتُعرف أيضاً بـ &amp;ldquo;ذرات&amp;rdquo; عالم الرياضيات. تبدو هذه السلسلة من الأعداد 2, 3, 5, 7, 11, 13&amp;hellip; عشوائية وبدون نظام واضح للوهلة الأولى. منذ أن أثبت عالم الرياضيات اليوناني القديم إقليدس أن &amp;ldquo;الأعداد الأولية لا نهائية&amp;rdquo;، حاول عدد لا يحصى من علماء الرياضيات كشف القواعد الخفية وراء تسلسل هذه الأعداد.&lt;/p>
&lt;p>أقرب محاولة لحل لغز الأعداد الأولية كانت &lt;strong>&amp;ldquo;فرضية ريمان (Riemann Hypothesis)&amp;rdquo;&lt;/strong> التي اقترحها عالم الرياضيات الألماني برنارد ريمان (Bernhard Riemann) في عام 1859. تعتبر فرضية ريمان واحدة من أهم المسائل المستعصية في الرياضيات الحديثة، وهي إحدى مسائل جائزة الألفية التي حددها معهد كلاي للرياضيات بجائزة قدرها مليون دولار.&lt;/p>
&lt;p>للوهلة الأولى، قد يبدو لغز التوزيع للأعداد الأولية في الرياضيات البحتة غير ذي صلة بحياتنا اليومية. ومع ذلك، فإن أمن الإنترنت الذي يدعم البنية التحتية للمجتمع الحديث، وخاصة &lt;strong>تقنيات التشفير الحديثة مثل تشفير RSA وتشفير المنحنيات الإهليلجية (ECC)&lt;/strong>، يعتمد بشدة على خصائص الأعداد الأولية الضخمة.&lt;/p>
&lt;p>في هذا المقال، سنقوم برحلة رياضية من توزيع الأعداد الأولية إلى مبرهنة الأعداد الأولية، ودالة زيتا لريمان، وصولاً إلى جوهر فرضية ريمان، وسنتعمق بالتفصيل في كيفية ارتباطها بتقنيات التشفير الحديثة، وماذا سيحدث للعالم إذا تم إثبات فرضية ريمان.&lt;/p>
&lt;hr>
&lt;h1 id="2-مبرهنة-الأعداد-الأولية-وتوزيع-الأعداد-الأولية-اكتشاف-غاوس">2. مبرهنة الأعداد الأولية وتوزيع الأعداد الأولية: اكتشاف غاوس
&lt;/h1>&lt;p>لفهم كيفية توزيع الأعداد الأولية، فكر علماء الرياضيات في &lt;strong>دالة عد الأعداد الأولية (Prime-counting function)&lt;/strong> $\pi(x)$ التي تعبر عن &amp;ldquo;عدد الأعداد الأولية الموجودة أقل من أو تساوي عدداً معيناً $x$&amp;rdquo;.&lt;/p>
&lt;p>على سبيل المثال:&lt;/p>
&lt;ul>
&lt;li>$\pi(10) = 4$ (2, 3, 5, 7)&lt;/li>
&lt;li>$\pi(100) = 25$&lt;/li>
&lt;li>$\pi(1000) = 168$&lt;/li>
&lt;/ul>
&lt;p>اكتشف عالم الرياضيات العبقري كارل فريدريش غاوس (Carl Friedrich Gauss) في سن الخامسة عشرة، بعد حساب جداول ضخمة للأعداد الأولية، أن تكرار ظهور الأعداد الأولية يتناقص بشكل يتناسب عكسياً مع اللوغاريتم الطبيعي $\ln x$. بمعنى آخر، توقع أن احتمال العثور على عدد أولي بالقرب من عدد معين $x$ هو حوالي $\frac{1}{\ln x}$.&lt;/p>
&lt;p>تم التعبير عن هذا باستخدام التكامل في &lt;strong>التكامل اللوغاريتمي (Logarithmic integral)&lt;/strong> $\text{Li}(x)$:&lt;/p>
$$ \text{Li}(x) = \int_{2}^{x} \frac{dt}{\ln t} $$
&lt;p>تم إثبات توقع غاوس لاحقاً وبشكل مستقل من قبل جاك هادامار وشارل جان دو لا فالي بوسان في عام 1896، وتأسست كـ &lt;strong>مبرهنة الأعداد الأولية (Prime Number Theorem, PNT)&lt;/strong>:&lt;/p>
$$ \lim_{x \to \infty} \frac{\pi(x)}{\text{Li}(x)} = 1 $$
&lt;p>أو يمكن التعبير عنها تقريبياً على النحو التالي:&lt;/p>
$$ \pi(x) \sim \frac{x}{\ln x} $$
&lt;p>بفضل هذه المبرهنة، أصبح من الواضح أن الأعداد الأولية، عند النظر إليها على نطاق واسع (ماكروسكوبي)، تمتلك توزيعاً سلساً للغاية ويمكن التنبؤ به. ومع ذلك، عند النظر إليها على نطاق ضيق (ميكروسكوبي)، هناك دائماً &amp;ldquo;خطأ&amp;rdquo; أو &amp;ldquo;تذبذب&amp;rdquo; بين $\pi(x)$ و $\text{Li}(x)$. الهوية الحقيقية لهذا التذبذب هي اللغز الأكبر الذي تحاول فرضية ريمان حله.&lt;/p>
&lt;hr>
&lt;h1 id="3-دالة-زيتا-لريمان-وحاصل-ضرب-أويلر">3. دالة زيتا لريمان وحاصل ضرب أويلر
&lt;/h1>&lt;p>أقوى سلاح في تحليل توزيع الأعداد الأولية هو &lt;strong>دالة زيتا لريمان (Riemann Zeta Function)&lt;/strong>. في الأصل، كانت متسلسلة لانهائية تم تعريفها من قبل ليونهارت أويلر (Leonhard Euler) للأعداد الحقيقية $s > 1$:&lt;/p>
$$ \zeta(s) = \sum_{n=1}^\infty \frac{1}{n^s} = 1 + \frac{1}{2^s} + \frac{1}{3^s} + \frac{1}{4^s} + \dots $$
&lt;p>أحد أعظم إنجازات أويلر هو إثباته أن هذه المتسلسلة اللانهائية يمكن التعبير عنها كحاصل ضرب لانهائي يشمل جميع الأعداد الأولية $p$. هذا هو &lt;strong>حاصل ضرب أويلر (Euler Product Formula)&lt;/strong>:&lt;/p>
$$ \zeta(s) = \prod_{p \text{ prime}} \frac{1}{1 - p^{-s}} = \left( \frac{1}{1 - 2^{-s}} \right) \left( \frac{1}{1 - 3^{-s}} \right) \left( \frac{1}{1 - 5^{-s}} \right) \dots $$
&lt;p>الفهم الحدسي لهذا الإثبات هو أنه إذا قمنا بنشر كل حد في الجانب الأيمن كمتسلسلة هندسية وضربناها معاً، فبفضل المبرهنة الأساسية في الحساب (كل عدد طبيعي يمكن التعبير عنه بشكل فريد كحاصل ضرب أعداد أولية)، يتم إعادة بناء مجموع مقلوبات الأعداد الطبيعية في الجانب الأيسر بالكامل.&lt;/p>
&lt;p>&lt;strong>هذه المعادلة الرياضية الواحدة أصبحت جسراً يربط بين التحليل الرياضي (المتسلسلات اللانهائية والدوال المستمرة) ونظرية الأعداد (الأعداد الأولية والأعداد المنفصلة).&lt;/strong> دراسة دالة زيتا مرادفة لدراسة توزيع الأعداد الأولية.&lt;/p>
&lt;hr>
&lt;h1 id="4-الامتداد-التحليلي-والتوسيع-إلى-المستوى-المركب">4. الامتداد التحليلي والتوسيع إلى المستوى المركب
&lt;/h1>&lt;p>تكمن عبقرية ريمان في أنه وسع المتغير $s$ في الدالة $\zeta(s)$، الذي كان أويلر يعتبره عدداً حقيقياً فقط، ليصبح &lt;strong>عدداً مركباً $s = \sigma + it$ ($\sigma$ هو الجزء الحقيقي و $t$ هو الجزء التخيلي)&lt;/strong>.&lt;/p>
&lt;p>المتسلسلة اللانهائية الأصلية تتقارب فقط عندما يكون $\sigma > 1$، ولكن باستخدام تقنية &amp;ldquo;الامتداد التحليلي (Analytic Continuation)&amp;quot;، وسع ريمان التعريف بحيث أصبح للدالة $\zeta(s)$ معنى في كل المستوى المركب باستثناء القطب عند $s = 1$.&lt;/p>
&lt;p>وعلاوة على ذلك، استنتج معادلة دالية (Functional equation) جميلة تحققها دالة زيتا:&lt;/p>
$$ \zeta(s) = 2^s \pi^{s-1} \sin\left(\frac{\pi s}{2}\right) \Gamma(1-s) \zeta(1-s) $$
&lt;p>حيث $\Gamma(x)$ هي دالة غاما. من خلال هذه المعادلة، يمكننا معرفة خصائص النصف الأيسر من المستوى بناءً على خصائص النصف الأيمن.&lt;/p>
&lt;h3 id="الأصفار-zeros-of-the-zeta-function">الأصفار (Zeros of the Zeta Function)
&lt;/h3>&lt;p>تُسمى الأعداد المركبة $s$ التي تجعل قيمة دالة زيتا تساوي 0 بـ &amp;ldquo;الأصفار&amp;rdquo;.
من المعادلة الدالية، عندما يكون $s$ عدداً زوجياً سالباً ($-2, -4, -6, \dots$)، تصبح $\sin(\pi s / 2)$ صفراً، وبالتالي تكون $\zeta(s) = 0$. وتُعرف هذه بـ &lt;strong>الأصفار البديهية (Trivial zeros)&lt;/strong>.&lt;/p>
&lt;p>ومع ذلك، ما يهم في توزيع الأعداد الأولية هي الأصفار الأخرى، وتحديداً &lt;strong>الأصفار غير البديهية (Non-trivial zeros)&lt;/strong> التي تقع في &amp;ldquo;الشريط الحرج (Critical strip)&amp;rdquo; حيث $0 \le \sigma \le 1$.&lt;/p>
&lt;hr>
&lt;h1 id="5-جوهر-فرضية-ريمان-والصيغة-الصريحة">5. جوهر فرضية ريمان والصيغة الصريحة
&lt;/h1>&lt;p>حسب ريمان عدداً قليلاً من الأصفار وطرح فرضية مذهلة. هذه هي &lt;strong>فرضية ريمان&lt;/strong>.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>فرضية ريمان (Riemann Hypothesis)&lt;/strong>
جميع الأصفار غير البديهية لدالة زيتا لريمان $\zeta(s)$ تقع على خط مستقيم جزؤه الحقيقي يساوي $1/2$ (أي $\text{Re}(s) = 1/2$).&lt;/p>
&lt;/blockquote>
&lt;p>يسمى هذا الخط الذي يكون فيه الجزء الحقيقي 1/2 بـ &amp;ldquo;الخط الحرج (Critical line)&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">graph TD
A["دالة زيتا لريمان ζ(s)"] --> B["التوسيع إلى المستوى المركب بواسطة الامتداد التحليلي"]
B --> C["الأصفار البديهية (s = -2, -4, -6 ...)"]
B --> D["الأصفار غير البديهية (0 &lt;= Re(s) &lt;= 1)"]
D --> E["فرضية ريمان"]
E --> F["جميع الأصفار غير البديهية تقع على Re(s) = 1/2"]
F --> G["تؤدي إلى إثبات نهاية مصطلح الخطأ في توزيع الأعداد الأولية"]&lt;/div>
&lt;p>لماذا تعتبر فرضية ريمان على هذا القدر من الأهمية؟ لأن أصفار دالة زيتا تحدد &lt;strong>بالكامل&lt;/strong> توزيع الأعداد الأولية.&lt;/p>
&lt;p>استنتج ريمان ولاحقاً عالم الرياضيات فون مانجولدت &amp;ldquo;الصيغة الصريحة (Explicit formula)&amp;rdquo; التي تصف توزيع الأعداد الأولية بدقة. باستخدام دالة تشيبيشيف $\psi(x)$، يمكن التعبير عنها كما يلي:&lt;/p>
$$ \psi(x) = x - \sum_{\rho} \frac{x^\rho}{\rho} - \ln(2\pi) - \frac{1}{2}\ln(1 - x^{-2}) $$
&lt;p>حيث $\rho$ يمثل المجموع عبر جميع الأصفار غير البديهية لدالة زيتا.
المصطلح الرئيسي هو $x$ (والذي يتوافق مع مبرهنة الأعداد الأولية)، ومن خلال إضافة أو طرح المصطلحات الشبيهة بالتموجات التي تعتمد على الأصفار $\rho$، يتم إعادة بناء التوزيع الدقيق المتدرج للأعداد الأولية. يمكن القول إن الأصفار غير البديهية تمثل &amp;ldquo;ترددات (موجات)&amp;rdquo; توزيع الأعداد الأولية.&lt;/p>
&lt;p>إذا كانت فرضية ريمان صحيحة، وكان الجزء الحقيقي لجميع الأصفار غير البديهية $\rho$ هو بالضبط $1/2$، فإن مصطلح الخطأ في مبرهنة الأعداد الأولية سيندرج ضمن أصغر نطاق يمكن تصوره نظرياً.&lt;/p>
$$ |\pi(x) - \text{Li}(x)| \le \frac{1}{8\pi} \sqrt{x} \ln x \quad \text{for} \quad x \ge 2657 $$
&lt;p>بعبارة أخرى، &lt;strong>إذا كانت فرضية ريمان صحيحة، فسيثبت ذلك أن الأعداد الأولية موزعة بأكثر الطرق &amp;ldquo;انتظاماً وجمالاً&amp;rdquo; التي يمكننا تخيلها&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h1 id="6-العلاقة-التي-لا-تنفصل-بين-تقنيات-التشفير-الحديثة-والأعداد-الأولية">6. العلاقة التي لا تنفصل بين تقنيات التشفير الحديثة والأعداد الأولية
&lt;/h1>&lt;p>حتى هذه النقطة كنا في عالم الرياضيات البحتة العميق، ولكن هذه الخصائص للأعداد الأولية تدعم من الأساس مجتمعنا الرقمي الحديث. والمثال الأبرز على ذلك هو تشفير المفتاح العام مثل &lt;strong>تشفير RSA&lt;/strong>.&lt;/p>
&lt;p>تعتمد أمان كافة الاتصالات مثل مدفوعات بطاقات الائتمان على الإنترنت، وإرسال كلمات المرور، والتوقيعات الإلكترونية لتقنية البلوك تشين على &amp;ldquo;الأعداد الأولية&amp;rdquo;.&lt;/p>
&lt;h3 id="كيفية-عمل-تشفير-rsa">كيفية عمل تشفير RSA
&lt;/h3>&lt;p>يعتمد أمان تشفير RSA على الحقيقة الرياضية القائلة بأن &amp;ldquo;تحليل رقم مركب كبير جداً إلى عوامله الأولية يمثل صعوبة بالغة&amp;rdquo; (مسألة التحليل إلى العوامل الأولية).&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>توليد المفاتيح&lt;/strong>:
يتم اختيار عددين أوليين ضخمين بشكل عشوائي $p$ و $q$ (مثلاً 2048 بت لكل منهما).
يتم ضربهما معاً لحساب $N = p \times q$. هذا الـ $N$ يصبح جزءاً من المفتاح العام.
باستخدام دالة مؤشر أويلر $\phi(N) = (p-1)(q-1)$، يتم توليد المفتاح الخاص $d$.&lt;/p>
$$ e \times d \equiv 1 \pmod{\phi(N)} $$
&lt;/li>
&lt;li>
&lt;p>&lt;strong>التشفير وفك التشفير&lt;/strong>:
يتم تحويل النص الواضح $M$ إلى نص مشفر $C$ باستخدام المفتاح العام $e, N$.
&lt;/p>
$$ C \equiv M^e \pmod{N} $$
&lt;p>
فقط من يمتلك المفتاح الخاص $d$ يمكنه فك التشفير.
&lt;/p>
$$ M \equiv C^d \pmod{N} $$
&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["النص الواضح (Plaintext)"] --> B["التشفير بالمفتاح العام (e, N)"]
B --> C["النص المشفر (Ciphertext)"]
C --> D["فك التشفير بالمفتاح الخاص (d)"]
D --> E["النص الواضح الأصلي"]
F["المهاجم (Attacker)"] -- "محاولة تحليل N إلى عوامله الأولية" --> C
F -.-> G["بدون معرفة p و q، لا يمكن حساب d"]&lt;/div>
&lt;p>لكسر تشفير RSA، من الضروري إيجاد الأعداد الأولية الأصلية $p$ و $q$ (التحليل إلى عوامل) انطلاقاً من العدد الضخم $N$. حتى باستخدام الخوارزميات السائدة حالياً (مثل منخل حقل الأعداد العام: GNFS)، فإن تحليل عدد يتكون من مئات الأرقام قد يستغرق وقتاً يتجاوز بكثير عمر الكون، حتى باستخدام أجهزة الكمبيوتر الفائقة.&lt;/p>
&lt;hr>
&lt;h1 id="7-تأثير-فرضية-ريمان-على-تقنيات-التشفير">7. تأثير فرضية ريمان على تقنيات التشفير
&lt;/h1>&lt;p>إذن، كيف تتقاطع &amp;ldquo;فرضية ريمان&amp;rdquo; الموجودة في قمة الرياضيات البحتة مع &amp;ldquo;تقنيات التشفير&amp;rdquo;؟&lt;/p>
&lt;h3 id="71-خوارزميات-توليد-الأعداد-الأولية-اختبار-الأولية-وفرضية-ريمان-المعممة-grh">7.1. خوارزميات توليد الأعداد الأولية (اختبار الأولية) وفرضية ريمان المعممة (GRH)
&lt;/h3>&lt;p>لتشغيل تشفير RSA، يجب أولاً توليد أعداد أولية ضخمة $p$ و $q$. ومع ذلك، فإن التحديد السريع والمؤكد لـ &amp;ldquo;ما إذا كان عدد ما أولياً أم لا&amp;rdquo; ليس أمراً سهلاً.&lt;/p>
&lt;p>حالياً، تستخدم الخوارزمية الاحتمالية المعروفة بـ &lt;strong>اختبار ميلر-رابين لأولية عدد (Miller-Rabin primality test)&lt;/strong> بشكل عملي. هذه الخوارزمية سريعة جداً، ولكنها تحمل خطراً ضئيلاً جداً لحدوث &amp;ldquo;أعداد شبه أولية&amp;rdquo;، حيث يتم تحديد عدد مركب بشكل خاطئ على أنه عدد أولي.&lt;/p>
&lt;p>ومع ذلك، إذا افترضنا أن &lt;strong>&amp;ldquo;فرضية ريمان المعممة (Generalized Riemann Hypothesis, GRH)&amp;rdquo;&lt;/strong>، التي توسع فرضية ريمان إلى دوال L لدركليه، صحيحة، فإن القصة تتغير بشكل جذري.
إذا كانت GRH صحيحة، فإن الحد الأقصى لعدد الاختبارات في خوارزمية ميلر-رابين يصبح مضموناً رياضياً، وترتقي من خوارزمية احتمالية إلى &lt;strong>&amp;ldquo;خوارزمية حتمية ذات وقت كثير الحدود&amp;rdquo;&lt;/strong> (كانت هذه حقيقة مهمة معروفة قبل اكتشاف اختبار AKS للأولية).&lt;/p>
&lt;p>بمعنى آخر، تلعب فرضية ريمان (وتعميماتها) دوراً في إعطاء ضمانات مباشرة وقاطعة لتوليد الأعداد الأولية الضخمة بسرعة وموثوقية مطلقة، وهو ما يمثل الأساس لتوليد التشفير.&lt;/p>
&lt;h3 id="72-العلاقة-بخوارزميات-التحليل-إلى-العوامل">7.2. العلاقة بخوارزميات التحليل إلى العوامل
&lt;/h3>&lt;p>تعتبر معرفة توزيع الأعداد الأولية أمراً حتمياً عند تقييم التعقيد الحسابي للخوارزميات المستخدمة لفك التشفير (مثل منخل حقل الأعداد العام). تعتمد العديد من خوارزميات التحليل إلى عوامل على توزيع &amp;ldquo;الأعداد السلسة (Smooth numbers: الأعداد التي تحتوي فقط على عوامل أولية صغيرة)&amp;rdquo;.&lt;/p>
&lt;p>لتقييم مدى تكرار ظهور الأعداد السلسة بدقة، يلزم وجود فهم عميق لتوزيع الأعداد الأولية، وهنا أيضاً يتم استخدام تقنيات نظرية الأعداد التحليلية المرتبطة مباشرة بدالة زيتا وفرضية ريمان. إذا تم إثبات فرضية ريمان وتم تحديد خطأ توزيع الأعداد الأولية بالكامل، فسيصبح من الممكن تحديد حدود الأداء لخوارزميات التحليل إلى عوامل بشكل أكثر دقة.&lt;/p>
&lt;hr>
&lt;h1 id="8-إذا-تم-إثبات-فرضية-ريمان-هل-سيتم-كسر-التشفير">8. إذا تم إثبات فرضية ريمان، هل سيتم كسر التشفير؟
&lt;/h1>&lt;p>غالباً ما يُقال كنوع من الأساطير الحضرية: &amp;ldquo;إذا حُلت فرضية ريمان، سينهار تشفير RSA في لحظة&amp;rdquo;، ولكن &lt;strong>هذا غير دقيق رياضياً&lt;/strong>.&lt;/p>
&lt;p>إثبات فرضية ريمان بحد ذاته لا يخلق فوراً خوارزمية سحرية تسرع بشكل كبير من التحليل إلى عوامل أولية. فرضية ريمان هي مجرد نظرية حول &amp;ldquo;الانتظام الماكروسكوبي لتوزيع&amp;rdquo; الأعداد الأولية، ولا تخبرنا مباشرة (كخاصية محلية) عن الأعداد الأولية التي تقسم عدداً معيناً $N$.&lt;/p>
&lt;p>ومع ذلك، فإن التأثير ليس صفراً.
لأنه في عملية إثبات فرضية ريمان، هناك احتمال كبير جداً لاكتشاف &lt;strong>&amp;ldquo;أدوات رياضية جديدة&amp;rdquo; أو &amp;ldquo;أساليب تحليل غير معروفة&amp;rdquo;&lt;/strong>. بالنظر إلى التاريخ، عندما تم إثبات مبرهنة فيرما الأخيرة أو حدسية بوانكاريه، فإن النظريات الجديدة التي طُورت خلال تلك العملية دفعت الرياضيات بأكملها إلى قفزات هائلة.&lt;/p>
&lt;p>إذا تم تأسيس طرق هندسية جبرية غير معروفة أو أساليب هندسية غير تبادلية قادرة على التحكم الكامل في خصائص أصفار دالة زيتا لريمان، فلا يمكن إنكار احتمال أن يؤدي ذلك كنتيجة إلى اكتشاف خوارزميات ثورية للتحليل إلى العوامل (على سبيل المثال، خوارزمية كلاسيكية تقلل وقت الحساب إلى وقت كثير الحدود). بهذا المعنى، لا يمكن لعلماء التشفير أن يغضوا الطرف أبداً عن تطورات فرضية ريمان.&lt;/p>
&lt;h3 id="الحواسيب-الكمومية-وخوارزمية-شور">الحواسيب الكمومية وخوارزمية شور
&lt;/h3>&lt;p>التهديد الأكثر مباشرة وواقعية لتقنيات التشفير ليس إثبات فرضية ريمان، بل &lt;strong>الحواسيب الكمومية&lt;/strong>. &amp;ldquo;خوارزمية شور&amp;rdquo; التي نشرها بيتر شور (Peter Shor) في عام 1994، أثبتت أنه بوجود حاسوب كمي ذو أداء كافٍ، يمكن حل التحليل إلى العوامل في وقت كثير الحدود. هذا يعني أن تشفير RSA وتشفير المنحنيات الإهليلجية سيتم كسرهما بشكل جذري.&lt;/p>
&lt;p>حالياً، يجري التحول عالمياً نحو &amp;ldquo;تشفير ما بعد الكوانتم (Post-Quantum Cryptography, PQC)&amp;rdquo; الذي لا يمكن فك تشفيره حتى بواسطة الحواسيب الكمومية (مثل التشفير القائم على الشبكات). ربما يقترب العصر الذهبي لتقنيات التشفير المعتمدة على الأعداد الأولية من نهايته بطريقة ما، لكن القيمة الرياضية للأعداد الأولية بحد ذاتها لن تضيع أبداً.&lt;/p>
&lt;hr>
&lt;h1 id="9-الخاتمة-تقاطع-التجريد-الرياضي-مع-المجتمع-الواقعي">9. الخاتمة: تقاطع التجريد الرياضي مع المجتمع الواقعي
&lt;/h1>&lt;div class="mermaid">graph TD
A["استكشاف الرياضيات البحتة"] --> B["توضيح فرضية ريمان"]
B --> C["فهم كامل لتوزيع الأعداد الأولية"]
C --> D["تطور هائل في نظرية الأعداد والهندسة الجبرية"]
D -.-> E["إمكانية خوارزميات جديدة للتحليل إلى العوامل"]
E -.-> F["تحديث تقييم أمان تقنيات التشفير"]
A --> G["الرياضيات التطبيقية وعلوم الكمبيوتر"]
G --> H["تحسين كفاءة اختبار الأولية وتوليد التشفير"]
H --> F&lt;/div>
&lt;p>الاستكشاف اللانهائي للأعداد الأولية، والذي استمر منذ اليونان القديمة، ارتقى بفضل العبقري ريمان ليصبح سيمفونية جميلة على المستوى المركب (أصفار دالة زيتا). ومن المثير للدهشة أن هذه البلورة الرياضية النقية، بعد مرور قرون، تُستخدم كأقوى درع لضمان أمن مجتمع الإنترنت.&lt;/p>
&lt;p>فرضية ريمان هي رمز يجسد في وقت واحد &amp;ldquo;الجمال التجريدي&amp;rdquo; للرياضيات و &amp;ldquo;القدرة المذهلة على التطبيق في العالم المادي والمجتمع الواقعي&amp;rdquo;.&lt;/p>
&lt;p>عندما يتم قهر هذا الجبل الرياضي الضخم الذي لم يصل إلى قمته أحد بعد، سنفهم تماماً الحقيقة الكونية المتمثلة في الأعداد الأولية، وسنمتلك منظوراً جديداً لبنية مجتمع المعلومات. إن دراسة تقنيات التشفير هي، في حد ذاتها، رحلة لتتبع تاريخ حكمة البشرية.&lt;/p></description></item><item><title>تاريخ تقنية التشفير: من تشفير قيصر إلى التشفير المقاوم للكم (PQC)</title><link>http://kenji.blog/ar/p/history-of-cryptography-caesar-to-pqc/</link><pubDate>Fri, 11 Sep 2026 15:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/history-of-cryptography-caesar-to-pqc/</guid><description>&lt;img src="http://kenji.blog/p/history-of-cryptography-caesar-to-pqc/img/eyecatch.jpg" alt="Featured image of post تاريخ تقنية التشفير: من تشفير قيصر إلى التشفير المقاوم للكم (PQC)" />&lt;h1 id="1-مقدمة-ما-هي-تقنية-التشفير">1. مقدمة: ما هي تقنية التشفير؟
&lt;/h1>&lt;p>تقنية التشفير (Cryptography) هي تقنية للحفاظ على سرية المعلومات، وقد تطورت مع تاريخ البشرية. من نقل الأوامر السرية في الحروب القديمة إلى حماية معلومات بطاقات الائتمان في الإنترنت الحديث، كان الغرض من التشفير ثابتًا. وهو &amp;ldquo;ضمان أن المتلقي المقصود فقط يمكنه فهم المعلومات، ولا يمكن لأي طرف ثالث فك تشفيرها&amp;rdquo;.&lt;/p>
&lt;p>في أمن المعلومات الحديث، لا تقتصر تقنية التشفير على مجرد &amp;ldquo;سرية المعلومات (Confidentiality)&amp;quot;، بل تلعب أيضًا أدوارًا مهمة مثل &amp;ldquo;سلامة البيانات (Integrity)&amp;quot;، &amp;ldquo;المصادقة (Authentication)&amp;quot;، و&amp;quot;عدم التنصل (Non-repudiation)&amp;rdquo;.&lt;/p>
&lt;p>في هذا المقال، سنستعرض بالتفصيل تاريخ تطور تقنية التشفير من منظور تقني ورياضي، بدءًا من تشفير الاستبدال البسيط في العصور القديمة، مرورًا بالتشفير الميكانيكي، وتشفير المفتاح المشترك والمفتاح العام الحديث، وصولًا إلى عصر &amp;ldquo;التشفير المقاوم للكم (PQC)&amp;rdquo; الذي سيحل مع الاستخدام العملي للحواسيب الكمومية.&lt;/p>
&lt;hr>
&lt;h1 id="2-عصر-التشفير-الكلاسيكي-استبدال-الحروف-وإعادة-ترتيبها">2. عصر التشفير الكلاسيكي: استبدال الحروف وإعادة ترتيبها
&lt;/h1>&lt;p>يعود أصل التشفير إلى ما قبل الميلاد. كان التشفير المبكر يتكون بشكل رئيسي من نهجين: &amp;ldquo;التبديل (القلب)&amp;rdquo; و&amp;quot;الاستبدال&amp;rdquo;.&lt;/p>
&lt;h2 id="تشفير-سكيوتال-تشفير-التبديل">تشفير سكيوتال (تشفير التبديل)
&lt;/h2>&lt;p>يُعد &amp;ldquo;سكيوتال (Scytale)&amp;quot;، الذي استُخدم في إسبرطة باليونان القديمة في القرن الخامس قبل الميلاد، أحد أقدم أدوات التشفير. يتم لف شريط طويل من الرق على عصا خشبية ذات سمك معين، وتُكتب الرسالة عليها أفقيًا. عند فك الشريط، تظهر الحروف بترتيب غير مفهوم، ولكن يمكن للمستلم الذي يمتلك عصا بنفس السمك قراءة الرسالة الأصلية بلف الشريط عليها مرة أخرى.&lt;/p>
&lt;h2 id="تشفير-قيصر-تشفير-الاستبدال-الأحادي">تشفير قيصر (تشفير الاستبدال الأحادي)
&lt;/h2>&lt;p>في القرن الأول قبل الميلاد، يُقال إن البطل الروماني القديم يوليوس قيصر استخدم &amp;ldquo;تشفير قيصر&amp;rdquo;. هذا التشفير هو تشفير استبدال أحادي (Monoalphabetic substitution) يزيح الأبجدية بعدد ثابت (عادة 3 أحرف).&lt;/p>
&lt;p>رياضيًا، إذا تعاملنا مع الحروف كأرقام من $0$ إلى $25$، وكان عدد الإزاحة هو $K$، فإن التحويل من النص العادي $P$ إلى النص المشفر $C$ يتم التعبير عنه بمعادلة التطابق التالية.&lt;/p>
$$C \equiv P + K \pmod{26}$$
&lt;p>ولفك التشفير يتم إجراء العملية العكسية.&lt;/p>
$$P \equiv C - K \pmod{26}$$
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># مثال لتنفيذ بسيط لتشفير قيصر بلغة بايثون&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;encrypt&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">mode&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;decrypt&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">shift&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">shift&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isalpha&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isupper&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;a&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># حساب الإزاحة&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nb">chr&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">base&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">26&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">char&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># مثال على التنفيذ&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plaintext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;HELLO WORLD&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plaintext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;encrypt&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;النص المشفر: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># KHOOR ZRUOG&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="تحليل-التكرار-وتشفير-فيجينير">تحليل التكرار وتشفير فيجينير
&lt;/h2>&lt;p>أصبح فك تشفير الاستبدال الأحادي سهلاً بفضل &amp;ldquo;تحليل التكرار (Frequency Analysis)&amp;rdquo; الذي ابتكره العالم العربي الكندي في القرن التاسع. وهو يستغل الخصائص الإحصائية للغة، مثل كثرة ظهور حرفي &amp;ldquo;E&amp;rdquo; و &amp;ldquo;T&amp;rdquo; في اللغة الإنجليزية.&lt;/p>
&lt;p>ولمواجهة ذلك، تم ابتكار &amp;ldquo;تشفير فيجينير (Vigenère cipher)&amp;rdquo; في القرن السادس عشر. وهو تشفير استبدال متعدد (Polyalphabetic substitution) يستخدم عدة إزاحات (مفاتيح) بالتبادل دوريًا، وظل يُعرف باسم &amp;ldquo;التشفير غير القابل للكسر (Le Chiffre Indéchiffrable)&amp;rdquo; لنحو 300 عام.&lt;/p>
&lt;p>رياضيًا، يتم تشفير الحرف رقم $i$ من النص العادي $P_i$ والحرف رقم $i$ من المفتاح المتكرر $K_i$ على النحو التالي.&lt;/p>
$$C_i \equiv P_i + K_i \pmod{26}$$
&lt;p>تم فك هذا التشفير أيضًا في القرن التاسع عشر على يد تشارلز بابيج وفريدريش كاسيسكي، اللذين اكتشفا &amp;ldquo;اختبار كاسيسكي (Kasiski examination)&amp;rdquo; لتحديد طول المفتاح من الأنماط المتكررة في النص المشفر.&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "تصنيف التشفير الكلاسيكي"
A["التشفير الكلاسيكي"] --> B["تشفير التبديل"]
A --> C["تشفير الاستبدال"]
B --> D["تشفير سكيوتال"]
C --> E["الاستبدال الأحادي"]
C --> F["الاستبدال المتعدد"]
E --> G["تشفير قيصر"]
F --> H["تشفير فيجينير"]
end&lt;/div>
&lt;hr>
&lt;h1 id="3-التشفير-الميكانيكي-والحروب-العالمية-إنجما-وفك-تشفيرها">3. التشفير الميكانيكي والحروب العالمية: إنجما وفك تشفيرها
&lt;/h1>&lt;p>مع دخول القرن العشرين، انتقلت وسائل الاتصال من الرسائل إلى التلغراف والراديو، مما تطلب سرعة وتعقيدًا أكبر في التشفير. وهنا ظهر &amp;ldquo;التشفير الميكانيكي&amp;rdquo; الذي يجمع بين الدوارات (العجلات الدوارة).&lt;/p>
&lt;h2 id="تهديد-إنجما-enigma">تهديد إنجما (Enigma)
&lt;/h2>&lt;p>خلال الحرب العالمية الثانية، استخدمت ألمانيا النازية &amp;ldquo;إنجما&amp;rdquo;، وهي أشهر آلة تشفير في تاريخ تقنية التشفير. كانت إنجما تتكون من عدة دوارات (عادة من 3 إلى 4)، ولوحة قوابس (Steckerbrett) لتبديل أسلاك الحروف، وعاكس (دوار عكسي).&lt;/p>
&lt;p>في كل مرة يتم فيها كتابة حرف على لوحة المفاتيح، يدور الدوار، بحيث يتم إخراج حرف مشفر مختلف حتى لو تم كتابة نفس الحرف بشكل متتالي (ذروة التشفير المتعدد). بلغ حجم مساحة المفاتيح (مجموعات الإعدادات) حوالي $1.58 \times 10^{19}$ احتمالًا (حوالي 15.8 كوينتيليون)، وكان يُعتبر من المستحيل فك تشفيرها باستخدام القوة الغاشمة بالتكنولوجيا المتوفرة في ذلك الوقت.&lt;/p>
&lt;h2 id="آلان-تورينج-وبومب-bombe">آلان تورينج و&amp;quot;بومب (Bombe)&amp;rdquo;
&lt;/h2>&lt;p>تصدى لهذا التشفير المنيع لإنجما فريق فك التشفير في حديقة بلتشلي في بريطانيا، بناءً على النتائج الأولية لعالم الرياضيات البولندي ماريان رييفسكي وآخرين.&lt;/p>
&lt;p>على وجه الخصوص، استخدم آلان تورينج (Alan Turing) تخمين النصوص العادية المقابلة لأجزاء من النص المشفر (Crib)، وطور آلة فك تشفير كهروميكانيكية تسمى &amp;ldquo;بومب (Bombe)&amp;rdquo;. تمكنت بومب من اكتشاف التناقضات المنطقية بسرعة عالية واستبعاد إعدادات الدوارات المستحيلة واحدة تلو الأخرى، مما أدى إلى نجاح فك تشفير إنجما. يُقال إن هذا الإنجاز العظيم عجّل بانتصار الحلفاء بعدة سنوات.&lt;/p>
&lt;hr>
&lt;h1 id="4-فجر-التشفير-الحديث-تشفير-المفتاح-المشترك-des-و-aes">4. فجر التشفير الحديث: تشفير المفتاح المشترك (DES و AES)
&lt;/h1>&lt;p>بعد الحرب، ومع ظهور أجهزة الكمبيوتر، شهد التشفير تحولاً جذرياً من معالجة &amp;ldquo;الحروف&amp;rdquo; إلى معالجة &amp;ldquo;البتات (0 و 1)&amp;rdquo;.&lt;/p>
&lt;h2 id="كلود-شانون-ونظرية-المعلومات">كلود شانون ونظرية المعلومات
&lt;/h2>&lt;p>في عام 1949، نشر كلود شانون ورقة بحثية بعنوان &amp;ldquo;نظرية الاتصال في الأنظمة السرية&amp;rdquo;، مرسيًا الأساس الرياضي للتشفير الحديث. واقترح &amp;ldquo;الارتباك (Confusion)&amp;rdquo; و&amp;quot;الانتشار (Diffusion)&amp;rdquo; كمبادئ لتصميم تشفير آمن.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>الارتباك (Confusion)&lt;/strong>: جعل العلاقة بين المفتاح والنص المشفر معقدة قدر الإمكان. (يتحقق عن طريق الاستبدال وصناديق S)&lt;/li>
&lt;li>&lt;strong>الانتشار (Diffusion)&lt;/strong>: التأكد من أن تغيير بت واحد من النص العادي يؤثر على العديد من بتات النص المشفر. (يتحقق عن طريق التبديل وإعادة الترتيب)&lt;/li>
&lt;/ul>
&lt;h2 id="des-data-encryption-standard">DES (Data Encryption Standard)
&lt;/h2>&lt;p>في عام 1977، وضع المعهد الوطني للمعايير والتكنولوجيا في الولايات المتحدة (NIST، وكان يسمى آنذاك NBS) &amp;ldquo;DES&amp;rdquo; كمعيار للتشفير بناءً على تصميم شركة IBM.
يتبنى DES بنية تسمى &amp;ldquo;شبكة فيستل (Feistel Network)&amp;quot;، ويبلغ طول كتلته 64 بت وطول المفتاح 56 بت. كان يتمتع بميزة تنفيذية تتمثل في أن خوارزميات التشفير وفك التشفير لها نفس البنية تقريبًا.&lt;/p>
&lt;p>ومع ذلك، مع تحسن القوة الحسابية لأجهزة الكمبيوتر، أصبح من الواضح أن طول المفتاح البالغ 56 بت (حوالي $7.2 \times 10^{16}$ احتمالًا) غير كافٍ. في عام 1998، طورت مؤسسة الحدود الإلكترونية (EFF) جهازًا مخصصًا يسمى &amp;ldquo;Deep Crack&amp;rdquo; وتمكنت من فك تشفير DES في غضون أيام قليلة.&lt;/p>
&lt;h2 id="aes-advanced-encryption-standard">AES (Advanced Encryption Standard)
&lt;/h2>&lt;p>كمعيار جديد يحل محل DES، تم اعتماد &amp;ldquo;AES&amp;rdquo; في عام 2001. تم اختيار خوارزمية &amp;ldquo;رايندال (Rijndael)&amp;rdquo; التي صممها علماء تشفير بلجيكيون من خلال دعوة عامة.&lt;/p>
&lt;p>يتبنى AES بنية &amp;ldquo;SPN (Substitution-Permutation Network)&amp;rdquo; بدلاً من بنية فيستل، ويستخدم العمليات الرياضية على مجال جالوا (المجال المحدود) $GF(2^8)$. يمكن اختيار طول المفتاح من 128 و 192 و 256 بت، ولا يزال يُستخدم على نطاق واسع كمعيار لتشفير المفتاح المشترك في جميع أنحاء العالم.&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "معالجة الجولة الواحدة في AES (بنية SPN)"
A["حالة الإدخال (128-بت)"] --> B("SubBytes (استبدال البايت / S-Box)")
B --> C("ShiftRows (إزاحة الصفوف)")
C --> D("MixColumns (خلط الأعمدة / الضرب في GF(2^8))")
D --> E("AddRoundKey (XOR مع مفتاح الجولة)")
E --> F["إلى الجولة التالية"]
end&lt;/div>
&lt;hr>
&lt;h1 id="5-ثورة-تشفير-المفتاح-العام-من-ديفي-هيلمان-إلى-rsa">5. ثورة تشفير المفتاح العام: من ديفي-هيلمان إلى RSA
&lt;/h1>&lt;p>كان لتشفير المفتاح المشترك نقطة ضعف قاتلة. وهي &amp;ldquo;مشكلة توزيع المفاتيح (Key Distribution Problem)&amp;rdquo;. المشكلة هي كيفية مشاركة &amp;ldquo;المفتاح المشترك&amp;rdquo; بشكل آمن مع طرف بعيد قبل بدء الاتصال المشفر. تم حل هذه المشكلة بواسطة &amp;ldquo;تشفير المفتاح العام&amp;rdquo; الذي ظهر في السبعينيات.&lt;/p>
&lt;h2 id="تبادل-مفاتيح-ديفي-هيلمان">تبادل مفاتيح ديفي-هيلمان
&lt;/h2>&lt;p>في عام 1976، نشر ويتفيلد ديفي ومارتن هيلمان ورقة بحثية رائدة بعنوان &amp;ldquo;اتجاهات جديدة في التشفير&amp;rdquo;. لقد اقترحا طريقة لمشاركة المفاتيح بشكل آمن حتى على قنوات الاتصال التي يتم التنصت عليها، مستغلين الصعوبة الرياضية لـ &amp;ldquo;مشكلة اللوغاريتم المتقطع (Discrete Logarithm Problem)&amp;rdquo;.&lt;/p>
&lt;ol>
&lt;li>يتم نشر عدد أولي كبير $p$ ومولد $g$.&lt;/li>
&lt;li>تختار أليس قيمة سرية $a$ وترسل $A = g^a \pmod{p}$ إلى بوب.&lt;/li>
&lt;li>يختار بوب قيمة سرية $b$ ويرسل $B = g^b \pmod{p}$ إلى أليس.&lt;/li>
&lt;li>تحسب أليس $K = B^a \pmod{p}$ ، ويحسب بوب $K = A^b \pmod{p}$.&lt;/li>
&lt;li>وفقًا لقوانين الأسس، يصبح $K = (g^b)^a = (g^a)^b = g^{ab} \pmod{p}$، وبذلك ينجحان في مشاركة نفس المفتاح $K$.&lt;/li>
&lt;/ol>
&lt;h2 id="تشفير-rsa">تشفير RSA
&lt;/h2>&lt;p>في العام التالي، 1977، ابتكر رون ريفست وعادي شامير وليونارد أدليمان &amp;ldquo;تشفير RSA&amp;rdquo;. يعتمد هذا على خاصية أن &amp;ldquo;تحليل الأعداد المركبة الضخمة إلى عواملها الأولية أمر صعب&amp;rdquo;.&lt;/p>
&lt;p>&lt;strong>الآلية الرياضية لـ RSA:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>اختر عددين أوليين ضخمين $p$ و $q$ واحسب $n = p \times q$.&lt;/li>
&lt;li>احسب دالة مؤشر أويلر $\phi(n) = (p-1)(q-1)$.&lt;/li>
&lt;li>اختر عددًا صحيحًا $e$ (المفتاح العام) يكون أوليًا نسبيًا مع $\phi(n)$.&lt;/li>
&lt;li>احسب عددًا صحيحًا $d$ (المفتاح السري) بحيث يكون $e \times d \equiv 1 \pmod{\phi(n)}$.&lt;/li>
&lt;/ol>
&lt;p>التشفير: للنص العادي $M$، احسب $C \equiv M^e \pmod{n}$
فك التشفير: للنص المشفر $C$، احسب $M \equiv C^d \pmod{n}$&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># كود بايثون يوضح مفهوم تشفير RSA (غير مخصص للاستخدام العملي)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># حساب المعكوس الضربي المعياري باستخدام خوارزمية إقليدس الممتدة&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">rsa_example&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># مثال باستخدام أعداد أولية صغيرة&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">61&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">53&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">17&lt;/span> &lt;span class="c1"># قيمة أولية نسبيًا مع phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;المفتاح العام: (e=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, n=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;المفتاح السري: (d=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, n=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># تشفير وفك تشفير الرسالة&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">65&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decrypted&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;النص العادي: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; النص المشفر: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; بعد فك التشفير: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rsa_example&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h1 id="6-صعود-تشفير-المنحنى-الإهليلجي-ecc">6. صعود تشفير المنحنى الإهليلجي (ECC)
&lt;/h1>&lt;p>على الرغم من قوة تشفير RSA، إلا أنه مع تحسن أداء أجهزة الكمبيوتر، أصبح من الضروري زيادة طول المفتاح للحفاظ على الأمان (حاليًا 2048 أو 3072 بت)، مما أدى إلى مشكلة زيادة تكلفة الحساب.&lt;/p>
&lt;p>لذلك، تم اقتراح &amp;ldquo;تشفير المنحنى الإهليلجي (Elliptic Curve Cryptography: ECC)&amp;rdquo; في عام 1985. يستخدم هذا التشفير إضافة النقاط على المنحنيات الإهليلجية (عادة على شكل $y^2 = x^3 + ax + b$) فوق المجالات المحدودة.&lt;/p>
&lt;p>من المعروف أن مشكلة اللوغاريتم المتقطع على المنحنيات الإهليلجية (ECDLP) أصعب في الحل من مشكلة التحليل إلى العوامل الأولية، &lt;strong>ويمكن لـ ECC تحقيق نفس مستوى الأمان لمفتاح RSA بطول 3072 بت باستخدام مفتاح بطول 256 بت فقط&lt;/strong>. وقد أتاح هذا اتصالاً مشفرًا سريعًا وآمنًا (مثل ECDSA و ECDH) حتى في البيئات ذات الموارد الحسابية المحدودة، مثل الهواتف الذكية وأجهزة إنترنت الأشياء (IoT).&lt;/p>
&lt;hr>
&lt;h1 id="7-تهديد-الحواسيب-الكمومية-والتشفير-المقاوم-للكم-pqc">7. تهديد الحواسيب الكمومية والتشفير المقاوم للكم (PQC)
&lt;/h1>&lt;p>بدت تقنية التشفير راسخة، ولكن في عام 1994، أحدث &amp;ldquo;خوارزمية شور&amp;rdquo; التي نشرها بيتر شور (Peter Shor) صدمة كبيرة.&lt;/p>
&lt;p>تستغل الحواسيب الكمومية خصائص ميكانيكا الكم المتمثلة في &amp;ldquo;التراكب&amp;rdquo; و&amp;quot;التشابك الكمي&amp;rdquo; لإجراء العمليات الحسابية. وقد تم إثبات رياضيًا أنه عند تشغيل خوارزمية شور على حاسوب كمومي ذي أداء كافٍ، يمكن حل مشكلة التحليل إلى العوامل الأولية ومشكلة اللوغاريتم المتقطع في &amp;ldquo;وقت متعدد الحدود&amp;rdquo;. بمعنى آخر، في اليوم الذي يكتمل فيه حاسوب كمومي عملي (Q-Day)، ستنهار جميع تشفيرات المفتاح العام المستخدمة حاليًا مثل RSA و ECC على الفور.&lt;/p>
&lt;h2 id="ظهور-pqc-post-quantum-cryptography">ظهور PQC (Post-Quantum Cryptography)
&lt;/h2>&lt;p>استعدادًا لهذا التهديد غير المسبوق، تتقدم الأبحاث بوتيرة سريعة حول &amp;ldquo;تشفير الحواسيب المقاومة للكم (PQC)&amp;quot;، استنادًا إلى مشاكل رياضية جديدة يصعب حلها حتى بواسطة الحواسيب الكمومية. يعكف المعهد الوطني للمعايير والتكنولوجيا (NIST) على عملية توحيد معايير PQC لسنوات عديدة، وتعتبر الأساليب الرياضية التالية هي الأبرز:&lt;/p>
&lt;h3 id="1-التشفير-القائم-على-الشبكة-lattice-based-cryptography">1. التشفير القائم على الشبكة (Lattice-based Cryptography)
&lt;/h3>&lt;p>وهو النهج الأكثر ترجيحًا حاليًا، وقد تم اعتماده في خوارزميات التوحيد القياسي الخاصة بـ NIST (ML-KEM / Kyber و ML-DSA / Dilithium). يعتمد على صعوبة العثور على نقطة معينة على &amp;ldquo;شبكة (Lattice)&amp;rdquo; في مساحة متعددة الأبعاد (مثل مشكلة أقصر متجه: SVP) أو مشكلة LWE (التعلم مع الأخطاء).&lt;/p>
&lt;p>يستغل مفهوم مشكلة LWE الخاصية المتمثلة في أنه عند إضافة &amp;ldquo;ضوضاء (خطأ) صغيرة&amp;rdquo; عمدًا إلى نظام معادلات خطية متزامنة، يصبح من الصعب جدًا إيجاد الحل.
نظام المعادلات: $\mathbf{A}\mathbf{s} + \mathbf{e} \equiv \mathbf{b} \pmod{q}$
($\mathbf{A}$ و $\mathbf{b}$ علنية، $\mathbf{s}$ هو المفتاح السري، و $\mathbf{e}$ هي ضوضاء دقيقة)&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># كود كاذب لمفهوم مشكلة LWE (للأغراض التعليمية)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">256&lt;/span> &lt;span class="c1"># الأبعاد&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3329&lt;/span> &lt;span class="c1"># المعيار (Modulus)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">512&lt;/span> &lt;span class="c1"># عدد المعادلات&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># المفتاح السري s والخطأ الصغير e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># المصفوفة العامة A والمتجه العام b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">A&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">A&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># حتى باستخدام حاسوب كمومي، يُعتبر استعادة s من A و b أمرًا بالغ الصعوبة&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-التشفير-القائم-على-التجزئة-hash-based-cryptography">2. التشفير القائم على التجزئة (Hash-based Cryptography)
&lt;/h3>&lt;p>هو نظام توقيع رقمي يعتمد أمانه فقط على مقاومة الاصطدام لدوال التجزئة. وبما أنه لا يحتوي على بنية رياضية، فهو مقاوم للهجمات الكمومية، ولكن حجم التوقيع يميل إلى أن يكون كبيرًا (مثل SPHINCS+).&lt;/p>
&lt;h3 id="3-التشفير-القائم-على-الرموز-code-based-cryptography">3. التشفير القائم على الرموز (Code-based Cryptography)
&lt;/h3>&lt;p>وهو نظام تشفير يعتمد على نظرية رموز تصحيح الأخطاء. أشهرها هو تشفير McEliece المقترح في عام 1978، والذي يتمتع بتاريخ طويل وسمعة طيبة من حيث الأمان، ولكن لديه عيب يتمثل في أن حجم المفتاح العام كبير جدًا (قد يصل إلى عدة ميغابايت).&lt;/p>
&lt;div class="mermaid">timeline
title "تاريخ تطور تقنية التشفير والحواسيب"
"العصور القديمة والوسطى" : "تشفير قيصر" : "تشفير فيجينير" : "ولادة تحليل التكرار"
"الثلاثينيات والأربعينيات" : "تشغيل وفك تشفير إنجما" : "تطوير آلة تورينج وبومب"
"السبعينيات" : "توحيد معيار DES (1977)" : "تبادل مفاتيح ديفي-هيلمان (1976)" : "ولادة تشفير RSA (1977)"
"الثمانينيات والتسعينيات" : "اقتراح تشفير المنحنى الإهليلجي (ECC)" : "نشر خوارزمية شور (1994)"
"العقد الأول من القرن الحادي والعشرين" : "توحيد معيار AES (2001)"
"العقد الثاني من القرن الحادي والعشرين إلى الآن" : "تسريع أبحاث الحواسيب الكمومية" : "بدء مشروع توحيد معايير PQC من قبل NIST"
"المستقبل القريب (Q-Day)" : "تحقيق حواسيب كمومية واسعة النطاق؟" : "الانتقال الكامل إلى PQC (ML-KEM/ML-DSA)"&lt;/div>
&lt;hr>
&lt;h1 id="8-الخاتمة-معركة-لا-تنتهي-بين-الدرع-والرمح">8. الخاتمة: معركة لا تنتهي بين الدرع والرمح
&lt;/h1>&lt;p>تاريخ تقنية التشفير هو تاريخ لمعركة لا تنتهي بين اختراع طرق تشفير جديدة (الدرع) وطرق فك تشفير جديدة لكسرها (الرمح).&lt;/p>
&lt;p>انهزم تشفير قيصر أمام تحليل التكرار، وهُزمت إنجما التي كانت تعتبر لا تُقهر أمام العقل العبقري لتورينج وقوة الآلات. والآن، تواجه التشفيرات القوية مثل RSA و ECC التي تدعم أساس مجتمع الإنترنت الحديث، تهديدًا أمام &amp;ldquo;الرمح&amp;rdquo; الجديد المتمثل في الحواسيب الكمومية.&lt;/p>
&lt;p>ومع ذلك، فإن البشرية تتطلع بالفعل إلى المستقبل وتقوم بإعداد &amp;ldquo;درع&amp;rdquo; جديد يُسمى التشفير المقاوم للكم (PQC). في الوقت الحالي، أصبحت الاستعدادات للانتقال من تشفير المفتاح العام الحالي إلى PQC (ضمان المرونة التشفيرية - Crypto Agility) مهمة ملحة في البنى التحتية لتكنولوجيا المعلومات حول العالم.&lt;/p>
&lt;p>تقنية التشفير ليست مجرد لغز رياضي معقد، بل هي الجدار الدفاعي الأقوى لحماية خصوصيتنا وممتلكاتنا والبنية التحتية لمجتمعنا بأسره.&lt;/p></description></item><item><title>【شرح رياضيات】شرح آلية عمل تشفير RSA بطريقة يفهمها حتى طلاب الثانوية</title><link>http://kenji.blog/ar/p/rsa-encryption-math-explained-for-beginners/</link><pubDate>Fri, 11 Sep 2026 13:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/rsa-encryption-math-explained-for-beginners/</guid><description>&lt;img src="http://kenji.blog/p/rsa-encryption-math-explained-for-beginners/img/eyecatch.jpg" alt="Featured image of post 【شرح رياضيات】شرح آلية عمل تشفير RSA بطريقة يفهمها حتى طلاب الثانوية" />&lt;p>إحدى التقنيات التي تدعم أمن مجتمع الإنترنت من جذوره هي &amp;ldquo;تشفير RSA&amp;rdquo;. العديد من الاتصالات التي نستخدمها يوميًا دون تفكير، مثل مدفوعات بطاقات الائتمان في التسوق عبر الإنترنت، والتواصل مع الأصدقاء على شبكات التواصل الاجتماعي، وإرسال واستقبال المعلومات السرية للشركات، محمية بواسطة تشفير RSA أو التقنيات التي خلفته.&lt;/p>
&lt;p>ولكن عندما تسمع كلمة &amp;ldquo;تشفير&amp;rdquo;، قد تتخيل آلات تشفير معقدة كتلك التي تظهر في أفلام الجواسيس، أو رياضيات متقدمة للغاية لا يفهمها سوى بعض العباقرة. صحيح أن نظرية التشفير الحديثة تعتمد على رياضيات متقدمة، إلا أن &lt;strong>الآلية الأساسية لتشفير RSA يمكن فهمها تمامًا إذا كان لديك معرفة برياضيات المرحلة الثانوية (خصائص الأعداد الصحيحة، الأعداد الأولية، التطابق وغيرها)&lt;/strong>.&lt;/p>
&lt;p>في هذا المقال، ومن منطلق المعرفة برياضيات المرحلة الثانوية، سنشرح خطوة بخطوة وبشكل شامل المبادئ الرياضية التي يعمل بها تشفير RSA، ولماذا يصعب فك تشفيره. سنشرح بعناية مع استخدام أمثلة ملموسة حتى يتمكن حتى من يجدون صعوبة قليلة في الرياضيات من الفهم.&lt;/p>
&lt;hr>
&lt;h2 id="1-التشفير-بالمفتاح-المتماثل-والتشفير-بالمفتاح-المعلن">1. التشفير بالمفتاح المتماثل والتشفير بالمفتاح المعلن
&lt;/h2>&lt;p>قبل الخوض في الآلية الرياضية لتشفير RSA، دعونا أولاً ننظم الفكرة الأساسية للتشفير. تنقسم طرق التشفير بشكل عام إلى نوعين: &amp;ldquo;التشفير بالمفتاح المتماثل (المشترك)&amp;rdquo; و&amp;quot;التشفير بالمفتاح المعلن (العام)&amp;quot;.&lt;/p>
&lt;h3 id="11-حدود-طريقة-التشفير-بالمفتاح-المتماثل">1.1 حدود طريقة التشفير بالمفتاح المتماثل
&lt;/h3>&lt;p>العديد من الشفرات المستخدمة منذ القدم تسمى &amp;ldquo;طريقة التشفير بالمفتاح المتماثل&amp;rdquo;. وهي طريقة &lt;strong>تستخدم نفس المفتاح في &amp;ldquo;التشفير (تحويل الرسالة إلى نص مشفر سري)&amp;rdquo; و&amp;quot;فك التشفير (إعادة النص المشفر إلى الرسالة الأصلية)&amp;quot;&lt;/strong>.&lt;/p>
&lt;p>على سبيل المثال، لنفترض أن أليس تريد إرسال رسالة سرية إلى بوب. تضع أليس الرسالة في صندوق وتغلقه باستخدام قفل (مفتاح متماثل). لكي يفتح بوب ذلك الصندوق، يحتاج إلى امتلاك نفس المفتاح الذي استخدمته أليس.&lt;/p>
&lt;p>هذه الطريقة بها مشكلة كبيرة، وهي &amp;ldquo;مشكلة توزيع المفاتيح&amp;rdquo;. عندما تتواصل أليس وبوب، اللذان تفصل بينهما مسافة كبيرة، لأول مرة، كيف يمكنهما مشاركة المفتاح دون أن يتم التنصت عليهما؟ إذا سُرق المفتاح من قبل طرف ثالث أثناء إرساله بالبريد، فإن جميع الاتصالات المشفرة اللاحقة ستكون مكشوفة تمامًا.&lt;/p>
&lt;h3 id="12-الاختراع-الثوري-طريقة-التشفير-بالمفتاح-المعلن">1.2 الاختراع الثوري &amp;ldquo;طريقة التشفير بالمفتاح المعلن&amp;rdquo;
&lt;/h3>&lt;p>تم ابتكار &amp;ldquo;طريقة التشفير بالمفتاح المعلن&amp;rdquo; لحل مشكلة توزيع المفاتيح هذه. وتشفير RSA هو نوع من هذا التشفير.&lt;/p>
&lt;p>في طريقة التشفير بالمفتاح المعلن، يتم استخدام &lt;strong>مفتاحين مختلفين: &amp;ldquo;مفتاح للتشفير (المفتاح المعلن/العام)&amp;rdquo; و&amp;quot;مفتاح لفك التشفير (المفتاح السري/الخاص)&amp;quot;&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>يقوم المتلقي بوب بإنشاء زوج من &amp;ldquo;المفتاح المعلن&amp;rdquo; و&amp;quot;المفتاح السري&amp;quot;.&lt;/li>
&lt;li>ينشر بوب &amp;ldquo;المفتاح المعلن&amp;rdquo; للعالم أجمع (لا يهم من يحصل عليه).&lt;/li>
&lt;li>تستخدم المرسلة أليس &amp;ldquo;المفتاح المعلن&amp;rdquo; الخاص ببوب لتشفير رسالتها وإرسالها.&lt;/li>
&lt;li>لا يمكن فك تشفير الرسالة المشفرة إلا بواسطة &amp;ldquo;المفتاح السري&amp;rdquo; الذي يمتلكه بوب فقط.&lt;/li>
&lt;/ol>
&lt;p>إذا شبهنا ذلك بالقفل، فإن بوب يصنع الكثير من &amp;ldquo;الأقفال المفتوحة (المفاتيح المعلنة)&amp;rdquo; وينثرها في جميع أنحاء العالم. تضع أليس رسالتها الموجهة لبوب في صندوق وتغلقه باستخدام أحد أقفال بوب التي وجدتها. بمجرد إغلاق القفل، لا يمكن فتحه إلا باستخدام &amp;ldquo;المفتاح الرئيسي (المفتاح السري)&amp;rdquo; الذي يمتلكه بوب. حتى لو سرق شخص ما الصندوق في الطريق، فلا يمكنه فتحه لأنه لا يمتلك المفتاح الرئيسي.&lt;/p>
&lt;div class="mermaid">graph TD
A["أليس (المرسلة)"] --> B["نص صريح (رسالة)"]
B --> C["عملية التشفير"]
D["مفتاح بوب المعلن (متاح للجميع)"] --> C
C --> E["إرسال عبر الإنترنت: نص مشفر"]
E --> F["عملية فك التشفير"]
G["مفتاح بوب السري (يمتلكه بوب فقط)"] --> F
F --> H["النص الصريح المسترجع (الرسالة)"]
H --> I["بوب (المتلقي)"]&lt;/div>
&lt;p>لتحقيق هذا النظام الثوري، نحتاج إلى نوع من &lt;strong>&amp;ldquo;الدوال أحادية الاتجاه (لغز رياضي في اتجاه واحد)&amp;rdquo;&lt;/strong>، حيث &amp;ldquo;يمكن التشفير بسهولة باستخدام المفتاح المعلن، ولكن من المستحيل مطلقًا فك التشفير بدون المفتاح السري&amp;rdquo;. القطعة التي تم التركيز عليها لحل هذا اللغز هي &amp;ldquo;الأعداد الأولية&amp;rdquo; التي نعرفها جيدًا.&lt;/p>
&lt;hr>
&lt;h2 id="2-الأساس-الرياضي-الذي-يدعم-تشفير-rsa-1-الأعداد-الأولية-والتحليل-إلى-العوامل-الأولية">2. الأساس الرياضي الذي يدعم تشفير RSA 1: الأعداد الأولية والتحليل إلى العوامل الأولية
&lt;/h2>&lt;p>يعتمد أمان تشفير RSA على حقيقة رياضية مفادها أن &lt;strong>&amp;ldquo;تحليل الأعداد الضخمة إلى عواملها الأولية أمر صعب للغاية&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;h3 id="21-ما-هو-العدد-الأولي">2.1 ما هو العدد الأولي
&lt;/h3>&lt;p>العدد الأولي هو &amp;ldquo;عدد طبيعي أكبر من 1، لا يقبل القسمة إلا على 1 وعلى نفسه&amp;rdquo;.
مثال: $2, 3, 5, 7, 11, 13, 17, 19, 23...$&lt;/p>
&lt;p>الأعداد الأولية تشبه &amp;ldquo;الذرات&amp;rdquo; لجميع الأعداد الصحيحة. يمكن تحليل أي عدد طبيعي إلى شكل ضرب أعداد أولية. وهذا ما يسمى &lt;strong>التحليل إلى العوامل الأولية&lt;/strong>. على سبيل المثال، إمكانية التحليل إلى عوامل أولية بطريقة واحدة فقط (إذا تجاهلنا الترتيب) كما في $60 = 2^2 \times 3 \times 5$ تُعرف باسم &amp;ldquo;المبرهنة الأساسية في الحساب&amp;rdquo;.&lt;/p>
&lt;h3 id="22-صعوبة-التحليل-إلى-العوامل-الأولية-الدالة-أحادية-الاتجاه">2.2 صعوبة التحليل إلى العوامل الأولية (الدالة أحادية الاتجاه)
&lt;/h3>&lt;p>المهم هنا هو عدم التماثل حيث أن &lt;strong>&amp;ldquo;عملية الضرب سهلة، لكن التحليل إلى العوامل الأولية صعب&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>على سبيل المثال، حاول حساب حاصل ضرب العددين الأوليين التاليين ذهنيًا:
$11 \times 13 = ?$
هذا سهل، أليس كذلك؟ الجواب هو $143$.&lt;/p>
&lt;p>إذًا، ماذا عن العدد التالي؟
حلل العدد $323$ إلى عوامله الأولية.
ما رأيك؟ سيستغرق الأمر بعض الوقت. (الجواب هو $17 \times 19$).&lt;/p>
&lt;p>إذا كانت الأعداد صغيرة، فيمكن للإنسان حسابها بطريقة ما، ولكن عندما تصبح الأعداد كبيرة، يصبح الحساب صعبًا بشكل هائل حتى باستخدام أجهزة الكمبيوتر. في تشفير RSA السائد حاليًا، يتم استخدام عدد $N = p \times q$ ناتج عن ضرب عددين أوليين ضخمين بشكل لا يصدق $p$ و $q$ بحجم 2048 بت (حوالي 600 رقم بالنظام العشري).&lt;/p>
&lt;p>عند إعطاء عددين أوليين ضخمين $p$ و $q$، فإن حساب $N$ يستغرق جزءًا من الثانية بالنسبة للكمبيوتر (أقل من مللي ثانية). ولكن على العكس من ذلك، إذا تم إعطاء $N$ فقط لإيجاد $p$ و $q$ الأصليين، فسيستغرق الأمر وقتًا طويلاً لا يمكن لأسرع حاسوب عملاق حالي حله حتى لو استمر في العمل لترليونات السنين.&lt;/p>
&lt;p>هذا &lt;strong>&amp;ldquo;عدم التماثل في الحساب (طريق الذهاب سهل، وطريق العودة صعب)&amp;rdquo;&lt;/strong> هو الأساس الذي يخلق العلاقة بين المفتاح المعلن والمفتاح السري.&lt;/p>
&lt;hr>
&lt;h2 id="3-الأساس-الرياضي-الذي-يدعم-تشفير-rsa-2-التطابق-حساب-المقياس">3. الأساس الرياضي الذي يدعم تشفير RSA 2: التطابق (حساب المقياس)
&lt;/h2>&lt;p>لا تتم حسابات تشفير RSA بالجمع والضرب حيث تكبر الأعداد بشكل لا نهائي كما نستخدمها عادة، بل تتم في عالم &amp;ldquo;البواقي&amp;rdquo; بعد القسمة على عدد معين. وهذا ما يسمى &lt;strong>التطابق (حساب المقياس أو الحساب المعياري)&lt;/strong>.&lt;/p>
&lt;h3 id="31-رياضيات-الساعة">3.1 رياضيات الساعة
&lt;/h3>&lt;p>غالبًا ما يُشبه حساب المقياس بـ &amp;ldquo;رياضيات الساعة&amp;rdquo;. إذا كانت الساعة الآن 10، فكم ستكون الساعة بعد 5 ساعات؟ إنها $10 + 5 = 15$، ولكن في نظام الساعة المعتاد المكون من 12 ساعة، نجيب &amp;ldquo;الساعة 3&amp;rdquo;. هذا لأن باقي قسمة 15 على 12 هو 3.&lt;/p>
&lt;p>في عالم الرياضيات، يُكتب هذا على النحو التالي:
&lt;/p>
$$ 15 \equiv 3 \pmod{12} $$
&lt;p>
ويُقرأ: &amp;ldquo;15 و 3 متطابقان بمقياس 12 (باقي قسمتهما على 12 متساوٍ)&amp;rdquo;.&lt;/p>
&lt;h3 id="32-الخصائص-الأساسية-للتطابق">3.2 الخصائص الأساسية للتطابق
&lt;/h3>&lt;p>للتطابق خصائص مفيدة جدًا تشبه إلى حد كبير خصائص المعادلة ($=$). لنفترض أن المقياس (القاسم) هو $N$.
عندما يكون $a \equiv b \pmod N$ و $c \equiv d \pmod N$، يتحقق ما يلي:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>الجمع:&lt;/strong> $a + c \equiv b + d \pmod N$&lt;/li>
&lt;li>&lt;strong>الطرح:&lt;/strong> $a - c \equiv b - d \pmod N$&lt;/li>
&lt;li>&lt;strong>الضرب:&lt;/strong> $a \times c \equiv b \times d \pmod N$&lt;/li>
&lt;li>&lt;strong>الرفع لأس:&lt;/strong> $a^k \equiv b^k \pmod N$ (حيث $k$ عدد طبيعي)&lt;/li>
&lt;/ol>
&lt;p>الخاصية الأكثر أهمية هي &amp;ldquo;الرفع لأس&amp;rdquo;. هذا يعني أن &lt;strong>&amp;ldquo;أس الباقي يساوي باقي الأس&amp;rdquo;&lt;/strong>.
على سبيل المثال، لنفترض أننا نريد إيجاد باقي قسمة $7^{100}$ على $5$. سيكون من الصعب جدًا ضرب $7$ في نفسها 100 مرة ثم القسمة على $5$، ولكن باستخدام خصائص التطابق، نظرًا لأن $7 \equiv 2 \pmod 5$، فإن $7^{100} \equiv 2^{100} \pmod 5$، مما يبسط الحساب بشكل هائل. هذه الخاصية لا غنى عنها في عالم التشفير لأننا نتعامل مع أسس لأعداد كبيرة جدًا.&lt;/p>
&lt;hr>
&lt;h2 id="4-الأساس-الرياضي-الذي-يدعم-تشفير-rsa-3-مؤشر-أويلر-ومبرهنة-أويلر">4. الأساس الرياضي الذي يدعم تشفير RSA 3: مؤشر أويلر ومبرهنة أويلر
&lt;/h2>&lt;p>من هنا تبدأ الرياضيات السحرية التي تشكل جوهر تشفير RSA. ستظهر &amp;ldquo;مبرهنة أويلر&amp;rdquo;، وهي تعميم لـ &amp;ldquo;مبرهنة فيرما الصغرى&amp;rdquo;.&lt;/p>
&lt;h3 id="41-دالة-مؤشر-أويلر-دالة-توتنت-phin">4.1 دالة مؤشر أويلر (دالة توتنت) $\phi(N)$
&lt;/h3>&lt;p>دالة مؤشر أويلر (دالة $\phi$) هي دالة تعيد، بالنسبة لعدد طبيعي معين $N$، &lt;strong>&amp;ldquo;عدد الأعداد الطبيعية من 1 إلى $N$ التي تكون أولية نسبيًا مع $N$ (أي القاسم المشترك الأكبر بينهما هو 1)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>دعونا نلقي نظرة على بعض الأمثلة:&lt;/p>
&lt;ul>
&lt;li>$\phi(5)$: من بين الأعداد 1, 2, 3, 4, 5، الأعداد الأولية نسبيًا مع 5 هي 1, 2, 3, 4 (عددها 4). إذن $\phi(5) = 4$.&lt;/li>
&lt;li>$\phi(6)$: من بين الأعداد 1, 2, 3, 4, 5, 6، الأعداد الأولية نسبيًا مع 6 هي 1, 5 (عددها 2). إذن $\phi(6) = 2$.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>【خاصية مميزة في حالة العدد الأولي】&lt;/strong>
إذا كان $p$ عددًا أوليًا، فإن جميع الأعداد من 1 إلى $p-1$ تكون أولية نسبيًا مع $p$. وبالتالي:
&lt;/p>
$$ \phi(p) = p - 1 $$
&lt;p>&lt;strong>【خاصية مميزة في حالة حاصل ضرب عددين أوليين】&lt;/strong>
بالنسبة لعددين أوليين مختلفين $p$ و $q$، إذا كان $N = p \times q$، فيمكن حساب $\phi(N)$ بسهولة كالتالي:
&lt;/p>
$$ \phi(N) = \phi(p) \times \phi(q) = (p - 1)(q - 1) $$
&lt;p>
هذه الخاصية تعمل كـ &amp;ldquo;باب خلفي سري (Trapdoor)&amp;rdquo; لتشفير RSA. فالشخص الذي يعرف $p$ و $q$ (منشئ المفتاح) يمكنه حساب $\phi(N)$ في لحظة، لكن الطرف الثالث الذي يعرف $N$ فقط لا يمكنه حساب $\phi(N)$ ما لم يقم بتحليل $N$ إلى عوامله الأولية.&lt;/p>
&lt;h3 id="42-مبرهنة-أويلر">4.2 مبرهنة أويلر
&lt;/h3>&lt;p>أثبت ليونهارد أويلر هذه المبرهنة الجميلة باستخدام $\phi(N)$:&lt;/p>
&lt;p>&lt;strong>مبرهنة أويلر:&lt;/strong>
عندما يكون العددان الصحيحان $a$ و $N$ أوليين نسبيًا، يتحقق التطابق التالي:
&lt;/p>
$$ a^{\phi(N)} \equiv 1 \pmod N $$
&lt;p>هذه خاصية مذهلة تعني أن &amp;ldquo;حاصل ضرب أي عدد $a$ في نفسه $\phi(N)$ مرة ثم قسمته على $N$، سيعطي باقيًا يساوي $1$ دائمًا&amp;rdquo;. (إذا كان $N$ عددًا أوليًا $p$، فإنها تصبح $a^{p-1} \equiv 1 \pmod p$، وتُعرف باسم مبرهنة فيرما الصغرى).&lt;/p>
&lt;p>دعونا نعدل مبرهنة أويلر هذه. سنضرب كلا الطرفين في $a$ مرة أخرى:
&lt;/p>
$$ a^{\phi(N) + 1} \equiv a \pmod N $$
&lt;p>علاوة على ذلك، بالنسبة لأي عدد صحيح $k$، فإن $a^{k \cdot \phi(N)}$ سيكون أيضًا $1^k = 1$، وبالتالي تتحقق المعادلة التالية:
&lt;/p>
$$ a^{k \cdot \phi(N) + 1} \equiv a \pmod N $$
&lt;p>هذه المعادلة بالذات هي المبدأ الأساسي الذي يجعل سحر تشفير RSA &lt;strong>&amp;ldquo;العودة إلى الحالة الأصلية بعد التشفير وفك التشفير&amp;rdquo;&lt;/strong> ممكنًا.&lt;/p>
&lt;hr>
&lt;h2 id="5-خوارزمية-تشفير-rsa-خطوات-إنشاء-المفتاح-التشفير-وفك-التشفير">5. خوارزمية تشفير RSA: خطوات إنشاء المفتاح، التشفير، وفك التشفير
&lt;/h2>&lt;p>بعد أن اكتملت المعرفة الأساسية، دعونا أخيرًا نلقي نظرة على الخطوات المحددة لتشفير RSA. ينقسم تشفير RSA بشكل رئيسي إلى ثلاث مراحل: &amp;ldquo;1. إنشاء المفتاح&amp;rdquo;، &amp;ldquo;2. التشفير&amp;rdquo;، و&amp;quot;3. فك التشفير&amp;quot;.&lt;/p>
&lt;div class="mermaid">flowchart TD
A1["1. اختيار عددين أوليين p, q"] --> A2["حساب N = p × q"]
A1 --> A3["حساب φ(N) = (p-1)(q-1)"]
A3 --> A4["اختيار e بحيث يكون أوليًا نسبيًا مع φ(N)"]
A3 --> A5["حساب d بحيث يتحقق التطابق e × d ≡ 1 (mod φ(N))"]
A2 --> A6["المفتاح المعلن (N, e)"]
A4 --> A6
A5 --> A7["المفتاح السري d"]
B1["2. النص الصريح (رسالة) M"] --> B2["حساب C ≡ M^e (mod N)"]
A6 -.-> B2
B2 --> B3["إرسال النص المشفر C"]
B3 --> C1["3. النص المشفر المُستلَم C"]
C1 --> C2["حساب M ≡ C^d (mod N)"]
A7 -.-> C2
C2 --> C3["الحصول على النص الصريح الأصلي M"]&lt;/div>
&lt;h3 id="51-إنشاء-المفتاح-key-generation">5.1 إنشاء المفتاح (Key Generation)
&lt;/h3>&lt;p>يقوم المتلقي بوب بإنشاء &amp;ldquo;مفتاح معلن&amp;rdquo; و&amp;quot;مفتاح سري&amp;quot; خاص به.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>اختيار الأعداد الأولية:&lt;/strong> يختار عشوائيًا عددين أوليين كبيرين $p$ و $q$.&lt;/li>
&lt;li>&lt;strong>حساب المقياس $N$:&lt;/strong> يحسب $N = p \times q$. هذا الـ $N$ سيتم إعلانه للجميع.&lt;/li>
&lt;li>&lt;strong>حساب $\phi(N)$:&lt;/strong> يحسب دالة أويلر $\phi(N) = (p - 1)(q - 1)$. هذا هو رقم بوب السري.&lt;/li>
&lt;li>&lt;strong>اختيار المفتاح المعلن $e$:&lt;/strong> يختار عددًا صحيحًا $e$ بحيث $1 &lt; e &lt; \phi(N)$ ويكون أوليًا نسبيًا مع $\phi(N)$.&lt;/li>
&lt;li>&lt;strong>حساب المفتاح السري $d$:&lt;/strong> يجد عددًا صحيحًا $d$ يحقق الشرط التالي:
$$ e \times d \equiv 1 \pmod{\phi(N)} $$
وهذا يعني، &amp;ldquo;العدد $d$ الذي يجعل باقي قسمة $e \times d$ على $\phi(N)$ يساوي $1$&amp;rdquo;.&lt;/li>
&lt;/ol>
&lt;p>وبهذا تكتمل تجهيزات المفاتيح.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>المفتاح المعلن:&lt;/strong> الزوج $(N, e)$. يتم نشره للعالم أجمع.&lt;/li>
&lt;li>&lt;strong>المفتاح السري:&lt;/strong> $d$. لا يخبر به أحداً على الإطلاق.&lt;/li>
&lt;/ul>
&lt;h3 id="52-التشفير-encryption">5.2 التشفير (Encryption)
&lt;/h3>&lt;p>لنفترض أن أليس تريد إرسال رسالة سرية $M$ إلى بوب. ($M$ هي أحرف تم تحويلها إلى أرقام، بحيث يكون $0 \le M &lt; N$). تستخدم أليس المفتاح المعلن لبوب $(N, e)$ للحساب كما يلي:&lt;/p>
$$ C \equiv M^e \pmod N $$
&lt;p>تحسب &amp;ldquo;باقي قسمة رسالة $M$ مرفوعة للأس $e$ على $N$، وهو $C$&amp;rdquo;. هذا الـ $C$ هو النص المشفر.&lt;/p>
&lt;h3 id="53-فك-التشفير-decryption">5.3 فك التشفير (Decryption)
&lt;/h3>&lt;p>يتلقى بوب النص المشفر $C$. يستخدم بوب المفتاح السري $d$ للحساب كما يلي:&lt;/p>
$$ M \equiv C^d \pmod N $$
&lt;p>عندما يحسب &amp;ldquo;باقي قسمة النص المشفر $C$ مرفوع للأس $d$ على $N$&amp;quot;، فإنه بشكل مذهل يسترجع الرسالة الأصلية $M$!&lt;/p>
&lt;hr>
&lt;h2 id="6-لماذا-يعود-إلى-حالته-الأصلية-عند-فك-التشفير-إثبات-رياضي">6. لماذا يعود إلى حالته الأصلية عند فك التشفير؟ (إثبات رياضي)
&lt;/h2>&lt;p>قد تتساءل: &amp;ldquo;كيف يمكن مجرد رفع $C$ للأس $d$ أن يعيده إلى $M$ الأصلي؟&amp;rdquo;. هنا تأتي قوة &amp;ldquo;مبرهنة أويلر&amp;rdquo; التي ذكرناها سابقًا.&lt;/p>
&lt;p>دعونا نعوض معادلة التشفير $C = M^e$ في معادلة فك التشفير $C^d \pmod N$:
&lt;/p>
$$ C^d \equiv (M^e)^d \equiv M^{ed} \pmod N $$
&lt;p>هنا، تذكر الخطوة 5 من عملية إنشاء المفتاح. اختار بوب $d$ بحيث يكون $e \times d \equiv 1 \pmod{\phi(N)}$. هذا يعني أن &amp;ldquo;$ed$ هو من مضاعفات $\phi(N)$ مضافًا إليه $1$&amp;rdquo;. باستخدام عدد صحيح $k$، يمكن كتابتها على النحو التالي:
&lt;/p>
$$ ed = k \cdot \phi(N) + 1 $$
&lt;p>نعوض هذا في جزء الأس ونفككه باستخدام قوانين الأسس:
&lt;/p>
$$ M^{ed} = M^{k \cdot \phi(N) + 1} = M^{k \cdot \phi(N)} \times M^1 = (M^{\phi(N)})^k \times M $$
&lt;p>هنا، بافتراض أن الرسالة $M$ و $N$ أوليان نسبيًا، فإنه وفقًا لـ &lt;strong>مبرهنة أويلر&lt;/strong>، يكون $M^{\phi(N)} \equiv 1 \pmod N$.
&lt;/p>
$$ (M^{\phi(N)})^k \times M \equiv 1^k \times M \equiv M \pmod N $$
&lt;p>وبالتالي، تتحقق المعادلة التالية بنجاح تام:
&lt;/p>
$$ C^d \equiv M \pmod N $$
&lt;p>أليس لا تعرف $d$، والمتنصت أيضًا لا يعرف $d$، لذا فإن الوحيد الذي يمكنه استخراج $M$ من $C$ هو بوب الذي يمتلك $d$.&lt;/p>
&lt;hr>
&lt;h2 id="7-مثال-تطبيقي-دعونا-نجرب-تشفير-rsa-بالحساب-اليدوي-باستخدام-أعداد-أولية-صغيرة">7. مثال تطبيقي: دعونا نجرب تشفير RSA بالحساب اليدوي باستخدام أعداد أولية صغيرة
&lt;/h2>&lt;p>دعونا نقوم بتجربة تواصل مشفر من أليس إلى بوب باستخدام أرقام صغيرة (أعداد أولية) في الواقع.&lt;/p>
&lt;p>&lt;strong>【مرحلة إنشاء المفتاح لبوب】&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>يختار عددين أوليين $p=11$, $q=13$.&lt;/li>
&lt;li>يحسب $N = 11 \times 13 = 143$.&lt;/li>
&lt;li>يحسب $\phi(N) = (11 - 1) \times (13 - 1) = 10 \times 12 = 120$.&lt;/li>
&lt;li>يختار مفتاحًا معلنًا $e$ يكون أوليًا نسبيًا مع $\phi(N)=120$. لنختر هنا $e=7$.&lt;/li>
&lt;li>يجد المفتاح السري $d$. يبحث عن $d$ الذي يحقق $7 \times d \equiv 1 \pmod{120}$.
في المعادلة $7d = 120k + 1$، عندما يكون $k=6$ يصبح الناتج $721$، و $721 \div 7 = 103$.
وبالتالي، $d = 103$.&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>المفتاح المعلن: $(N=143, e=7)$&lt;/li>
&lt;li>المفتاح السري: $d=103$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>【مرحلة التشفير لأليس】&lt;/strong>
لنفترض أنها تريد إرسال الرسالة $M = 9$.
المعادلة: $C \equiv 9^7 \pmod{143}$
$9^7 = 4,782,969$. بقسمة هذا العدد على 143 نحصل على $33447$ والباقي $48$.
أصبح النص المشفر $C = 48$.&lt;/p>
&lt;p>&lt;strong>【مرحلة فك التشفير لبوب】&lt;/strong>
يتلقى بوب النص المشفر $C = 48$، ويستخدم المفتاح السري $d = 103$ لفك التشفير.
المعادلة: $M \equiv 48^{103} \pmod{143}$
عند تنفيذ &lt;code>(48 ** 103) % 143&lt;/code> على الآلة الحاسبة، ستجد أن النتيجة بشكل رائع هي &amp;ldquo;&lt;strong>9&lt;/strong>&amp;rdquo;! لقد تمكن من استلام الرسالة الأصلية بنجاح.&lt;/p>
&lt;hr>
&lt;h2 id="8-كيفية-إيجاد-المفتاح-السري-d-خوارزمية-إقليدس-الممتدة">8. كيفية إيجاد المفتاح السري $d$: خوارزمية إقليدس الممتدة
&lt;/h2>&lt;p>في مثال الحساب اليدوي، اعتمدنا على التخمين للبحث عن $k$ وإيجاد $d=103$، لكن هذه الطريقة مستحيلة عندما تتكون الأعداد من مئات الأرقام. في البرامج الحقيقية، تُستخدم خوارزمية تسمى &lt;strong>&amp;ldquo;خوارزمية إقليدس الممتدة&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>حل التطابق $7d \equiv 1 \pmod{120}$ هو نفسه إيجاد الأعداد الصحيحة $d, y$ التي تحقق المعادلة $7d + 120y = 1$. من خلال الحساب العكسي لخوارزمية إقليدس، يمكن إيجاد ذلك ميكانيكيًا.&lt;/p>
&lt;ol>
&lt;li>$120 \div 7 = 17$ والباقي $1$&lt;/li>
&lt;li>بتعديل هذه المعادلة نحصل على: $1 = 120 - 17 \times 7$&lt;/li>
&lt;li>بمعنى آخر، $-17 \times 7 \equiv 1 \pmod{120}$&lt;/li>
&lt;/ol>
&lt;p>الرقم $-17$ يحمل نفس المعنى مثل $120 - 17 = 103$ في عالم المقياس $120$. وبالتالي، يمكن إيجاد $d = 103$ في لحظة. تتيح هذه الطريقة إجراء حسابات سريعة جدًا بغض النظر عن مدى ضخامة الأعداد.&lt;/p>
&lt;hr>
&lt;h2 id="9-الوجه-الآخر-لتشفير-rsa-التوقيع-الرقمي">9. الوجه الآخر لتشفير RSA: التوقيع الرقمي
&lt;/h2>&lt;p>من الميزات الرائعة لتشفير RSA أنه يمكن استخدامه أيضًا كـ &lt;strong>&amp;ldquo;توقيع رقمي&amp;rdquo;&lt;/strong> عن طريق عكس أدوار المفتاح المعلن والمفتاح السري.&lt;/p>
&lt;p>في التشفير كان الإجراء &amp;ldquo;التشفير بالمفتاح المعلن $\Rightarrow$ فك التشفير بالمفتاح السري&amp;rdquo;،
أما في التوقيع الرقمي، نتبع خطوات &amp;ldquo;التشفير بالمفتاح السري $\Rightarrow$ فك التشفير بالمفتاح المعلن&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">flowchart TD
A1["1. أليس تنشئ توقيعًا باستخدام مفتاحها السري"] --> A2["S ≡ M^d (mod N)"]
A2 --> A3["إرسال الرسالة M والتوقيع S"]
A3 --> B1["2. بوب يتحقق من التوقيع باستخدام المفتاح المعلن"]
B1 --> B2["حساب M' ≡ S^e (mod N)"]
B2 --> B3["التحقق مما إذا كان M' يتطابق مع M"]&lt;/div>
&lt;p>تستخدم أليس مفتاحها السري $d$ لتحويل الرسالة (وهذا هو التوقيع $S$)، وترسله إلى بوب. يستخدم بوب المفتاح المعلن لأليس $e$ لإجراء عملية التحقق. إذا كانت نتيجة الحساب تتطابق مع الرسالة الأصلية، فإن ذلك يثبت في نفس الوقت أن &amp;ldquo;هذه البيانات لا يمكن إنشاؤها إلا بواسطة المفتاح السري لأليس&amp;rdquo;، و&amp;quot;لم يتم التلاعب بالرسالة في الطريق&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="10-تجربة-تشفير-rsa-من-خلال-البرمجة">10. تجربة تشفير RSA من خلال البرمجة
&lt;/h2>&lt;p>حسابات الأسس التي تعتبر صعبة في الحساب اليدوي، يمكن تنفيذها بسهولة بالغة باستخدام بايثون (Python). وفيما يلي كود بايثون يمكنك من خلاله تجربة المنطق الأساسي لتشفير RSA.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;إيجاد القاسم المشترك الأكبر&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;إيجاد المفتاح السري d (باستخدام الدالة المدمجة في بايثون 3.8 وما بعده)&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. إنشاء المفتاح&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">N&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">d&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;المفتاح المعلن: (N=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, e=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">), المفتاح السري: d=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. التشفير&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;النص المشفر: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. فك التشفير&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">decrypted_message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;الرسالة بعد فك التشفير: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted_message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>تستخدم دالة &lt;code>pow(base, exp, mod)&lt;/code> في بايثون خوارزمية سريعة تسمى &amp;ldquo;التربيع المتكرر (Exponentiation by squaring)&amp;rdquo; داخليًا، لذلك حتى بالنسبة للأعداد المكونة من مئات الأرقام، ينتهي الحساب في لحظة.&lt;/p>
&lt;hr>
&lt;h2 id="11-الخلاصة-وتقنيات-التشفير-المستقبلية">11. الخلاصة وتقنيات التشفير المستقبلية
&lt;/h2>&lt;p>لقد قمنا بتوضيح آلية عمل تشفير RSA بناءً على المعرفة برياضيات المرحلة الثانوية.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>صعوبة التحليل إلى العوامل الأولية:&lt;/strong> حساب $p \times q = N$ سهل، لكن إيجاد $p, q$ من $N$ صعب للغاية.&lt;/li>
&lt;li>&lt;strong>التطابق ومبرهنة أويلر:&lt;/strong> بفضل القاعدة $a^{\phi(N)} \equiv 1 \pmod N$، يكتمل &amp;ldquo;الباب الخلفي&amp;rdquo; السحري الذي يسمح بـ &amp;ldquo;العودة إلى الحالة الأصلية عند الرفع لأس عدد معين&amp;rdquo;.&lt;/li>
&lt;li>&lt;strong>المفتاح المعلن والمفتاح السري:&lt;/strong> يمكن لأي شخص التشفير، ولكن المستلم الشرعي فقط هو من يمكنه فك التشفير.&lt;/li>
&lt;/ol>
&lt;p>الـ $N$ المستخدم في تشفير RSA الحالي يتكون من أكثر من 600 رقم، وحتى لو تم حشد جميع الحواسيب العملاقة في العالم، فإن التحليل إلى العوامل الأولية سيستغرق وقتًا أطول من عمر الكون. ومع ذلك، عندما تصبح &amp;ldquo;الحواسيب الكمومية&amp;rdquo;، التي تتقدم الأبحاث بشأنها في السنوات الأخيرة، قابلة للتطبيق العملي في المستقبل، فهناك احتمال أن يتم حل هذا التحليل إلى العوامل الأولية في لحظة بواسطة &amp;ldquo;خوارزمية شور&amp;rdquo;. لذلك، يجري حاليًا تطوير &amp;ldquo;تشفير مقاوم للحواسيب الكمومية&amp;rdquo;، والذي لا يمكن حتى للحواسيب الكمومية فك تشفيره، بوتيرة سريعة في جميع أنحاء العالم.&lt;/p>
&lt;p>الرياضيات المتقدمة التي غالبًا ما يُعتقد أنها &amp;ldquo;غير مفيدة&amp;rdquo;، تحمي في الواقع حياتنا اليومية من جذورها. يعتبر تشفير RSA من أفضل المواد التعليمية التي توضح لنا عمق وجمال هذه الرياضيات. نأمل أن تكون قد شعرت ولو قليلاً بمتعة التشفير والرياضيات من خلال هذا المقال.&lt;/p></description></item><item><title>ما هو التشفير المتماثل بالكامل (FHE)؟ شرح لجوهر أمن الجيل القادم</title><link>http://kenji.blog/ar/p/fully-homomorphic-encryption-fhe-explained/</link><pubDate>Fri, 11 Sep 2026 11:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/fully-homomorphic-encryption-fhe-explained/</guid><description>&lt;img src="http://kenji.blog/p/fully-homomorphic-encryption-fhe-explained/img/eyecatch.jpg" alt="Featured image of post ما هو التشفير المتماثل بالكامل (FHE)؟ شرح لجوهر أمن الجيل القادم" />&lt;p>مع ترسخ الحوسبة السحابية وتقنيات الذكاء الاصطناعي كبنية تحتية للمجتمع، أصبحت المفاضلة بين &amp;ldquo;خصوصية البيانات&amp;rdquo; و &amp;ldquo;استخدام البيانات&amp;rdquo; واحدة من أهم التحديات. يتزايد الطلب على جعل الذكاء الاصطناعي يحلل البيانات شديدة السرية مثل البيانات الطبية والمعلومات المالية والمعلومات الحيوية الشخصية على السحابة، لكن العديد من الشركات تتردد في إرسال البيانات إلى الخارج بسبب مخاوف أمنية.&lt;/p>
&lt;p>تتفوق تقنيات التشفير التقليدية (مثل AES و RSA) في حماية البيانات المخزنة (Data at Rest) والبيانات المرسلة عبر الشبكة (Data in Transit). ومع ذلك، &lt;strong>عند إجراء عمليات (حسابات) مثل البحث أو التعلم الآلي على البيانات من جانب الخادم (Data in Use)، يجب فك تشفيرها وإعادتها إلى نص صريح&lt;/strong>. إذا تم اختراق الخادم في وقت فك التشفير هذا، أو إذا قام مسؤول داخلي خبيث بالاطلاع على البيانات، فسيؤدي ذلك مباشرة إلى تسريب المعلومات.&lt;/p>
&lt;p>التقنية الحلم التي تتغلب على نقطة الضعف الأساسية المتمثلة في &amp;ldquo;فك التشفير أثناء المعالجة&amp;rdquo; هي &lt;strong>التشفير المتماثل بالكامل (Fully Homomorphic Encryption: FHE)&lt;/strong>. باستخدام FHE، يصبح من الممكن إجراء عمليات المعالجة الحسابية مع إبقاء البيانات مشفرة دون فك تشفيرها على الإطلاق، وإرجاع النص المشفر الناتج فقط إلى العميل.&lt;/p>
&lt;p>في هذه المقالة، سنشرح بعمق FHE، والذي يمثل جوهر أمن الجيل القادم، بدءًا من مفاهيمه وتاريخه، والاختراق الثوري الذي حققه كريج جينتري (Craig Gentry)، والأسس الرياضية (مثل Ring-LWE)، والتحدي الأكبر &amp;ldquo;الضوضاء&amp;rdquo; وحله (Bootstrapping)، وصولاً إلى أحدث مكتبات التنفيذ.&lt;/p>
&lt;hr>
&lt;h2 id="1-ما-هو-التشفير-المتماثل-المفاهيم-الأساسية">1. ما هو التشفير المتماثل؟ المفاهيم الأساسية
&lt;/h2>&lt;p>&amp;ldquo;المتماثل&amp;rdquo; (Homomorphic) هو مصطلح في الجبر يشير إلى خاصية إمكانية التعيين بين المجموعات التي لها بنية معينة مع الحفاظ على بنية العمليات. &amp;ldquo;التماثل&amp;rdquo; في نظرية التشفير هو خاصية أن &lt;strong>العمليات في مساحة النص الصريح تتوافق مع العمليات في مساحة النص المشفر&lt;/strong>.&lt;/p>
&lt;p>بصيغة رياضية بسيطة، لتكن دالة التشفير للنصوص الصريحة $m_1$ و $m_2$ هي $E(\cdot)$ ودالة فك التشفير هي $D(\cdot)$. إذا كانت العمليات (مثل الجمع والضرب) على النص الصريح هي $\circ$، والعمليات على النص المشفر هي $\diamond$، فإن العلاقة التالية تتحقق:&lt;/p>
$$ D(E(m_1) \diamond E(m_2)) = m_1 \circ m_2 $$
&lt;p>بمعنى آخر، فك تشفير نتيجة تطبيق بعض العمليات $\diamond$ على النصوص المشفرة $E(m_1)$ و $E(m_2)$ يتطابق مع نتيجة تطبيق العملية $\circ$ على النصوص الصريحة الأصلية.&lt;/p>
&lt;h3 id="تدفق-البيانات-في-الحوسبة-السحابية">تدفق البيانات في الحوسبة السحابية
&lt;/h3>&lt;p>تختلف بنية المعالجة السحابية باستخدام FHE تمامًا عن البنية التقليدية. يوضح الشكل التالي تدفق معالجة البيانات الآمنة باستخدام FHE.&lt;/p>
&lt;div class="mermaid">graph TD
A["العميل (يحتفظ بالمفتاح الخاص)"] -->|1. تشفير النص الصريح x: E(x)| B["الخادم السحابي (بيانات مشفرة فقط)"]
B -->|2. تطبيق الدالة f على النص المشفر: E(f(x))| B
B -->|3. النص المشفر لنتيجة الحساب E(y)| A
A -->|4. فك التشفير بالمفتاح الخاص: y = f(x)| A
style A fill:#d4edda,stroke:#28a745
style B fill:#f8d7da,stroke:#dc3545&lt;/div>
&lt;p>يتلقى الخادم البيانات المشفرة $E(x)$، ولكنه لا يمتلك المفتاح الخاص، لذا لا يمكنه مطلقًا معرفة محتوى البيانات. ومع ذلك، من خلال الاستفادة من خصائص FHE، يمكنه تطبيق الدالة $f$ (على سبيل المثال، نموذج استدلال التعلم الآلي) على النص المشفر وتوليد $E(f(x))$. يتلقى العميل هذا ويفك تشفيره باستخدام مفتاحه الخاص للحصول على النتيجة المطلوبة $y = f(x)$.&lt;/p>
&lt;hr>
&lt;h2 id="2-تاريخ-تطور-التشفير-المتماثل-phe-و-she-و-fhe">2. تاريخ تطور التشفير المتماثل: PHE و SHE و FHE
&lt;/h2>&lt;p>لم يصل التشفير المتماثل إلى شكله &amp;ldquo;الكامل&amp;rdquo; الحالي دفعة واحدة. يُصنف بشكل عام إلى ثلاث مراحل بناءً على أنواع وعدد العمليات التي يمكن تنفيذها.&lt;/p>
&lt;h3 id="التشفير-المتماثل-جزئيا-phe-partially-homomorphic-encryption">التشفير المتماثل جزئيًا (PHE: Partially Homomorphic Encryption)
&lt;/h3>&lt;p>PHE هو نظام تشفير يمكنه إجراء &lt;strong>إما&lt;/strong> الجمع أو الضرب بعدد غير محدود من المرات. في الواقع، فإن أنظمة التشفير التي تتمتع بهذه الخاصية موجودة منذ فترة طويلة.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>تشفير RSA (التماثل بالنسبة للضرب)&lt;/strong>
يمتلك تشفير RSA عن غير قصد خاصية التماثل بالنسبة للضرب. بافتراض أن النصوص الصريحة هي $m_1, m_2$ والمفتاح العام هو $(e, N)$:
$$ E(m_1) = m_1^e \pmod N $$
$$ E(m_2) = m_2^e \pmod N $$
عند ضربهما معًا:
$$ E(m_1) \times E(m_2) = (m_1 \cdot m_2)^e \pmod N = E(m_1 \times m_2) $$
وهكذا، يتوافق ضرب النصوص المشفرة مع ضرب النصوص الصريحة.&lt;/li>
&lt;li>&lt;strong>تشفير Paillier (التماثل بالنسبة للجمع)&lt;/strong>
يمتلك تشفير Paillier، الذي تم ابتكاره في عام 1999، التماثل بالنسبة للجمع. وقد تم وضعه موضع التنفيذ في مجالات مثل التصويت الإلكتروني (حيث يتم فرز الأصوات المشفرة وفك تشفير النتيجة النهائية فقط).&lt;/li>
&lt;/ul>
&lt;h3 id="التشفير-المتماثل-المحدود-she-somewhat-homomorphic-encryption">التشفير المتماثل المحدود (SHE: Somewhat Homomorphic Encryption)
&lt;/h3>&lt;p>يمكنه تنفيذ &lt;strong>كلا&lt;/strong> عمليتي الجمع والضرب، ولكنه نظام يوجد فيه &lt;strong>قيود على عدد العمليات (عمق الدائرة)&lt;/strong> التي يمكن إجراؤها. بسبب تراكم &amp;ldquo;الضوضاء&amp;rdquo; الموضح أدناه، يصبح فك التشفير مستحيلاً إذا تم إجراء عدد معين من عمليات الضرب. يندرج تشفير BGN (Boneh-Goh-Nissim) لعام 2005 ضمن هذه الفئة، ولكن كانت هناك حدود لإجراء الحسابات المعقدة العملية (مثل التعلم العميق).&lt;/p>
&lt;h3 id="التشفير-المتماثل-بالكامل-fhe-fully-homomorphic-encryption">التشفير المتماثل بالكامل (FHE: Fully Homomorphic Encryption)
&lt;/h3>&lt;p>إنه نظام تشفير يمكنه إجراء عمليتي الجمع والضرب بعدد &lt;strong>غير محدود&lt;/strong> من المرات. تمامًا مثل اكتمال تورينج (Turing completeness) في نظرية المعلومات، إذا أمكن الجمع (بما يعادل XOR) والضرب (بما يعادل AND) بشكل غير محدود، فهذا يعني نظريًا أن أي دالة أو خوارزمية قابلة للحساب يمكن تنفيذها مع بقاء البيانات مشفرة.&lt;/p>
&lt;p>لفترة طويلة، أُطلق على FHE اسم &amp;ldquo;الكأس المقدسة للتشفير&amp;rdquo;، وقيل إنه قد يكون من المستحيل تحقيقه. ومع ذلك، في عام 2009، اقترح &lt;strong>كريج جينتري (Craig Gentry)&lt;/strong>، الذي كان حينها طالب دكتوراه في جامعة ستانفورد، أول نظام FHE باستخدام الشبكات المثالية (Ideal Lattices)، وصدم العالم.&lt;/p>
&lt;hr>
&lt;h2 id="3-الأساس-الرياضي-لـ-fhe-مشكلة-lwe-و-ring-lwe">3. الأساس الرياضي لـ FHE: مشكلة LWE و Ring-LWE
&lt;/h2>&lt;p>تستند العديد من أنظمة FHE السائدة حاليًا إلى &lt;strong>مشكلة التعلم مع الأخطاء (LWE: Learning With Errors)&lt;/strong>، وهي مشكلة رياضية صعبة في &amp;ldquo;التشفير القائم على الشبكات&amp;rdquo; (Lattice-based Cryptography)، والمعروفة أيضًا باسم تشفير ما بعد الكم (Post-Quantum Cryptography).&lt;/p>
&lt;h3 id="فهم-بديهي-لمشكلة-lwe">فهم بديهي لمشكلة LWE
&lt;/h3>&lt;p>من السهل حل نظام من المعادلات الخطية باستخدام طرق مثل الحذف الغاوسي (Gaussian elimination).&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 \equiv 12 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 \equiv 8 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>ولكن ماذا يحدث إذا أضفنا &amp;ldquo;خطأ عشوائي (ضوضاء)&amp;rdquo; $e$ صغير جدًا لنتيجة هذه المعادلات؟&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 + e_1 \equiv 13 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 + e_2 \equiv 7 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>بمجرد إضافة هذا الخطأ $e$، تتحول مشكلة إيجاد متجه المتغيرات السري $\vec{s}$ إلى مشكلة NP صعبة من الصعب فك تشفيرها حتى باستخدام أجهزة الكمبيوتر العملاقة الحالية أو أجهزة الكمبيوتر الكمومية. هذه هي مشكلة LWE.&lt;/p>
&lt;h3 id="مشكلة-ring-lwe-rlwe">مشكلة Ring-LWE (RLWE)
&lt;/h3>&lt;p>نظرًا لأن مشكلة LWE القياسية تتضمن عمليات على المصفوفات، فقد كانت هناك مشكلة تتمثل في أن حجم المفتاح كبير جدًا (أحيانًا يصل إلى الجيجابايت) وكفاءة الحساب ضعيفة. ولحل هذه المشكلة تم إدخال &lt;strong>مشكلة Ring-LWE (RLWE)&lt;/strong>، والتي تستخدم عمليات على حلقات متعددات الحدود.&lt;/p>
&lt;p>في RLWE، تنتمي العناصر إلى حلقة متعددات الحدود $R_q = \mathbb{Z}_q[x] / (x^N + 1)$ (حيث $N$ هي قوة للعدد 2، و $q$ عدد أولي هو المعيار (modulo)).
بافتراض أن المفتاح الخاص هو متعدد الحدود $s(x)$، ومتعدد الحدود العشوائي $a(x)$، ومتعدد حدود للضوضاء الصغيرة $e(x)$، فإن المفتاح العام يصبح الزوج التالي:&lt;/p>
$$ (a(x), b(x)) \quad \text{where} \quad b(x) = -a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>عند التشفير، تُستخدم خصائص هذه المتعددات الحدود لتشفير النص الصريح $m(x)$ وتوليد النص المشفر.&lt;/p>
&lt;hr>
&lt;h2 id="4-أكبر-عائق-الضوضاء-و-bootstrapping-الخاص-بجينتري">4. أكبر عائق &amp;ldquo;الضوضاء&amp;rdquo; و Bootstrapping الخاص بجينتري
&lt;/h2>&lt;p>يُعد مفهوم &lt;strong>&amp;ldquo;إدارة الضوضاء&amp;rdquo;&lt;/strong> هو الأهم في فهم FHE.&lt;/p>
&lt;p>في أنظمة التشفير القائمة على LWE/RLWE، يتم تضمين &amp;ldquo;ضوضاء (خطأ)&amp;rdquo; صغيرة عمدًا لضمان الأمان.
يمكن التعبير عن عملية فك تشفير النص المشفر $c$ الخاص بالنص الصريح $m$ بشكل تقريبي باستخدام المعادلة التالية.&lt;/p>
$$ D(c) = (c \cdot s) \pmod q = m + \text{noise} $$
&lt;p>عند فك التشفير، تتم إزالة هذا الـ &lt;code>noise&lt;/code> (الضوضاء) عن طريق عمليات التقريب للحصول على النص الصريح الصحيح $m$. ومع ذلك، عند إجراء عمليات متماثلة (خاصة الضرب) بين النصوص المشفرة، تتضخم هذه الضوضاء بشكل كبير.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>الجمع المتماثل&lt;/strong>: تزداد الضوضاء بشكل جمعي ($e_1 + e_2$). هذه زيادة تدريجية نسبيًا.&lt;/li>
&lt;li>&lt;strong>التعبير الرياضي للتماثل عبر الجمع المتماثل&lt;/strong>:
$$ E(m_1) \oplus E(m_2) = E(m_1 + m_2) $$&lt;/li>
&lt;li>&lt;strong>الضرب المتماثل&lt;/strong>: تنفجر الضوضاء بشكل مضاعف (لأنها تتضمن $e_1 \times e_2$ وما إلى ذلك). بعد عدة عمليات ضرب فقط، تتجاوز الضوضاء العتبة $q/2$، وتفشل عملية التقريب الصحيحة، مما يجعل فك التشفير مستحيلاً.&lt;/li>
&lt;li>&lt;strong>التعبير الرياضي للتماثل عبر الضرب المتماثل&lt;/strong>:
$$ E(m_1) \otimes E(m_2) = E(m_1 \times m_2) $$&lt;/li>
&lt;/ul>
&lt;p>هذا هو السبب وراء عدم إمكانية تحقيق FHE لفترة طويلة، وبقائه عند مستوى SHE (بعدد محدود من العمليات).&lt;/p>
&lt;h3 id="سحر-bootstrapping">سحر Bootstrapping
&lt;/h3>&lt;p>كانت مساهمة كريج جينتري العبقرية هي ابتكار طريقة لتقليل الضوضاء تُسمى &lt;strong>&amp;ldquo;Bootstrapping&amp;rdquo; (التمهيد)&lt;/strong>. كان هذا تحولاً نموذجياً في علم التشفير.&lt;/p>
&lt;p>بشكل بديهي، هذه عملية &amp;ldquo;قبل أن يُصبح النص المشفر ممتلئًا بالضوضاء ويفسد، يتم &amp;lsquo;فك تشفيره&amp;rsquo; وهو في حالة التشفير لتنظيفه، ثم إعادته إلى نص مشفر جديد&amp;rdquo;.&lt;/p>
&lt;ol>
&lt;li>افترض أن لدينا نصًا مشفرًا عالي الضوضاء $C_{noisy}$.&lt;/li>
&lt;li>يزود العميل الخادم مسبقًا بـ المفتاح الخاص $sk$ &amp;ldquo;المشفر بالمفتاح العام&amp;rdquo; $E_{pk}(sk)$ (يُطلق على هذا مفتاح Bootstrapping).&lt;/li>
&lt;li>يقوم الخادم بتنفيذ &lt;strong>دائرة فك التشفير (Decryption Circuit)&lt;/strong> بشكل متماثل على $C_{noisy}$.&lt;/li>
&lt;li>على وجه التحديد، يتم إجراء &amp;ldquo;فك التشفير داخل المساحة المشفرة&amp;rdquo; على $E_{pk}(C_{noisy})$ باستخدام $E_{pk}(sk)$.&lt;/li>
&lt;li>تُنتج دائرة فك التشفير هذه ضوضاء جديدة لأنها في حد ذاتها عملية متماثلة، ولكن ضوضاء النص المشفر الجديد الناتج $C_{fresh}$ يتم إعادة تعيينها إلى &amp;ldquo;مستوى ثابت&amp;rdquo;.&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["نص مشفر عالي الضوضاء C_noisy"] --> B["دائرة فك تشفير متماثلة (Eval_Dec)"]
C["المفتاح الخاص المشفر E(sk)"] --> B
B --> D["نص مشفر منخفض الضوضاء C_fresh"]
style B fill:#ffeeba,stroke:#ffc107&lt;/div>
&lt;p>من خلال تنفيذ Bootstrapping هذا بانتظام أثناء الحساب، أصبح من الممكن نظريًا حساب دوائر ذات عمق لا نهائي (تحقيق FHE). ومع ذلك، كانت طريقة جينتري الأولية تتطلب تكلفة حسابية باهظة ومحبطة، حيث تستغرق عملية Bootstrapping الواحدة من عدة عشرات من الدقائق إلى عدة ساعات.&lt;/p>
&lt;hr>
&lt;h2 id="5-أجيال-fhe-وتطور-الأنظمة-الرئيسية">5. أجيال FHE وتطور الأنظمة الرئيسية
&lt;/h2>&lt;p>نحو وضع FHE موضع التنفيذ، تنافس علماء التشفير في جميع أنحاء العالم لتحسين الخوارزميات. حاليًا، يُصنف FHE بشكل رئيسي إلى أربعة أجيال / عائلات.&lt;/p>
&lt;h3 id="الجيل-الثاني-العمليات-الدقيقة-على-الأعداد-الصحيحة-bgv-bfv">الجيل الثاني: العمليات الدقيقة على الأعداد الصحيحة (BGV, BFV)
&lt;/h3>&lt;p>نظاما &lt;strong>BGV (Brakerski-Gentry-Vaikuntanathan)&lt;/strong> و &lt;strong>BFV (Brakerski/Fan-Vercauteren)&lt;/strong> اللذان ظهرا بين عامي 2011 و 2012. يعتمدان على RLWE، وهما مناسبان للعمليات المعيارية للأعداد الصحيحة (الحسابات الدقيقة).
وهي تدعم تقنيات التجميع (Batching) مثل SIMD (تعليمة واحدة، بيانات متعددة)، وتتميز بإمكانية تعبئة آلاف فتحات البيانات داخل نص مشفر لمتعدد حدود عملاق واحد وإجراء حسابات متوازية دفعة واحدة.&lt;/p>
&lt;h3 id="الجيل-الثالث-تسريع-bootstrapping-gsw-fhew-tfhe">الجيل الثالث: تسريع Bootstrapping (GSW, FHEW, TFHE)
&lt;/h3>&lt;p>جعل نظام &lt;strong>GSW (Gentry-Sahai-Waters)&lt;/strong> لعام 2013 بنية FHE أبسط. وما طور هذا النظام هو أحد الأنظمة السائدة الحالية، &lt;strong>TFHE (Fast Fully Homomorphic Encryption over the Torus)&lt;/strong>.
تتمثل ميزة TFHE في أن Bootstrapping سريع جدًا (في نطاق الملي ثانية). إنه قوي في العمليات على مستوى البوابات المنطقية (مثل دوائر AND و XOR)، وحجم النص المشفر صغير نسبيًا، مما يجعله مناسبًا للتقييم السريع لأي دوائر منطقية.&lt;/p>
&lt;h3 id="الجيل-الرابع-التخصص-في-الحساب-التقريبي-والتعلم-الآلي-ckks">الجيل الرابع: التخصص في الحساب التقريبي والتعلم الآلي (CKKS)
&lt;/h3>&lt;p>نظام &lt;strong>CKKS (Cheon-Kim-Kim-Song)&lt;/strong> الذي اقترحه تشيون (Cheon) وآخرون في عام 2017 هو التكنولوجيا التي يمكن اعتبارها الإصدار النهائي في حماية الخصوصية للذكاء الاصطناعي والتعلم الآلي الحاليين.
في حين ركزت أنظمة FHE السابقة على &amp;ldquo;الحساب الدقيق للأعداد الصحيحة&amp;rdquo;، فإن CKKS يدعم &lt;strong>&amp;ldquo;الحساب التقريبي لأرقام الفاصلة العائمة&amp;rdquo;&lt;/strong> مع الحفاظ عليها مشفرة. يُظهر أداءً ساحقًا في الحسابات على الأعداد الحقيقية حيث يُسمح بأخطاء صغيرة، مثل تدريب واستدلال الشبكات العصبية.&lt;/p>
&lt;p>يلخص الجدول التالي كيفية اختيار الأنظمة بناءً على الغرض.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">اسم النظام&lt;/th>
&lt;th style="text-align:left">نوع البيانات المفضل&lt;/th>
&lt;th style="text-align:left">حالة الاستخدام الموصى بها&lt;/th>
&lt;th style="text-align:left">الميزات&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>BFV / BGV&lt;/strong>&lt;/td>
&lt;td style="text-align:left">أعداد صحيحة (Integer)&lt;/td>
&lt;td style="text-align:left">حسابات إحصائية دقيقة، تجميع البيانات المالية، البحث في قواعد البيانات&lt;/td>
&lt;td style="text-align:left">إنتاجية عالية بفضل تجميع SIMD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>CKKS&lt;/strong>&lt;/td>
&lt;td style="text-align:left">أعداد حقيقية/مركبة (Real/Complex)&lt;/td>
&lt;td style="text-align:left">التعلم الآلي (DNN، الانحدار اللوجستي)، معالجة الإشارات&lt;/td>
&lt;td style="text-align:left">تسريع عبر الحساب التقريبي، إعادة القياس&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>TFHE&lt;/strong>&lt;/td>
&lt;td style="text-align:left">قيم منطقية (Boolean)&lt;/td>
&lt;td style="text-align:left">أي دائرة منطقية، البحث في السلاسل النصية، تقييم الدوال غير الخطية&lt;/td>
&lt;td style="text-align:left">Bootstrapping فائق السرعة (مستوى الملي ثانية)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="6-التطبيق-العملي-مكتبات-fhe-ورمز-برمجي-مفاهيمي">6. التطبيق العملي: مكتبات FHE ورمز برمجي مفاهيمي
&lt;/h2>&lt;p>حاليًا، يتم توفير العديد من المكتبات مفتوحة المصدر التي تتيح لك استخدام FHE دون معرفة عميقة بالتشفير.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Microsoft SEAL (Simple Encrypted Arithmetic Library)&lt;/strong>: مكتبة C++ تدعم BFV و BGV و CKKS. إنها واحدة من معايير الصناعة. واجهة بايثون &lt;strong>TenSEAL&lt;/strong> تحظى بشعبية بين مهندسي الذكاء الاصطناعي.&lt;/li>
&lt;li>&lt;strong>Zama (Concrete)&lt;/strong>: إطار عمل يعتمد على TFHE. يمكن كتابته بـ Rust/Python، ويوفر القدرة على تجميع نماذج PyTorch الحالية وتشغيلها على FHE (Concrete ML).&lt;/li>
&lt;li>&lt;strong>OpenFHE&lt;/strong>: خليفة PALISADE، وهي مكتبة C++ شاملة تدعم جميع الأنظمة الرئيسية.&lt;/li>
&lt;/ul>
&lt;h3 id="مثال-على-برمجة-fhe-باستخدام-python-tenseal">مثال على برمجة FHE باستخدام Python (TenSEAL)
&lt;/h3>&lt;p>هنا، سنعرض مثالاً على كود Python مفاهيمي يستخدم نظام CKKS لإضافة وضرب متجهات الأعداد الحقيقية وهي مشفرة.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">tenseal&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">ts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. إعداد السياق (بما في ذلك توليد المفاتيح)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># استخدام نظام CKKS وتعيين درجة المعيار لمتعددة الحدود إلى 8192&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">SCHEME_TYPE&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CKKS&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">poly_modulus_degree&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8192&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">coeff_mod_bit_sizes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_galois_keys&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">global_scale&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">40&lt;/span> &lt;span class="c1"># عامل القياس للأعداد الحقيقية&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. جانب العميل: تشفير البيانات&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">1.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># تحويل متجهات النص الصريح إلى نصوص مشفرة (عادةً يُنفذ في جانب العميل)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. جانب الخادم: العمليات أثناء التشفير (حماية Data in Use)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># الخادم لا يعرف النصوص الصريحة، لكنه يمكنه تنفيذ الجمع والضرب&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. جانب العميل: فك تشفير النتائج&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># العميل الذي يمتلك المفتاح الخاص هو الوحيد الذي يمكنه رؤية النتائج&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_add&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_mul&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;نتيجة الجمع مفكوكة التشفير: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_add&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># مثال المخرجات: [3.5000001, 5.5000001, 7.5000002] (تتضمن أخطاء ضئيلة بسبب الحساب التقريبي)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;نتيجة الضرب مفكوكة التشفير: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_mul&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># مثال المخرجات: [3.0000002, 7.5000005, 14.0000003]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>كما يتضح من الكود أعلاه، يمكنك ببساطة زيادة تحميل العوامل (operator overloading) في بايثون العادية مثل &lt;code>enc_v1 + enc_v2&lt;/code> لوصف الحسابات بين النصوص المشفرة بشكل بديهي. من جانب الخادم، يكتمل حساب المتجهات دون معرفة محتوى المتجهات.&lt;/p>
&lt;hr>
&lt;h2 id="7-تحديات-fhe-الأداء-وتسريع-الأجهزة">7. تحديات FHE: الأداء وتسريع الأجهزة
&lt;/h2>&lt;p>يوفر FHE أمانًا مثاليًا من الناحية النظرية، ولكن التحدي الأكبر في التنفيذ العملي هو &lt;strong>&amp;ldquo;عبء الأداء (Overhead)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>عبء الحساب&lt;/strong>: مقارنة بالحساب في النص الصريح، يكون الحساب في النص المشفر أبطأ بآلاف إلى عشرات الآلاف من المرات على وحدات المعالجة المركزية (CPUs). تتطلب عملية ضرب متعددات الحدود و Bootstrapping عمليات حسابية ضخمة مثل FFT (تحويل فورييه السريع) و NTT (تحويل نظرية الأعداد).&lt;/li>
&lt;li>&lt;strong>تضخم حجم البيانات (Ciphertext Expansion)&lt;/strong>: يمكن أن تتحول عدة بايتات من النص الصريح إلى عدة ميغابايتات عند التشفير. وهذا يضع ضغطًا كبيرًا على النطاق الترددي للذاكرة والشبكة.&lt;/li>
&lt;/ol>
&lt;h3 id="نهج-الحلول-عبر-الأجهزة">نُهج الحلول عبر الأجهزة
&lt;/h3>&lt;p>للتغلب على هذا العبء، يجري تطوير مسرعات أجهزة (Hardware Accelerators) مخصصة لـ FHE (متوافقة مع ASIC, FPGA, GPU) في جميع أنحاء العالم.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>تسريع وحدة معالجة الرسومات (GPU Acceleration)&lt;/strong>: تجري الجهود لتوازي عمليات NTT و Bootstrapping باستخدام وحدات معالجة رسومات قوية مثل تلك من NVIDIA، وتم الإبلاغ عن تسريع بعشرات المرات مقارنة بتنفيذ البرامج (مثال: 100x.ai، واجهة TFHE-rs CUDA من Zama).&lt;/li>
&lt;li>&lt;strong>مشروع DARPA DPRIVE&lt;/strong>: تعزز وكالة مشاريع الأبحاث المتقدمة للدفاع الأمريكية (DARPA) مشروع تطوير الأجهزة المخصصة &amp;ldquo;DPRIVE (Data Protection in Virtual Environments)&amp;rdquo; لرفع سرعة حساب FHE إلى مستوى مكافئ لسرعة تنفيذ معالجة النص الصريح (عبء أقل من 10 أضعاف)، وتشارك فيه شركات مثل Intel و Microsoft و Intellectual Ventures.&lt;/li>
&lt;li>&lt;strong>ظهور FPU (FHE Processing Unit)&lt;/strong>: بدأت شركات ناشئة مثل Cornami و Optalysys في تطوير شرائح مخصصة لـ FHE باستخدام الحوسبة الضوئية وهياكل السيليكون المتخصصة.&lt;/li>
&lt;/ul>
&lt;p>في المستقبل القريب، مثل NPU (وحدة المعالجة العصبية) في الذكاء الاصطناعي، قد يأتي عصر تصبح فيه &amp;ldquo;FPU&amp;rdquo; مجهزة بشكل قياسي في الخوادم والبنى التحتية السحابية.&lt;/p>
&lt;hr>
&lt;h2 id="8-حالات-الاستخدام-المتوقعة">8. حالات الاستخدام المتوقعة
&lt;/h2>&lt;p>الآن بعد أن وصل FHE إلى سرعة عملية، يُتوقع حدوث ابتكارات جذرية في المجالات التالية:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>حماية الخصوصية في الرعاية الصحية والتحليل الجينومي&lt;/strong>:
من خلال جعل الذكاء الاصطناعي السحابي يتدرب على بيانات سجلات المرضى أو بيانات الحمض النووي (DNA) التي تحتفظ بها مستشفيات متعددة وهي مشفرة بواسطة FHE، يمكن تطوير نماذج تشخيص السرطان عالية الدقة وأدوية جديدة دون انتهاك قوانين الخصوصية (HIPAA و GDPR).&lt;/li>
&lt;li>&lt;strong>كشف الاحتيال ومكافحة غسيل الأموال (AML) في المؤسسات المالية&lt;/strong>:
يمكن للبنوك المتنافسة إجراء تحليل عبر البنوك للكشف عن شبكات التحويلات الاحتيالية الضخمة عن طريق مطابقة بيانات بعضها البعض في حالة مشفرة، دون الكشف عن معلومات حسابات العملاء أو سجل معاملاتهم.&lt;/li>
&lt;li>&lt;strong>واجهة برمجة تطبيقات استدلال الذكاء الاصطناعي الآمنة (MaaS: Model as a Service)&lt;/strong>:
يقوم المستخدمون بتشفير أصواتهم وصور وجوههم ومطالباتهم وإرسالها إلى خدمة الذكاء الاصطناعي (مثل النماذج اللغوية الكبيرة كـ ChatGPT). يقوم مزود الذكاء الاصطناعي بإنشاء إجابة دون معرفة مدخلات المستخدم على الإطلاق وإعادتها كنص مشفر. هذا يزيل تمامًا المخاوف من &amp;ldquo;التعلم أو التلصص على المعلومات الشخصية بواسطة الذكاء الاصطناعي&amp;rdquo;.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="9-الخلاصة-مستقبل-التشفير-يتجه-نحو-الحساب-غير-المرئي">9. الخلاصة: مستقبل التشفير يتجه نحو &amp;ldquo;الحساب غير المرئي&amp;rdquo;
&lt;/h2>&lt;p>تمامًا كما تم اختراع تشفير المفتاح العام (RSA) في سبعينيات القرن العشرين ومكّن الاتصال الآمن على الإنترنت (مثل HTTPS)، فإن اختراع FHE من قبل كريج جينتري يعد واحدًا من أهم المعالم في تاريخ التشفير.&lt;/p>
&lt;p>حاليًا، خرج التشفير المتماثل بالكامل (FHE) من نظرية المختبر إلى مرحلة تتنافس فيها Microsoft و IBM و Intel و Google والعديد من الشركات الناشئة لوضعه موضع التنفيذ. على الرغم من استمرار تحديات التكلفة الحسابية وحجم البيانات، يستمر تحسين الأداء بوتيرة تتجاوز قانون مور بفضل تحسين الخوارزميات وتطور مسرعات الأجهزة.&lt;/p>
&lt;p>في غضون بضع سنوات، لن يكون &amp;ldquo;الحساب مع إبقاء البيانات مشفرة&amp;rdquo; شيئًا مميزًا، بل سيصبح ممارسة معيارية فضلى لحماية البيانات في الخدمات السحابية. يمثل FHE جوهر أمن الجيل القادم الذي يدرك &lt;strong>التعايش المثالي بين الخصوصية المطلقة واستخدام البيانات&lt;/strong> في مجتمع يعتمد على البيانات.&lt;/p></description></item><item><title>هل توجد خوارزمية تتجاوز GNFS (غربال حقل الأعداد العام)؟</title><link>http://kenji.blog/ar/p/beyond-gnfs-integer-factorization-algorithms/</link><pubDate>Fri, 11 Sep 2026 09:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/beyond-gnfs-integer-factorization-algorithms/</guid><description>&lt;img src="http://kenji.blog/p/beyond-gnfs-integer-factorization-algorithms/img/eyecatch.jpg" alt="Featured image of post هل توجد خوارزمية تتجاوز GNFS (غربال حقل الأعداد العام)؟" />&lt;h2 id="1-مقدمة-تحليل-العوامل-الأولية-وأساس-التشفير-الحديث">1. مقدمة: تحليل العوامل الأولية وأساس التشفير الحديث
&lt;/h2>&lt;p>تعتمد أمان اتصالات الإنترنت في المجتمع الحديث بشكل كبير على أمان تشفير RSA، وهو تشفير بالمفتاح العام. ويعتمد أمان تشفير RSA على افتراض رياضي وهو &amp;ldquo;صعوبة تحليل الأعداد المركبة الضخمة إلى عواملها الأولية&amp;rdquo;. إذا تم اكتشاف خوارزمية تحليل عوامل أولية عالية الكفاءة، فإن البنية التحتية للاتصالات في جميع أنحاء العالم ستنهار من جذورها.&lt;/p>
&lt;p>حاليًا، تعتبر خوارزمية &lt;strong>غربال حقل الأعداد العام (GNFS: General Number Field Sieve)&lt;/strong> هي الخوارزمية الأسرع والأقوى في تحليل الأعداد الصحيحة الضخمة باستخدام أجهزة الكمبيوتر الكلاسيكية. ولدت GNFS كتوسيع لغربال حقل الأعداد الخاص (SNFS) المقترح في أواخر الثمانينيات، وحتى يومنا هذا سجلت أرقامًا قياسية في تحليل الأعداد المركبة الضخمة مثل RSA-768 و RSA-250.&lt;/p>
&lt;p>ومع ذلك، يطرح علماء التشفير وعلماء الرياضيات دائمًا الأسئلة التالية: &amp;ldquo;هل توجد خوارزمية كلاسيكية تتجاوز GNFS؟&amp;rdquo; &amp;ldquo;أين تكمن حدود أجهزة الكمبيوتر الكلاسيكية؟&amp;rdquo; و&amp;quot;كيف ستكسر أجهزة الكمبيوتر الكمومية هذا الوضع؟&amp;quot;&lt;/p>
&lt;p>في هذه المقالة، سنقوم بتشريح البنية الرياضية العميقة وراء GNFS بدقة، وإجراء تحليل تقني مفصل لخطوات مثل اختيار متعددة الحدود، ومرحلة الغربلة، وخطوة الجبر الخطي باستخدام طريقة Block Wiedemann. علاوة على ذلك، سنناقش طرق توسيع GNFS مثل تحسينات Coppersmith، ونقارن ونشرح الاختلافات الحاسمة بين الخوارزميات الكلاسيكية ذات الوقت شبه الأسي (Sub-exponential time) والخوارزميات الكمومية ذات الوقت متعدد الحدود من منظور رياضي.&lt;/p>
&lt;hr>
&lt;h2 id="2-التعقيد-الحسابي-المقارب-وتدوين-l-l-notation">2. التعقيد الحسابي المقارب وتدوين L (L-notation)
&lt;/h2>&lt;p>عند تقييم التعقيد الحسابي لخوارزميات تحليل العوامل الأولية، بدلاً من استخدام تدوين الوقت متعدد الحدود القياسي (مثل $O(n^k)$)، يتم استخدام &lt;strong>تدوين L (L-notation)&lt;/strong> للتعبير عن الوقت شبه الأسي بالنسبة لعدد أرقام المدخل $n$. يتم تعريف تدوين L على النحو التالي:&lt;/p>
$$
L_n[\alpha, c] = \exp \left( (c + o(1)) (\ln n)^\alpha (\ln \ln n)^{1-\alpha} \right)
$$
&lt;p>هنا، $n$ هو العدد الصحيح المراد تحليله، و $\ln n$ هو اللوغاريتم الطبيعي ويتناسب مع طول البت لـ $n$.&lt;/p>
&lt;ul>
&lt;li>في حالة $\alpha = 0$: تصبح $L_n[0, c] = \exp(c \ln \ln n) = (\ln n)^c$، وتمثل &lt;strong>الوقت متعدد الحدود (Polynomial time)&lt;/strong> بالنسبة لطول البت.&lt;/li>
&lt;li>في حالة $\alpha = 1$: تصبح $L_n[1, c] = \exp(c \ln n) = n^c$، وتمثل &lt;strong>الوقت الأسي (Exponential time)&lt;/strong> بالنسبة لطول البت.&lt;/li>
&lt;li>في حالة $0 &lt; \alpha &lt; 1$: يمثل هذا &lt;strong>وقتًا شبه أسي (Sub-exponential time)&lt;/strong> يقع بين الوقت متعدد الحدود والوقت الأسي.&lt;/li>
&lt;/ul>
&lt;p>كان تطور خوارزميات تحليل العوامل الأولية في الماضي تاريخًا لتقليل قيمة $\alpha$ هذه تدريجيًا.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>طريقة الكسور المستمرة (CFRAC) وغربال التربيع متعدد الحدود المتعدد (MPQS)&lt;/strong>: تنتمي إلى فئة $\alpha = 1/2$، وتعقيدها الحسابي حوالي $L_n[1/2, 1]$.&lt;/li>
&lt;li>&lt;strong>غربال حقل الأعداد العام (GNFS)&lt;/strong>: حقق $\alpha = 1/3$، ويتميز بأسرع تعقيد حسابي معروف بين الخوارزميات الكلاسيكية الحالية وهو $L_n[1/3, (64/9)^{1/3}]$.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="3-النظرة-الشاملة-لخوارزمية-gnfs-والبنية-الرياضية">3. النظرة الشاملة لخوارزمية GNFS والبنية الرياضية
&lt;/h2>&lt;p>تمتلك خوارزمية GNFS أساسًا رياضيًا معقدًا ومتقدمًا للغاية. تقع الفكرة الأساسية كامتداد لمبرهنة فيرما الصغرى وطريقة الغربال التربيعي (QS)، وتتمثل في إيجاد زوج غير بديهي $(X, Y)$ يحقق التطابق $X^2 \equiv Y^2 \pmod n$ بحيث أن $X \not\equiv \pm Y \pmod n$، ومن ثم استنتاج العامل $\gcd(X-Y, n)$ للعدد $n$.&lt;/p>
&lt;p>ومع ذلك، يكمن جوهر GNFS في عدم القيام بذلك فقط في حقل الأعداد الكسرية $\mathbb{Q}$، ولكن من خلال البحث في وقت واحد عن &amp;ldquo;الأعداد الملساء (Smooth numbers)&amp;rdquo; في كل من امتداد الحقل المسمى حقل الأعداد الجبرية (Algebraic Number Field) $\mathbb{Q}(\alpha)$ وحقل الأعداد الكسرية، وبناء علاقة تطابق من خلال التشاكل (Homomorphism).&lt;/p>
&lt;p>تنقسم عملية GNFS بشكل رئيسي إلى 5 مراحل.&lt;/p>
&lt;div class="mermaid">graph TD
A["مشكلة تحليل العوامل الأولية (المدخلات n)"] --> B["1. اختيار متعددة الحدود (Polynomial Selection)"]
B --> C["2. مرحلة الغربلة (Sieving Phase)"]
C --> D["3. مرحلة التصفية (Filtering Phase)"]
D --> E["4. الجبر الخطي (Linear Algebra Phase)"]
E --> F["5. الجذر التربيعي (Square Root Phase)"]
F --> G["إخراج العوامل الأولية p, q"]&lt;/div>
&lt;h3 id="31-المرحلة-1-اختيار-متعددة-الحدود-polynomial-selection">3.1 المرحلة 1: اختيار متعددة الحدود (Polynomial Selection)
&lt;/h3>&lt;p>يعتمد نجاح GNFS بشكل كبير على اختيار متعددة الحدود المناسبة. الهدف هو إيجاد اثنتين من متعددات الحدود غير القابلة للاختزال $f_1(x)$ (الجانب الكسري) و $f_2(x)$ (الجانب الجبري) تشتركان في الجذر $m$. أي أنهما تحققان:
$f_1(m) \equiv f_2(m) \equiv 0 \pmod n$&lt;/p>
&lt;p>عادة، نختار لمتعددة الحدود في الجانب الكسري معادلة خطية $f_1(x) = x - m$، ونختار لمتعددة الحدود في الجانب الجبري $f_2(x)$ متعددة حدود أحادية (Monic polynomial) من الدرجة $d$ (عادة 5 أو 6). النهج الكلاسيكي الأكثر شيوعًا هو &lt;strong>طريقة الأساس-$m$ (Base-$m$ method)&lt;/strong>.
نختار عددًا صحيحًا $m = \lfloor n^{1/(d+1)} \rfloor$ قريبًا من القوة $1/(d+1)$ للعدد $n$، ونقوم بتوسيع $n$ في الأساس $m$.
$n = c_d m^d + c_{d-1} m^{d-1} + \dots + c_1 m + c_0$
وبهذا نحصل على متعددة الحدود $f_2(x) = c_d x^d + c_{d-1} x^{d-1} + \dots + c_0$. ومن الواضح أن $f_2(m) = n \equiv 0 \pmod n$.&lt;/p>
&lt;p>ومع ذلك، في التطبيقات الحديثة يتم استخدام &lt;strong>خوارزمية Kleinjung&lt;/strong>. هذه الخوارزمية تبحث عن متعددة حدود من المرجح أن تولد أعدادًا ملساء في مرحلة الغربلة، مع تحسين الخصائص الجبرية (قيمة Murphy&amp;rsquo;s $E$ وقيمة $\alpha$) ومنع معاملات متعددة الحدود من أن تصبح كبيرة جدًا (تحسين الانحراف Skewness). يتم استثمار قدر كبير من الموارد الحسابية في هذه الخطوة وحدها.&lt;/p>
&lt;h3 id="32-المرحلة-2-مرحلة-الغربلة-sieving-phase">3.2 المرحلة 2: مرحلة الغربلة (Sieving Phase)
&lt;/h3>&lt;p>بمجرد تحديد متعددة الحدود، تدخل الخوارزمية في مرحلة &amp;ldquo;الغربلة (Sieving)&amp;rdquo; وهي المرحلة الأكثر عبئًا من الناحية الحسابية. هنا، نبحث عن أزواج $(a, b)$. يجب أن يكون هذا الزوج أوليًا فيما بينه (Coprime)، ويُطلب أن تكون القيمتان التاليتان &amp;ldquo;ملساء (Smooth)&amp;rdquo; في نفس الوقت.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>معيار الجانب الكسري (Norm)&lt;/strong>: $F_1(a, b) = b \cdot f_1(a/b) = a - bm$&lt;/li>
&lt;li>&lt;strong>معيار الجانب الجبري (Norm)&lt;/strong>: $F_2(a, b) = b^d \cdot f_2(a/b)$&lt;/li>
&lt;/ol>
&lt;p>تعني كلمة &amp;ldquo;ملساء&amp;rdquo; أنه يمكن تحليل العدد إلى عوامل أولية باستخدام أعداد أولية فقط أقل من أو تساوي حدًا أعلى محددًا (Sieve bound). يتم إعداد قاعدة عوامل (Factor base) للجانب الكسري وقاعدة عوامل للجانب الجبري، ويتم اكتشاف الأعداد الملساء بكفاءة في مساحة بحث ضخمة بطريقة مشابهة لغربال إراتوستينس.
حاليًا، تعتبر التقنية المسماة &lt;strong>غربلة الشبكة (Lattice Sieving)&lt;/strong> هي السائدة، حيث يتم تثبيت عدد أولي معين $q$، وتقتصر الغربلة على أزواج $(a, b)$ على شبكة جزئية (Sub-lattice) حيث يكون كلا الجانبين الكسري والجبري من مضاعفات $q$، مما يحقق كفاءة عالية جدًا.&lt;/p>
&lt;h3 id="33-المرحلة-3-مرحلة-التصفية-filtering-phase">3.3 المرحلة 3: مرحلة التصفية (Filtering Phase)
&lt;/h3>&lt;p>يصل عدد العلاقات (Relations) الملساء الموجودة في مرحلة الغربلة إلى مئات الملايين أو المليارات. ومع ذلك، فإنها تحتوي أيضًا على الكثير من المعلومات غير المجدية.
الهدف من التصفية هو بناء مصفوفة متناثرة ضخمة (Sparse Matrix) مع تقليل أبعادها قدر الإمكان.&lt;/p>
&lt;p>بشكل ملموس، نقوم بالعمليات التالية:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>إزالة المفردات (Singleton removal)&lt;/strong>: إزالة العلاقات التي تحتوي على عوامل أولية تظهر مرة واحدة فقط.&lt;/li>
&lt;li>&lt;strong>إزالة الزمر / الدمج (Clique removal / Merging)&lt;/strong>: ضرب العلاقات التي تحتوي على عوامل أولية تظهر مرتين أو أكثر معًا للقضاء على المتغيرات، وتقليلها إلى نظام معادلات أكثر كثافة ولكن بأبعاد أصغر.&lt;/li>
&lt;/ul>
&lt;p>وبهذا، يتم ضغط مصفوفة مكونة من مليارات الصفوف إلى مصفوفة متناثرة ضخمة $\mathbf{A}$ في مستوى عشرات الملايين من الصفوف (عناصرها هي 0 و 1 على الحقل $\mathbb{F}_2$).&lt;/p>
&lt;h3 id="34-المرحلة-4-الجبر-الخطي-linear-algebra-phase">3.4 المرحلة 4: الجبر الخطي (Linear Algebra Phase)
&lt;/h3>&lt;p>هنا، نجد متجه حل غير بديهي $\mathbf{x}$ للمعادلة $\mathbf{A} \mathbf{x} \equiv \mathbf{0} \pmod 2$. بعبارة أخرى، إنها مشكلة إيجاد الفضاء الفارغ الأيسر (Left Nullspace) للمصفوفة المتناثرة الضخمة.&lt;/p>
&lt;p>نظرًا لأن حجم المصفوفة كبير للغاية، فمن المستحيل تمامًا حسابها باستخدام طريقة الحذف الغاوسي العادية ($O(N^3)$). لذلك، يتم استخدام طريقة تكرارية وهي نوع من طريقة فضاء كريلوف الفرعي (Krylov subspace method). تاريخيًا، تم استخدام &lt;strong>طريقة بلوك لانشوس (Block Lanczos)&lt;/strong>، ولكن في بيئة الحوسبة الموزعة الحالية، تعتبر &lt;strong>خوارزمية بلوك فيدمان (Block Wiedemann Algorithm)&lt;/strong> هي السائدة لأنها يمكن أن تقلل بشكل كبير من أعباء الاتصال.&lt;/p>
&lt;p>تحسب خوارزمية بلوك فيدمان متعددة الحدود الدنيا من المصفوفة $\mathbf{A}$ وسلسلة من المتجهات، وتبني أساسًا للفضاء الفارغ باستخدام خوارزمية بيرليكامب-ماسي (Berlekamp-Massey). تعد هذه الخطوة صعبة للغاية في التوازي، وتتطلب شبكات اتصال محكمة الاقتران للحواسيب العملاقة أو المجموعات الكبيرة، وهي واحدة من أكبر عنق الزجاجة في GNFS.&lt;/p>
&lt;h3 id="35-المرحلة-5-الجذر-التربيعي-square-root-phase">3.5 المرحلة 5: الجذر التربيعي (Square Root Phase)
&lt;/h3>&lt;p>من خلال حل الجبر الخطي، يتم بناء جداء يصبح &amp;ldquo;مربعًا كاملاً&amp;rdquo; في كل من الجانب الكسري والجانب الجبري.
في الجانب الكسري، يصبح الجداء $\prod (a-bm)$ مربعًا $X^2$ لعدد صحيح $X$، وفي الجانب الجبري، يصبح جداء المثاليات المقابلة مربعًا كاملاً $\gamma^2$ على حقل الأعداد الجبرية.
عن طريق حساب $\gamma$ هذا على حقل الأعداد الجبرية، وتطبيق تشاكل على حلقة الأعداد الصحيحة الكسرية $\phi: \alpha \mapsto m \pmod n$، نحصل على التطابق:
$X^2 \equiv \phi(\gamma)^2 \equiv Y^2 \pmod n$&lt;/p>
&lt;p>لحساب الجذر التربيعي على حقل الأعداد الجبرية، يتم استخدام خوارزميات معقدة مثل &lt;strong>طريقة مونتغومري (Montgomery&amp;rsquo;s Method)&lt;/strong>، وتتطلب معرفة عميقة بنظرية الأعداد الجبرية. أخيرًا، من خلال حساب $\gcd(X-Y, n)$، إذا تم الحصول على عامل غير بديهي، يكتمل تحليل العوامل الأولية.&lt;/p>
&lt;hr>
&lt;h2 id="4-هل-توجد-خوارزمية-كلاسيكية-تتجاوز-gnfs">4. هل توجد خوارزمية كلاسيكية تتجاوز GNFS؟
&lt;/h2>&lt;p>حتى الآن، لم يتم اكتشاف أي خوارزمية كلاسيكية لتحليل العوامل الأولية للأعداد الصحيحة العامة يقل تعقيدها الحسابي المقارب عن $L_n[1/3, c]$. ومع ذلك، هناك بعض المحاولات والخوارزميات المشتقة لاختراق الحدود النظرية والعملية.&lt;/p>
&lt;h3 id="41-غربال-حقول-الأعداد-المتعددة-mnfs-multiple-number-field-sieve">4.1 غربال حقول الأعداد المتعددة (MNFS: Multiple Number Field Sieve)
&lt;/h3>&lt;p>كنهج موسع لـ GNFS، هناك &lt;strong>غربال حقول الأعداد المتعددة (MNFS)&lt;/strong> الذي قدمه D. Coppersmith. تستخدم GNFS اثنتين من متعددات الحدود (الجانب الكسري والجانب الجبري)، بينما تستخدم MNFS متعددات حدود جبرية مختلفة متعددة في وقت واحد لمتعددة حدود كسرية واحدة.&lt;/p>
$$ f_1(x), f_{2,1}(x), f_{2,2}(x), \dots, f_{2,V}(x) $$
&lt;p>باستخدام حقول جبرية متعددة، يمكن زيادة احتمالية أن يصبح العدد &amp;ldquo;أملسًا في أحد الحقول الجبرية&amp;rdquo; بشكل كبير في كل خطوة غربلة. نجح Coppersmith في تقليل الثابت $c$ في التعقيد الحسابي $L_n[1/3, c]$ قليلاً من خلال هذا النهج.
على وجه التحديد، تم إثبات نظريًا أنه بينما الثابت في GNFS هو $c = (64/9)^{1/3} \approx 1.923$، يمكن تقليل التعقيد الحسابي إلى حوالي $c \approx 1.902$ من خلال تحسين MNFS.
ومع ذلك، من الناحية العملية، فإن العبء الإضافي (Overhead) الناتج عن إدارة حقول متعددة كبير، ولم يؤد ذلك إلى اختراق حاسم لمعاملات RSA على نطاق عملي.&lt;/p>
&lt;h3 id="42-هل-من-الممكن-إيجاد-خوارزمية-من-فئة-l_n14">4.2 هل من الممكن إيجاد خوارزمية من فئة $L_n[1/4]$؟
&lt;/h3>&lt;p>السؤال الذي نوقش لفترة طويلة بين علماء الرياضيات حول حدود الخوارزميات الكلاسيكية لتحليل العوامل الأولية هو &amp;ldquo;هل توجد خوارزمية ذات أس $\alpha = 1/4$؟&amp;rdquo;.
ترتبط GNFS الحالية ومشتقاتها بقوة بإطار &amp;ldquo;البحث عن السلاسة&amp;rdquo; من خلال الغربلة، ويُعتقد على نطاق واسع أن $\alpha = 1/3$ هو الحد الأقصى ضمن هذا النموذج. من خلال تحليل احتمالية توزيع الأعداد الصحيحة الملساء باستخدام دالة ديكمان (Dickman function)، يُعتقد أنه لا يمكن تجاوز حاجز $O(L_n[1/3])$ مهما تم التحسين في المزيج الحالي لطريقة بناء حقل الأعداد الجبرية والغربال.&lt;/p>
&lt;p>إذا كانت خوارزمية من فئة $L_n[1/4]$ أو حتى خوارزمية كلاسيكية بوقت متعدد الحدود موجودة، فيجب أن تعتمد على بنية رياضية جديدة تمامًا لا يمكن للبشرية تصورها حاليًا ومختلفة كليًا عن النهج &amp;ldquo;المبني على السلاسة&amp;rdquo; مثل GNFS (على سبيل المثال، نهج الهندسة الجبرية المتقدم مثل خوارزمية Schoof لتشفير المنحنى الإهليلجي). ومع ذلك، لا توجد حاليًا مثل هذه العلامات.&lt;/p>
&lt;hr>
&lt;h2 id="5-اختراق-بواسطة-أجهزة-الكمبيوتر-الكمومية-خوارزمية-شور-shors-algorithm">5. اختراق بواسطة أجهزة الكمبيوتر الكمومية: خوارزمية شور (Shor&amp;rsquo;s Algorithm)
&lt;/h2>&lt;p>بينما تواجه أجهزة الكمبيوتر الكلاسيكية حاجز $L_n[1/3]$، فإن الخوارزمية التي حطمت هذا الحاجز عن طريق تغيير نموذج الحوسبة نفسه بشكل جذري هي &lt;strong>خوارزمية شور (Shor&amp;rsquo;s Algorithm)&lt;/strong> التي نشرها بيتر شور في عام 1994.&lt;/p>
&lt;h3 id="51-تأثير-الوقت-متعدد-الحدود-الكمومي">5.1 تأثير الوقت متعدد الحدود الكمومي
&lt;/h3>&lt;p>تُرجع خوارزمية شور مشكلة تحليل العوامل الأولية إلى &amp;ldquo;مشكلة إيجاد الرتبة (Order Finding Problem)&amp;rdquo;. إنها مشكلة العثور على الدورة (الرتبة) $r$ للدالة $f(x) = a^x \pmod n$ لعدد صحيح $a$.
يتطلب الأمر وقتًا أسيًا على أجهزة الكمبيوتر الكلاسيكية للعثور على هذه الدورة، ولكن باستخدام &lt;strong>تقدير الطور الكمومي (QPE: Quantum Phase Estimation)&lt;/strong> و &lt;strong>تحويل فورييه الكمومي (QFT: Quantum Fourier Transform)&lt;/strong> على أجهزة الكمبيوتر الكمومية، من الممكن إجراء تقييم متوازٍ لجميع تراكبات الحالات (Superposition) واستخراج الدورة $r$ باحتمالية عالية.&lt;/p>
&lt;p>من حيث التعقيد الحسابي، فإن وقت تنفيذ خوارزمية شور هو &lt;strong>وقت متعدد الحدود كمومي&lt;/strong>، وعلى وجه التحديد على النحو التالي:
&lt;/p>
$$ O((\log n)^3) $$
&lt;p>
بالنظر إلى تطبيقات الدوائر المحسنة في السنوات الأخيرة، يقال إنه يمكن تقليله إلى $O((\log n)^2 \log \log n)$.&lt;/p>
&lt;div class="mermaid">graph LR
A["الخوارزمية الكلاسيكية (GNFS)"] -->|الحد الأقصى| B["وقت شبه أسي L_n[1/3]"]
C["الخوارزمية الكمومية (Shor)"] -->|اختراق| D["وقت متعدد الحدود O((log n)^3)"]
B --> E["الاستمرار في استخدام تشفير RSA (زيادة طول المفتاح)"]
D --> F["الانهيار الكامل لتشفير RSA"]&lt;/div>
&lt;h3 id="52-الوقت-شبه-الأسي-الكلاسيكي-مقابل-الوقت-متعدد-الحدود-الكمومي">5.2 الوقت شبه الأسي الكلاسيكي مقابل الوقت متعدد الحدود الكمومي
&lt;/h3>&lt;p>الفرق بين فئتي التعقيد الحسابي هاتين له معنى حاسم في أمان التشفير في العالم الحقيقي.&lt;/p>
&lt;p>على سبيل المثال، لنفكر في حالة تحليل RSA-2048 (رقم مركب مكون من 2048 بت).&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GNFS (كلاسيكي)&lt;/strong>: بالتعويض بـ $n \approx 2^{2048}$ في $L_n[1/3, 1.923]$، سيستغرق الأمر حوالي $2^{112}$ عملية. هذا تعقيد حسابي فلكي سيستغرق وقتًا أطول من عمر الكون حتى لو تم حشد جميع الموارد الحسابية الحالية على الأرض.&lt;/li>
&lt;li>&lt;strong>خوارزمية شور (كمومي)&lt;/strong>: باستخدام خوارزمية $O((\log n)^3)$، يتطلب الأمر فقط حوالي $2048^3 \approx 8.5 \times 10^9$ عملية بوابة منطقية. هذا يعني أنه إذا توفرت الأجهزة المناسبة (جهاز كمبيوتر كمومي عالمي مزود بملايين الكيوبتات المادية وقدرات تصحيح الأخطاء)، فسيتم إكمال الحساب في غضون بضع ساعات إلى بضعة أيام فقط.&lt;/li>
&lt;/ul>
&lt;p>يؤدي التحول النموذجي من الدالة شبه الأسية بـ &amp;ldquo;الأس $\alpha=1/3$&amp;rdquo; إلى &amp;ldquo;الوقت متعدد الحدود&amp;rdquo; إلى إبطال استراتيجية التشفير التقليدية المتمثلة في ضمان الأمان عن طريق زيادة طول المفتاح.&lt;/p>
&lt;hr>
&lt;h2 id="6-الخلاصة-نظرة-نحو-الجيل-القادم">6. الخلاصة: نظرة نحو الجيل القادم
&lt;/h2>&lt;p>الإجماع الحالي في المجتمع العلمي حول سؤال &amp;ldquo;هل توجد خوارزمية كلاسيكية تتجاوز GNFS؟&amp;rdquo; هو كما يلي:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>التحسينات العملية مستمرة، لكن لا توجد قفزة مقاربة&lt;/strong>: تستمر المحاولات لتحسين الحد الثابت $c$ في GNFS، مثل MNFS، وتحسين اختيار متعددة الحدود، وموازاة خوارزمية بلوك فيدمان. ومع ذلك، يُعتقد أن احتمالية اكتشاف خوارزمية كلاسيكية تقل عن $\alpha = 1/3$ منخفضة للغاية.&lt;/li>
&lt;li>&lt;strong>لا يزال أمان RSA على أجهزة الكمبيوتر الكلاسيكية قويًا&lt;/strong>: لا يزال التعقيد الحسابي لـ GNFS هائلاً، وستظل RSA-2048 و RSA-4096 آمنة لعقود قادمة ضد الهجمات من أجهزة الكمبيوتر الكلاسيكية.&lt;/li>
&lt;li>&lt;strong>التهديد الحقيقي هو الخوارزميات الكمومية&lt;/strong>: إن خوارزمية شور، القائمة على مبادئ ميكانيكا الكم، هي التي تجاوزت حاجز التعقيد الحسابي. ونتيجة لذلك، يضطر العالم إلى الانتقال إلى التشفير ما بعد الكمومي (PQC: Post-Quantum Cryptography). يمثل الانتقال إلى المسائل الرياضية الجديدة التي يصعب حلها حتى باستخدام أجهزة الكمبيوتر الكمومية (لا يمكن حلها في وقت متعدد الحدود)، مثل التشفير القائم على الشبكة (Lattice-based cryptography) والتشفير القائم على التجزئة (Hash-based cryptography)، طليعة علم التشفير الحالي.&lt;/li>
&lt;/ol>
&lt;p>تعتبر خوارزمية غربال حقل الأعداد العام (GNFS) واحدة من &amp;ldquo;القمم العليا&amp;rdquo; التي بلغتها البشرية من خلال تحدي حدود الرياضيات الكلاسيكية وتصميم الخوارزميات. إن فهم البنية الرياضية العميقة لـ GNFS ليس مجرد دراسة لتاريخ فك التشفير، بل هو أيضًا رحلة استكشاف فكري تلمس جمال نظرية التعقيد الحسابي ونظرية الأعداد الجبرية. حتى اليوم الذي يتم فيه استخدام أجهزة الكمبيوتر الكمومية بشكل عملي، ستحتفظ GNFS بعرشها كأقوى خوارزمية لتحليل العوامل الأولية.&lt;/p></description></item><item><title>【مخطط PQC】مقارنة بين الخوارزميات الرئيسية لتشفير ما بعد الكم</title><link>http://kenji.blog/ar/p/post-quantum-cryptography-algorithms-comparison/</link><pubDate>Fri, 11 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/post-quantum-cryptography-algorithms-comparison/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-cryptography-algorithms-comparison/img/eyecatch.jpg" alt="Featured image of post 【مخطط PQC】مقارنة بين الخوارزميات الرئيسية لتشفير ما بعد الكم" />&lt;h2 id="1-مقدمة-أزمة-التشفير-التي-تجلبها-الحواسيب-الكمومية">1. مقدمة: &amp;ldquo;أزمة التشفير&amp;rdquo; التي تجلبها الحواسيب الكمومية
&lt;/h2>&lt;p>في مجتمع الإنترنت الحديث، تعتبر تقنية تشفير المفتاح العام بنية تحتية لا غنى عنها لحماية سرية الاتصالات وسلامة البيانات. تعتمد خوارزميات التشفير المستخدمة على نطاق واسع حالياً، مثل تشفير RSA وتشفير المنحنى الإهليلجي (ECC)، على عوائق رياضية لضمان الأمان، وهي &amp;ldquo;صعوبة تحليل الأعداد المركبة الضخمة إلى عواملها الأولية&amp;rdquo; و&amp;quot;صعوبة مشكلة اللوغاريتم المنفصل على المنحنى الإهليلجي&amp;quot; على التوالي. بالنسبة للحواسيب الكلاسيكية (الحواسيب التي نستخدمها حالياً بما في ذلك الحواسيب الفائقة)، فقد ثبت أن حل هذه المشكلات الرياضية يتطلب وقتاً أطول من عمر الكون، وهذا هو أساس أمانها.&lt;/p>
&lt;p>ومع ذلك، فإن هذا الافتراض القوي يوشك أن ينقلب رأساً على عقب بسبب التقدم في نظرية والتطبيق العملي لـ &lt;strong>الحواسيب الكمومية&lt;/strong>. فـ &amp;ldquo;&lt;strong>خوارزمية شور (Shor&amp;rsquo;s Algorithm)&lt;/strong>&amp;quot;، التي نشرها عالم التشفير بيتر شور (Peter Shor) في عام 1994، أثبتت نظرياً أنه عند تنفيذها على حاسوب كمومي عام يتحمل الأخطاء ذي أداء كافٍ (CRQC: حاسوب كمومي ذو صلة بالتشفير)، يمكن فك تشفير مشاكل التحليل إلى عوامل ومشاكل اللوغاريتم المنفصل في &amp;ldquo;وقت متعدد الحدود&amp;rdquo;. هذا يعني أن جميع أنظمة تشفير المفتاح العام المستخدمة حالياً ستصبح بلا جدوى.&lt;/p>
&lt;div class="mermaid">graph TD
A["حاسوب كمومي واسع النطاق (CRQC)"] -->|تنفيذ| B["خوارزمية شور"]
B -->|فك التشفير في وقت متعدد الحدود| C["مشكلة التحليل إلى العوامل الأولية (RSA)"]
B -->|فك التشفير في وقت متعدد الحدود| D["مشكلة اللوغاريتم المنفصل (ECC / ECDSA)"]
C --> E["التنصت على الاتصالات المشفرة، والتلاعب بالبيانات، وانتحال الهوية"]
D --> E
F["خزّن الآن، وفك التشفير لاحقاً (SNDL)"] --> E&lt;/div>
&lt;p>من الخطير جداً الاعتقاد بأنه &amp;ldquo;لا توجد مشكلة لأن الانتهاء الفعلي من تطوير الحواسيب الكمومية لا يزال أمامه عقود&amp;rdquo;. لأن أسلوب الهجوم المسمى &lt;strong>خزّن الآن، وفك التشفير لاحقاً (SNDL: Store Now, Decrypt Later)&lt;/strong> قد أصبح بالفعل تهديداً واقعياً. هذا هجوم تقوم فيه دول معادية أو منظمات قراصنة بتخزين كميات هائلة من بيانات الاتصالات المشفرة الحالية (مثل حركة مرور TLS) في وسائط التخزين، وفك تشفيرها بالكامل بمجرد توفر حواسيب كمومية قوية في المستقبل. إن أسرار الدولة، ومعلومات البنية التحتية، والبيانات الطبية التي يجب حمايتها لفترات طويلة معرّضة بالفعل لهذا التهديد.&lt;/p>
&lt;p>بالإضافة إلى ذلك، بالنسبة لتشفير المفتاح المتماثل (مثل AES) ودوال التجزئة (مثل SHA-256)، توجد &lt;strong>خوارزمية غروفر (Grover&amp;rsquo;s Algorithm)&lt;/strong> المكتشفة في عام 1996. تؤدي هذه الخوارزمية إلى تقليل عبء الحساب لهجوم القوة الغاشمة (Brute-force attack) إلى الجذر التربيعي. بمعنى آخر، ينخفض مستوى الأمان لـ AES-128 فعلياً إلى النصف ليصبح 2 أس 64، لذلك يوصى باستخدام مفاتيح وأطوال تجزئة أطول في العصر الكمومي، مثل AES-256 و SHA-384.&lt;/p>
&lt;p>ولمواجهة أزمة التشفير غير المسبوقة هذه، ظهر ما يسمى بـ &lt;strong>تشفير ما بعد الكم (Post-Quantum Cryptography: PQC)&lt;/strong>، والذي يعتمد على مشكلات رياضية جديدة يصعب فك تشفيرها حتى باستخدام الحواسيب الكمومية. ستشرح هذه المقالة بتفصيل شديد الخوارزميات الرئيسية لـ PQC، بدءاً من خلفيتها الرياضية وآلياتها وصولاً إلى مقارنة هياكلها المعمارية، وذلك بناءً على نتائج عملية توحيد معايير PQC التي قادها المعهد الوطني للمعايير والتقنية (NIST) في الولايات المتحدة.&lt;/p>
&lt;hr>
&lt;h2 id="2-الصورة-الكاملة-وتاريخ-مشروع-توحيد-معايير-pqc-من-قبل-nist">2. الصورة الكاملة وتاريخ مشروع توحيد معايير PQC من قبل NIST
&lt;/h2>&lt;p>يستغرق الانتقال في تكنولوجيا التشفير من بضع سنوات إلى عدة عقود، بما في ذلك إعادة تصميم البروتوكولات، وتحديث الأنظمة، واستبدال الأجهزة وغيرها. لذلك، بدأ علماء التشفير حول العالم في البحث في PQC منذ وقت مبكر. وقد لعب المعهد الوطني للمعايير والتقنية (NIST) في الولايات المتحدة الدور المركزي في ذلك. أعلن NIST في عام 2016 عن فتح باب تقديم المقترحات لعملية توحيد معايير PQC، وتلقى مقترحات لخوارزميات تشفير جديدة تماماً من مجتمع التشفير العالمي.&lt;/p>
&lt;p>استهدفت عملية التوحيد الفئتين الرئيسيتين التاليتين:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>تشفير المفتاح العام / آلية تغليف المفتاح (KEM: Key Encapsulation Mechanism)&lt;/strong>: آلية لمشاركة (توزيع) مفتاح مشترك بأمان لتشفير مسار الاتصال، كما هو الحال في اتصالات TLS.&lt;/li>
&lt;li>&lt;strong>التوقيعات الرقمية (Digital Signatures)&lt;/strong>: آلية لإثبات عدم تلاعب البيانات، وعدم انتحال هوية المرسل (الموثوقية)، وذلك في تحديثات البرامج والشهادات الرقمية.&lt;/li>
&lt;/ol>
&lt;p>بعد حوالي 6 سنوات من التقييم والتحليل المكثف ومنافسات فك التشفير (الجولة 1 إلى الجولة 3)، أجريت تقييمات إضافية في الجولة 4 لبعض الخوارزميات. ونتيجة لذلك، في عام 2024، تم إصدار الخوارزميات التالية رسمياً كمعايير معالجة المعلومات الفيدرالية (FIPS)، وتم تأكيدها كمعايير عالمية مستقبلية.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>FIPS 203 (ML-KEM)&lt;/strong>: آلية تغليف مفتاح (KEM) تعتمد على CRYSTALS-Kyber&lt;/li>
&lt;li>&lt;strong>FIPS 204 (ML-DSA)&lt;/strong>: توقيع رقمي يعتمد على CRYSTALS-Dilithium&lt;/li>
&lt;li>&lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>: توقيع مبني على التجزئة عديم الحالة يعتمد على SPHINCS+&lt;/li>
&lt;li>&lt;strong>(مقرر صياغته مستقبلاً) FN-DSA&lt;/strong>: توقيع رقمي يعتمد على FALCON&lt;/li>
&lt;/ul>
&lt;p>تعتمد هذه الخوارزميات المختارة على &amp;ldquo;مشكلات الصعوبة&amp;rdquo; الرياضية المختلفة، مما يضمن التنوع (مرونة التشفير أو Crypto Agility) بحيث إذا تم اكتشاف ثغرة قاتلة في إحدى الخوارزميات في المستقبل، فلن ينهار النظام بأكمله. في عملية التوحيد القياسي، لعب التشفير الشبكي (Lattice-based cryptography) الدور الرئيسي من حيث الأداء، ولكن تم اعتماد التشفير المبني على التجزئة والتشفير المبني على الأكواد كبدائل قوية احتياطية.&lt;/p>
&lt;hr>
&lt;h2 id="3-تصنيف-المناهج-الرياضية-الرئيسية-لـ-pqc">3. تصنيف المناهج الرياضية الرئيسية لـ PQC
&lt;/h2>&lt;p>تُقسم خوارزميات PQC بشكل رئيسي إلى الفئات الخمس التالية بناءً على المشكلة الرياضية التي تشكل أساس أمانها. في هذه المقالة، سنتعمق بشكل خاص في الفئات الثلاث الأولى.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>التشفير الشبكي (Lattice-based Cryptography)&lt;/strong>:
يعتمد على مشكلة المتجه الأقصر (SVP) ومشكلة المتجه الأقرب (CVP) في الفضاءات الشبكية متعددة الأبعاد، ومشكلة LWE المشتقة منها. وهو محور عملية التوحيد القياسي من NIST، ويشمل Kyber و Dilithium و FALCON. يتميز بأفضل توازن بين سرعة المعالجة وحجم المفتاح العام وحجم النص المشفر، وهو مناسب للاستخدام العام.&lt;/li>
&lt;li>&lt;strong>التشفير المبني على التجزئة (Hash-based Cryptography)&lt;/strong>:
يضع أساس أمانه حصرياً على &amp;ldquo;مقاومة الاصطدام&amp;rdquo; و&amp;quot;أحادية الاتجاه&amp;rdquo; لدوال التجزئة التشفيرية (مثل SHA-2 و SHAKE). قابل للتطبيق فقط على التوقيعات الرقمية (مثل SPHINCS+)، ولكن إثبات أمانه هو الأقوى، ويتميز بمقاومة عالية جداً للهجمات الرياضية غير المعروفة.&lt;/li>
&lt;li>&lt;strong>التشفير المبني على الأكواد (Code-based Cryptography)&lt;/strong>:
يعتمد على نظرية رموز تصحيح الأخطاء، ويرتكز على صعوبة مشكلة فك تشفير المتلازمة (Syndrome Decoding Problem). يعتبر Classic McEliece، المقترح في السبعينيات، المثال الأبرز عليه، ويتمتع بتاريخ طويل جداً وسجل حافل من الأمان، ولكن في المقابل، يكون حجم المفتاح العام كبيراً جداً ويقاس بالميغابايت.&lt;/li>
&lt;li>&lt;strong>تشفير متعدد الحدود متعدد المتغيرات (Multivariate Polynomial Cryptography)&lt;/strong>:
يعتمد على صعوبة حل أنظمة المعادلات التربيعية متعددة المتغيرات فوق الحقول المحدودة (مشكلة MQ). تم اقتراحه بشكل أساسي كتوقيعات رقمية (مثل Rainbow)، ولكن خلال الجولة النهائية لـ NIST، تم اكتشاف تقنية هجوم قوية تمكنت من فك تشفيره في غضون أيام قليلة باستخدام جهاز كمبيوتر شخصي واحد، مما أدى إلى خروج العديد من الخوارزميات من سباق التوحيد القياسي.&lt;/li>
&lt;li>&lt;strong>التشفير المبني على التماثلات (Isogeny-based Cryptography)&lt;/strong>:
يعتمد على مشكلة البحث عن مسار على رسوم بيانية للتماثلات (Isogeny) للمنحنيات الإهليلجية. حجم المفتاح صغير جداً، وكان يُتوقع أن يكون الخليط الشرعي لـ ECC، ولكن تم فك تشفير المرشح النهائي &amp;ldquo;SIKE&amp;rdquo; تماماً في بضع ساعات فقط على كمبيوتر شخصي عادي في عام 2022 باستخدام رياضيات كلاسيكية (مثل هجوم Castryck-Decru)، مما شكل نهاية درامية ترمز إلى صعوبة وخطورة تصميم PQC.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="4-أعماق-التشفير-الشبكي-الأساس-الرياضي-لمشكلة-lwe-ومشكلة-module-lwe">4. أعماق التشفير الشبكي: الأساس الرياضي لمشكلة LWE ومشكلة Module-LWE
&lt;/h2>&lt;p>&lt;strong>التشفير الشبكي&lt;/strong> هو الأكثر ترجيحاً حالياً وأصبح محور عملية التوحيد القياسي. يكمن في أساس أمانه &lt;strong>مشكلة LWE (Learning with Errors: مشكلة التعلم مع الأخطاء)&lt;/strong>. اقترحها Oded Regev في عام 2005، وحصل على جائزة غودل (Gödel Prize) تقديراً لهذا الإنجاز الرائد. لا يمكن الحديث عن PQC الحديثة دون فهم مشكلة LWE.&lt;/p>
&lt;h3 id="41-ما-هي-مشكلة-lwe-التعلم-مع-الأخطاء">4.1. ما هي مشكلة LWE (التعلم مع الأخطاء)
&lt;/h3>&lt;p>أولاً، دعونا ننظر في نظام بسيط من المعادلات الخطية المتزامنة. بافتراض أنه في ظل مقياس $q$ (modulo $q$)، لدينا مصفوفة عشوائية معروفة $A$، ومتجه سري مجهول $\vec{s}$، وأُعطينا حاصل ضربهما $\vec{b}$.&lt;/p>
$$ \vec{b} = A\vec{s} \pmod q $$
&lt;p>في هذه الحالة، من السهل إيجاد $\vec{s}$ المجهول من المعلومات العامة $A$ و $\vec{b}$. باستخدام الخوارزمية الكلاسيكية &amp;ldquo;الحذف الغاوسي (Gaussian elimination)&amp;quot;، يمكن حساب $\vec{s}$ بسهولة في وقت متعدد الحدود.&lt;/p>
&lt;p>ولكن، بإضافة &amp;ldquo;خطأ مقصود صغير (ضوضاء)&amp;rdquo; إلى هذه المعادلة، يرتفع مستوى صعوبة المشكلة بشكل كبير. هذه هي &lt;strong>مشكلة LWE&lt;/strong>.&lt;/p>
&lt;p>نقوم بتجهيز متجه سري مجهول $\vec{s} \in \mathbb{Z}_q^n$، ومصفوفة مختارة عشوائياً $A \in \mathbb{Z}_q^{m \times n}$. علاوة على ذلك، نقوم بإعداد متجه خطأ $\vec{e} \in \mathbb{Z}_q^m$ يتم اختياره وفقاً لتوزيع طبيعي أو توزيع ذي حدين حيث تكون &amp;ldquo;قيم العناصر صغيرة بما فيه الكفاية&amp;rdquo;، ونحسب $\vec{b}$ على النحو التالي.&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod q $$
&lt;p>&lt;strong>مشكلة البحث في LWE (Search LWE)&lt;/strong> هي المشكلة المتمثلة في &amp;ldquo;إيجاد المعلومات السرية $\vec{s}$ من المعلومات العامة $(A, \vec{b})$&amp;rdquo;. بوجود هذا الخطأ $\vec{e}$، إذا حاولنا استخدام طرق حل جبرية مثل الحذف الغاوسي، فإن الخطأ $\vec{e}$ سيتضخم ككرة الثلج أثناء عملية جمع وطرح المعادلات، ليصبح في النهاية لا يمكن تمييزه عن القيم العشوائية وتفشل العملية.&lt;/p>
&lt;p>عظمة مشكلة LWE تكمن في وجود إثبات نظري قوي (اختزال أو Reduction) ينص على أنه ما لم تكن هناك خوارزمية كمومية قادرة على حل مشكلات الصعوبة في أسوأ الحالات (Worst-case hardness) على الشبكات، مثل GapSVP (مشكلة أقصر متجه القرار) و SIVP (مشكلة أقصر متجهات مستقلة)، فلا يمكن حل مشكلة LWE أيضاً في الحالات المتوسطة (Average-case). بعبارة أخرى، حتى بالنسبة لمفاتيح التشفير التي تم إنشاؤها عشوائياً، يُضمن أن يكون لها أمان قوي مدعوم بحدود نظرية عُليا.&lt;/p>
&lt;h3 id="42-الكفاءة-الدراماتيكية-باستخدام-ring-lwe-و-module-lwe">4.2. الكفاءة الدراماتيكية باستخدام Ring-LWE و Module-LWE
&lt;/h3>&lt;p>تعتبر مشكلة LWE العادية (Standard LWE) واضحة جداً في أساس أمانها، ولكنها ليست عملية لأن حجم المصفوفة $A$ يصبح كبيراً جداً، مما يجعل حجم المفتاح في نطاق الميغابايت. لذا، تم اقتراح نهج يستخدم حلقات متعددات الحدود (Polynomial Rings) لإعطائها بنية جبرية.&lt;/p>
&lt;p>في &lt;strong>مشكلة Ring-LWE&lt;/strong>، نستخدم عناصر (متعددات حدود) من حلقة متعددة حدود معينة $R_q$ بدلاً من مجرد متجهات أو مصفوفات. المعيار الشائع المستخدم في معايير NIST هو حلقة متعددة الحدود السيكلوتومية التالية:&lt;/p>
$$ R_q = \mathbb{Z}_q[X]/(X^n + 1) $$
&lt;p>هنا، $n$ هي قوة للعدد 2 (مثال: 256)، و $q$ هو عدد أولي مناسب. على هذه الحلقة، باستخدام العناصر $a, s, e \in R_q$، نحسب $b = a \cdot s + e \pmod q$. نظراً لأن متعددة حدود واحدة $a$ تحتوي على $n$ من المعاملات، يمكن ضغط البيانات بشكل كبير. وعلاوة على ذلك، باستخدام إصدار الحقل المحدود من تحويل فورييه السريع (FFT) المسمى &lt;strong>NTT (Number Theoretic Transform: تحويل نظرية الأعداد)&lt;/strong>، يمكن ضرب متعددات الحدود بسرعة فائقة بتعقيد حسابي قدره $O(n \log n)$.&lt;/p>
&lt;p>ومع ذلك، كانت هناك مخاوف بشأن Ring-LWE من أنه &amp;ldquo;قد توجد ثغرات أمنية غير معروفة ناجمة عن البنية الجبرية الخاصة للحلقة&amp;rdquo;. بالإضافة إلى ذلك، عند تغيير مستوى الأمان (مثل ما يعادل AES-128 أو 192 أو 256)، كان يجب تغيير درجة متعددة الحدود $n$ نفسها، وكان هناك تحد هندسي يتمثل في ضرورة إعادة كتابة التنفيذ بأكمله، بما في ذلك خوارزمية NTT.&lt;/p>
&lt;p>لذا، اعتمدت خوارزميات التوحيد القياسي Kyber و Dilithium &lt;strong>مشكلة Module-LWE (M-LWE)&lt;/strong>. تُعد مشكلة Module-LWE حلاً وسطاً يقع تماماً بين مشكلة LWE القياسية غير المنظمة ومشكلة Ring-LWE ذات البنية المفرطة، وتستخدم مصفوفة $k \times k$ (وحدة) مكونة من عناصر حلقة متعددات الحدود $R_q$.&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod{R_q} \quad (A \in R_q^{k \times k}, \vec{s}, \vec{e} \in R_q^k) $$
&lt;p>أكبر ميزة لـ Module-LWE هي أنه يسمح بسهولة بتوسيع نطاق مستويات الأمان ببساطة عن طريق تغيير بُعد المصفوفة $k$، مع الحفاظ على درجة متعددة الحدود $n$ ثابتة (في معيار NIST تكون $n=256$).
على سبيل المثال، في حالة Kyber، يتم ضبط البعد $k$ كما يلي:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Kyber512 (المستوى 1)&lt;/strong>: $k = 2$ (يعادل AES-128)&lt;/li>
&lt;li>&lt;strong>Kyber768 (المستوى 3)&lt;/strong>: $k = 3$ (يعادل AES-192)&lt;/li>
&lt;li>&lt;strong>Kyber1024 (المستوى 5)&lt;/strong>: $k = 4$ (يعادل AES-256)&lt;/li>
&lt;/ul>
&lt;p>وقد مكّن هذا من إعادة استخدام الكود الأساسي لـ NTT ودوائر الأجهزة الخاصة بعمليات متعددات الحدود بنسبة 100% في جميع مستويات الأمان، مما أدى إلى تحسين دراماتيكي في أمان وكفاءة التنفيذ.&lt;/p>
&lt;hr>
&lt;h2 id="5-crystals-kyber-ml-kem-آلية-تغليف-المفتاح-من-الجيل-التالي">5. CRYSTALS-Kyber (ML-KEM): آلية تغليف المفتاح من الجيل التالي
&lt;/h2>&lt;p>خوارزمية CRYSTALS-Kyber، التي تم توحيدها رسمياً كـ &lt;strong>FIPS 203 (ML-KEM)&lt;/strong>، هي آلية تغليف مفتاح (KEM) تعتمد على مشكلة Module-LWE المذكورة أعلاه. وستصبح في المستقبل المعيار العالمي الفعلي لمشاركة مفاتيح الجلسة بأمان في بروتوكولات مثل TLS 1.3 و SSH.&lt;/p>
&lt;h3 id="51-بنية-kem-آلية-تغليف-المفتاح">5.1. بنية KEM (آلية تغليف المفتاح)
&lt;/h3>&lt;p>في عصر PQC، بدلاً من النهج المباشر كما في RSA حيث &amp;ldquo;يقوم العميل بإنشاء مفتاح مشترك وتشفيره بالمفتاح العام للخادم وإرساله&amp;rdquo;، سيصبح إطار عمل التغليف المعروف باسم KEM هو المعيار.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Client as "العميل (أليس)"
participant Server as "الخادم (بوب)"
Note over Client: "ML-KEM KeyGen()"
Client->>Client: "إنشاء المفتاح السري (sk) والمفتاح العام (pk)"
Client->>Server: "إرسال المفتاح العام (pk)"
Note over Server: "ML-KEM Encaps()"
Server->>Server: "إنشاء مفتاح مشترك عشوائي (K)"
Server->>Server: "تغليف K باستخدام pk لإنشاء النص المشفر (c)"
Server->>Client: "إرسال النص المشفر (c)"
Note over Client: "ML-KEM Decaps()"
Client->>Client: "فك تشفير النص المشفر (c) باستخدام المفتاح السري (sk)"
Client->>Client: "فك التغليف واستخراج المفتاح المشترك (K)"
Note over Client, Server: "بدء الاتصال المشفر مثل AES باستخدام المفتاح المشترك (K) المتبادل"&lt;/div>
&lt;h3 id="52-آلية-الخوارزمية-الداخلية-لـ-kyber-وتحويل-فوجيساكي-أوكاموتو">5.2. آلية الخوارزمية الداخلية لـ Kyber وتحويل فوجيساكي-أوكاموتو
&lt;/h3>&lt;p>تصميم Kyber راقٍ جداً. أولاً، يقوم ببناء نظام تشفير مفتاح عام (Kyber.CPAPKE) آمن فقط ضد هجمات CPA (هجوم النص الواضح المختار)، ثم يطبق تقنية تشفير قوية جداً تُعرف باسم &lt;strong>تحويل فوجيساكي-أوكاموتو (Fujisaki-Okamoto Transform)&lt;/strong>، وبذلك يعتمد تصميماً يرقّيه إلى KEM كامل آمن حتى ضد هجمات CCA (هجوم النص المشفر المختار المتكيف).&lt;/p>
&lt;p>فيما يلي آليات التشفير وفك التشفير الأساسية لـ CPAPKE:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>إنشاء المفتاح (Key Generation)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>من قيمة بذرة عشوائية (seed)، يتم إنشاء مصفوفة $A \in R_q^{k \times k}$ في نطاق NTT. يُستخدم المقياس $q$ بقيمة $3329$.&lt;/li>
&lt;li>يتم أخذ عينات من توزيع ذي حدين مركزي (CBD) لإنتاج متجه سري $\vec{s}$ ومتجه خطأ $\vec{e}$ بمعاملات صغيرة.&lt;/li>
&lt;li>يتم حساب $\vec{t} = A\vec{s} + \vec{e}$. المفتاح العام هو $(A, \vec{t})$ والمفتاح السري هو $\vec{s}$. (عملياً، يتم نشر $A$ كقيمة بذرة لتوفير النطاق الترددي).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>التشفير (Encryption)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>يتم تشفير الرسالة المكونة من 32 بايت (مواد المفتاح المشترك) $m$ المراد مشاركتها إلى متعددة حدود.&lt;/li>
&lt;li>يتم إنشاء متجه عشوائي جديد $\vec{r}$، وأخطاء صغيرة $\vec{e_1}, e_2$.&lt;/li>
&lt;li>يتم حساب $\vec{u} = A^T\vec{r} + \vec{e_1}$&lt;/li>
&lt;li>يتم حساب $v = \vec{t}^T\vec{r} + e_2 + \lfloor q/2 \rceil \cdot m$&lt;/li>
&lt;li>يكون النص المشفر هو $(\vec{u}, v)$.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>فك التشفير (Decryption)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>يقوم المستلم بحساب $v - \vec{s}^T\vec{u}$.&lt;/li>
&lt;li>بتوسيع هذه المعادلة جبرياً نحصل على ما يلي:
$v - \vec{s}^T\vec{u} = (\vec{t}^T\vec{r} + e_2 + \lfloor q/2 \rceil \cdot m) - \vec{s}^T(A^T\vec{r} + \vec{e_1})$&lt;/li>
&lt;li>بالتعويض بـ $\vec{t} = A\vec{s} + \vec{e}$، يتم إلغاء الحد الرئيسي $\vec{s}^TA^T\vec{r}$.&lt;/li>
&lt;li>يتبقى لدينا $\lfloor q/2 \rceil \cdot m + (\vec{e}^T\vec{r} + e_2 - \vec{s}^T\vec{e_1})$.&lt;/li>
&lt;li>نظراً لأن الحدود داخل الأقواس هي &amp;ldquo;حاصل ضرب ومجموع أخطاء صغيرة&amp;rdquo;، فإن قيمتها الإجمالية تظل قيمة صغيرة بما فيه الكفاية (ضوضاء). ولذلك، من خلال إجراء حكم عتبة بناءً على ما إذا كان كل معامل قريباً من $0$ أو قريباً من $q/2$، يمكن استعادة بتات الرسالة الأصلية $m$ (0 أو 1) بالكامل دون أي أخطاء.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>أكبر نقطة قوة لـ Kyber هي &lt;strong>سرعة المعالجة&lt;/strong> الفائقة و&lt;strong>حجم المفتاح المعتدل&lt;/strong>. في حالة Kyber768، يبلغ حجم المفتاح العام 1,184 بايت، وحجم النص المشفر 1,088 بايت. وعلى الرغم من أنها أكبر مقارنةً بـ RSA-3072 (حجم المفتاح حوالي 384 بايت)، إلا أنه يمكن تضمينها ضمن وحدة الإرسال القصوى (MTU) لاتصالات الإنترنت الحديثة دون تجزئة الحزم، مما لا يؤثر تقريباً على زمن انتقال الشبكة.&lt;/p>
&lt;hr>
&lt;h2 id="6-crystals-dilithium-ml-dsa-التوقيع-الرقمي-العام-المبني-على-الشبكات">6. CRYSTALS-Dilithium (ML-DSA): التوقيع الرقمي العام المبني على الشبكات
&lt;/h2>&lt;p>في عملية توحيد التوقيعات الرقمية، تنافست خوارزميات ذات فلسفات تصميمية مختلفة حتى ضمن نفس نهج التشفير الشبكي. ومن بينها، تم اختيار &lt;strong>CRYSTALS-Dilithium&lt;/strong> كـ &lt;strong>FIPS 204 (ML-DSA)&lt;/strong> ليكون التوقيع الرقمي للاستخدام العام.&lt;/p>
&lt;h3 id="61-نموذج-فيات-شامير-مع-الإلغاء-fiat-shamir-with-aborts">6.1. نموذج فيات-شامير مع الإلغاء (Fiat-Shamir with Aborts)
&lt;/h3>&lt;p>Dilithium هو نظام توقيع رقمي يعتمد على Module-LWE (ومشكلة Module-SIS) مثل Kyber تماماً. ويُستخدم في أساس تصميمه نموذج مهم للغاية يُعرف باسم &amp;ldquo;&lt;strong>نموذج فيات-شامير مع الإلغاء (Fiat-Shamir with Aborts)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>تحويل فيات-شامير بحد ذاته هو تقنية قياسية لتحويل بروتوكول إثبات المعرفة الصفرية التفاعلي إلى توقيع رقمي غير تفاعلي. حيث يقوم المُثبِت (المُوقّع) بإنشاء التزام (Commitment) $y$، ويحسب $w = Ay$ ويمرره عبر دالة تجزئة للحصول على تحدٍ عشوائي $c$، ثم يحسب الاستجابة $z = y + cs$.&lt;/p>
&lt;p>ولكن، عند تطبيق ذلك ببساطة في التشفير الشبكي، يتشوه توزيع الاستجابة $z$ اعتماداً على قيمة المفتاح السري $s$، وكانت هناك مشكلة قاتلة (تسريب رياضي يشبه القناة الجانبية) حيث تتسرب معلومات المفتاح السري $s$ تدريجياً إلى المهاجم الذي يراقب عدداً كبيراً من التوقيعات.&lt;/p>
&lt;p>لحل ذلك، أدخل فريق تصميم Dilithium (ليوباشيفسكي وآخرون) تقنية &amp;ldquo;&lt;strong>أخذ العينات بالرفض (Rejection Sampling)&lt;/strong>&amp;quot;، حيث يتم إجهاض (Abort) عملية التوقيع بأكملها إذا لم تقع معاملات نتيجة حساب التوقيع $z$ ضمن نطاق عتبة آمنة محددة مسبقاً، ويتم إعادة الحساب من البداية باستخدام رقم عشوائي جديد $y$.&lt;/p>
&lt;p>ونتيجة لذلك، أصبح التوقيع النهائي المخرَج $z$ يمتلك توزيعاً موحداً تماماً لا يعتمد على الإطلاق على المفتاح السري، مما نجح في منع تسريب المعلومات رياضياً بالكامل.&lt;/p>
&lt;h3 id="62-مزايا-dilithium-وسهولة-تنفيذه">6.2. مزايا Dilithium وسهولة تنفيذه
&lt;/h3>&lt;p>الميزة الكبيرة في تصميم Dilithium هي أنه &lt;strong>لا يستخدم على الإطلاق&lt;/strong> عمليات معقدة مثل &amp;ldquo;أخذ العينات من توزيع غاوسي&amp;rdquo; أو &amp;ldquo;عمليات الفاصلة العائمة&amp;rdquo; في عملية إنشاء التوقيع. ونظراً لأنه يمكن تنفيذه فقط باستخدام أخذ العينات من توزيع موحد، وحسابات معاملات الأعداد الصحيحة البسيطة، و NTT، ودالة التجزئة (SHAKE)، فمن السهل تنفيذه بأمان وفي وقت ثابت (Constant-time) في مجموعة واسعة من البيئات، بدءاً من وحدات التحكم الدقيقة المدمجة وصولاً إلى الخوادم السحابية. وهذا يمنحه مقاومة قوية ضد هجمات القناة الجانبية المادية مثل هجمات التوقيت.&lt;/p>
&lt;hr>
&lt;h2 id="7-falcon-fn-dsa-التوقيع-الشبكي-المدمج-للغاية">7. FALCON (FN-DSA): التوقيع الشبكي المدمج للغاية
&lt;/h2>&lt;p>اختار NIST خوارزمية &lt;strong>FALCON (Fast-Fourier Lattice-based Compact Signatures over NTRU)&lt;/strong> كمرشح آخر للتوحيد القياسي للتوقيع المبني على الشبكات، بخصائص مختلفة عن Dilithium (وهي حالياً قيد الصياغة كـ FN-DSA).&lt;/p>
&lt;h3 id="71-شبكات-ntru-وأخذ-العينات-الغاوسية">7.1. شبكات NTRU وأخذ العينات الغاوسية
&lt;/h3>&lt;p>الميزة الأبرز لـ FALCON هي أنه لا يستخدم مشكلة LWE، بل يستخدم &lt;strong>شبكة NTRU (N-th degree Truncated polynomial Ring Units)&lt;/strong> العريقة التي ظهرت عام 1996. وعلاوة على ذلك، فإنه يعتمد نموذج &amp;ldquo;&lt;strong>التجزئة والتوقيع (Hash-and-Sign)&lt;/strong>&amp;rdquo; بناءً على إطار عمل GPV (Gentry-Peikert-Vaikuntanathan).&lt;/p>
&lt;p>في نموذج التجزئة والتوقيع (Hash-and-Sign)، يتم جعل قيمة تجزئة الرسالة نقطة هدف في الفضاء، ويتم إنشاء التوقيع عن طريق إيجاد النقطة على الشبكة الأقرب إلى تلك النقطة (حل تقريبي لمشكلة المتجه الأقرب). يتطلب هذا أخذ عينات من النقاط وفقاً لتوزيع غاوسي منفصل باستخدام &amp;ldquo;قاعدة قصيرة ذات نوعية جيدة&amp;rdquo; تعمل كمفتاح سري.&lt;/p>
&lt;p>قام FALCON بتسريع هذه الحسابات الثقيلة بشكل دراماتيكي باستخدام تقنية تسمى &amp;ldquo;&lt;strong>التعامد الفورييه السريع (Fast Fourier Orthogonalization: FFO)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;h3 id="72-مزايا-وعيوب-falcon">7.2. مزايا وعيوب FALCON
&lt;/h3>&lt;p>الميزة الساحقة لـ FALCON هي أن &lt;strong>حجم التوقيع وحجم المفتاح العام صغيران جداً (مدمجان)&lt;/strong>. بينما يبلغ حجم توقيع Dilithium3 حوالي 3,309 بايت، فإن حجم توقيع FALCON-512 يبلغ حوالي 666 بايت فقط. المفتاح العام صغير جداً أيضاً بحجم 897 بايت، مما يجعله المنقذ في البيئات التي يكون فيها النطاق الترددي للاتصالات محدوداً للغاية، أو في أجهزة إنترنت الأشياء (IoT)، أو في بروتوكولات شبكة معينة.&lt;/p>
&lt;p>ومع ذلك، هناك عيب كبير. نظراً لأن أخذ العينات الغاوسية المنفصلة الذي يتضمن &lt;strong>عمليات الفاصلة العائمة المعقدة (64-bit IEEE 754)&lt;/strong> يُعد إلزامياً أثناء إنشاء التوقيع، فإن التنفيذ في وقت ثابت (Constant-time implementation) لمنع تسريب التوقيت يكون صعباً للغاية، كما يصبح حجم الكود ضخماً. لذلك، يُعتبر FALCON خوارزمية متخصصة قوية لتطبيقات محددة، في مقابل الاستخدام العام لـ (Dilithium).&lt;/p>
&lt;div class="mermaid">graph LR
A["متطلبات التوقيع الرقمي"] --> B{"ما هو القيد ذو الأولوية القصوى؟"}
B -->|"بساطة التنفيذ، والتنوع، وسهولة التنفيذ في وقت ثابت"| C["Dilithium (ML-DSA)"]
B -->|"تقليل النطاق الترددي للاتصال، وصغر حجم البيانات"| D["FALCON (FN-DSA)"]
C --> E["شهادات TLS للأغراض العامة، والتوقيعات الإلكترونية للبرامج"]
D --> F["البروتوكولات ذات قيود صارمة على حجم الحزمة، والبيئات الخاصة"]&lt;/div>
&lt;hr>
&lt;h2 id="8-sphincs-slh-dsa-التوقيع-المبني-على-التجزئة-صاحب-أقوى-مستوى-أمان">8. SPHINCS+ (SLH-DSA): التوقيع المبني على التجزئة صاحب أقوى مستوى أمان
&lt;/h2>&lt;p>استعداداً لأسوأ سيناريو (في حالة الطوارئ) حيث يتم اختراق أمان التشفير الشبكي مستقبلاً من خلال اختراق علمي من قبل علماء رياضيات عباقرة، صاغ NIST معيار &lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>، وهو &lt;strong>SPHINCS+&lt;/strong>، كمعيار يعتمد نهجاً مختلفاً تماماً عن التشفير الشبكي.&lt;/p>
&lt;p>يُصنف SPHINCS+ ضمن &lt;strong>التوقيعات المبنية على التجزئة&lt;/strong>. يعتمد أساس أمانه على نقطة واحدة فقط: &amp;ldquo;أن دالة التجزئة التشفيرية المستخدمة (مثل SHA-2 أو SHAKE256) تمتلك مقاومة للاصطدام وخاصية الاتجاه الواحد&amp;rdquo;. نظراً لأنه لا يعتمد على مشكلات رياضية ذات هياكل جبرية محددة مثل LWE أو التحليل إلى العوامل الأولية، فإنه يفتخر بأمان قوي جداً (أكثر مستويات الأمان تحفظاً)، حيث يمكنه مواجهة أي خوارزمية كمومية قوية قد تظهر في المستقبل ببساطة عن طريق زيادة طول مخرجات دالة التجزئة.&lt;/p>
&lt;h3 id="81-البنية-عديمة-الحالة-باستخدام-wots-و-fors">8.1. البنية عديمة الحالة باستخدام WOTS+ و FORS
&lt;/h3>&lt;p>تاريخ التوقيعات المبنية على التجزئة قديم، ويعود إلى توقيع لامبورت (Lamport signature) وتوقيع وينترنيتز لمرة واحدة (WOTS) في السبعينيات. كانت هذه المفاتيح تستخدم لمرة واحدة بحيث &amp;ldquo;يمكن التوقيع بها بأمان مرة واحدة فقط&amp;rdquo;. لجعلها قابلة للاستخدام لمرات متعددة، تم تطوير خوارزميات مثل XMSS (eXtended Merkle Signature Scheme) و LMS، والتي تدمج أشجار ميركل (Merkle Tree) لإدارة عدد لا يحصى من المفاتيح ذات الاستخدام لمرة واحدة من خلال تجزئة جذرية واحدة.&lt;/p>
&lt;p>ومع ذلك، كان لـ XMSS و LMS عيب رئيسي وهو كونها &amp;ldquo;&lt;strong>تحتفظ بالحالة (Stateful)&lt;/strong>&amp;rdquo;. ففي كل مرة يتم فيها التوقيع، يجب تسجيل حالة الفهرس بدقة في ذاكرة غير متطايرة لمعرفة &amp;ldquo;أي مفتاح لمرة واحدة تم استخدامه&amp;rdquo;، وإذا تم إرجاع الحالة إلى الوراء بسبب استعادة لقطة لجهاز ظاهري (VM Snapshot)، وتم استخدام نفس المفتاح لمرة واحدة مرتين، فسوف يتسرب المفتاح السري على الفور وينهار النظام.&lt;/p>
&lt;p>يعالج SPHINCS+ متاعب إدارة الحالة هذه باعتباره توقيعاً مبنياً على التجزئة &amp;ldquo;&lt;strong>عديم الحالة (Stateless)&lt;/strong>&amp;rdquo;.
وتتكون تقنيته الأساسية من المزيج التالي:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>WOTS+ (Winternitz One-Time Signature Plus)&lt;/strong>: التوقيع الأساسي لمرة واحدة.&lt;/li>
&lt;li>&lt;strong>FORS (Forest of Random Subsets)&lt;/strong>: تقنية توقيع الاستخدام لمرات قليلة (Few-Time Signature). تحافظ على الأمان حتى إذا تم إعادة استخدام نفس المفتاح لمرات قليلة.&lt;/li>
&lt;li>&lt;strong>Hyper-Tree (بنية شجرية ضخمة)&lt;/strong>: بنية ضخمة تتكون من طبقات متعددة من أشجار ميركل.&lt;/li>
&lt;/ol>
&lt;p>في SPHINCS+، عند التوقيع، بدلاً من إدارة الحالة، يتم اختيار أحد مفاتيح FORS من عدد هائل من المفاتيح الموجودة في أسفل الـ Hyper-Tree بشكل عشوائي باستخدام أرقام شبه عشوائية لإجراء التوقيع. نظراً لأن عدد الأوراق في الشجرة فلكي، فإن احتمال اختيار نفس المفتاح مرتين بالصدفة (تصادم) يصبح صغيراً لدرجة يمكن تجاهله، مما يحقق خاصية انعدام الحالة نتيجة لذلك.&lt;/p>
&lt;p>نقطة الضعف الوحيدة والأكبر لـ SPHINCS+ هي أن &lt;strong>حجم التوقيع كبير للغاية&lt;/strong>. اعتماداً على المعلمات، يتراوح حجم التوقيع من 17 كيلوبايت إلى 49 كيلوبايت، وسرعة إنشاء التوقيع أبطأ بكثير مقارنة بالتشفير الشبكي. لذلك، بدلاً من الاستخدام في تصفح الويب اليومي، من المتوقع أن يتم استخدامه في تطبيقات لا تتطلب توقيعات متكررة ولكنها تتطلب مستوى مطلقاً من الأمان على المدى الطويل، مثل توقيع تحديثات البرامج وشهادات هيئات المصادقة الجذرية (Root CA).&lt;/p>
&lt;hr>
&lt;h2 id="9-التشفير-المبني-على-الأكواد-العملاق-العريق-classic-mceliece">9. التشفير المبني على الأكواد: العملاق العريق Classic McEliece
&lt;/h2>&lt;p>في عملية التوحيد القياسي لـ NIST، يُعد النهج المهم الذي لا يزال قيد التقييم كمرشح نهائي في الجولة الرابعة هو &lt;strong>Classic McEliece&lt;/strong> من فئة &lt;strong>التشفير المبني على الأكواد&lt;/strong>.&lt;/p>
&lt;p>هذه الخوارزمية، التي اقترحها روبرت ماكيليس (Robert McEliece) في عام 1978، هي واحدة من أقدم الخوارزميات في تاريخ تشفير المفتاح العام إلى جانب RSA. وهي تستخدم رمزاً جبرياً هندسياً يُعرف باسم &amp;ldquo;رمز غوبا (Goppa Code)&amp;quot;، حيث تقوم بتشفير الرسالة عن طريق إضافة خطأ متعمد (متجه ضوضاء)، ولا يمكن لأي شخص إزالة الخطأ واستعادة الرسالة الأصلية باستخدام قدرة تصحيح الأخطاء القوية إلا من يمتلك مصفوفة التحقق من التكافؤ لرمز غوبا كمفتاح سري، وهذا يعتمد على &amp;ldquo;&lt;strong>مشكلة فك تشفير المتلازمة (Syndrome Decoding Problem)&lt;/strong>&amp;rdquo;.&lt;/p>
$$ \vec{c} = \vec{m} G + \vec{e} $$
&lt;p>
($G$ هي مصفوفة التوليد المشوشة وهي المفتاح العام، و $\vec{e}$ هو متجه الخطأ ذو الوزن $t$)&lt;/p>
&lt;p>الأمر المذهل في Classic McEliece هو سجله الحافل الساحق: &lt;strong>على الرغم من مرور أكثر من 40 عاماً على اقتراحه وتعرضه لأبحاث فك تشفير مكثفة من قبل علماء التشفير في جميع أنحاء العالم، لم يتم اكتشاف ثغرات جوهرية فيه قط&lt;/strong>. وهو يتمتع بأكثر أمان قوي &amp;ldquo;أثبتت الأيام جدارته&amp;rdquo; ضمن PQC.&lt;/p>
&lt;p>بالإضافة إلى ذلك، يتمتع بميزة أن حجم النص المشفر صغير جداً (فقط حوالي 100 إلى 200 بايت). ولكن لديه عيب قاتل يتمثل في أن &lt;strong>حجم المفتاح العام يكون في حدود الميغابايت (MB)&lt;/strong>. حتى في أدنى مستوى أمان (يعادل AES-128)، يبلغ حجم المفتاح العام حوالي 250 كيلوبايت، ويتجاوز 1 ميغابايت في المستويات الأعلى.&lt;/p>
&lt;p>لهذا السبب، لا يمكن استخدامه على الإطلاق في التطبيقات التي ترسل المفتاح العام عبر الشبكة في كل مرة يتم فيها الاتصال، مثل مصافحة TLS (TLS Handshake). ومع ذلك، في حالات الاستخدام الخاصة حيث يمكن وضع المفتاح العام مسبقاً في النظام، مثل تبادل المفاتيح المشتركة مسبقاً لـ VPN، أو تشفير المفتاح العام داخل البرامج الثابتة (Firmware)، أو الاتصالات عبر الأقمار الصناعية، فإنه لا يزال قيد الدراسة كخيار واعد للغاية نظراً لأمانه القوي.&lt;/p>
&lt;hr>
&lt;h2 id="10-مقارنة-الأداء-والمقايضات-بين-خوارزميات-pqc-المختلفة">10. مقارنة الأداء والمقايضات بين خوارزميات PQC المختلفة
&lt;/h2>&lt;p>يلخص الجدول التالي خصائص الأداء للخوارزميات الرئيسية التي تمت مناقشتها حتى الآن عند مستوى أمان عام (يعادل NIST المستوى 2 إلى 3، ومستوى AES-128 إلى 192).&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">الخوارزمية (الاسم القياسي)&lt;/th>
&lt;th style="text-align:left">الفئة&lt;/th>
&lt;th style="text-align:left">الأساس الرياضي&lt;/th>
&lt;th style="text-align:left">حجم المفتاح العام&lt;/th>
&lt;th style="text-align:left">حجم المفتاح السري&lt;/th>
&lt;th style="text-align:left">حجم النص المشفر / التوقيع&lt;/th>
&lt;th style="text-align:left">اتجاه سرعة المعالجة&lt;/th>
&lt;th style="text-align:left">الميزات الرئيسية والتطبيقات&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Kyber768&lt;/strong>&lt;br>(ML-KEM)&lt;/td>
&lt;td style="text-align:left">KEM&lt;/td>
&lt;td style="text-align:left">Module-LWE&lt;/td>
&lt;td style="text-align:left">1,184 بايت&lt;/td>
&lt;td style="text-align:left">2,400 بايت&lt;/td>
&lt;td style="text-align:left">1,088 بايت&lt;/td>
&lt;td style="text-align:left">سريع جداً&lt;/td>
&lt;td style="text-align:left">أفضل توازن بين حجم المفتاح والسرعة. معيار KEM العام لـ TLS 1.3 وغيرها.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Dilithium3&lt;/strong>&lt;br>(ML-DSA)&lt;/td>
&lt;td style="text-align:left">التوقيع&lt;/td>
&lt;td style="text-align:left">Module-LWE&lt;/td>
&lt;td style="text-align:left">1,952 بايت&lt;/td>
&lt;td style="text-align:left">4,032 بايت&lt;/td>
&lt;td style="text-align:left">3,309 بايت&lt;/td>
&lt;td style="text-align:left">التوليد والتحقق سريعان&lt;/td>
&lt;td style="text-align:left">تنفيذ بسيط. معيار التوقيع الرقمي العام.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>FALCON-512&lt;/strong>&lt;br>(FN-DSA)&lt;/td>
&lt;td style="text-align:left">التوقيع&lt;/td>
&lt;td style="text-align:left">شبكة NTRU&lt;/td>
&lt;td style="text-align:left">897 بايت&lt;/td>
&lt;td style="text-align:left">1,281 بايت&lt;/td>
&lt;td style="text-align:left">666 بايت&lt;/td>
&lt;td style="text-align:left">توليد التوقيع بطيء نسبياً، والتحقق سريع جداً&lt;/td>
&lt;td style="text-align:left">حجم التوقيع صغير للغاية. يتطلب عمليات فاصلة عائمة. للأنظمة المدمجة وإنترنت الأشياء (IoT).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>SPHINCS+&lt;/strong>&lt;br>(SLH-DSA)&lt;/td>
&lt;td style="text-align:left">التوقيع&lt;/td>
&lt;td style="text-align:left">دوال التجزئة&lt;/td>
&lt;td style="text-align:left">32 بايت&lt;/td>
&lt;td style="text-align:left">64 بايت&lt;/td>
&lt;td style="text-align:left">حوالي 17,000 بايت&lt;/td>
&lt;td style="text-align:left">التوليد بطيء جداً&lt;/td>
&lt;td style="text-align:left">خطر الانهيار الرياضي شبه معدوم. للتطبيقات عالية الأمان مثل الشهادات الجذرية.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Classic McEliece&lt;/strong>&lt;/td>
&lt;td style="text-align:left">KEM&lt;/td>
&lt;td style="text-align:left">رمز غوبا&lt;/td>
&lt;td style="text-align:left">&lt;strong>حوالي 1.04 ميغابايت&lt;/strong>&lt;/td>
&lt;td style="text-align:left">13,568 بايت&lt;/td>
&lt;td style="text-align:left">&lt;strong>188 بايت&lt;/strong>&lt;/td>
&lt;td style="text-align:left">التغليف سريع&lt;/td>
&lt;td style="text-align:left">40 عاماً من سجل الأمان. مفتاح عام ضخم. للبيئات التي يمكن فيها تضمين المفتاح بشكل ثابت (Hardcoded).&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="فهم-المقايضات">فهم المقايضات
&lt;/h3>&lt;p>في عالم PQC، لا توجد خوارزمية سحرية واحدة تتميز بـ &amp;ldquo;حجم صغير وسرعة فائقة وضمان رياضي مثالي&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>معايير الإنترنت (Kyber / Dilithium)&lt;/strong>: تتمتع بأفضل توازن في الأداء، وهي الأنسب للاستبدال المباشر (Drop-in replacement) لخوارزميات RSA/ECC الحالية.&lt;/li>
&lt;li>&lt;strong>المحافظة القصوى (SPHINCS+)&lt;/strong>: يتم اختيارها عندما تريد تأميناً مطلقاً ضد الاختراقات الرياضية المستقبلية، حتى لو كان ذلك على حساب حجم البيانات وسرعة المعالجة.&lt;/li>
&lt;li>&lt;strong>للبيئات الخاصة (FALCON / Classic McEliece)&lt;/strong>: أسلحة متخصصة يتم اختيارها وفقاً لقيود البيئة، مثل عرض النطاق الترددي الضيق جداً، أو إمكانية التوزيع المسبق للمفاتيح.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="11-التحديات-نحو-التطبيق-العملي-والتشفير-الهجين-كحل-واقعي">11. التحديات نحو التطبيق العملي و&amp;quot;التشفير الهجين&amp;rdquo; كحل واقعي
&lt;/h2>&lt;p>مع اكتمال عملية التوحيد القياسي بواسطة NIST والإصدار الرسمي لمعايير FIPS، بدأ التحول إلى PQC للبنية التحتية لتقنية المعلومات حول العالم (&lt;strong>هجرة PQC أو PQC Migration&lt;/strong>) بشكل جدي. وقد قامت جهات مثل متصفح Chrome من جوجل، و iMessage من آبل (بروتوكول PQ3)، وموفرو الشبكات مثل Cloudflare بدمج دعم PQC بالفعل في بروتوكولاتهم وبدأوا التشغيل الفعلي.&lt;/p>
&lt;p>ومع ذلك، فإن التحول المفاجئ والكامل إلى خوارزميات التشفير الجديدة يحمل مخاطر عالية جداً. إذا افترضنا، على سبيل المثال، أن عالم رياضيات عبقرياً اكتشف طريقة هجوم قاتلة (خلل رياضي يمكن حله حتى باستخدام أجهزة الكمبيوتر الكلاسيكية) ضد التشفير الشبكي مثل Kyber بعد بضع سنوات، فإن النظام بأكمله الذي يعتمد عليه سيصبح مكشوفاً بالكامل في لحظة.&lt;/p>
&lt;p>النهج الواقعي والموصى به لتقليل مخاطر عدم اليقين هذه هو &amp;ldquo;&lt;strong>التشفير الهجين (Hybrid Cryptography)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>في التشفير الهجين، يتم إجراء تبادل المفاتيح باستخدام كل من التشفير الكلاسيكي الحالي ذي السجل الحافل (مثل تشفير المنحنى الإهليلجي X25519) و PQC الجديد (مثل Kyber768) في وقت واحد. يتم توليد مكونات المفتاح المشترك بشكل منفصل لكل خوارزمية، وأخيراً يتم مزج المكونين معاً باستخدام دالة اشتقاق مفتاح آمنة (KDF) لتوليد السر الرئيسي (Master Secret) النهائي.&lt;/p>
&lt;div class="mermaid">graph TD
A["العميل"] -->|① إرسال المفتاح العام لـ X25519 + المفتاح العام لـ Kyber| B["الخادم"]
B -->|② إرجاع المفتاح المشترك لـ X25519 + النص المشفر المغلف بـ Kyber| A
A --> C{"اشتقاق السر الرئيسي (KDF)"}
B --> C
C -->|المدخلات: (المفتاح المشترك لـ X25519) || (المفتاح المشترك لـ Kyber)| D["مفتاح اتصال آمن (AES-256 / ChaCha20)"]
D -->|"مقاوم لكل من التهديد الكمومي والثغرات الكلاسيكية"| E["اتصال مشفر هجين آمن (TLS 1.3)"]&lt;/div>
&lt;p>من خلال هذا، يمكننا تحقيق أمان قوي مزدوج الطبقات: &amp;ldquo;حتى لو تم تحقيق الحواسيب الكمومية وتم اختراق ECC، فإن Kyber سيحمي الاتصال&amp;rdquo;، وعلى العكس، &amp;ldquo;حتى لو تم اكتشاف خلل رياضي غير معروف في Kyber، فإن ECC سيحمي الاتصال&amp;rdquo;. كمثال تمثيلي، هناك مسودة &lt;strong>X25519MLKEM768 (سابقاً X25519Kyber768)&lt;/strong> التي يتم توحيدها في IETF، وتستخدم الاتصالات بين متصفحات الويب الحالية والخوادم المتطورة هذه الطريقة الهجينة بالضبط.&lt;/p>
&lt;p>بالإضافة إلى ذلك، في تصميم النظام، أصبح مفهوم &lt;strong>مرونة التشفير (Crypto Agility)&lt;/strong> - وهو بناء &amp;ldquo;هيكل لا يعتمد بشكل مفرط على خوارزمية تشفير معينة، ويمكنه التبديل بسرعة إلى خوارزمية أخرى (على سبيل المثال من Kyber إلى McEliece، أو من Dilithium إلى SPHINCS+) عند فشل الخوارزمية&amp;rdquo; - متطلباً أساسياً في تطوير الأنظمة المستقبلية.&lt;/p>
&lt;hr>
&lt;h2 id="12-الخاتمة-آفاق-جديدة-في-تكنولوجيا-التشفير">12. الخاتمة: آفاق جديدة في تكنولوجيا التشفير
&lt;/h2>&lt;p>المفارقة هي أن الحواسيب الكمومية، وهي تقنية أحلام البشرية، أصبحت التهديد الأكبر الذي يحطم الحواجز الرياضية مثل &amp;ldquo;التحليل إلى العوامل الأولية&amp;rdquo; و&amp;quot;مشكلة اللوغاريتم المنفصل&amp;rdquo; التي وثقنا بها لسنوات طويلة. ومع ذلك، لم يستسلم علماء التشفير حول العالم، بل استكشفوا مجالات رياضية متعددة الأبعاد أكثر تعقيداً وعمقاً مثل نظرية الشبكات، وأشجار دوال التجزئة، ورموز تصحيح الأخطاء، وقاموا ببناء حواجز دفاعية جديدة تتمثل في تشفير ما بعد الكم (PQC).&lt;/p>
&lt;p>اكتمال عملية التوحيد القياسي لمعايير FIPS 203 (ML-KEM) و FIPS 204 (ML-DSA) و FIPS 205 (SLH-DSA) بواسطة NIST ليس خط النهاية. بل هو مجرد الخطوة الأولى في رحلة ملحمية ستستمر لعقود تُعرف بـ &amp;ldquo;هجرة PQC&amp;rdquo;. بالنسبة لمهندسي البرمجيات ومعماريي الأنظمة، سيكون التحدي التقني الكبير القادم هو كيفية تكييف &amp;ldquo;زيادة حجم المفتاح&amp;rdquo; و&amp;quot;التغيرات في التكلفة الحسابية&amp;rdquo; التي تجلبها هذه الخوارزميات الجديدة مع بروتوكولات الشبكات والأنظمة بشكل مثالي.&lt;/p>
&lt;p>المعركة بين الحواسيب الكمومية والتشفير هي مجال مثير تتقاطع فيه استكشافات البشرية الرياضية مع تطور التكنولوجيا بشكل مكثف. نأمل أن تكون قد اكتسبت من خلال هذا المقال فهماً عميقاً للنظرية الرياضية الجميلة الكامنة وراء PQC، وللآليات المذهلة لكل خوارزمية والتي تشكل مستقبل الأمن السيبراني.&lt;/p>
&lt;hr>
&lt;p>&lt;em>References:&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;em>NIST Post-Quantum Cryptography Standardization Program&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 204: Module-Lattice-Based Digital Signature Standard&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 205: Stateless Hash-Based Digital Signature Standard&lt;/em>&lt;/li>
&lt;/ul></description></item></channel></rss>