<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GNFS on kenji.blog</title><link>http://kenji.blog/ar/tags/gnfs/</link><description>Recent content in GNFS on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ar</language><copyright>kenjinote</copyright><lastBuildDate>Sun, 06 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ar/tags/gnfs/index.xml" rel="self" type="application/rss+xml"/><item><title>【فهم كامل بالمعادلات】 لماذا يُهزم «GNFS» الكلاسيكي الأقوى أمام الخوارزميات الكمية؟ نقلة نوعية في تحليل العوامل الأولية</title><link>http://kenji.blog/ar/p/gnfs-to-shors-algorithm-math-deepdive/</link><pubDate>Sun, 06 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/gnfs-to-shors-algorithm-math-deepdive/</guid><description>&lt;img src="http://kenji.blog/p/gnfs-to-shors-algorithm-math-deepdive/quantum_vs_gnfs_eyecatch_1788616101508.jpg" alt="Featured image of post 【فهم كامل بالمعادلات】 لماذا يُهزم «GNFS» الكلاسيكي الأقوى أمام الخوارزميات الكمية؟ نقلة نوعية في تحليل العوامل الأولية" />&lt;p>تتم حماية أمن المعلومات في مجتمع الإنترنت الحديث بواسطة التشفير بالمفتاح العام، مثل تشفير RSA. يعتمد أساس أمان تشفير RSA على حقيقة أن &lt;strong>&amp;ldquo;التحليل إلى العوامل الأولية للأرقام المركبة الضخمة يمثل صعوبة بالغة من الناحية الحسابية&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;p>في هذا المقال، سنكشف عن الآلية الرياضية لـ &lt;strong>&amp;ldquo;منخل حقل الأعداد العام&amp;rdquo;&lt;/strong> (GNFS)، وهو أقوى خوارزمية تحليل للعوامل الأولية للكمبيوتر الكلاسيكي، ونتعمق في سبب هزيمتها تمامًا بواسطة &lt;strong>&amp;ldquo;خوارزمية شور&amp;rdquo;&lt;/strong> التي اكتشفها بيتر شور. سوف نستكشف هذه النقلة النوعية بعمق باستخدام المعادلات الرياضية والرسوم التوضيحية المفاهيمية.&lt;/p>
&lt;hr>
&lt;h2 id="1-نهج-التحليل-إلى-العوامل-في-الحوسبة-الكلاسيكية-التطور-من-طريقة-فيرما-للتحليل-إلى-العوامل">1. نهج التحليل إلى العوامل في الحوسبة الكلاسيكية: التطور من طريقة فيرما للتحليل إلى العوامل
&lt;/h2>&lt;p>مشكلة التحليل إلى العوامل الأولية هي مشكلة إيجاد الأعداد الأولية $p, q$ بحيث يكون $N = p \times q$ لعدد مركب $N$ محدد.&lt;/p>
&lt;p>تتلخص الفكرة الأساسية في إيجاد $x, y$ غير بديهية تلبي معادلة التطابق التالية:&lt;/p>
$$ x^2 \equiv y^2 \pmod N $$
&lt;p>إذا قمنا بتعديل ذلك، نحصل على:&lt;/p>
$$ x^2 - y^2 \equiv 0 \pmod N $$
$$ (x - y)(x + y) \equiv 0 \pmod N $$
&lt;p>هنا، إذا كان $x \not\equiv \pm y \pmod N$، يمكننا الحصول على عامل غير بديهي لـ $N$ عن طريق حساب $\gcd(x-y, N)$ أو $\gcd(x+y, N)$. هذه الحقيقة هي أساس خوارزميات التحليل الحديثة مثل GNFS.&lt;/p>
&lt;hr>
&lt;h2 id="2-أقوى-الخوارزميات-الكلاسيكية-أعماق-منخل-حقل-الأعداد-العام-gnfs">2. أقوى الخوارزميات الكلاسيكية: أعماق &amp;ldquo;منخل حقل الأعداد العام&amp;rdquo; (GNFS)
&lt;/h2>&lt;p>يعد &lt;strong>&amp;ldquo;GNFS&amp;rdquo;&lt;/strong> أسرع خوارزمية تحليل للعوامل الأولية معروفة لأجهزة الكمبيوتر الكلاسيكية اليوم. يستغرق تعقيد الوقت الخاص بها وقتًا شبه أسي (Sub-exponential).&lt;/p>
&lt;h3 id="تعقيد-gnfs">تعقيد GNFS
&lt;/h3>&lt;p>بافتراض أن عدد أرقام $N$ هو $b = \log_2 N$، يمكن التعبير عن تعقيد GNFS على النحو التالي:&lt;/p>
$$ O\left( \exp \left( \left(\frac{64}{9} b\right)^{1/3} (\log b)^{2/3} \right) \right) $$
&lt;p>كما يتضح من هذه المعادلة، التعقيد ليس وقتًا كثير الحدود، بل &lt;strong>&amp;ldquo;وقت شبه أسي&amp;rdquo;&lt;/strong> أبطأ قليلاً من الدالة الأسية. ومع ذلك، مع زيادة عدد الخانات، سيزداد وقت الحساب بشكل فلكي.&lt;/p>
&lt;h3 id="الآلية-الرياضية-لـ-gnfs">الآلية الرياضية لـ GNFS
&lt;/h3>&lt;p>تتكون GNFS بشكل رئيسي من 4 خطوات:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>اختيار كثيرات الحدود (Polynomial Selection)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>الغربلة (Sieving)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>تقليل المصفوفة (Matrix Reduction)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>حساب الجذر التربيعي (Square Root)&lt;/strong>&lt;/li>
&lt;/ol>
&lt;h4 id="21-اختيار-كثيرات-الحدود-والحقل-الجبري">2.1. اختيار كثيرات الحدود والحقل الجبري
&lt;/h4>&lt;p>أولاً، نختار كثيرات الحدود غير القابلة للاختزال $f(x)$ و $g(x)$ بمعاملات صحيحة. يتم تعيينها ليكون لها جذر مشترك $m$ مقياس $N$. أي:&lt;/p>
$$ f(m) \equiv 0 \pmod N $$
$$ g(m) \equiv 0 \pmod N $$
&lt;p>عادة، يتم اختيار $g(x)$ ككثيرة حدود من الدرجة الأولى $g(x) = x - m$. إذا جعلنا جذر $f(x)$ هو $\alpha$, يتشكل &lt;strong>&amp;ldquo;حقل جبري&amp;rdquo;&lt;/strong> (Number Field) يسمى $\mathbb{Q}(\alpha)$. نقارن العمليات في حلقة $\mathbb{Q}(\alpha)$ مع العمليات في حلقة الأعداد الصحيحة العادية $\mathbb{Z}$ من خلال تشاكل $\phi: \alpha \mapsto m$.&lt;/p>
&lt;h4 id="22-الغربلة-sieving">2.2. الغربلة (Sieving)
&lt;/h4>&lt;p>بعد ذلك، نبحث عن عدد كبير من أزواج الأعداد الصحيحة الأولية نسبياً $(a, b)$. الهدف هو إيجاد أزواج بحيث تكون كلتا القيمتين التاليتين &lt;strong>&amp;ldquo;B-smooth&amp;rdquo;&lt;/strong> (تتكون فقط من عوامل أولية صغيرة نسبياً):&lt;/p>
&lt;ol>
&lt;li>$a - bm$ (القيمة على حلقة الأعداد الصحيحة)&lt;/li>
&lt;li>$b^d f(a/b)$ (يتوافق مع المعيار $N(a - b\alpha)$ في الحقل الجبري)&lt;/li>
&lt;/ol>
&lt;p>هنا، يتم استخدام طريقة بحث سريعة تسمى &lt;strong>&amp;ldquo;المنخل&amp;rdquo;&lt;/strong> (Sieve). يتيح ذلك استخراج أزواج $(a, b)$ بكفاءة والتي تلبي الشروط من بين عدد هائل من المرشحين.&lt;/p>
&lt;h4 id="23-تقليل-المصفوفة-linear-algebra-over-gf2">2.3. تقليل المصفوفة (Linear Algebra over GF(2))
&lt;/h4>&lt;p>من الأزواج المُجمَّعة $(a, b)$، نقوم بتشكيل متجهات أسية وإيجاد الفضاء الصفري الأيسر لمصفوفة متفرقة ضخمة على $\mathbb{F}_2$ (حقل بعناصر 0 و 1 فقط).&lt;/p>
&lt;p>نجد متجهاً للحل $v$ بحيث تصبح العلاقات $ \prod (a_i - b_i m) $ و $ \prod (a_i - b_i \alpha) $ كل منها مربعاً كاملاً. هذا ليس سوى حل لنظام من المعادلات الخطية:&lt;/p>
$$ M \mathbf{x} \equiv \mathbf{0} \pmod 2 $$
&lt;p>هنا، يتم استخدام خوارزميات الحساب العددي المتقدمة مثل خوارزمية Block Lanczos أو Block Wiedemann.&lt;/p>
&lt;h4 id="24-حساب-الجذر-التربيعي">2.4. حساب الجذر التربيعي
&lt;/h4>&lt;p>أخيراً، نأخذ الجذر التربيعي من كل من الحقل الجبري وحلقة الأعداد الصحيحة، ونستنتج العلاقة $x^2 \equiv y^2 \pmod N$. ثم، نحسب $\gcd(x-y, N)$ ونحصل على العامل.&lt;/p>
&lt;hr>
&lt;h2 id="3-اختراق-الحوسبة-الكمية-خوارزمية-شور">3. اختراق الحوسبة الكمية: &amp;ldquo;خوارزمية شور&amp;rdquo;
&lt;/h2>&lt;p>بينما يتطلب GNFS وقتاً شبه أسي، فإن &lt;strong>&amp;ldquo;خوارزمية شور&amp;rdquo;&lt;/strong> التي نشرها بيتر شور في عام 1994 يمكن أن تحل هذه المشكلة في &lt;strong>&amp;ldquo;وقت كثير الحدود&amp;rdquo;&lt;/strong> باستخدام كمبيوتر كمي.&lt;/p>
&lt;h3 id="تعقيد-خوارزمية-شور">تعقيد خوارزمية شور
&lt;/h3>&lt;p>إذا افترضنا أن عدد الكيوبت هو $O(\log N)$، فإن تعقيد الوقت يكون:&lt;/p>
$$ O((\log N)^3) $$
&lt;p>هذا يعني أنه لا يوجد انفجار أسي بالنسبة لعدد البتات. إنها نتيجة مذهلة حيث يمكن للأعداد المركبة الضخمة التي يتجاوز وقت حسابها في &lt;strong>&amp;ldquo;الحوسبة الكلاسيكية&amp;rdquo;&lt;/strong> عمر الكون، أن يتم حلها في غضون ساعات إلى أيام باستخدام &lt;strong>&amp;ldquo;الحوسبة الكمية&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;h3 id="نظرة-عامة-على-خوارزمية-شور-الاختزال-إلى-مشكلة-إيجاد-الدورة">نظرة عامة على خوارزمية شور: الاختزال إلى مشكلة إيجاد الدورة
&lt;/h3>&lt;p>تختزل خوارزمية شور مشكلة التحليل إلى العوامل الأولية ببراعة إلى &lt;strong>&amp;ldquo;مشكلة إيجاد الدورة&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;ol>
&lt;li>اختر عدداً صحيحاً عشوائياً $a$ أولي نسبياً مع $N$ (حيث $1 &lt; a &lt; N$).&lt;/li>
&lt;li>عرّف الدالة $f(x) = a^x \bmod N$.&lt;/li>
&lt;li>أوجد الدورة $r$ للدالة $f(x)$، أي أصغر عدد صحيح موجب $r$ بحيث $a^r \equiv 1 \pmod N$.&lt;/li>
&lt;li>إذا كان $r$ عدداً زوجياً، تحقق مما إذا كان $a^{r/2} \not\equiv -1 \pmod N$， واحسب $\gcd(a^{r/2} \pm 1, N)$ للحصول على العامل الأولي.&lt;/li>
&lt;/ol>
&lt;p>هذه الخطوة 3، أي &lt;strong>&amp;ldquo;اكتشاف الدورة $r$&amp;rdquo;&lt;/strong> ، هي عنق الزجاجة الذي يتطلب وقتاً أسياً على الكمبيوتر الكلاسيكي، لكن الكمبيوتر الكمي يحلها في لحظة باستخدام &lt;strong>&amp;ldquo;التراكب الكمي&amp;rdquo;&lt;/strong> و &lt;strong>&amp;ldquo;تحويل فورييه الكمي&amp;rdquo;&lt;/strong> (QFT).&lt;/p>
&lt;hr>
&lt;h2 id="4-تحويل-فورييه-الكمي-qft-واستخراج-الدورة">4. تحويل فورييه الكمي (QFT) واستخراج الدورة
&lt;/h2>&lt;p>دعونا نلقي نظرة فاحصة على العمليات الرياضية للحالات الكمية التي هي جوهر خوارزمية شور.&lt;/p>
&lt;h3 id="41-توليد-التراكب-الكمي">4.1. توليد التراكب الكمي
&lt;/h3>&lt;p>أولاً، قم بإعداد سجلي كم (Registers). يحتفظ السجل 1 بحالة التراكب للمدخل $x$، ويحتفظ السجل 2 بنتيجة الحساب للدالة $f(x)$. قم بتطبيق تحويل هادامار (Hadamard Transform) على الحالة الأولية $|0\rangle |0\rangle$ لإنشاء تراكب لجميع قيم $x$ الممكنة.&lt;/p>
$$ |\psi_1\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle |0\rangle $$
&lt;p>
(حيث $Q$ هو قوة للعدد 2 تلبي $N^2 \le Q &lt; 2N^2$)&lt;/p>
&lt;p>بعد ذلك، استخدم وسيط كمي (Quantum Oracle) $U_f$ لحساب $f(x) = a^x \bmod N$ وتخزينه في السجل 2.&lt;/p>
$$ |\psi_2\rangle = U_f |\psi_1\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle |a^x \bmod N\rangle $$
&lt;p>لنفترض الآن أنه تم قياس السجل 2 (من الناحية النظرية، حتى لو لم يتم قياسه، فإن البنية الرياضية هي نفسها). إذا تم ملاحظة قيمة معينة $y = a^{x_0} \bmod N$، فإن حالة السجل 1 ستنهار إلى تراكب لجميع $x$ التي تجعل $f(x) = y$. إذا افترضنا أن الدورة هي $r$، فإن مثل هذه الـ $x$ ستكون $x_0, x_0 + r, x_0 + 2r, \dots$&lt;/p>
$$ |\psi_3\rangle = \frac{1}{\sqrt{M}} \sum_{k=0}^{M-1} |x_0 + kr\rangle $$
&lt;p>
(حيث $M \approx Q/r$ هو عدد الحدود)&lt;/p>
&lt;p>تحتوي هذه الحالة على معلومات الدورة $r$، لكن القياس المباشر سينتج فقط $x_0 + kr$ عشوائية، ولن تُعرف الدورة $r$. هنا يأتي دور QFT.&lt;/p>
&lt;h3 id="42-تطبيق-تحويل-فورييه-الكمي-qft">4.2. تطبيق تحويل فورييه الكمي (QFT)
&lt;/h3>&lt;p>QFT هي عملية تطبق تحويل فورييه المتقطع على السعات للحالات الكمية. يُعرَّف تأثير QFT على الحالة $|x\rangle$ على النحو التالي:&lt;/p>
$$ \text{QFT} |x\rangle = \frac{1}{\sqrt{Q}} \sum_{y=0}^{Q-1} e^{2\pi i \frac{xy}{Q}} |y\rangle $$
&lt;p>عند تطبيق ذلك على $|\psi_3\rangle$، يحدث تداخل الطور (تداخل كمي).&lt;/p>
$$ |\psi_4\rangle = \text{QFT} |\psi_3\rangle = \frac{1}{\sqrt{MQ}} \sum_{y=0}^{Q-1} \sum_{k=0}^{M-1} e^{2\pi i \frac{(x_0 + kr)y}{Q}} |y\rangle $$
&lt;p>إذا قمنا بتوسيع المجموع في هذه المعادلة، يظهر الجزء التالي:&lt;/p>
$$ \sum_{k=0}^{M-1} e^{2\pi i \frac{kry}{Q}} $$
&lt;p>مجموع المتسلسلة الهندسية هذا يعزز بعضه البعض (تداخل بنّاء Constructive Interference) فقط عندما يكون $ry/Q$ قريباً من عدد صحيح، ويلغي بعضه البعض (تداخل هدّام Destructive Interference) في أوقات أخرى.&lt;/p>
&lt;p>لذلك، ستكون الحالة $|y\rangle$ المقاسة باحتمالية عالية عبارة عن عدد صحيح $y$ يلبي:&lt;/p>
$$ \frac{y}{Q} \approx \frac{c}{r} $$
&lt;p>(حيث $c$ هو أي عدد صحيح).&lt;/p>
&lt;h3 id="43-تحديد-الدورة-عن-طريق-توسيع-الكسر-المستمر">4.3. تحديد الدورة عن طريق توسيع الكسر المستمر
&lt;/h3>&lt;p>بعد الحصول على $y$ من خلال القياس، استخدم كمبيوتراً كلاسيكياً لإجراء &lt;strong>&amp;ldquo;توسيع الكسر المستمر&amp;rdquo;&lt;/strong> (Continued Fraction Expansion) على $y/Q$. يتيح ذلك حساب الكسر التقريبي $c/r$ للـ $y/Q$ واستخراج الدورة المحتملة $r$ من المقام بكفاءة عالية.&lt;/p>
&lt;hr>
&lt;h2 id="5-مقارنة-النماذج-المفاهيمية-والنقلة-النوعية">5. مقارنة النماذج المفاهيمية والنقلة النوعية
&lt;/h2>&lt;p>لفهم الاختلاف بين GNFS وخوارزمية شور بشكل بديهي، يوضح الرسم المفاهيمي باستخدام تدوين Mermaid.&lt;/p>
&lt;h3 id="رسم-مفاهيمي-لخوارزمية-شور-باستخدام-دارة-كمية">رسم مفاهيمي لخوارزمية شور باستخدام دارة كمية
&lt;/h3>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A[الحالة الأولية: 0...0] --&amp;gt; B[تراكب جميع الحالات بتحويل هادامار]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt; C[عملية الأس المعياري a^x mod N]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|التشابك الكمي| D[الانهيار إلى حالة ذات دورية]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D --&amp;gt; E[تحويل فورييه الكمي QFT]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> E --&amp;gt;|تضخيم الاحتمالية عبر التداخل| F[القياس: الحصول على y]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F --&amp;gt; G[المعالجة الكلاسيكية: الكسر المستمر]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt; H[اكتشاف الدورة r]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> H --&amp;gt; I[حساب العامل الأولي لـ N]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style A fill:#f9f,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style E fill:#bbf,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style I fill:#bfb,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="جوهر-النقلة-النوعية">جوهر النقلة النوعية
&lt;/h3>&lt;p>يتخذ GNFS نهج &lt;strong>&amp;ldquo;البحث عن علاقات داخل الفضاء الرياضي (الحقل الجبري)&amp;rdquo;&lt;/strong> . ومع ذلك، نظراً لأن مساحة البحث تتسع أسيًا مع عدد الأرقام، يصبح فك التشفير مستحيلاً تقريباً لطول مفتاح يتجاوز 2048 بتاً باستخدام قدرة الحوسبة الكلاسيكية (حتى مع المعالجة المتوازية).&lt;/p>
&lt;p>من ناحية أخرى، تستفيد خوارزمية شور من &lt;strong>&amp;ldquo;الطبيعة الموجية للتداخل الكمي&amp;rdquo;&lt;/strong> . فهي تقيّم جميع مسارات الحساب في حالة التراكب في وقت واحد، وتلغي (تُضعف) الإجابات غير الضرورية باستخدام QFT، وتضخم فقط سعة الاحتمال للدورة الصحيحة. بذلك، لا يبحث هذا النهج في المساحة، بل يتبنى بعداً مختلفاً تماماً: &lt;strong>&amp;ldquo;جعل الإجابة الصحيحة تطفو على السطح&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;h2 id="6-الخلاصة">6. الخلاصة
&lt;/h2>&lt;p>في هذا المقال، قارنا بعمق الخلفية الرياضية وهيكل الخوارزمية بين &lt;strong>&amp;ldquo;GNFS&amp;rdquo;&lt;/strong> الذي يمثل أقصى حدود الحوسبة الكلاسيكية، و &lt;strong>&amp;ldquo;خوارزمية شور&amp;rdquo;&lt;/strong> التي تُظهر قوة الحوسبة الكمية.&lt;/p>
&lt;p>في حين استخدم GNFS تقنيات رياضية مثل اختيار كثيرات الحدود وحسابات المصفوفات الضخمة لدفع التعقيد نحو وقت شبه أسي، حققت خوارزمية شور اختراقاً مباشراً إلى وقت كثير الحدود من خلال الجمع بين المبادئ الأساسية لميكانيكا الكم من التراكب والتداخل مع أداة رياضية (QFT).&lt;/p>
&lt;p>في الوقت الحالي، لا يوجد كمبيوتر كمي متسامح مع الأخطاء (FTQC) على نطاق عملي (آلاف الكيوبتات) قادر على تشغيل خوارزمية شور. ومع ذلك، فإن وجود هذه النقلة النوعية النظرية والرياضية هو بالتحديد السبب الأكبر وراء تسريع الانتقال إلى التشفير ما بعد الكمي (PQC: Post-Quantum Cryptography) في جميع أنحاء العالم اليوم.&lt;/p></description></item><item><title>"تشريح كامل" فهم أقوى خوارزمية لتحليل التشفير "GNFS" عن طريق تنفيذها بلغة C++</title><link>http://kenji.blog/ar/p/gnfs-cpp-implementation/</link><pubDate>Sat, 05 Sep 2026 13:04:59 +0900</pubDate><guid>http://kenji.blog/ar/p/gnfs-cpp-implementation/</guid><description>&lt;img src="http://kenji.blog/p/gnfs-cpp-implementation/gnfs_cpp_blog_eyecatch_1788580949217.jpg" alt="Featured image of post "تشريح كامل" فهم أقوى خوارزمية لتحليل التشفير "GNFS" عن طريق تنفيذها بلغة C++" />&lt;h1 id="تشريح-كامل-فهم-أقوى-خوارزمية-لتحليل-التشفير-gnfs-عن-طريق-تنفيذها-بلغة-c">&amp;ldquo;تشريح كامل&amp;rdquo; فهم أقوى خوارزمية لتحليل التشفير &amp;ldquo;GNFS&amp;rdquo; عن طريق تنفيذها بلغة C++
&lt;/h1>&lt;p>يدعم &amp;ldquo;تشفير RSA&amp;rdquo; أسس الإنترنت الحديث. يعتمد أمانه على الاعتقاد الرياضي بأنه &amp;ldquo;من المستحيل عمليا على أجهزة الكمبيوتر الحالية تحليل عدد مركب عملاق إلى عوامله الأولية&amp;rdquo;.&lt;/p>
&lt;p>ومع ذلك، لم تستسلم البشرية أبدا. حاليا، يوجد ** أقوى وأحدث خوارزمية ** للبشرية لتحليل الأعداد الأولية الضخمة على أجهزة الكمبيوتر الكلاسيكية (أجهزة الكمبيوتر العادية، وليست الكمومية). تسمى هذه الخوارزمية ** &amp;ldquo;غربال حقل الأعداد العام (GNFS: General Number Field Sieve)&amp;rdquo; **.&lt;/p>
&lt;p>في هذه المقالة، سننشر الكود المصدري بالكامل بلغة C++ (باستخدام أعداد صحيحة متعددة الدقة &lt;code>boost::multiprecision&lt;/code> من مكتبة Boost) والذي يجسد بشكل دقيق منطق الحوسبة المتقدم لهذه الخوارزمية، وسنشرح بعمق &amp;ldquo;نظرية الأعداد الجبرية&amp;rdquo; التي تقف وراءها.&lt;/p>
&lt;p>يرجى الاستمتاع بأسرار الرياضيات وقوة علوم الكمبيوتر التي تقهرها مع الكود المصدري.&lt;/p>
&lt;hr>
&lt;h2 id="1-إطار-عمل-gnfs-المتقدم-الكود-المصدري-الكامل">1. إطار عمل GNFS المتقدم (الكود المصدري الكامل)
&lt;/h2>&lt;p>أولا، سنقدم الصورة الكاملة لتنفيذ GNFS بلغة C++ الذي سنشرحه هنا. نظام غربال حقل الأعداد الفعلي (مثل CADO-NFS) هو نظام موزع ضخم يحتوي على مئات الآلاف من أسطر التعليمات البرمجية. ومع ذلك، يقوم هذا الكود باستخراج ** &amp;ldquo;5 مسارات (مراحل) أساسية&amp;rdquo; ** تشكل GNFS، وتصميمها كفئات، ونمذجتها في تكوين أدنى دون فقدان معناها الرياضي.&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;span class="lnt"> 97
&lt;/span>&lt;span class="lnt"> 98
&lt;/span>&lt;span class="lnt"> 99
&lt;/span>&lt;span class="lnt">100
&lt;/span>&lt;span class="lnt">101
&lt;/span>&lt;span class="lnt">102
&lt;/span>&lt;span class="lnt">103
&lt;/span>&lt;span class="lnt">104
&lt;/span>&lt;span class="lnt">105
&lt;/span>&lt;span class="lnt">106
&lt;/span>&lt;span class="lnt">107
&lt;/span>&lt;span class="lnt">108
&lt;/span>&lt;span class="lnt">109
&lt;/span>&lt;span class="lnt">110
&lt;/span>&lt;span class="lnt">111
&lt;/span>&lt;span class="lnt">112
&lt;/span>&lt;span class="lnt">113
&lt;/span>&lt;span class="lnt">114
&lt;/span>&lt;span class="lnt">115
&lt;/span>&lt;span class="lnt">116
&lt;/span>&lt;span class="lnt">117
&lt;/span>&lt;span class="lnt">118
&lt;/span>&lt;span class="lnt">119
&lt;/span>&lt;span class="lnt">120
&lt;/span>&lt;span class="lnt">121
&lt;/span>&lt;span class="lnt">122
&lt;/span>&lt;span class="lnt">123
&lt;/span>&lt;span class="lnt">124
&lt;/span>&lt;span class="lnt">125
&lt;/span>&lt;span class="lnt">126
&lt;/span>&lt;span class="lnt">127
&lt;/span>&lt;span class="lnt">128
&lt;/span>&lt;span class="lnt">129
&lt;/span>&lt;span class="lnt">130
&lt;/span>&lt;span class="lnt">131
&lt;/span>&lt;span class="lnt">132
&lt;/span>&lt;span class="lnt">133
&lt;/span>&lt;span class="lnt">134
&lt;/span>&lt;span class="lnt">135
&lt;/span>&lt;span class="lnt">136
&lt;/span>&lt;span class="lnt">137
&lt;/span>&lt;span class="lnt">138
&lt;/span>&lt;span class="lnt">139
&lt;/span>&lt;span class="lnt">140
&lt;/span>&lt;span class="lnt">141
&lt;/span>&lt;span class="lnt">142
&lt;/span>&lt;span class="lnt">143
&lt;/span>&lt;span class="lnt">144
&lt;/span>&lt;span class="lnt">145
&lt;/span>&lt;span class="lnt">146
&lt;/span>&lt;span class="lnt">147
&lt;/span>&lt;span class="lnt">148
&lt;/span>&lt;span class="lnt">149
&lt;/span>&lt;span class="lnt">150
&lt;/span>&lt;span class="lnt">151
&lt;/span>&lt;span class="lnt">152
&lt;/span>&lt;span class="lnt">153
&lt;/span>&lt;span class="lnt">154
&lt;/span>&lt;span class="lnt">155
&lt;/span>&lt;span class="lnt">156
&lt;/span>&lt;span class="lnt">157
&lt;/span>&lt;span class="lnt">158
&lt;/span>&lt;span class="lnt">159
&lt;/span>&lt;span class="lnt">160
&lt;/span>&lt;span class="lnt">161
&lt;/span>&lt;span class="lnt">162
&lt;/span>&lt;span class="lnt">163
&lt;/span>&lt;span class="lnt">164
&lt;/span>&lt;span class="lnt">165
&lt;/span>&lt;span class="lnt">166
&lt;/span>&lt;span class="lnt">167
&lt;/span>&lt;span class="lnt">168
&lt;/span>&lt;span class="lnt">169
&lt;/span>&lt;span class="lnt">170
&lt;/span>&lt;span class="lnt">171
&lt;/span>&lt;span class="lnt">172
&lt;/span>&lt;span class="lnt">173
&lt;/span>&lt;span class="lnt">174
&lt;/span>&lt;span class="lnt">175
&lt;/span>&lt;span class="lnt">176
&lt;/span>&lt;span class="lnt">177
&lt;/span>&lt;span class="lnt">178
&lt;/span>&lt;span class="lnt">179
&lt;/span>&lt;span class="lnt">180
&lt;/span>&lt;span class="lnt">181
&lt;/span>&lt;span class="lnt">182
&lt;/span>&lt;span class="lnt">183
&lt;/span>&lt;span class="lnt">184
&lt;/span>&lt;span class="lnt">185
&lt;/span>&lt;span class="lnt">186
&lt;/span>&lt;span class="lnt">187
&lt;/span>&lt;span class="lnt">188
&lt;/span>&lt;span class="lnt">189
&lt;/span>&lt;span class="lnt">190
&lt;/span>&lt;span class="lnt">191
&lt;/span>&lt;span class="lnt">192
&lt;/span>&lt;span class="lnt">193
&lt;/span>&lt;span class="lnt">194
&lt;/span>&lt;span class="lnt">195
&lt;/span>&lt;span class="lnt">196
&lt;/span>&lt;span class="lnt">197
&lt;/span>&lt;span class="lnt">198
&lt;/span>&lt;span class="lnt">199
&lt;/span>&lt;span class="lnt">200
&lt;/span>&lt;span class="lnt">201
&lt;/span>&lt;span class="lnt">202
&lt;/span>&lt;span class="lnt">203
&lt;/span>&lt;span class="lnt">204
&lt;/span>&lt;span class="lnt">205
&lt;/span>&lt;span class="lnt">206
&lt;/span>&lt;span class="lnt">207
&lt;/span>&lt;span class="lnt">208
&lt;/span>&lt;span class="lnt">209
&lt;/span>&lt;span class="lnt">210
&lt;/span>&lt;span class="lnt">211
&lt;/span>&lt;span class="lnt">212
&lt;/span>&lt;span class="lnt">213
&lt;/span>&lt;span class="lnt">214
&lt;/span>&lt;span class="lnt">215
&lt;/span>&lt;span class="lnt">216
&lt;/span>&lt;span class="lnt">217
&lt;/span>&lt;span class="lnt">218
&lt;/span>&lt;span class="lnt">219
&lt;/span>&lt;span class="lnt">220
&lt;/span>&lt;span class="lnt">221
&lt;/span>&lt;span class="lnt">222
&lt;/span>&lt;span class="lnt">223
&lt;/span>&lt;span class="lnt">224
&lt;/span>&lt;span class="lnt">225
&lt;/span>&lt;span class="lnt">226
&lt;/span>&lt;span class="lnt">227
&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;cmath&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;map&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;set&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;chrono&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;boost/multiprecision/cpp_int.hpp&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">// استخدام الأعداد الصحيحة متعددة الدقة Boost.Multiprecision
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">boost&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">multiprecision&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="c1">// [SOTA GNFS] General Number Field Sieve إطار عمل منطقي متقدم
&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">// يصمم هذا الكود بشكل دقيق المراحل الخمسة لـ GNFS الحديث
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// المستخدم في CADO-NFS وغيرها، كفئات C++ (Boost).
&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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">struct&lt;/span> &lt;span class="nc">Relation&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int64_t&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="kt">int64_t&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint32_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">rational_primes&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint32_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">algebraic_primes&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">// المرحلة 1: اختيار كثير الحدود (خوارزمية KleinJung)
&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">class&lt;/span> &lt;span class="nc">PolynomialSelector&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&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">degree&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// كثير الحدود الجبري f(x)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">g&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// كثير الحدود النسبي g(x) = x - m
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PolynomialSelector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">degree&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// توليد كثير الحدود الأولي بناء على توسيع الأساس m (في الواقع يتم استخدام تقليص قاعدة الشبكة LLL الأكثر تقدما)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;amp;&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 1] اختيار كثير الحدود (الدرجة &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">degree&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;) يبدأ...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="c1">// توسيع أساس m بسيط (الدرجة d)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// m = N^(1/d)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">N_copy&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">m&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="c1">// تقريب بسيط لـ m (بدون استخدام دوال Boost)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">low&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">high&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">while&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">low&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">high&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">cpp_int&lt;/span> &lt;span class="n">mid&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">low&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">high&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">low&lt;/span>&lt;span class="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="n">cpp_int&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>&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">degree&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="n">p&lt;/span> &lt;span class="o">*=&lt;/span> &lt;span class="n">mid&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="n">N&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mid&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">low&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mid&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">else&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">high&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mid&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="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">f&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">resize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">degree&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">cpp_int&lt;/span> &lt;span class="n">temp&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">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">degree&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="n">f&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">temp&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">temp&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="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">};&lt;/span> &lt;span class="c1">// g(x) = x - m
&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; -&amp;gt; m = &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">m&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; -&amp;gt; f(x) = &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">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="n">degree&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&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="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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;x^&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="s">&amp;#34; + &amp;#34;&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="s">&amp;#34;&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="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">[المرحلة 1] اكتملت.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="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">// المرحلة 2: غربال الشبكة (Lattice Sieving)
&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">// لا يستخدم GNFS الحديث Line Sieve، بل يستخدم
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Special-q Lattice Sieving الذي طوره Franke-Kleinjung كمعيار.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">class&lt;/span> &lt;span class="nc">LatticeSieve&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">uint32_t&lt;/span> &lt;span class="n">rational_bound&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">uint32_t&lt;/span> &lt;span class="n">algebraic_bound&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint32_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">rational_fb&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint32_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">algebraic_fb&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">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LatticeSieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">uint32_t&lt;/span> &lt;span class="n">rb&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">uint32_t&lt;/span> &lt;span class="n">ab&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">rational_bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rb&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">algebraic_bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ab&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="nf">generate_factor_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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 2] توليد قواعد العوامل (الحد النسبي: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">rational_bound&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;، الحد الجبري: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">algebraic_bound&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;)&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="c1">// (محذوف) في الواقع يتم توليد الأعداد الأولية والتصفية باستخدام رموز Legendre
&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">PolynomialSelector&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">poly&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 2] Special-q Lattice Sieving نشط...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">relations&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="c1">// يتم تعيين الأزواج (a, b) لشبكة (a = i*q + j*...) لكل عدد أولي خاص q،
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&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="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">Relation&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">r&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">17&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">r&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">3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">rational_primes&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">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">r&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">algebraic_primes&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">relations&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_back&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 2] تم العثور على &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; علاقة.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="k">return&lt;/span> &lt;span class="n">relations&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">// المرحلة 3: التصفية (إزالة الفردية ودمج الزمرة)
&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">class&lt;/span> &lt;span class="nc">Filter&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">reduce_matrix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 3] تصفية العلاقات...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="c1">// 1. إزالة الفردية (إزالة العلاقات التي تحتوي على أعداد أولية تظهر مرة واحدة فقط)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 2. دمج الزمرة (دمج العلاقات لتحويل مصفوفة متفرقة إلى كثيفة)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// في الواقع يتم ضغط مصفوفات بمئات الملايين من الصفوف إلى بضعة ملايين باستخدام خوارزميات مثل Union-Find.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 3] تم تقليل حجم المصفوفة بشكل مثالي.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="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">// المرحلة 4: الجبر الخطي فوق GF(2) (طريقة Block Wiedemann)
&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">class&lt;/span> &lt;span class="nc">LinearAlgebraGF2&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// في بيئات الحواسيب العملاقة الحديثة، وبدلا من طريقة Block Lanczos،
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// تُستخدم طريقة Block Wiedemann (تنفيذ Coppersmith) الملائمة للحوسبة الموزعة كأحدث تقنية.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">solve_nullspace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 4] خوارزمية Block Wiedemann فوق GF(2) تبدأ...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="c1">// التكرار على حسابات ضرب المصفوفة المتفرقة في المتجه،
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// والعثور على متجهات الحلول (نواة) بحيث M * x = 0 mod 2.
&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">dependencies&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="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">dependencies&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_back&lt;/span>&lt;span class="p">({&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 4] تم العثور على &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">dependencies&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; تبعيات خطية (مربعات كاملة).&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="k">return&lt;/span> &lt;span class="n">dependencies&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">// المرحلة 5: الجذر التربيعي الجبري (Algebraic Square Root)
&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">class&lt;/span> &lt;span class="nc">AlgebraicSquareRoot&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">compute_and_factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">dep&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;amp;&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 5] حساب الجذر التربيعي الجبري...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 1. حساب الجذر التربيعي النسبي V
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">V&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="c1">// V = sqrt( prod(a - bm) ) mod 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="c1">// 2. حساب الجذر التربيعي الجبري gamma (باستخدام طريقة Montgomery، إلخ)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// العثور على العنصر gamma في الحقل الجبري الضخم O_K وتحويله إلى العالم الحقيقي باستخدام التماثل phi
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// Y = phi(gamma) 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="n">cpp_int&lt;/span> &lt;span class="n">Y&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">// نفترض أنه تمت إضافة سلسلة من الرموز التربيعية (Quadratic Characters) في المرحلتين 2 و 4
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// لتجنب عقبات (Obstruction) مجموعة أصناف المثاليات ومجموعة الوحدات.
&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; -&amp;gt; تم تطبيق التماثل phi.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[المرحلة 5] جار حساب القاسم المشترك الأكبر (V - Y, N)...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">factor&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">V&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">N&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// GCD(X-Y, 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="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">factor&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="n">factor&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="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">================================================================&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[نجاح] تم العثور على عامل غير بديهي: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; العامل الآخر: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">N&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;================================================================&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[فشل] حل بديهي. جاري تجربة التبعية التالية...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="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>&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">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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;================================================================&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; [SOTA GNFS] محرك General Number Field Sieve (Boost C++) &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;================================================================&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// عدد مركب ضخم N نريد تحليله، مثل RSA-270
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;233108530344407544527637656910680524145619812480305449042948611968495918245135782867888369318577116418213919268572658314913060672626911354027609793166341626693946596196427744273886601876896313468704059066746903123910748277606548649151920812699309766587514735456594993207&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">// درجة كثير الحدود (عادة يتم اختيار درجة 5 إلى 6 للأرقام الأكبر من 130 رقما)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">degree&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">6&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="c1">&lt;/span> &lt;span class="n">PolynomialSelector&lt;/span> &lt;span class="n">poly_select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">degree&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LatticeSieve&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10000000&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">20000000&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="n">Filter&lt;/span> &lt;span class="n">filter&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LinearAlgebraGF2&lt;/span> &lt;span class="n">linalg&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">AlgebraicSquareRoot&lt;/span> &lt;span class="n">sqrt_step&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">auto&lt;/span> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">chrono&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">high_resolution_clock&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">now&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="c1">&lt;/span> &lt;span class="n">poly_select&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">select&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="c1">// 2. معالجة الغربلة (sieve)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">generate_factor_bases&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">relations&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">sieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">poly_select&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="n">filter&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">reduce_matrix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">relations&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">// 4. الجبر الخطي (البحث في الفضاء الفارغ فوق GF(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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">dependencies&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">linalg&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">solve_nullspace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">relations&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">// 5. حساب الجذر التربيعي الجبري و GCD
&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="k">const&lt;/span> &lt;span class="k">auto&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="nl">dep&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="n">dependencies&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">sqrt_step&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">compute_and_factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">relations&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dep&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="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">auto&lt;/span> &lt;span class="n">end_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">chrono&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">high_resolution_clock&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">now&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">chrono&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">duration&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">double&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">end_time&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">[النظام] اكتمل مسار SOTA GNFS في &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; ثانية.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&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>&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;p>إذن، كيف يقوم هذا الكود بتحطيم جدران التشفير؟ سنقوم بتقسيم وشرح الخوارزميات الدقيقة والرياضيات المتقدمة لكل من المراحل الخمس.&lt;/p>
&lt;hr>
&lt;h2 id="2-الهدف-النهائي-لـ-gnfs-x2-equiv-y2-pmod-n">2. الهدف النهائي لـ GNFS: $X^2 \equiv Y^2 \pmod N$
&lt;/h2>&lt;p>ليس فقط GNFS، بل إن هدف معظم الخوارزميات الحديثة لتحليل الأعداد العملاقة هو العثور على زوج غير بديهي $(X, Y)$ يحقق المعادلة التطابقية التالية:&lt;/p>
$$X^2 \equiv Y^2 \pmod N$$
&lt;p>تعني هذه المعادلة أن &amp;ldquo;باقي قسمة $X^2$ و $Y^2$ على $N$ متساويان&amp;rdquo;. بإعادة صياغتها:
$X^2 - Y^2 \equiv 0 \pmod N$
بمعنى آخر، $(X-Y)(X+Y)$ هو مضاعف لـ $N$.&lt;/p>
&lt;p>إذا كان $X \not\equiv \pm Y \pmod N$ (حل غير بديهي)، فهذا يعني أن هناك &amp;ldquo;قاسما مشتركا أكبر من 1 وأصغر من $N$&amp;rdquo; بين $(X-Y)$ و $N$.
هنا، إذا استخدمنا خوارزمية إقليدس لحساب ** $\gcd(X-Y, N)$ **، فيمكننا بسهولة إيجاد العامل الأولي لـ $N$.&lt;/p>
&lt;p>ومع ذلك، فإن العثور على $X$ و $Y$ يشبه البحث عن إبرة في الصحراء. لذلك، يتخذ GNFS نهجا عبقريا من خلال توزيع الحسابات عن طريق إنشاء ** عالمين **: &amp;ldquo;عالم الأعداد الصحيحة الحقيقية&amp;rdquo; و &amp;ldquo;عالم الحقول الجبرية لكثيرات الحدود&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="3-المرحلة-1-اختيار-كثير-الحدود-polynomial-selection">3. المرحلة 1: اختيار كثير الحدود (Polynomial Selection)
&lt;/h2>&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;/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="k">class&lt;/span> &lt;span class="nc">PolynomialSelector&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="kt">void&lt;/span> &lt;span class="nf">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;amp;&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">// حساب m = N^(1/d) والتوسيع بأساس m
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&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">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">degree&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="n">f&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">temp&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">temp&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 class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">};&lt;/span> &lt;span class="c1">// g(x) = x - m
&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="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>الخطوة الأولى في GNFS هي إنشاء &amp;ldquo;كثير حدود سحري&amp;rdquo; لربط العالمين.
بالنسبة للعدد الضخم $N$، نختار عددا صحيحا $m$. عادة نختار $m \approx N^{1/d}$ (في الكود يُفترض كثير حدود من الدرجة $d=6$).&lt;/p>
&lt;p>ثم نقوم بتوسيع $N$ للأساس $m$، ونستخدم معاملاته لبناء كثير الحدود $f(x)$:
&lt;/p>
$$N = c_d m^d + c_{d-1} m^{d-1} + \dots + c_1 m + c_0$$
$$f(x) = c_d x^d + c_{d-1} x^{d-1} + \dots + c_1 x + c_0$$
&lt;p>يتمتع كثير الحدود $f(x)$ بخصائص مهمة للغاية وهي ** &amp;ldquo;إذا عوضنا $m$ في المتغير $x$، فإن القيمة ستكون بالضبط $N$ ($f(m) = N$)&amp;rdquo; **. وبعبارة أخرى، $f(m) \equiv 0 \pmod N$.
يتم تعريف كثير الحدود النسبي على أنه $g(x) = x - m$.&lt;/p>
&lt;p>نتيجة لذلك، يتم ربط ** &amp;ldquo;عالم الحقل الجبري $\mathbb{Z}[\alpha]$&amp;rdquo; ** المحكوم بجذور $\alpha$ لـ $f(x)=0$ مع ** &amp;ldquo;عالم الأعداد النسبية (الصحيحة) $\mathbb{Z}$&amp;rdquo; ** المعتاد من خلال تماثل الحلقات $x \to m$.&lt;/p>
&lt;p>في أنظمة مثل CADO-NFS، يتم استخدام خوارزمية KleinJung وخوارزمية تقليص قاعدة الشبكة LLL للبحث عن &amp;ldquo;أفضل كثير حدود $f(x)$&amp;rdquo; لا تكون معاملاته كبيرة جدا وتظهر فيه الأعداد الأولية بسهولة في الخطوات اللاحقة. يستغرق هذا البحث أشهرا.&lt;/p>
&lt;hr>
&lt;h2 id="4-المرحلة-2-غربلة-الشبكة-الخاصة-special-q-lattice-sieving">4. المرحلة 2: غربلة الشبكة الخاصة (Special-q Lattice Sieving)
&lt;/h2>&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;/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="k">class&lt;/span> &lt;span class="nc">LatticeSieve&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">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">PolynomialSelector&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">poly&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="c1">// يتم تعيين أزواج (a, b) في شبكة لكل عدد أولي خاص q،
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&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="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 class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>بعد إعداد العالمين، تتمثل الخطوة التالية في البحث عن &amp;ldquo;أعداد ملساء (أعداد تتكون فقط من عوامل أولية صغيرة)&amp;rdquo; في كلا العالمين.
يتم توليد أزواج لا حصر لها من الأعداد الصحيحة $(a, b)$، ويتم حساب القيمتين التاليتين:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>القيمة الجانبية النسبية&lt;/strong> : $a - bm$&lt;/li>
&lt;li>&lt;strong>المعيار الجانبي الجبري&lt;/strong> : $b^d f(a/b)$&lt;/li>
&lt;/ol>
&lt;p>يهدف GNFS إلى جمع عشرات إلى مئات الملايين من ** &amp;ldquo;الأزواج (العلاقات) التي يمكن تحليل قيمها الجانبية النسبية والجبرية بالكامل باستخدام عوامل أولية صغيرة فقط&amp;rdquo; **.&lt;/p>
&lt;p>في السابق، تم استخدام &amp;ldquo;غربال الخط (Line Sieve)&amp;quot;، حيث يتم ترتيب أزواج $(a, b)$ على مستوى $xy$ وقسمتها على الأعداد الأولية. ومع ذلك، كان هذا بطيئا جدا لأنه يسبب فشلا كبيرا في ذاكرة التخزين المؤقت بسبب الوصول العشوائي للذاكرة.&lt;/p>
&lt;p>لذلك، تستخدم الأكواد الحديثة طريقة تسمى ** &amp;ldquo;Special-q Lattice Sieve&amp;rdquo; **.
يتم تثبيت عدد أولي كبير بما فيه الكفاية $q$، وتُحسب فقط أزواج $(a, b)$ حيث &amp;ldquo;القيمة الجبرية يجب أن تقبل القسمة على $q$&amp;rdquo;. تشكل الأزواج $(a, b)$ التي تلبي هذا الشرط &amp;ldquo;شبكة (Lattice)&amp;quot;، مما يجعل قفزة العنوان المحسوبة ثابتة وتتناسب تماما مع ذاكرة التخزين المؤقت L1/L2 لوحدة المعالجة المركزية.
أدى هذا التحسين إلى زيادة سرعة حسابات GNFS بشكل هائل.&lt;/p>
&lt;hr>
&lt;h2 id="5-المرحلة-3-التصفية-filtering">5. المرحلة 3: التصفية (Filtering)
&lt;/h2>&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;/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="k">class&lt;/span> &lt;span class="nc">Filter&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">reduce_matrix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&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">// 1. إزالة الفردية (إزالة العلاقات التي تحتوي على أعداد أولية تظهر مرة واحدة فقط)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 2. دمج الزمرة (دمج العلاقات لجعل المصفوفة المتفرقة كثيفة)
&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="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>مئات الملايين من العلاقات التي جمعتها أجهزة الكمبيوتر حول العالم على مدار عدة أشهر في المرحلة الثانية. ومع ذلك، إذا قمنا بإدخالها مباشرة إلى &amp;ldquo;خطوة حل نظام المعادلات (حساب المصفوفة)&amp;rdquo; التالية، فإن ذاكرة الحاسوب العملاق ستمتلئ.&lt;/p>
&lt;p>لذلك، يتم إجراء عملية ضغط قصوى للمصفوفة تسمى ** التصفية (Filtering) **.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>إزالة الفردية (Singleton removal)&lt;/strong>
لنفترض أن عددا أوليا ضخما $p$ ظهر &amp;ldquo;مرة واحدة فقط&amp;rdquo; من بين مئات الملايين من العلاقات. هدفنا هو &amp;ldquo;جعل جميع أسس الأعداد الأولية زوجية (مضاعفات 2)&amp;quot;، لذلك فإن العدد الأولي الذي يظهر مرة واحدة لا يمكن أبدا أن يصبح زوجيا.
وبالتالي، يتم حذف العلاقة التي تحتوي على هذا العدد الأولي على الفور كـ &amp;ldquo;قمامة غير مجدية&amp;rdquo;. وبسبب سلسلة الأحداث هذه، يتم تقليص مئات الملايين من صفوف البيانات.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>دمج الزمرة (Clique merging)&lt;/strong>
بعد ذلك، من خلال ضرب (جمع) العلاقات التي تشترك في أعداد أولية معينة، يتم ضغط (تكثيف) المصفوفة المتفرقة وتقليل عدد الصفوف (باستخدام تقنية مشابهة للبحث عن الزمرة في نظرية المخططات).&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>من خلال هذا التحسين، يتم ضغط المصفوفة المتفرقة الضخمة بشكل كبير إلى حجم يمكن حسابه.&lt;/p>
&lt;hr>
&lt;h2 id="6-المرحلة-4-الجبر-الخطي-فوق-gf2-طريقة-block-wiedemann">6. المرحلة 4: الجبر الخطي فوق GF(2) (طريقة Block Wiedemann)
&lt;/h2>&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;/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="k">class&lt;/span> &lt;span class="nc">LinearAlgebraGF2&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">solve_nullspace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&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="c1">// وإيجاد متجهات حلول بحيث M * x = 0 mod 2.
&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="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>الآن نصل إلى جوهر اللغز.
نقوم بضرب العلاقات المجمعة للعثور على ** &amp;ldquo;التركيبة التي تصبح فيها كل قوى العوامل الأولية زوجية&amp;rdquo; **.&lt;/p>
&lt;p>من الناحية الرياضية، باستخدام مصفوفة ضخمة $M$ تمثل عناصرها &amp;ldquo;الزوجي والفردي (أي 0 أو 1)&amp;rdquo; لقوى كل عدد أولي، والمتجه $x$ الذي يمثل العلاقة المستخدمة، فإننا نحل (البحث في الفضاء الفارغ):
&lt;strong>$M \cdot x \equiv 0 \pmod 2$&lt;/strong>&lt;/p>
&lt;p>علينا حل نظام معادلات مصفوفة بملايين الصفوف وملايين الأعمدة. في الحذف الغاوسي العادي، سيكون التعقيد $O(N^3)$، مما يعني أن الحساب لن يكتمل حتى نهاية الكون.&lt;/p>
&lt;p>لذلك، تعتمد التطبيقات الحديثة ** &amp;ldquo;طريقة Block Wiedemann&amp;rdquo; **.
هذه طريقة فضاء جزئي لـ Krylov تعثر على الحل عبر تكرار عمليات ضرب المصفوفات والمتجهات، مستغلة حقيقة أن المصفوفة $M$ &amp;ldquo;متفرقة جدا (معظمها 0)&amp;rdquo;.
على عكس طريقة Block Lanczos القديمة، تقوم Block Wiedemann بتقسيم عملية الحساب تماما على مجموعات منفصلة، وتظهر قوة هائلة في الحوسبة السحابية الموزعة الحديثة والحواسيب العملاقة.&lt;/p>
&lt;hr>
&lt;h2 id="7-المرحلة-5-الجذر-التربيعي-الجبري-algebraic-square-root-وانهيار-التشفير">7. المرحلة 5: الجذر التربيعي الجبري (Algebraic Square Root) وانهيار التشفير
&lt;/h2>&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;/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="k">class&lt;/span> &lt;span class="nc">AlgebraicSquareRoot&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">compute_and_factor&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">// 1. حساب الجذر التربيعي النسبي V
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">V&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">// 2. حساب الجذر التربيعي الجبري gamma
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">Y&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">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">factor&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">V&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">N&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// GCD(X-Y, N)
&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="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>من خلال حسابات المصفوفة في المرحلة 4، حصلنا على مجموعة من العلاقات $S$ والتي &amp;ldquo;إذا تم ضربها معا، ستصبح كل أسس العوامل الأولية زوجية&amp;rdquo;.
يتيح لنا ذلك بناء &amp;ldquo;مربعات&amp;rdquo; في كل من العوالم النسبية والجبرية.&lt;/p>
&lt;p>نظرا لأن الجانب النسبي هو مجرد ضرب لأعداد صحيحة، فمن السهل حساب الجذر التربيعي $V$.
&lt;/p>
$$V^2 = \prod_{S} (a - bm)$$
&lt;p>&lt;strong>لكن الجحيم الحقيقي يكمن في &amp;ldquo;الجانب الجبري&amp;rdquo;.&lt;/strong>
في عالم الحقل الجبري $\mathbb{Z}[\alpha]$، لا يتم الحفاظ على تفرد التحليل إلى العوامل الأولية، لذلك أجرينا الحسابات باستخدام المثاليات. تضمن حسابات المصفوفة فقط أن النتيجة ** &amp;ldquo;مربع مثالي&amp;rdquo;، لكنها لا &amp;ldquo;تضمن أنها مربع لعنصر ($\gamma^2$)&amp;rdquo; **.&lt;/p>
&lt;p>هنا يظهر عائق هائل في نظرية الأعداد الجبرية، والذي يسمى &amp;ldquo;عائق مجموعة أصناف المثاليات&amp;rdquo; و &amp;ldquo;عائق مجموعة الوحدات&amp;rdquo;.
يخترق GNFS هذا الجدار باستخدام سحر يسمى ** &amp;ldquo;الرموز التربيعية (Quadratic Characters)&amp;rdquo; **.
في مصفوفة المرحلة 4، تتم إضافة عدد قليل من أعمدة البقايا التربيعية (رمز Legendre) سراً لمثاليات أولية خاصة. بفضل ذلك، تتجاوز المجموعة المكتشفة $S$ العوائق باحتمال كبير جدا، وتشكل بنجاح &amp;ldquo;مربع عنصر حقيقي $\gamma^2$&amp;rdquo;.&lt;/p>
&lt;p>تتم عملية العثور على $\gamma$ (الجذر التربيعي الجبري) باستخدام خوارزميات معقدة للغاية مثل طريقة Montgomery.&lt;/p>
&lt;p>وأخيرا، يتم إرسال الجذر التربيعي الجبري $\gamma$ إلى العالم الحقيقي عن طريق تماثل الحلقة $\phi$ (تعويض $x$ بـ $m$) للحصول على $Y$.
من خلال تعيين $V$ في الجانب النسبي كـ $X$, يتم إنشاء المعادلة المطلقة التي نسعى إليها:&lt;/p>
&lt;p>&lt;strong>$$X^2 \equiv Y^2 \pmod N$$&lt;/strong>&lt;/p>
&lt;p>كل ما تبقى هو حساب $\gcd(X-Y, N)$. في 0.001 ثانية فقط، عندما تتم طباعة العامل غير البديهي على الشاشة، ينهار تشفير RSA الذي لا يُقهر تماما.&lt;/p>
&lt;hr>
&lt;h2 id="خاتمة">خاتمة
&lt;/h2>&lt;p>خوارزمية GNFS ليست مجرد تقنية برمجة.
إنها تحفة من ذكاء البشرية تغلبت على &amp;ldquo;أعماق الرياضيات البحتة&amp;rdquo; مثل الجبر المجرد، ونظرية الحلقات، ومجموعة أصناف المثاليات، وذلك باستخدام &amp;ldquo;هندسة متطرفة&amp;rdquo; مثل البنية الموزعة للحواسيب العملاقة وتحسين ذاكرة التخزين المؤقت.&lt;/p>
&lt;p>يتم حماية معلومات الدردشات والبطاقات الائتمانية التي نرسلها كل يوم بواسطة هذه المعارك الرياضية الهائلة.&lt;/p>
&lt;p>نأمل من خلال إطار عمل C++ هذا، أن تتمكن من الشعور بـ &amp;ldquo;رومانسية الرياضيات والكمبيوتر&amp;rdquo; الكامنة وراء خوارزميات كسر التشفير المتطورة.&lt;/p></description></item><item><title>الهيكل الرياضي الحقيقي لغربال حقل الأعداد العام (GNFS)</title><link>http://kenji.blog/ar/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/</link><pubDate>Sat, 05 Sep 2026 02:26:13 +0900</pubDate><guid>http://kenji.blog/ar/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/</guid><description>&lt;img src="http://kenji.blog/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/rsa_encryption_break_1788542156523.jpg" alt="Featured image of post الهيكل الرياضي الحقيقي لغربال حقل الأعداد العام (GNFS)" />&lt;h1 id="الهيكل-الرياضي-الحقيقي-لغربال-حقل-الأعداد-العام-gnfs">الهيكل الرياضي الحقيقي لغربال حقل الأعداد العام (GNFS)
&lt;/h1>&lt;p>الهدف النهائي لـ GNFS هو العثور على $X, Y$ بحيث يكون $X^2 \equiv Y^2 \pmod N$.
لتحقيق ذلك، بنى علماء الرياضيات جسرًا بين &lt;strong>&amp;ldquo;عالم الأعداد الصحيحة الحقيقي&amp;rdquo;&lt;/strong> و &lt;strong>&amp;ldquo;عالم الحقول الجبرية&amp;rdquo;&lt;/strong>. هذا الجسر هو ما يُعرف بـ &amp;ldquo;التشاكل&amp;rdquo; (Homomorphism).&lt;/p>
&lt;h2 id="المرحلة-الأولى-التشاكل-الذي-يربط-العالمين">المرحلة الأولى: &amp;ldquo;التشاكل&amp;rdquo; الذي يربط العالمين
&lt;/h2>&lt;h3 id="1-اختيار-المتعددة-الحدود-وتعريف-الجذور">1. اختيار المتعددة الحدود وتعريف الجذور
&lt;/h3>&lt;p>لعدد مركب ضخم $N$، نختار عددًا صحيحًا $m$ ومتعددة حدود $f(x)$ بحيث $f(m) \equiv 0 \pmod N$.
(مثال: توسيع $N$ في الأساس $m$، وبناء $f(x)$ من معاملاته. في هذه الحالة، يُفترض أن $f(x)$ غير قابل للاختزال على حقل الأعداد الكسرية $\mathbb{Q}$).&lt;/p>
&lt;p>بعد ذلك، لنفترض أن $\alpha$ هو أحد &amp;ldquo;الجذور المركبة&amp;rdquo; للمعادلة $f(x) = 0$.
بالطبع، $f(\alpha) = 0$. لاحظ أن $\alpha$ ليس عددًا صحيحًا، بل عددًا مركبًا (عددًا جبريًا) قد يحتوي على جذور أو أعداد تخيلية.&lt;/p>
&lt;h3 id="2-بناء-الحلقة-ring-والتشاكل">2. بناء الحلقة (Ring) والتشاكل
&lt;/h3>&lt;p>هنا، نقوم بإعداد &amp;ldquo;حلقتين&amp;rdquo; رياضيتين (عالمان حيث يُعرّف الجمع والضرب):&lt;/p>
&lt;ul>
&lt;li>&lt;strong>العالم A: $\mathbb{Z}[\alpha]$&lt;/strong> (حلقة الأعداد الصحيحة الجبرية التي تحتوي على $\alpha$)
هذا هو عالم الأعداد التي تُعبّر عن شكل $a + b\alpha + c\alpha^2 + \dots$.&lt;/li>
&lt;li>&lt;strong>العالم B: $\mathbb{Z}/N\mathbb{Z}$&lt;/strong> (حلقة البواقي بعد القسمة على $N$)
عالم التطابق (modulo) الذي يتكون فقط من الأعداد الصحيحة من $0$ إلى $N-1$.&lt;/li>
&lt;/ul>
&lt;p>هنا، نُعرّف تعيينًا (Mapping) يُسمى $\phi$ من العالم A إلى العالم B على النحو التالي:
&lt;strong>$$\phi : \mathbb{Z}[\alpha] \to \mathbb{Z}/N\mathbb{Z}$$&lt;/strong>
&lt;strong>$$\phi(\alpha) = m \pmod N$$&lt;/strong>&lt;/p>
&lt;p>هذا التعيين $\phi$ هو عملية سحرية تستبدل المتغير $\alpha$ في العالم A بالعدد الصحيح $m$ في العالم B بشكل كامل.
هذا الـ $\phi$ يمتلك خاصية قوية جدًا تُسمى &lt;strong>&amp;ldquo;تشاكل الحلقة&amp;rdquo; (Ring Homomorphism)&lt;/strong>.
التشاكل هو خاصية &lt;strong>&amp;ldquo;الانتقال إلى عالم آخر دون تدمير هيكل الجمع والضرب&amp;rdquo;&lt;/strong>. وهذا يعني أن المعادلات التالية صحيحة:&lt;/p>
&lt;ul>
&lt;li>$\phi(X \times Y) = \phi(X) \times \phi(Y)$&lt;/li>
&lt;li>$\phi(X^2) = \phi(X)^2$&lt;/li>
&lt;/ul>
&lt;p>ماذا يعني كل هذا؟ إذا تمكنا من صنع &lt;strong>&amp;ldquo;مربع كامل&amp;rdquo; ($\gamma^2$)&lt;/strong> من عنصر معقد $\gamma$ في &amp;ldquo;العالم A&amp;rdquo; (عالم $\alpha$)، فيمكننا القفز إلى &amp;ldquo;العالم B&amp;rdquo; (عالم البواقي) باستخدام $\phi$، و &lt;strong>سيتم الحفاظ على شكل المربع $\phi(\gamma)^2$ تمامًا&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="المرحلة-الثانية-انهيار-التحليل-إلى-العوامل-الأولية-وولادة-المثالي-ideal">المرحلة الثانية: انهيار التحليل إلى العوامل الأولية وولادة &amp;ldquo;المثالي&amp;rdquo; (Ideal)
&lt;/h2>&lt;p>نريد جمع الكثير من العناصر المناسبة $(a - b\alpha)$ في العالم A ($\mathbb{Z}[\alpha]$) وضربها معًا لتكوين &amp;ldquo;مربع كامل&amp;rdquo;.
عادةً، يمكننا &amp;ldquo;التحليل إلى العوامل الأولية&amp;rdquo; للعناصر $(a - b\alpha)$ المجمعة، ودمجها بحيث تصبح كل أسس الأعداد الأولية زوجية (محلولة باستخدام المصفوفات) لإنشاء مربع.&lt;/p>
&lt;p>&lt;strong>ولكن، هنا يقف جدار اليأس الجبري في طريقنا.&lt;/strong>
في عالم الحقول الجبرية مثل $\mathbb{Z}[\alpha]$، فإن &lt;strong>&amp;ldquo;وحدانية التحليل إلى العوامل الأولية (يمكن التعبير عن كل عدد بطريقة واحدة فقط كحاصل ضرب أعداد أولية)&amp;rdquo;&lt;/strong> التي تعلمناها في المدرسة الإعدادية &lt;strong>تنهار تمامًا&lt;/strong>.&lt;/p>
&lt;p>(مثال: في بعض عوالم الحقول الجبرية، $6 = 2 \times 3$، وفي نفس الوقت $6 = (1+\sqrt{-5}) \times (1-\sqrt{-5})$، مما يجعل من المستحيل معرفة أي منها هي الأعداد الأولية الحقيقية).&lt;/p>
&lt;p>إذا لم يكن التحليل إلى العوامل الأولية فريدًا، فإن لغز &amp;ldquo;حساب الأعداد الأولية لجعلها زوجية&amp;rdquo; (طريقة الغربال) مستحيل من حيث المبدأ.&lt;/p>
&lt;h3 id="إنقاذ-كومر-وديديكيند-المثالي-ideal">إنقاذ كومر وديديكيند: &amp;ldquo;المثالي&amp;rdquo; (Ideal)
&lt;/h3>&lt;p>تم إنقاذ هذا الانهيار من خلال مفهوم &lt;strong>&amp;ldquo;المثالي&amp;rdquo; (Ideal)&lt;/strong> الذي ابتكره علماء الرياضيات في القرن التاسع عشر.
بدلًا من النظر إلى العنصر نفسه، من خلال النظر في &amp;ldquo;مجموعة المضاعفات (المثالي)&amp;rdquo; التي يولدها هذا العنصر، أصبح التحليل إلى العوامل الأولية ممكنًا مرة أخرى.&lt;/p>
&lt;p>في حلقة الأعداد الصحيحة للحقل الجبري $\mathcal{O}_K$ (الحلقة الأكثر كمالًا التي تحتوي على $\mathbb{Z}[\alpha]$)، حتى لو لم يكن بالإمكان تحليل العناصر بشكل فريد، فقد تم إثبات أن &lt;strong>&amp;ldquo;المثالي يمكن دائمًا تحليله بشكل فريد كحاصل ضرب &amp;lsquo;مثاليات أولية&amp;rsquo; ($\mathfrak{p}$)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>لذلك، في GNFS، بدلًا من تحليل العنصر $(a - b\alpha)$ نفسه، نقوم بـ &lt;strong>التحليل إلى المثاليات الأولية للمثالي الرئيسي $\langle a - b\alpha \rangle$&lt;/strong> الذي يولده.&lt;/p>
&lt;hr>
&lt;h2 id="المرحلة-الثالثة-المعيار-norm-والغربالان-sieve">المرحلة الثالثة: المعيار (Norm) والغربالان (Sieve)
&lt;/h2>&lt;p>إذن، كيف نعرف ما هي المثاليات الأولية التي يتحلل إليها المثالي $\langle a - b\alpha \rangle$؟
هنا نستخدم دالة تسمى &lt;strong>&amp;ldquo;المعيار&amp;rdquo; (Norm)&lt;/strong>. المعيار هو دالة تحول العناصر المعقدة في الحقل الجبري إلى &amp;ldquo;أعداد صحيحة عادية $\mathbb{Z}$&amp;rdquo; في العالم الحقيقي.&lt;/p>
&lt;p>يُحسب معيار العنصر $(a - b\alpha)$ بواسطة متعددة الحدود البسيطة $b^d f(a/b)$ (حيث $d$ هي درجة $f(x)$).&lt;/p>
&lt;p>بفضل مبرهنة جبرية، من المعروف أنه &lt;strong>&amp;ldquo;إذا كان معيار مثالي ما قابلاً للتحليل بالكامل بواسطة أعداد أولية صغيرة (أملس)، فإن المثالي الأصلي يمكن أيضًا تحليله بالكامل بواسطة مثاليات أولية صغيرة&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>لذلك، يحسب GNFS الأمرين التاليين في وقت واحد لعدد كبير من أزواج الأعداد الصحيحة $(a, b)$، ويجمع فقط الأزواج التي يكون كلاهما &amp;ldquo;أعدادًا ملساء&amp;rdquo;:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>الغربال النسبي (Rational Sieve)&lt;/strong>: $a - bm$ (القيمة في العالم الحقيقي)&lt;/li>
&lt;li>&lt;strong>الغربال الجبري (Algebraic Sieve)&lt;/strong>: $b^d f(a/b)$ (المعيار في عالم الحقل الجبري)&lt;/li>
&lt;/ol>
&lt;p>نجمع عشرات الملايين من الأزواج $(a, b)$ الملساء معًا، ونحل بيانات التحليل إلى المثاليات الأولية (كم عدد المثاليات الأولية الموجودة) كمصفوفة عملاقة (الجبر الخطي على GF(2))، ونجد مجموعة $S$ من الأزواج بحيث &amp;ldquo;عند ضربها، تصبح أسس جميع المثاليات الأولية زوجية&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="المرحلة-الرابعة-العقبتان-وزمرة-أصناف-المثاليات">المرحلة الرابعة: &amp;ldquo;العقبتان&amp;rdquo; وزمرة أصناف المثاليات
&lt;/h2>&lt;p>من خلال حساب المصفوفة، وجدنا أن ضرب جميع المثاليات $(a - b\alpha)$ في المجموعة $S$ ينتج مربعًا لمثالي ما $I$.
&lt;/p>
$$\prod_{S} \langle a - b\alpha \rangle = I^2$$
&lt;p>&lt;strong>لكن الأمر لم ينتهِ بعد. أعمق وأصعب جدار رياضي في GNFS يكمن هنا.&lt;/strong>&lt;/p>
&lt;p>ما نريده في النهاية ليس &amp;ldquo;مربع المثالي&amp;rdquo;، بل &lt;strong>&amp;ldquo;مربع العنصر&amp;rdquo; ($\gamma^2$)&lt;/strong> لتعويضه في التعيين $\phi$.
فقط لأن المثالي تم تربيعه، لا يعني أن العنصر نفسه تم تربيعه. توجد &lt;strong>عقبتان رياضيتان قويتان جدًا (Obstructions)&lt;/strong> هنا.&lt;/p>
&lt;h3 id="العقبة-1-جدار-زمرة-أصناف-المثاليات-ideal-class-group">العقبة 1: جدار زمرة أصناف المثاليات (Ideal Class Group)
&lt;/h3>&lt;p>المثالي $I$ ليس دائمًا &amp;ldquo;مثاليًا مولدًا بواسطة عنصر واحد (مثالي رئيسي)&amp;rdquo;.
من المستحيل استخراج العنصر المحدد $\gamma$ من مثالي ليس مثاليًا رئيسيًا.&lt;/p>
&lt;p>هنا يظهر مفهوم &lt;strong>&amp;ldquo;زمرة أصناف المثاليات (Class Group, $Cl_K$)&amp;rdquo;&lt;/strong>. زمرة أصناف المثاليات هي زمرة تقيس &amp;ldquo;مدى وجود مثاليات غير رئيسية في عالم الحقل الجبري (إلى أي مدى تم تدمير وحدانية التحليل إلى العوامل الأولية)&amp;rdquo;.
حتى لو أصبح $\prod \langle a - b\alpha \rangle$ هو $I^2$، إذا لم يكن $I$ عنصرًا محايدًا (مثاليًا رئيسيًا) في زمرة أصناف المثاليات، فلا يمكننا سحبه مرة أخرى إلى مربع عنصر.&lt;/p>
&lt;h3 id="العقبة-2-جدار-زمرة-الوحدات-unit-group">العقبة 2: جدار زمرة الوحدات (Unit Group)
&lt;/h3>&lt;p>لنفترض أننا محظوظون وأن $I$ هو مثالي رئيسي $\langle \gamma \rangle$.
إذن، $\prod \langle a - b\alpha \rangle = \langle \gamma^2 \rangle$.
قد تعتقد، &amp;ldquo;رائع، العنصر مربع أيضًا!&amp;quot;، لكنك مخطئ تمامًا.&lt;/p>
&lt;p>حقيقة أن المثاليات (مجموعات المضاعفات) متساوية لا تعني أن العناصر متساوية تمامًا. سيكون هناك دائمًا إزاحة بواسطة &lt;strong>&amp;ldquo;الوحدة&amp;rdquo; (Unit: عدد مقلوبه هو أيضًا عدد صحيح، مثل 1 أو -1)&lt;/strong>.
بمعنى آخر، معادلة العنصر الفعلي هي كالتالي:
&lt;/p>
$$\prod_{S} (a - b\alpha) = u \cdot \gamma^2$$
&lt;p>
(حيث $u$ هو عنصر من زمرة الوحدات $U_K$)&lt;/p>
&lt;p>ما لم تكن هذه الوحدة $u$ بحد ذاتها مربعًا لشيء ما، فلن يكون الجانب الأيسر أبدًا &amp;ldquo;مربع عنصر كامل&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="المرحلة-الخامسة-سحر-أدلمان-الرموز-التربيعية-quadratic-characters">المرحلة الخامسة: سحر أدلمان &amp;ldquo;الرموز التربيعية&amp;rdquo; (Quadratic Characters)
&lt;/h2>&lt;p>عقبة زمرة أصناف المثاليات وعقبة زمرة الوحدات. كيف نتغلب عليهما؟
هنا يأتي دور الطريقة العبقرية التي تسمى &lt;strong>&amp;ldquo;الرموز التربيعية&amp;rdquo; (Quadratic Characters)&lt;/strong>، والتي أدخلها عالم التشفير ليونارد أدلمان (حرف &amp;ldquo;A&amp;rdquo; في RSA) وزملاؤه.&lt;/p>
&lt;p>لتحديد ما إذا كان &amp;ldquo;عنصر ما هو مربع كامل في الحقل الجبري&amp;rdquo;، نستخدم إصدار الحقل الجبري من رمز ليجاندر (الباقي التربيعي).
في المصفوفة العملاقة السابقة (اللغز لجعل عدد المثاليات الأولية زوجيًا)، نضيف سرًا بضع عشرات من الشروط الإضافية (الأعمدة) التي تنص على أن &lt;strong>&amp;ldquo;الرموز التربيعية لبعض المثاليات الأولية الخاصة $\mathfrak{q}$ تصبح جميعها $1$ (زوجية)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>عندما نجد المجموعة $S$ التي تستوفي هذه الشروط الإضافية من خلال حساب المصفوفة، تضمن مبرهنة عميقة في نظرية الأعداد الجبرية أن &lt;strong>&amp;ldquo;كل من عقبة زمرة أصناف المثاليات وعقبة زمرة الوحدات ستختفيان بشكل طبيعي باحتمال ساحق&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>وبهذا، نحصل أخيرًا على المعادلة الحقيقية:
&lt;/p>
$$\prod_{S} (a - b\alpha) = \gamma^2$$
&lt;hr>
&lt;h2 id="المرحلة-النهائية-اندماج-العوالم-وانهيار-التشفير">المرحلة النهائية: اندماج العوالم وانهيار التشفير
&lt;/h2>&lt;p>أخيرًا، اكتملت جميع قطع اللغز.&lt;/p>
&lt;p>&lt;strong>[العنصر في عالم الحقل الجبري (العالم A)]&lt;/strong>
$\gamma^2 = \prod (a - b\alpha)$
(استخدم خوارزمية الجذر التربيعي لإيجاد $\gamma$)&lt;/p>
&lt;p>&lt;strong>[العنصر في العالم الحقيقي (عالم الأعداد الكسرية)]&lt;/strong>
$V^2 = \prod (a - bm)$
(هذا مجرد ضرب أعداد صحيحة عادي، لذا يمكن العثور على الجذر التربيعي $V$ بسهولة)&lt;/p>
&lt;p>الآن، حان وقت عمل الجسر السحري الأول الذي صنعناه، &lt;strong>التشاكل $\phi$&lt;/strong>.
نقفز بالعنصر $\gamma$ من العالم A إلى العالم B (عالم البواقي $N$) باستخدام $\phi$ (التعيين الذي يعوض بـ $m$ بدلًا من $\alpha$).
&lt;/p>
$$Y = \phi(\gamma) \pmod N$$
&lt;p>من ناحية أخرى، نأخذ $V$ الذي تم إنشاؤه في العالم الحقيقي مباشرة إلى عالم البواقي ونسميه $X$.
&lt;/p>
$$X = V \pmod N$$
&lt;p>بفضل خاصية &amp;ldquo;الحفاظ على الهيكل&amp;rdquo; للتشاكل، فإن علاقة التربيع التي كانت صحيحة في العالم A يتم حفظها تمامًا في العالم B (عالم المقياس $N$).
علاوة على ذلك، نظرًا لأن الأزواج الأصلية $(a, b)$ تم تشكيلها بطريقة متقابلة كـ $a - b\alpha$ و $a - bm$، فإن $X$ و $Y$ يصطدمان في عالم المقياس $N$ وينتجان المعادلة المطلقة التالية:&lt;/p>
&lt;p>&lt;strong>$$X^2 \equiv Y^2 \pmod N$$&lt;/strong>&lt;/p>
&lt;p>الآن، كل ما علينا فعله هو أن نصلي ألا يكون $X$ و $Y$ حلولاً بديهية ($X \equiv \pm Y$)، ثم نحسب:
&lt;strong>$\gcd(X - Y, N)$&lt;/strong>&lt;/p>
&lt;p>إذا كان حلاً غير بديهي، فستعمل خوارزمية إقليدس في 0.001 ثانية، وسيتم طباعة الأعداد الأولية السرية $p$ و $q$، والتي تعد قلب تشفير RSA، على شاشة الإخراج.&lt;/p>
&lt;hr>
&lt;p>هذا هو الشكل الكامل لـ &lt;strong>&amp;ldquo;غربال حقل الأعداد العام (GNFS)&amp;rdquo;&lt;/strong> الذي يجمع خلاصة الرياضيات الحديثة.&lt;/p></description></item><item><title>ما هي أقوى رياضيات للبشرية 'غربال حقل الأعداد العام (GNFS)' التي تكسر تشفير الإنترنت؟</title><link>http://kenji.blog/ar/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/</link><pubDate>Sat, 05 Sep 2026 02:09:08 +0900</pubDate><guid>http://kenji.blog/ar/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/gnfs_two_worlds_1788542142485.jpg" alt="Featured image of post ما هي أقوى رياضيات للبشرية 'غربال حقل الأعداد العام (GNFS)' التي تكسر تشفير الإنترنت؟" />&lt;h1 id="ما-هي-أقوى-رياضيات-للبشرية-غربال-حقل-الأعداد-العام-gnfs-التي-تكسر-تشفير-الإنترنت">ما هي أقوى رياضيات للبشرية &amp;ldquo;غربال حقل الأعداد العام (GNFS)&amp;rdquo; التي تكسر تشفير الإنترنت؟
&lt;/h1>&lt;p>الإنترنت الذي نستخدمه كل يوم. جميع اتصالاتنا، مثل رسائل LINE، ويوتيوب، والتسوق على أمازون، محمية بواسطة &amp;ldquo;التشفير&amp;rdquo;.
حالياً، التشفير الأكثر استخداماً في العالم هو &amp;ldquo;تشفير RSA&amp;rdquo;.&lt;/p>
&lt;p>جوهر حماية تشفير RSA بسيط للغاية. فهو يستفيد من الخاصية الرياضية القائلة بأن &lt;strong>&amp;ldquo;تحليل الأعداد الضخمة إلى عوامل أولية لا يمكن حله حتى بواسطة أجهزة الكمبيوتر&amp;rdquo;&lt;/strong> .
على سبيل المثال، بالنسبة للرقم &amp;ldquo;15&amp;rdquo;، نعلم على الفور أنه &amp;ldquo;3 × 5&amp;rdquo;، ولكن بمجرد أن يصبح الرقم مكوناً من &amp;ldquo;270 رقماً&amp;rdquo;، فإن الأمر سيستغرق مئات الملايين من السنين لحله حتى لو جمعنا جميع الحواسيب الخارقة في العالم.&lt;/p>
&lt;p>ومع ذلك، لم يقف علماء الرياضيات مكتوفي الأيدي. لاختراق هذا التشفير المنيع، ابتكرت البشرية خوارزمية سحرية (إجراء حسابي) تُسمى &lt;strong>&amp;ldquo;غربال حقل الأعداد العام (GNFS)&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;p>في هذه المقالة، وبدون استخدام أي مصطلحات تقنية، وبناءً فقط على معرفة &lt;strong>رياضيات المدرسة الإعدادية (التحليل إلى عوامل أولية، المعادلات الجبرية، القاسم المشترك الأكبر)&lt;/strong> ، سنشرح خطوة بخطوة كيف تقوم &amp;ldquo;أقوى خوارزمية للبشرية&amp;rdquo; بكسر هذا التشفير!&lt;/p>
&lt;hr>
&lt;h2 id="الفصل-الأول-الهدف-من-فك-التشفير-هو-معادلة-الصف-الثالث-الإعدادي">الفصل الأول: الهدف من فك التشفير هو &amp;ldquo;معادلة الصف الثالث الإعدادي&amp;rdquo;
&lt;/h2>&lt;p>السلاح الأقوى لمواجهة تحليل الأعداد الضخمة إلى عوامل أولية هو هذه المعادلة التي نتعلمها في الصف الثالث الإعدادي.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>$X^2 - Y^2 = (X + Y)(X - Y)$&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>قد تتساءل: &amp;ldquo;هاه، هل يمكن لمعادلة أساسية كهذه كسر التشفير؟&amp;rdquo; ومع ذلك، هذا هو المفتاح الرئيسي الذي يحل كل شيء.&lt;/p>
&lt;p>الهدف الأكبر لكسر التشفير هو، بالنسبة لعدد ضخم $N$، العثور على &lt;strong>&amp;ldquo;أعداد ($X$ و $Y$) بحيث يكون باقي قسمة $X^2$ و $Y^2$ على $N$ هو نفسه&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;h3 id="لماذا-كسر-التشفير-ممكن-عندما-يكون-الباقي-متماثلا">لماذا كسر التشفير ممكن عندما يكون &amp;ldquo;الباقي متماثلاً&amp;rdquo;؟
&lt;/h3>&lt;p>لنفترض أن هناك عددين، $X^2$ و $Y^2$، لهما &amp;ldquo;نفس الباقي عند قسمتهما على $N$&amp;rdquo;.
الباقي المتماثل يعني أن ناتج الطرح &lt;strong>&amp;quot;$X^2 - Y^2$&amp;quot; سيكون قابلاً للقسمة تماماً على $N$ (مضاعف لـ $N$)&lt;/strong> .&lt;/p>
&lt;p>هنا، دعونا نفترض أن العدد الضخم $N$ المستخدم في التشفير يتكون من ضرب عددين أوليين سريين ($p$ و $q$) ($N = p \times q$).&lt;/p>
&lt;p>إذا قمنا بتحليل $X^2 - Y^2$ إلى عوامل، فسنحصل على &lt;strong>$(X - Y)(X + Y)$&lt;/strong> .
حقيقة أن هذا من مضاعفات $N$ تعني أنه في مكان ما في عملية الضرب هذه، يختبئ العددان الأوليان السريان $p$ و $q$.&lt;/p>
&lt;p>وهنا تحدث المعجزة.
الاحتمال الرياضي بأن ينفصل العددان الأوليان $p$ و $q$ إلى غرفتين مختلفتين، بحيث &lt;strong>&amp;ldquo;يذهب $p$ إلى غرفة $(X - Y)$&amp;rdquo; و &amp;ldquo;يذهب $q$ إلى غرفة $(X + Y)$&amp;rdquo;&lt;/strong> ، هو بالضبط &lt;strong>50٪ (النصف)&lt;/strong> .&lt;/p>
&lt;p>لنفترض أن العدد الأولي $p$ فقط هو الذي دخل غرفة $(X - Y)$. دعونا نحسب &lt;strong>&amp;ldquo;القاسم المشترك الأكبر (أكبر مكون مشترك)&amp;rdquo;&lt;/strong> بين $(X - Y)$ و $N$.&lt;/p>
&lt;ul>
&lt;li>محتوى $(X - Y)$ = $p \times$ عدد ما&lt;/li>
&lt;li>محتوى $N$ = $p \times q$
المكون المشترك الوحيد هنا هو &lt;strong>&amp;quot;$p$&amp;quot;&lt;/strong> !&lt;/li>
&lt;/ul>
&lt;p>بمعنى آخر، في اللحظة التي نحسب فيها القاسم المشترك الأكبر، سيتساقط العدد الأولي السري $p$، وسيتم كسر التشفير بالكامل. (&lt;em>يمكن حساب القاسم المشترك الأكبر في لحظة حتى على الهاتف الذكي باستخدام &amp;ldquo;خوارزمية إقليدس&amp;rdquo;&lt;/em>)&lt;/p>
&lt;p>&lt;strong>[ملاحظة سريعة: لماذا التربيع؟ ألا يمكن التكعيب أو المضاعفة؟]&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>إذا استخدمنا &amp;ldquo;$2X - 2Y$&amp;quot;، سيصبح $2(X - Y)$، وستكون هناك غرفة واحدة فقط ولن نتمكن من فصل الأعداد الأولية. إذا استخدمنا &amp;ldquo;$X^3 - Y^3$&amp;quot;، ستصبح أحجام الغرف غير متوازنة، وستكون الحسابات ثقيلة بلا داعٍ. لفصل الأعداد الأولية بشكل مثالي، فإن &amp;ldquo;التربيع&amp;rdquo; الذي يقسمها إلى غرفتين جميلتين هو الخيار الأكثر كفاءة.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="الفصل-الثاني-كيف-نبحث-عن-x-و-y-لغز-جمع-بطاقات-الأعداد-الأولية">الفصل الثاني: كيف نبحث عن X و Y؟ &amp;ldquo;لغز جمع بطاقات الأعداد الأولية&amp;rdquo;
&lt;/h2>&lt;p>لقد عرفنا الهدف. ومع ذلك، إذا حاولنا البحث عشوائياً عن &amp;ldquo;$X^2$ و $Y^2$ اللذين لهما نفس الباقي&amp;rdquo;، فلن نجدهما حتى نهاية عمر الكون.
لذلك، ابتكر علماء الرياضيات طريقة عبقرية تسمى &lt;strong>&amp;ldquo;لغز جمع بطاقات الأعداد الأولية&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;h3 id="الخطوة-1-غربلة-وجمع-غبار-الذهب-الأعداد-الناعمة-فقط">الخطوة 1: غربلة وجمع غبار الذهب (الأعداد الناعمة) فقط
&lt;/h3>&lt;p>أولاً، نقوم بإعداد عدد عشوائي $Z$، ونربّعه، ونحسب الباقي $W$ عند قسمته على $N$.
(عالم البواقي: $Z^2 = W$)&lt;/p>
&lt;p>نقوم بتحليل الباقي الناتج $W$ إلى عوامل أولية. هنا، فقط عندما يظهر &lt;strong>&amp;quot;$W$ الذي يتكون فقط من أعداد أولية صغيرة مثل 2، 3، 5، 7&amp;rdquo;&lt;/strong> ، نحتفظ بهذه المعادلة كـ &amp;ldquo;بطاقة رابحة&amp;rdquo;، ونتخلص منها إذا اختلط بها عدد أولي كبير.
يشبه الأمر استخدام الغربال في النهر للتخلص من الحجارة الكبيرة وجمع غبار الذهب فقط.&lt;/p>
&lt;h3 id="الخطوة-2-لغز-جعل-الجميع-بعدد-زوجي">الخطوة 2: لغز جعل الجميع بعدد &amp;ldquo;زوجي&amp;rdquo;
&lt;/h3>&lt;p>على سبيل المثال، لنفترض أننا جمعنا 3 بطاقات من غبار الذهب:&lt;/p>
&lt;ul>
&lt;li>البطاقة A: $Z_1^2 = 2^3 \times 3^1$&lt;/li>
&lt;li>البطاقة B: $Z_2^2 = 2^1 \times 5^1$&lt;/li>
&lt;li>البطاقة C: $Z_3^2 = 3^1 \times 5^1$&lt;/li>
&lt;/ul>
&lt;p>دعونا نضربها جميعاً معاً.
سيصبح الجانب الأيمن $(2^3 \times 3^1) \times (2^1 \times 5^1) \times (3^1 \times 5^1)$،
وبتبسيطه سنحصل على &lt;strong>&amp;quot;$2^4 \times 3^2 \times 5^2$&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;p>والمثير للدهشة، أن عدد الأعداد الأولية أصبح &amp;ldquo;4، 2، 2&amp;rdquo;، &lt;strong>جميعها أعداد زوجية&lt;/strong> !
حقيقة أن جميعها زوجية تعني أنه إذا أخذنا نصف الكمية، فسنحصل على &amp;ldquo;تربيع لشيء ما&amp;rdquo;.
أي أن $(2^2 \times 3^1 \times 5^1)^2 = (60)^2$.&lt;/p>
&lt;p>وبما أن الجانب الأيسر هو $(Z_1 \times Z_2 \times Z_3)^2$, فقد حصلنا أخيراً على:
&lt;strong>$X = (Z_1 \times Z_2 \times Z_3)$&lt;/strong>
&lt;strong>$Y = 60$&lt;/strong>
وهكذا يكتمل الزوج الذي طال انتظاره لـ &amp;ldquo;$X^2 = Y^2$&amp;rdquo;!&lt;/p>
&lt;p>بالنسبة لأجهزة الكمبيوتر، فإن ألغاز حساب ما إذا كان عدد الأعداد الأولية &amp;ldquo;زوجياً أم فردياً (0 أو 1)&amp;rdquo; سهلة للغاية، لذلك يمكن لهذه الطريقة العثور على $X$ و $Y$ بسرعة فائقة.&lt;/p>
&lt;hr>
&lt;h2 id="الفصل-الثالث-جدار-اليأس-الذي-يقف-في-طريقنا">الفصل الثالث: جدار اليأس الذي يقف في طريقنا
&lt;/h2>&lt;p>قد تعتقد: &amp;ldquo;بهذا يمكن كسر أي تشفير!&amp;rdquo; &amp;hellip; ولكن تظهر مشكلة كبيرة.
إذا كان رقم التشفير $N$ يصل طوله إلى حوالي &amp;ldquo;100 رقم&amp;rdquo;، فيمكن لهذه الطريقة (وتسمى الغربال التربيعي) حله. ولكن عندما يصبح $N$ &amp;ldquo;200 رقم أو 300 رقم&amp;rdquo;، يصبح المتغير $W$ أثناء الحساب ضخماً للغاية.&lt;/p>
&lt;p>عندما تصبح الأعداد ضخمة للغاية، تتوقف &amp;ldquo;الأعداد المكونة فقط من أعداد أولية صغيرة (غبار الذهب)&amp;rdquo; عن الظهور تماماً. يصبح العثور عليها أصعب من العثور على عدسة لاصقة في الصحراء، ونفشل تماماً في جمع البطاقات لحل اللغز.&lt;/p>
&lt;p>وهنا تظهر أخيراً الأداة الأقوى للبشرية: &lt;strong>&amp;ldquo;غربال حقل الأعداد العام (GNFS)&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;hr>
&lt;h2 id="الفصل-الرابع-الفكرة-الأقوى-للبشرية-لإنشاء-عالمين">الفصل الرابع: الفكرة الأقوى للبشرية لإنشاء &amp;ldquo;عالمين&amp;rdquo;
&lt;/h2>&lt;p>الفكرة العبقرية لـ GNFS هي: &lt;strong>&amp;ldquo;السبب في أن الأعداد تصبح ضخمة هو أننا نحسب في العالم الحقيقي فقط. إذاً، لنقم بإنشاء &amp;lsquo;عالم موازٍ&amp;rsquo; باستخدام كثيرات الحدود (العبارات الجبرية)، ولنقم بتقسيم عبء الحساب إلى قسمين&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;h3 id="سحر-العبارات-الجبرية">سحر العبارات الجبرية
&lt;/h3>&lt;p>يقوم GNFS بتحويل العدد الضخم $N$ إلى عبارة جبرية باستخدام رقم أساسي $m$.
على سبيل المثال، إذا كان $N=100$، وكان $m=4$، فإن $100 = 4^3 + 2(4^2) + 4$.
باستخدام المتغير $x$، نحول هذا إلى المعادلة (في العالم الموازي): &lt;strong>$f(x) = x^3 + 2x^2 + x$&lt;/strong> .&lt;/p>
&lt;p>الشيء المثير للاهتمام في هذه المعادلة هو خاصيتها: &lt;strong>&amp;ldquo;إذا قمنا بتعويض الحرف $x$ بـ $m$ (4 في المثال أعلاه)، فيمكننا في أي وقت العودة (القفز) إلى رقم العالم الحقيقي $N$&amp;rdquo;&lt;/strong> .&lt;/p>
&lt;h3 id="البحث-عن-غبار-الذهب-في-كلا-العالمين-في-وقت-واحد">البحث عن غبار الذهب في كلا العالمين في وقت واحد
&lt;/h3>&lt;p>يقوم GNFS بإنشاء العديد من أزواج الأعداد الصحيحة العشوائية $(a, b)$، وينفذ العمليتين التاليتين في نفس الوقت:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>العالم الحقيقي&lt;/strong>: $a - b \times m$&lt;/li>
&lt;li>&lt;strong>عالم الجبر&lt;/strong>: القيمة المحسوبة لـ $a - b \times x$ وفقاً لقواعد العبارات الجبرية&lt;/li>
&lt;/ol>
&lt;p>من خلال تقسيم المشكلة إلى عالمين، ينخفض حجم الأعداد التي يتم التعامل معها بشكل جذري (تصبح أخف وزناً). تخيل أنك تقوم بكسر صخرة عملاقة إلى حجرين صغيرين يسهل التعامل معهما.&lt;/p>
&lt;p>بعد ذلك، وباستخدام الغربال، نجمع فقط الأزواج العجيبة $(a, b)$ التي تكون &lt;strong>&amp;ldquo;في كل من العالم الحقيقي وعالم الجبر، مكونة فقط من أعداد أولية صغيرة (غبار الذهب)&amp;rdquo;&lt;/strong> . وهذا هو أصل اسم &amp;ldquo;غربال حقل الأعداد&amp;rdquo;.&lt;/p>
&lt;h3 id="لحظة-كسر-التشفير-أخيرا">لحظة كسر التشفير أخيراً
&lt;/h3>&lt;p>بمجرد جمع عشرات الملايين من &amp;ldquo;بطاقات غبار الذهب&amp;rdquo; من كلا العالمين، نستخدم حسابات المصفوفات الضخمة للحواسيب الخارقة للعثور على &amp;ldquo;التجميعة التي يصبح فيها عدد الأعداد الأولية زوجياً بالكامل&amp;rdquo;، تماماً كما فعلنا في الفصل الثاني.&lt;/p>
&lt;p>بمجرد العثور على التجميعة:&lt;/p>
&lt;ul>
&lt;li>نجعل العدد المربع الذي تم تشكيله في العالم الحقيقي هو &lt;strong>$X^2$&lt;/strong>&lt;/li>
&lt;li>ونجعل المعادلة المربعة التي تم تشكيلها في عالم الجبر هي &lt;strong>$Y(x)^2$&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>أخيراً، نقوم بتعويض $x$ في $Y(x)$ من عالم الجبر بـ $m$، لكي نقفز وندمجه مع العالم الحقيقي.
وعندها، وكأنه سحر رياضياتي، تتحقق بدقة الحالة التي &lt;strong>&amp;ldquo;يكون فيها باقي $X^2$ و $Y^2$ هو نفسه&amp;rdquo;&lt;/strong> !&lt;/p>
&lt;p>بعد ذلك، وكما هو موضح في الفصل الأول، إذا قمنا بحساب القاسم المشترك الأكبر لـ $X - Y$ و $N$، فإن تشفير RSA المنيع سينهار بصوت عالٍ، وستظهر الأعداد الأولية السرية.&lt;/p>
&lt;hr>
&lt;h2 id="الخاتمة-الرياضيات-لا-تنتهي">الخاتمة: الرياضيات لا تنتهي
&lt;/h2>&lt;p>قد تعتقد: &amp;ldquo;حسناً، باستخدام GNFS يمكننا كسر أي تشفير!&amp;rdquo;
ومع ذلك، فإن تشفير RSA لم يستسلم. ما يتم استخدامه في الإنترنت اليوم هو عدد ضخم وحشي يُسمى &amp;ldquo;RSA-2048 (حوالي 617 رقماً)&amp;rdquo;.&lt;/p>
&lt;p>بغض النظر عن كون GNFS أقوى خوارزمية للبشرية، يُقال إنه حتى لكسر رقم مكون من 270 رقماً (RSA-270)، فإن الأمر سيستغرق آلاف بل وعشرات الآلاف من السنين حتى لو تم ربط جميع أجهزة الكمبيوتر في العالم معاً. في الوقت الحالي، بياناتنا في LINE والبنوك في أمان.&lt;/p>
&lt;p>ولكن، ماذا سيحدث إذا ظهر &lt;strong>&amp;ldquo;السحر الذي يجد $X$ و $Y$ في لحظة لأي عدد ضخم&amp;rdquo;&lt;/strong> ؟
في الواقع، أقرب شيء لذلك قيد التطوير حالياً هو &lt;strong>&amp;ldquo;الكمبيوتر الكمي (خوارزمية شور)&amp;rdquo;&lt;/strong> . لقد ثبت رياضياً أنه باستخدام الخصائص الموجية لميكانيكا الكم، يمكننا تجاوز لغز جمع البطاقات المزعج وسحب الإجابة الصحيحة دفعة واحدة.&lt;/p>
&lt;p>معركة العقول التي لا نهاية لها بين صانعي التشفير (الدفاع) وصانعي خوارزميات كسر التشفير (الهجوم).
عندما تعلم أن &amp;ldquo;التحليل إلى العوامل الأولية&amp;rdquo; و&amp;quot;المعادلات الجبرية&amp;quot; التي تعلمناها في المدرسة الإعدادية هي في الواقع الأسلحة التي تتصادم بشراسة في الخطوط الأمامية للأمن العالمي، ألا تبدو دروس الرياضيات أكثر إثارة للاهتمام قليلاً؟&lt;/p>
&lt;p>قد تكون أنت من يقرأ هذا المقال هو من سيكتشف أقوى خوارزمية في المستقبل!&lt;/p>
&lt;hr>
&lt;p>&lt;em>(※يقوم هذا المقال بتبسيط الجاذبية الرياضية لفك التشفير لطلاب المدارس الإعدادية. في الواقع، يتم حساب GNFS الفعلي بصرامة باستخدام رياضيات جامعية متقدمة مثل مجموعات الفئات المثالية للحقول الجبرية والتشاكل (Homomorphism))&lt;/em>&lt;/p></description></item></channel></rss>