<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mathematics on kenji.blog</title><link>http://kenji.blog/ar/categories/mathematics/</link><description>Recent content in Mathematics 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/mathematics/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>فرضية ريمان وتوزيع الأعداد الأولية: علاقة عميقة مع تقنيات التشفير الحديثة</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>خوارزمية سريعة لاختبار الأولية مطبقة بلغة C++ (مثل طريقة Miller-Rabin)</title><link>http://kenji.blog/ar/p/cpp-fast-prime-testing-miller-rabin/</link><pubDate>Fri, 11 Sep 2026 14:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/cpp-fast-prime-testing-miller-rabin/</guid><description>&lt;img src="http://kenji.blog/p/cpp-fast-prime-testing-miller-rabin/img/eyecatch.jpg" alt="Featured image of post خوارزمية سريعة لاختبار الأولية مطبقة بلغة C++ (مثل طريقة Miller-Rabin)" />&lt;h1 id="مقدمة-لماذا-نحتاج-إلى-خوارزمية-سريعة-لاختبار-الأولية">مقدمة: لماذا نحتاج إلى خوارزمية سريعة لاختبار الأولية؟
&lt;/h1>&lt;p>في عالم علوم الحاسوب، ونظرية التشفير، أو البرمجة التنافسية، يعتبر التحديد السريع والدقيق لـ &amp;ldquo;ما إذا كان عدد ما أولياً أم لا&amp;rdquo; تحدياً أساسياً وهاماً جداً. على سبيل المثال، يعتمد أمان أنظمة تشفير المفتاح العام مثل تشفير RSA - والذي يمثل الأساس الأمني لمجتمع الإنترنت الحديث - على توليد أعداد أولية ضخمة وصعوبة ضربها (صعوبة تحليل العوامل الأولية). لذلك، ليس من المبالغة القول إن تقنية التمييز الفوري لما إذا كان عدد ضخم أولياً أم لا هي تقنية تدعم أساس المجتمع الرقمي.&lt;/p>
&lt;p>بالإضافة إلى ذلك، في البرمجة التنافسية (مثل AtCoder و Codeforces)، يعتبر اختبار الأولية موضوعاً متكرراً. بالنسبة للمدخلات الضخمة التي قد تصل إلى $N \le 10^{18}$، في الحالات التي يتم فيها إجراء اختبارات الأولية عشرات الآلاف من المرات في غضون ثانية واحدة، لا يمكن للخوارزميات التقليدية البسيطة أن تلبي متطلبات وقت الحساب وتتسبب في (Time Limit Exceeded: TLE).&lt;/p>
&lt;p>في هذا المقال، سنبدأ بخوارزمية اختبار الأولية البسيطة، ثم &amp;ldquo;اختبار فيرما&amp;rdquo; وهو اختبار احتمالي، وصولاً إلى الخوارزمية الأسرع والأكثر عملية &amp;ldquo;طريقة ميلر-رابين لاختبار الأولية (Miller-Rabin Primality Test)&amp;rdquo; التي تغلبت على نقاط الضعف في الخوارزميات السابقة. سنشرح ذلك بالتفصيل من الخلفية الرياضية إلى التنفيذ عالي التحسين بلغة C++. بشكل خاص، بالنسبة للأعداد الصحيحة بحجم 64 بت ($N &lt; 2^{64}$)، سنشرح بالتفصيل طريقة &amp;ldquo;تحديد الأولية بنسبة 100% (الاختبار الحتمي)&amp;rdquo; بدلاً من مجرد التحديد الاحتمالي، وسنوفر كود مصدري بلغة C++ جاهز للاستخدام العملي.&lt;/p>
&lt;hr>
&lt;h1 id="1-أساسيات-اختبار-الأولية-وطريقة-القسمة-التجريبية-trial-division">1. أساسيات اختبار الأولية وطريقة القسمة التجريبية (Trial Division)
&lt;/h1>&lt;p>العدد الأولي (Prime number) هو عدد طبيعي أكبر من أو يساوي 2، وليس له أي قواسم موجبة سوى 1 والعدد نفسه. باتباع تعريف العدد الأولي بدقة، لتحديد ما إذا كان العدد الصحيح $N$ أولياً، يمكننا محاولة قسمة $N$ على جميع الأعداد الصحيحة من $2$ إلى $N-1$. إذا لم يقبل القسمة على أي منها فهو عدد أولي، وإذا قَبِل القسمة ولو لمرة واحدة فهو عدد مؤلف (ليس أولياً).&lt;/p>
&lt;p>ولكن، تعقيد الوقت لهذه الطريقة هو $O(N)$، وإذا كان $N$ عدداً ضخماً مثل $10^{18}$، فسيستغرق الأمر وقتاً هائلاً لحسابه حتى مع أجهزة الكمبيوتر الحديثة.&lt;/p>
&lt;h2 id="تحسين-طريقة-القسمة-التجريبية-البحث-حتى-sqrtn">تحسين طريقة القسمة التجريبية: البحث حتى $\sqrt{N}$
&lt;/h2>&lt;p>عندما يتم التعبير عن العدد المؤلف $N$ كـ $a \times b = N$ (حيث $a \le b$)، فمن المؤكد أن $a \le \sqrt{N}$. لذلك، لا توجد حاجة لتكرار حلقة اختبار الأولية حتى $N-1$، ويكفي التحقق حتى $\sqrt{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;/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">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// اختبار الأولية باستخدام طريقة القسمة التجريبية (O(sqrt(N)))
&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">is_prime_trial_division&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">n&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">n&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">n&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">==&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">n&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="c1">// فحص الأعداد الفردية فقط من 3 فصاعداً
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">2&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">n&lt;/span> &lt;span class="o">%&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="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="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="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>التعقيد الزمني لهذه الخوارزمية هو $O(\sqrt{N})$. إذا كان $N \le 10^{12}$ تقريباً، فيمكن حسابه في لحظة، ولكن في حالة $N \approx 10^{18}$، يصبح عدد التكرارات حوالي $10^9$ مرة، وحتى مع مترجمات C++، سيستغرق ذلك من مئات الميلي ثانية إلى عدة ثوانٍ، مما يجعله غير مناسب للاختبارات المتعددة.&lt;/p>
&lt;hr>
&lt;h1 id="2-اختبار-فيرما-بداية-اختبارات-الأولية-الاحتمالية">2. اختبار فيرما: بداية اختبارات الأولية الاحتمالية
&lt;/h1>&lt;p>لتجاوز حدود طريقة القسمة التجريبية، تم ابتكار &amp;ldquo;الخوارزميات الاحتمالية (Probabilistic Algorithm)&amp;rdquo; باستخدام نظريات من نظرية الأعداد. والمثال النموذجي لذلك هو &amp;ldquo;اختبار فيرما للأولية (Fermat Primality Test)&amp;rdquo; الذي يستخدم مبرهنة فيرما الصغرى.&lt;/p>
&lt;h2 id="مبرهنة-فيرما-الصغرى-fermats-little-theorem">مبرهنة فيرما الصغرى (Fermat&amp;rsquo;s Little Theorem)
&lt;/h2>&lt;p>اكتشف بيير دي فيرما (Pierre de Fermat) هذه النظرية، والتي تنص على ما يلي:&lt;/p>
&lt;blockquote>
&lt;p>لأي عدد أولي $p$، ولأي عدد صحيح $a$ أولي نسبياً مع $p$ (أي ليس من مضاعفات $p$)، تتحقق معادلة التطابق التالية:
&lt;/p>
$$ a^{p-1} \equiv 1 \pmod p $$
&lt;/blockquote>
&lt;p>إذا أخذنا المعاكس الإيجابي لهذه النظرية، فيمكننا القول: &amp;ldquo;بالنسبة لعدد صحيح $N$، وعدد صحيح $a$ أولي نسبياً مع $N$، إذا كان $a^{N-1} \not\equiv 1 \pmod N$، فمن المؤكد أن $N$ عدد مؤلف&amp;rdquo;. باستخدام هذه الخاصية، يتم اختيار أساس (base) عشوائي $a$ للعدد المراد اختباره $N$، وحساب $a^{N-1} \pmod N$ للتحقق مما إذا كان يساوي $1$. هذا هو اختبار فيرما.&lt;/p>
&lt;h2 id="الأسس-النمطية-السريعة-التربيع-المتكرر">الأسس النمطية السريعة (التربيع المتكرر)
&lt;/h2>&lt;p>لإجراء اختبار فيرما، يجب حساب الأس الضخم $a^{N-1} \pmod N$ بسرعة. لهذا، نستخدم &amp;ldquo;التربيع المتكرر (Modular Exponentiation / Binary Exponentiation)&amp;rdquo;. التعقيد الزمني هو $O(\log 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;/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="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">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="nf">mod_pow&lt;/span>&lt;span class="p">(&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">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">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">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">res&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">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="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">&amp;amp;&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__int128_t&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">res&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="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__int128_t&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="n">b&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;=&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="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">res&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;p>※ هنا، لمنع حدوث فيضان الأعداد (Overflow)، نستخدم امتداد GCC/Clang المسمى &lt;code>__int128_t&lt;/code> (عدد صحيح بحجم 128 بت) للاحتفاظ بالضرب الوسيط.&lt;/p>
&lt;h2 id="الأعداد-شبه-الأولية-وأعداد-كارمايكل-carmichael-numbers">الأعداد شبه الأولية وأعداد كارمايكل (Carmichael Numbers)
&lt;/h2>&lt;p>على الرغم من أن اختبار فيرما قوي للغاية، إلا أن لديه نقطة ضعف قاتلة. وهي وجود أعداد $N$ مؤلفة، ولكنها تحقق $a^{N-1} \equiv 1 \pmod N$ لجميع قيم $a$ (الأولية نسبياً مع $N$).&lt;/p>
&lt;p>تسمى هذه الأعداد بـ &amp;ldquo;الأعداد شبه الأولية المطلقة&amp;rdquo; أو &amp;ldquo;أعداد كارمايكل&amp;rdquo;. أصغر عدد كارمايكل هو $561 = 3 \times 11 \times 17$.
نظراً لوجود أعداد كارمايكل، لا يمكن إجراء اختبار حتمي بـ &amp;ldquo;احتمال 100%&amp;rdquo; باستخدام اختبار فيرما وحده. بغض النظر عن قيم $a$ المختلفة التي نختبرها، فإن عدداً مثل $561$ سيتظاهر دائماً بأنه عدد أولي (يخدعنا).&lt;/p>
&lt;hr>
&lt;h1 id="3-طريقة-ميلر-رابين-لاختبار-الأولية-miller-rabin-primality-test">3. طريقة ميلر-رابين لاختبار الأولية (Miller-Rabin Primality Test)
&lt;/h1>&lt;p>لقد تغلب كل من غاري ميلر (Gary L. Miller) ومايكل رابين (Michael O. Rabin) ببراعة على نقطة ضعف اختبار فيرما (وجود أعداد كارمايكل) من خلال ابتكار &amp;ldquo;طريقة ميلر-رابين لاختبار الأولية&amp;rdquo;.
حالياً، كخوارزمية عملية وسريعة لاختبار الأولية، تُستخدم على نطاق واسع في المكتبات الداخلية لمختلف لغات البرمجة وتوليد المفاتيح في أنظمة التشفير.&lt;/p>
&lt;h2 id="المبادئ-الرياضية">المبادئ الرياضية
&lt;/h2>&lt;p>بالإضافة إلى مبرهنة فيرما الصغرى، تستخدم خوارزمية ميلر-رابين الخاصية القائلة بأنه &amp;ldquo;في حقل البواقي للعدد الأولي ($\mathbb{Z}/p\mathbb{Z}$)، تقتصر حلول $x^2 \equiv 1 \pmod p$ على $x \equiv 1$ أو $x \equiv -1$&amp;rdquo; (في حالة كان المعامل عدداً مؤلفاً، قد توجد جذور تربيعية غير بديهية أخرى).&lt;/p>
&lt;p>العدد الفردي $N$ المراد اختباره مطروحاً منه $1$، أي $N-1$، سيكون بالتأكيد عدداً زوجياً. لذلك، نقوم بقسمة $N-1$ على $2$ قدر الإمكان، ونعبر عنه بالشكل التالي:
&lt;/p>
$$ N-1 = d \cdot 2^s $$
&lt;p>
(حيث $d$ عدد فردي، و $s \ge 1$)&lt;/p>
&lt;p>بالنسبة لأي أساس $a$ ($1 &lt; a &lt; N-1$)، نتحقق مما إذا كان $a^{N-1} \equiv 1 \pmod N$ وفقاً لمبرهنة فيرما الصغرى، ولكننا نقوم بهذا الحساب تدريجياً.
على وجه التحديد، نقوم بتكرار التربيع بالترتيب التالي: $a^d, a^{d \cdot 2}, a^{d \cdot 4}, \ldots, a^{d \cdot 2^s}$.&lt;/p>
&lt;p>لكي تقرر طريقة ميلر-رابين أن $N$ &amp;ldquo;عدد أولي (أو عدد أولي باحتمال كبير)&amp;quot;، يجب أن يتحقق &lt;strong>أي&lt;/strong> من الشروط التالية:&lt;/p>
&lt;ol>
&lt;li>$a^d \equiv 1 \pmod N$&lt;/li>
&lt;li>يوجد $r$ ($0 \le r &lt; s$) بحيث يتحقق $a^{d \cdot 2^r} \equiv -1 \pmod N$.
※ في عملية المعامل (Modulo) بلغة C++، يصبح $-1 \pmod N$ مساوياً لـ $N-1$.&lt;/li>
&lt;/ol>
&lt;p>إذا كان $N$ عدداً أولياً، فإن هذا الشرط سيتحقق بالتأكيد لأي $a$. على العكس، إذا كان $N$ عدداً مؤلفاً، فقد تم إثبات رياضياً أن احتمال تحقق هذا الشرط (احتمال الانخداع) عند اختيار $a$ عشوائياً هو أقل من أو يساوي $\frac{1}{4}$.
إذا قمنا بإجراء $k$ اختبارات مستقلة، فإن احتمال الخطأ في التحديد يصبح أقل من أو يساوي $\left(\frac{1}{4}\right)^k$، ويمكن اعتباره عملياً صفراً. لا توجد أعداد &amp;ldquo;يمكنها الخداع تماماً&amp;rdquo; مثل أعداد كارمايكل.&lt;/p>
&lt;h2 id="سير-خوارزمية-ميلر-رابين-مخطط-mermaid">سير خوارزمية ميلر-رابين (مخطط Mermaid)
&lt;/h2>&lt;p>يوضح الشكل التالي التدفق المنطقي لاختبار واحد في طريقة ميلر-رابين (اختبار لأساس واحد $a$).&lt;/p>
&lt;div class="mermaid">graph TD
Start["بدء الاختبار (الإدخال: N, a)"] --> CalcDS["حساب d (فردي) و s التي تحقق N-1 = d * 2^s"]
CalcDS --> CalcX["حساب x = a^d mod N"]
CalcX --> CheckX1{"هل x == 1 أو x == N-1 ؟"}
CheckX1 -- "نعم" --> ReturnTrue["يحتمل أن يكون أولياً (Probably Prime)"]
CheckX1 -- "لا" --> LoopStart["بدء حلقة r من 1 إلى s-1"]
LoopStart --> LoopCondition{"هل r &lt; s ؟"}
LoopCondition -- "لا" --> ReturnFalse["مؤلف بالتأكيد (Composite)"]
LoopCondition -- "نعم" --> SquareX["حساب x = (x * x) mod N"]
SquareX --> CheckXMinus1{"هل x == N - 1 ؟"}
CheckXMinus1 -- "نعم" --> ReturnTrue
CheckXMinus1 -- "لا" --> CheckXOne{"هل x == 1 ؟"}
CheckXOne -- "نعم" --> ReturnFalse
CheckXOne -- "لا" --> LoopNext["زيادة r بمقدار 1 والانتقال للتالي"]
LoopNext --> LoopCondition&lt;/div>
&lt;hr>
&lt;h1 id="4-الاختبار-الحتمي-للأعداد-الصحيحة-بحجم-64-بت">4. الاختبار الحتمي للأعداد الصحيحة بحجم 64 بت
&lt;/h1>&lt;p>على الرغم من أن طريقة ميلر-رابين هي أساساً خوارزمية &amp;ldquo;احتمالية&amp;rdquo;، إلا أنه عندما يكون الحد الأقصى لـ $N$ ثابتاً، يمكننا إجراء اختبار أولية &amp;ldquo;مؤكد بنسبة 100%&amp;rdquo; من خلال تجربة مجموعة محددة من قيم $a$ (الأساس).
يسمى هذا &lt;strong>اختبار ميلر-رابين الحتمي (Deterministic Miller-Rabin Test)&lt;/strong>.&lt;/p>
&lt;p>من خلال بحث Jim Sinclair وآخرين، تبين أنه بالنسبة لجميع الأعداد الصحيحة $N &lt; 2^{64}$ (حوالي $1.8 \times 10^{19}$)، يكفي اختيار الأعداد الأولية السبعة التالية كأساس $a$ واختبارها للحصول على تقييم حتمي وكامل بما فيه الكفاية.&lt;/p>
&lt;p>&lt;strong>قائمة الأساس $a$ المراد اختبارها:&lt;/strong>
&lt;code>{2, 325, 9375, 28178, 450775, 9780504, 1795265022}&lt;/code>&lt;/p>
&lt;p>أو، كمجموعة أخرى معروفة، يمكن التحديد بشكل مثالي لـ $N &lt; 2^{64}$ باستخدام الأعداد الأولية الـ $12$ التالية:
&lt;code>{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}&lt;/code>&lt;/p>
&lt;p>هذه المرة، من أجل تعزيز بساطة الخوارزمية وموثوقيتها، سنعتمد طريقة تستخدم الأعداد الأولية الـ $12$ الأخيرة كقاعدة (أو القواعد السبعة المحسنة). في تنفيذ C++، نقوم بتحسين يقلل من عدد الاختبارات إلى الحد الأدنى عن طريق تقسيم النطاقات باستخدام التفرع الشرطي.&lt;/p>
&lt;hr>
&lt;h1 id="5-تنفيذ-متقدم-بلغة-c-highly-optimized-c-implementation">5. تنفيذ متقدم بلغة C++ (Highly Optimized C++ Implementation)
&lt;/h1>&lt;p>الآن، سنقوم بتجميع النظرية الرياضية وتصميم الخوارزمية التي تناولناها حتى الآن، وسنقدم الكود المصدري لتنفيذ دالة اختبار ميلر-رابين للأولية بأعلى مستوى في لغة C++ الحديثة.&lt;/p>
&lt;h2 id="نقاط-التنفيذ">نقاط التنفيذ
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>تجنب فيضان الضرب للأعداد الصحيحة 64 بت:&lt;/strong>
في حالة $N \approx 10^{18}$، يمكن أن يصل الحد الأقصى لـ $x \times x$ في الضرب النمطي إلى $10^{36}$، مما يتجاوز بسهولة الحد الأقصى للأنواع الصحيحة ذات 64 بت (&lt;code>uint64_t&lt;/code> أو &lt;code>long long&lt;/code>) وهو $1.8 \times 10^{19}$.
لحل هذه المشكلة، نستخدم النوع الممتد لـ GCC و Clang وهو &lt;code>__int128_t&lt;/code> (أو &lt;code>unsigned __int128&lt;/code>)، ونحسب المعامل (Modulo) بعد الحساب بدقة 128 بت. هذا يسمح بالضرب النمطي السريع دون استخدام خوارزميات معقدة.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>اختيار الأساس الحتمي:&lt;/strong>
عندما تكون قيمة $N$ صغيرة، نقوم بالتحسين بحيث لا نحتاج إلا لاختبار عدد قليل من الأسس (bases).&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="كود-c-المصدري-الكامل">كود C++ المصدري الكامل
&lt;/h2>&lt;p>فيما يلي نعرض الكود المصدري للنسخة النهائية الجاهزة للاستخدام العملي. يمكن نسخ هذا الكود واستخدامه كما هو في بيئات البرمجة التنافسية وغيرها.&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;span class="lnt">87
&lt;/span>&lt;span class="lnt">88
&lt;/span>&lt;span class="lnt">89
&lt;/span>&lt;span class="lnt">90
&lt;/span>&lt;span class="lnt">91
&lt;/span>&lt;span class="lnt">92
&lt;/span>&lt;span class="lnt">93
&lt;/span>&lt;span class="lnt">94
&lt;/span>&lt;span class="lnt">95
&lt;/span>&lt;span class="lnt">96
&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;vector&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;cstdint&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;initializer_list&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 السريع باستخدام أعداد صحيحة 128 بت
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">inline&lt;/span> &lt;span class="kt">uint64_t&lt;/span> &lt;span class="nf">mod_mul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">uint64_t&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">uint64_t&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">uint64_t&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="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">uint64_t&lt;/span>&lt;span class="p">)((&lt;/span>&lt;span class="kt">unsigned&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">b&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="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">// حساب (base^exp) 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">uint64_t&lt;/span> &lt;span class="nf">mod_pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">uint64_t&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">uint64_t&lt;/span> &lt;span class="n">exp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">uint64_t&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">uint64_t&lt;/span> &lt;span class="n">res&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">base&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">exp&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="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">exp&lt;/span> &lt;span class="o">&amp;amp;&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_mul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">,&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="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_mul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">base&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">,&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="n">exp&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;=&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="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">res&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">// الاختبار الحتمي للأعداد الصحيحة 64-بت باستخدام طريقة ميلر-رابين
&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">is_prime_miller_rabin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">uint64_t&lt;/span> &lt;span class="n">n&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">// التحقق المسبق من القيم الحدية والأعداد الأولية الصغيرة
&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">n&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">2&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">n&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">5&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">7&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">n&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="o">||&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">5&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">7&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="c1">// تحليل إلى الشكل n-1 = d * 2^s
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">uint64_t&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">n&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="kt">int&lt;/span> &lt;span class="n">s&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">while&lt;/span> &lt;span class="p">((&lt;/span>&lt;span class="n">d&lt;/span> &lt;span class="o">&amp;amp;&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&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="n">d&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;=&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">s&lt;/span>&lt;span class="o">++&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">// قائمة الأسس (bases) المستخدمة في الاختبار
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// تحسين يقلل من عدد الأسس المختبرة بناءً على حجم N
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint64_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">bases&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">n&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">4759123141ULL&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">bases&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">61&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="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">1122004669633ULL&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">bases&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">23&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1662803&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="c1">// 7 أسس حتمية لجميع الأعداد N &amp;lt; 2^64
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">bases&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">325&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">9375&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">28178&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">450775&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">9780504&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1795265022&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="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">uint64_t&lt;/span> &lt;span class="nl">a&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="n">bases&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">a&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="k">if&lt;/span> &lt;span class="p">(&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 class="k">continue&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// إذا كان a من مضاعفات n فلا يمكن التحديد ولكنه ليس أولياً
&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="kt">uint64_t&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_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">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="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">continue&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">bool&lt;/span> &lt;span class="n">composite&lt;/span> &lt;span class="o">=&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="c1">// حلقة التكرار s-1 مرة (x = x^2 mod n)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">r&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">r&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="o">++&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">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_mul&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">x&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="k">if&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">n&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">composite&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">false&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">break&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>&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="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">composite&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="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="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="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="c1">// أمثلة للاختبار
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint64_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">test_cases&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &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="mi">998244353&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="mi">1000000000000000003&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1">// عدد أولي بالقرب من 10^18
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="mi">1000000000000000007&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1">// عدد مؤلف (10^18 + 7)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="mi">561&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="mi">18446744073709551557ULL&lt;/span> &lt;span class="c1">// أحد أكبر الأعداد الأولية بالقرب من 2^64
&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="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">uint64_t&lt;/span> &lt;span class="nl">n&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="n">test_cases&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">n&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; is &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">is_prime_miller_rabin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="s">&amp;#34;Prime&amp;#34;&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="s">&amp;#34;Composite&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="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>&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;hr>
&lt;h1 id="6-تقييم-أداء-وتعقيد-الخوارزمية">6. تقييم أداء وتعقيد الخوارزمية
&lt;/h1>&lt;p>سنقوم بدراسة أداء الخوارزمية التي تم تنفيذها.&lt;/p>
&lt;h2 id="التعقيد-الزمني-time-complexity">التعقيد الزمني (Time Complexity)
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>طريقة القسمة التجريبية:&lt;/strong> $O(\sqrt{N})$&lt;/li>
&lt;li>&lt;strong>اختبار فيرما:&lt;/strong> حساب الأس $O(\log N) \times k$ ($k$ هو عدد المحاولات)&lt;/li>
&lt;li>&lt;strong>طريقة ميلر-رابين:&lt;/strong> حساب الأس والتكرار $O(\log N) \times k$&lt;/li>
&lt;/ul>
&lt;p>في بيئة 64 بت ($N \le 2^{64}$)، تتحقق طريقة ميلر-رابين الحتمية المذكورة أعلاه من $7$ أسس كحد أقصى. لذلك، يمكن اعتبار $k \le 7$ كثابت، ويكون التعقيد الزمني الإجمالي هو $O(\log N)$ بدقة.
حتى في الحالة القصوى ($N \approx 10^{19}$)، لا يتجاوز عدد خطوات التنفيذ $7 \times 64 = 448$ خطوة من العمليات الأساسية، ويكون وقت التنفيذ بضعة ميكروثانية ($10^{-6}$ ثانية) أو أقل. مقارنة بـ $O(\sqrt{N})$ لطريقة القسمة التجريبية (عدد التكرارات $\approx 4 \times 10^9$ مرة)، يتم تحقيق &lt;strong>تسريع بملايين المرات&lt;/strong>.&lt;/p>
&lt;h2 id="المزيد-من-التحسين-ضرب-مونتغمري-montgomery-multiplication">المزيد من التحسين: ضرب مونتغمري (Montgomery Multiplication)
&lt;/h2>&lt;p>في تنفيذ هذا المقال، نستخدم النوع الممتد 128 بت &lt;code>__int128_t&lt;/code> لإجراء القسمة (عملية المعامل &lt;code>%&lt;/code>). حتى في وحدات المعالجة المركزية الحديثة، تُعتبر قسمة الأعداد الصحيحة (تعليمات DIV) أمرًا مكلفًا يتطلب عشرات الدورات مقارنة بالجمع والضرب.&lt;/p>
&lt;p>قد يستخدم صانعو المكتبات والمبرمجون التنافسيون الذين يسعون إلى التحسين الأقصى تقنية تُعرف باسم &lt;strong>ضرب مونتغمري (Montgomery Multiplication)&lt;/strong>. ضرب مونتغمري هو خوارزمية مذهلة تستبدل عملية المعامل (القسمة) المكلفة بـ &amp;ldquo;إزاحة البتات (Bit Shifts) والضرب فقط&amp;rdquo; عن طريق تعيين الأرقام إلى &amp;ldquo;مساحة مونتغمري&amp;rdquo; الخاصة.
بدمج هذا في الضرب النمطي لاختبار ميلر-رابين، يمكن زيادة سرعة التنفيذ بمرتين إلى ثلاث مرات. نظراً لأن هذا موضوع عميق جداً، أود أن أشرحه بالتفصيل في مقال آخر.&lt;/p>
&lt;hr>
&lt;h1 id="7-الخلاصة">7. الخلاصة
&lt;/h1>&lt;p>في هذا المقال، قمنا بشرح شامل من أساسيات اختبار الأولية إلى المواضيع المتقدمة.
دعونا نراجع النقاط الرئيسية.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>طريقة القسمة التجريبية&lt;/strong> موثوقة، ولكن نظرًا لتعقيدها الزمني $O(\sqrt{N})$، تفتقر إلى الفائدة العملية عندما يتجاوز $N$ $10^{12}$.&lt;/li>
&lt;li>&lt;strong>اختبار فيرما&lt;/strong> سريع جدًا بـ $O(\log N)$، لكن له نقطة ضعف قاتلة تتمثل في انخداعه بالأعداد شبه الأولية المطلقة مثل أعداد كارمايكل.&lt;/li>
&lt;li>&lt;strong>طريقة ميلر-رابين لاختبار الأولية&lt;/strong> هي الخوارزمية الأكثر عملية وقوة والتي تقضي على نقاط ضعف اختبار فيرما.&lt;/li>
&lt;li>في تنفيذ C++، يمكن التعامل بأمان مع فيضان ضرب الأعداد الصحيحة 64 بت من خلال الاستفادة من &lt;code>__int128_t&lt;/code>.&lt;/li>
&lt;li>ضمن نطاق الأعداد الصحيحة 64 بت ($N &lt; 2^{64}$)، من خلال اختيار $7$ أو $12$ عدداً أولياً محدداً كأساس، &lt;strong>يمكن اختبار الأولية بشكل حتمي (دقيق 100%)&lt;/strong> وليس باحتمال.&lt;/li>
&lt;/ol>
&lt;p>يعد اختبار الأولية السريع تقنية لا مفر منها في الحسابات التي تتعامل مع أعداد ضخمة. كود المصدر لطريقة ميلر-رابين بـ C++ المقدم في هذا المقال قوي ويمكن استخدامه عملياً كما هو. يرجى الاستفادة منه في مشاريعك الخاصة أو مسابقات الخوارزميات.&lt;/p>
&lt;div class="mermaid">graph LR
TrialDivision["طريقة القسمة التجريبية (O(√N))"] --> Fermat["اختبار فيرما (O(log N), توجد نقاط ضعف)"]
Fermat --> MillerRabin["طريقة ميلر-رابين (O(log N), يمكن جعلها حتمية)"]
MillerRabin --> Montgomery["+ ضرب مونتغمري (تسريع المضاعف الثابت)"]
style MillerRabin fill:#f9f,stroke:#333,stroke-width:2px&lt;/div>
&lt;p>عالم الخوارزميات حيث تتقاطع البرمجة والرياضيات هو عالم جميل وعميق جداً. نأمل أن يكون هذا المقال مفيداً لتعلمك المستقبلي.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Reference:&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;em>Pomerance, C., Selfridge, J. L., &amp;amp; Wagstaff, S. S. (1980). The pseudoprimes to 25.10^9. Mathematics of Computation.&lt;/em>&lt;/li>
&lt;li>&lt;em>Sinclair, J. (2011). Deterministic Miller-Rabin primality testing.&lt;/em>&lt;/li>
&lt;/ul></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><item><title>اليوم الذي تصبح فيه الحواسيب الكمومية عملية: أين نحن في عام 2026</title><link>http://kenji.blog/ar/p/quantum-computing-2026-current-status/</link><pubDate>Fri, 11 Sep 2026 06:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/quantum-computing-2026-current-status/</guid><description>&lt;img src="http://kenji.blog/p/quantum-computing-2026-current-status/img/eyecatch.jpg" alt="Featured image of post اليوم الذي تصبح فيه الحواسيب الكمومية عملية: أين نحن في عام 2026" />&lt;h2 id="1-مقدمة-إلى-أين-وصلت-الحواسيب-الكمومية-في-عام-2026">1. مقدمة: إلى أين وصلت الحواسيب الكمومية في عام 2026؟
&lt;/h2>&lt;p>اعتبارًا من عام 2026، شهدت الحوسبة الكمومية تحولًا حاسمًا من &amp;ldquo;حلم نظري&amp;rdquo; في الماضي إلى &amp;ldquo;واقع هندسي&amp;rdquo;. ومع اتضاح حدود أجهزة &lt;strong>NISQ (Noisy Intermediate-Scale Quantum)&lt;/strong>، التي كانت سائدة حتى سنوات قليلة مضت، وجهت المؤسسات البحثية وعمالقة التكنولوجيا حول العالم أنظارها نحو تحقيق &amp;ldquo;الحوسبة الكمومية المتسامحة مع الأخطاء (FTQC: Fault-Tolerant Quantum Computing)&amp;rdquo;.&lt;/p>
&lt;p>في هذا المقال، سنتعمق في الوضع الحالي للحواسيب الكمومية مع دمج أحدث الاختراقات لعام 2026. على وجه الخصوص، سنشرح بالتفصيل تصحيح الخطأ الكمومي (الكود السطحي)، والفرق بين الكيوبتات المادية والكيوبتات المنطقية، والتقدم في الحوسبة الكمومية الطوبولوجية، والخطوط الأمامية لطرق الموصلات الفائقة ومصائد الأيونات.&lt;/p>
&lt;hr>
&lt;h2 id="2-أساسيات-الحالة-الكمومية-والدقة-fidelity">2. أساسيات الحالة الكمومية والدقة (Fidelity)
&lt;/h2>&lt;p>الكيوبت (Qubit)، وهو الوحدة الأساسية للحاسوب الكمومي، يختلف عن البت الكلاسيكي (0 أو 1) حيث يمكن أن يتخذ حالة تراكب (Superposition) من 0 و 1. يتم التعبير عن حالة الكيوبت المفرد كمتجه في فضاء هيلبرت على النحو التالي:&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>هنا، $\alpha$ و $\beta$ عبارة عن سعات احتمالية لأعداد مركبة، وتستوفي شرط التسوية التالي:&lt;/p>
$$
|\alpha|^2 + |\beta|^2 = 1
$$
&lt;p>من أهم المؤشرات لقياس أداء الحوسبة الكمومية هو &lt;strong>الدقة (Fidelity)&lt;/strong>. يتم تعريف الدقة $F$ بين الحالة الكمومية المثالية $|\psi\rangle$ ومصفوفة الكثافة الفعلية $\rho$ التي تدهورت بسبب الضوضاء وأصبحت حالة مختلطة على النحو التالي:&lt;/p>
$$
F(\rho, |\psi\rangle) = \langle \psi | \rho | \psi \rangle
$$
&lt;p>اعتبارًا من عام 2026، أصبحت دقة البوابات ثنائية الكيوبت (مثل: بوابة CNOT وبوابة CZ) في طريقة الموصلات الفائقة تتجاوز حاجز &lt;strong>99.99%&lt;/strong> (ما يسمى بـ &amp;ldquo;تسعات أربعة&amp;rdquo;) بشكل مستقر. هذا الرقم يتجاوز بكثير عتبة تصحيح الخطأ باستخدام الكود السطحي (حوالي 99%)، وهو أحد أكبر الاختراقات نحو الاستخدام العملي.&lt;/p>
&lt;hr>
&lt;h2 id="3-حدود-عصر-nisq-والتحول-النموذجي-نحو-ftqc">3. حدود عصر NISQ والتحول النموذجي نحو FTQC
&lt;/h2>&lt;p>شهدت أواخر العقد الأول من القرن الحادي والعشرين وأوائل العقد الثاني من القرن الحادي والعشرين عصر NISQ (Noisy Intermediate-Scale Quantum)، وهي أجهزة تحتوي على عشرات إلى مئات الكيوبتات بدون تصحيح للأخطاء. ومع ذلك، كان لـ NISQ حدود واضحة.&lt;/p>
&lt;p>مع زيادة عمق الدائرة (Depth)، تتراكم الأخطاء بشكل أسي، مما يجعل من المستحيل الحصول على نتائج حسابية ذات معنى. يتحلل الاحتمال الإجمالي للنجاح $P_{success}$ عند عمق الدائرة $D$ بالنسبة لدقة البوابة المفردة $f$ وعدد البوابات $N$ على النحو التالي:&lt;/p>
$$
P_{success} \approx f^N
$$
&lt;p>إذا تم تطبيق 1000 بوابة بدقة $f = 0.99$، فستصبح النتيجة $0.99^{1000} \approx 4.3 \times 10^{-5}$، وستُدفن النتائج تقريبًا في ضوضاء عشوائية. لذلك، في عام 2026، تتركز الموارد على توليد &lt;strong>الكيوبتات المنطقية (Logical Qubit)&lt;/strong> بدلاً من التوسيع المباشر لخوارزميات NISQ (مثل VQE و QAOA).&lt;/p>
&lt;hr>
&lt;h2 id="4-تصحيح-الخطأ-الكمومي-والكيوبتات-المنطقية-الخطوط-الأمامية-للكود-السطحي">4. تصحيح الخطأ الكمومي والكيوبتات المنطقية: الخطوط الأمامية للكود السطحي
&lt;/h2>&lt;p>تصحيح الخطأ الكمومي (QEC: Quantum Error Correction) هو تقنية تقوم بتشفير العديد من &amp;ldquo;الكيوبتات المادية&amp;rdquo; لإنشاء &amp;ldquo;كيوبت منطقي&amp;rdquo; واحد واكتشاف الأخطاء وتصحيحها. التقنية الأكثر واعدة حاليًا هي &lt;strong>الكود السطحي (Surface Code)&lt;/strong>.&lt;/p>
&lt;h3 id="41-بنية-الكود-السطحي-surface-code">4.1 بنية الكود السطحي (Surface Code)
&lt;/h3>&lt;p>في الكود السطحي، يتم ترتيب الكيوبتات في شبكة ثنائية الأبعاد. تُصطف كيوبتات البيانات (التي تحتفظ بالمعلومات الفعلية) وكيوبتات القياس (لقياس المتلازمة) مثل نمط رقعة الشطرنج.&lt;/p>
&lt;div class="mermaid">graph TD
A["كيوبت البيانات (D1)"] --- B["كيوبت القياس (M1)"]
B --- C["كيوبت البيانات (D2)"]
C --- D["كيوبت القياس (M2)"]
D --- E["كيوبت البيانات (D3)"]
B --- F["كيوبت البيانات (D4)"]
D --- G["كيوبت البيانات (D5)"]
style A fill:#e1f5fe,stroke:#039be5
style C fill:#e1f5fe,stroke:#039be5
style E fill:#e1f5fe,stroke:#039be5
style F fill:#e1f5fe,stroke:#039be5
style G fill:#e1f5fe,stroke:#039be5
style B fill:#fff3e0,stroke:#fb8c00
style D fill:#fff3e0,stroke:#fb8c00&lt;/div>
&lt;p>باستخدام عوامل الاستقرار (Stabilizers) $S_x$ و $S_z$، تتم مراقبة انعكاس البت (خطأ X) وانعكاس الطور (خطأ Z) باستمرار.&lt;/p>
$$
S_x = \prod_{i \in \text{star}} X_i, \quad S_z = \prod_{j \in \text{plaquette}} Z_j
$$
&lt;p>كان التطور المهم في عام 2026 هو الاختراق الكامل لـ &amp;ldquo;نقطة التعادل (Break-even point)&amp;rdquo;. وبعبارة أخرى، أصبحت الضوضاء التي تمت إزالتها بواسطة تصحيح الخطأ أكبر من الضوضاء الناتجة عن الدائرة الإضافية لإجراء تصحيح الخطأ، وتجاوز العمر الافتراضي للكيوبت المنطقي العمر الافتراضي للكيوبت المادي بعدة مراتب من حيث الحجم.&lt;/p>
&lt;h3 id="42-دورة-تصحيح-الخطأ-الكمومي">4.2 دورة تصحيح الخطأ الكمومي
&lt;/h3>&lt;p>يعمل تصحيح الخطأ كحلقة تغذية مرتدة مستمرة.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant D as "كيوبتات البيانات"
participant M as "كيوبتات مساعدة/القياس"
participant C as "وحدة التحكم الكلاسيكية"
loop "دورة استخراج المتلازمة (حوالي 1 ميكرو ثانية)"
D->>M: "التشابك (CNOT/CZ)"
M->>C: "قياس الحالة (المتلازمة)"
C->>C: "فك تشفير المتلازمة (مثل مطابقة الوزن المثالي الأدنى)"
C-->>D: "تطبيق تصحيح باولي (إذا لزم الأمر)"
end&lt;/div>
&lt;p>حاليًا، تم ترسيخ تقنية تنفيذ عملية فك التشفير الكلاسيكية هذه (تحليل المتلازمة) في نانو ثانية باستخدام FPGA و ASIC المخصصة، ودخل تصحيح الخطأ في الوقت الفعلي مرحلة الاستخدام العملي.&lt;/p>
&lt;hr>
&lt;h2 id="5-تطور-بنية-الأجهزة-إصدار-2026">5. تطور بنية الأجهزة (إصدار 2026)
&lt;/h2>&lt;p>تتطور الأجهزة الكمومية في عام 2026 بشكل أساسي حول ثلاثة محاور: &amp;ldquo;طريقة الموصلات الفائقة&amp;rdquo;، و&amp;quot;طريقة مصيدة الأيونات&amp;quot;، و&amp;quot;الطريقة الطوبولوجية&amp;quot;.&lt;/p>
&lt;h3 id="51-تكامل-الكيوبتات-فائقة-التوصيل">5.1 تكامل الكيوبتات فائقة التوصيل
&lt;/h3>&lt;p>طريقة الموصلات الفائقة هي مجال تقوده شركات مثل IBM و Google، وتعتبر كيوبتات الترانزمون (Transmon) باستخدام وصلات جوزيفسون هي السائدة. في عام 2026، تم تحقيق شريحة ضخمة تدمج الآلاف إلى عشرة آلاف كيوبت مادي على شريحة واحدة.&lt;/p>
&lt;p>الجدير بالذكر هو ترسيخ &lt;strong>الاتصالات الكمومية بين الوحدات (Quantum Interconnects)&lt;/strong>. تم تنفيذ النقل الآني الكمومي بين الشرائح باستخدام فوتونات الموجات الدقيقة على المستوى التجاري، مما أتاح تجاوز قيود الحجم لثلاجة التخفيف الواحدة.&lt;/p>
&lt;h3 id="52-التوسع-ثنائي-الأبعاد-لمصيدة-الأيونات-والترابط-البصري">5.2 التوسع ثنائي الأبعاد لمصيدة الأيونات والترابط البصري
&lt;/h3>&lt;p>في طريقة مصيدة الأيونات (التي تقودها شركات مثل Quantinuum و IonQ)، يتم استخدام حالات الطاقة الداخلية للأيونات المعلقة في الفراغ ككيوبتات. مقارنة بطريقة الموصلات الفائقة، تتمتع بميزة أوقات تماسك T1/T2 طويلة جدًا وإمكانية الاتصال الشامل (All-to-All Connectivity).&lt;/p>
&lt;p>كان الاختراق في عام 2026 هو جعل بنية QCCD (Quantum Charge Coupled Device) ثنائية الأبعاد وتوليد التشابك عالي السرعة بين المصائد المتعددة باستخدام الترابط الضوئي. أدى هذا إلى تحسين &amp;ldquo;بطء سرعة البوابة&amp;rdquo; و&amp;quot;قابلية التوسع&amp;quot;، وهي نقاط الضعف في مصيدة الأيونات، بشكل كبير.&lt;/p>
&lt;h3 id="53-الحوسبة-الكمومية-الطوبولوجية-التحكم-في-الأنيونات">5.3 الحوسبة الكمومية الطوبولوجية: التحكم في الأنيونات
&lt;/h3>&lt;p>دخلت &lt;strong>الحوسبة الكمومية الطوبولوجية&lt;/strong>، والتي اعتبرت لفترة طويلة وجودًا نظريًا، أخيرًا مرحلة العرض التجريبي في عام 2026. تستخدم هذه الطريقة، التي تروج لها شركة Microsoft وغيرها، أنيونات غير أبيلية (Non-Abelian Anyons) تسمى &amp;ldquo;أنماط مايورانا الصفرية (Majorana Zero Modes)&amp;rdquo;.&lt;/p>
&lt;p>يتم تنفيذ البوابات الكمومية عن طريق عملية تسمى &amp;ldquo;التضفير (Braiding)&amp;rdquo; التي تبدل مواقع جزيئات الأنيون.&lt;/p>
$$
|\psi_{final}\rangle = B_{ij} |\psi_{initial}\rangle
$$
&lt;p>هنا $B_{ij}$ هو عامل التضفير. الطريقة الطوبولوجية مقاومة بطبيعتها للضوضاء البيئية (مقاومة الأخطاء على مستوى الأجهزة) لأن تخزين المعلومات لا يعتمد على الحالة الموضعية للجسيمات، بل على طوبولوجيا &amp;ldquo;العقدة&amp;rdquo; بأكملها. في عام 2026، تم تأكيد توليد أول كيوبت منطقي طوبولوجي عالي الدقة في العالم، مما جذب الانتباه كطريق مختصر قوي نحو FTQC.&lt;/p>
&lt;hr>
&lt;h2 id="6-خارطة-الطريق-نحو-الاستخدام-العملي-والآفاق">6. خارطة الطريق نحو الاستخدام العملي والآفاق
&lt;/h2>&lt;p>لكي تظهر الحواسيب الكمومية حقًا &lt;strong>التفوق الكمومي (Quantum Advantage)&lt;/strong> الذي تتفوق فيه على الحواسيب الكلاسيكية (الحواسيب الفائقة) في مجالات مثل &amp;ldquo;الحسابات الكيميائية&amp;rdquo;، و&amp;quot;علم المواد&amp;quot;، و&amp;quot;النمذجة المالية&amp;quot;، هناك حاجة إلى آلاف الكيوبتات المنطقية.&lt;/p>
&lt;div class="mermaid">gantt
title "خارطة طريق الحوسبة الكمومية (منقحة عام 2026)"
dateFormat YYYY
axisFormat %Y
section "عصر NISQ"
"كيوبتات صاخبة (&lt;1000)" :done, 2018, 2024
section "بداية FTQC"
"إثبات نقطة التعادل" :done, 2024, 2026
"المئات من الكيوبتات المنطقية" :active, 2026, 2028
section "FTQC واسع النطاق"
"1000+ كيوبت منطقي (تطبيق تجاري)" : 2028, 2030
"كمبيوتر كمومي شامل متسامح مع الأخطاء" : 2030, 2035&lt;/div>
&lt;h3 id="61-التحديات-والمستقبل-الذي-نواجهه-حاليا">6.1 التحديات والمستقبل الذي نواجهه حاليًا
&lt;/h3>&lt;p>يتمثل التحدي الأكبر اعتبارًا من عام 2026 في قدرة التبريد لأجهزة التبريد العملاقة (ثلاجات التخفيف) للحفاظ على درجات حرارة منخفضة للغاية، والأسلاك التي تربط معدات التحكم في درجة حرارة الغرفة والشرائح الكمومية المبردة (عنق الزجاجة في الإدخال والإخراج). استجابة لذلك، يتقدم تطوير رقائق التحكم CMOS التي تعمل في بيئات التبريد العميق (Cryo-CMOS) بوتيرة سريعة.&lt;/p>
&lt;h3 id="الخاتمة">الخاتمة
&lt;/h3>&lt;p>سيتم تسجيل عام 2026 في تاريخ الحواسيب الكمومية كـ &amp;ldquo;العام الأول لتوسيع نطاق الكيوبتات المنطقية&amp;rdquo;. من خلال إثبات خوارزميات تصحيح الخطأ، ووحدات الأجهزة، والتطور السريع للنهج الطوبولوجي، لم يعد &amp;ldquo;اليوم الذي تصبح فيه عملية&amp;rdquo; قصة من المستقبل البعيد، بل أصبح يمكن اعتباره كمعلم محدد في غضون السنوات القليلة القادمة. بالنسبة لمطوري الخوارزميات الكمومية والشركات، يمكن القول إن الوقت الحالي هو الوقت المناسب للاستثمار بجدية في حل المشكلات باستخدام التقنيات الكمومية الأصلية.&lt;/p>
&lt;hr>
&lt;p>&lt;em>تمت كتابة هذا المقال استنادًا إلى أحدث الأوراق البحثية في الحوسبة الكمومية واتجاهات الصناعة اعتبارًا من عام 2026.&lt;/em>&lt;/p></description></item></channel></rss>