<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RSA on kenji.blog</title><link>http://kenji.blog/ar/tags/rsa/</link><description>Recent content in RSA on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ar</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 05 Sep 2026 22:09:21 +0900</lastBuildDate><atom:link href="http://kenji.blog/ar/tags/rsa/index.xml" rel="self" type="application/rss+xml"/><item><title>هل ستدمر الحواسيب الكمومية حقًا تشفير RSA؟ ~ خوارزمية شور والمرحلة الحالية ~</title><link>http://kenji.blog/ar/p/shors-algorithm-and-rsa-breaking/</link><pubDate>Sat, 05 Sep 2026 22:09:21 +0900</pubDate><guid>http://kenji.blog/ar/p/shors-algorithm-and-rsa-breaking/</guid><description>&lt;img src="http://kenji.blog/p/shors-algorithm-and-rsa-breaking/quantum_breaking_rsa_1788613722990.jpg" alt="Featured image of post هل ستدمر الحواسيب الكمومية حقًا تشفير RSA؟ ~ خوارزمية شور والمرحلة الحالية ~" />&lt;h2 id="مقدمة-تقاطع-التشفير-والحواسيب-الكمومية">مقدمة: تقاطع التشفير والحواسيب الكمومية
&lt;/h2>&lt;p>في مجتمع الإنترنت الحديث، &amp;ldquo;تشفير المفتاح العام&amp;rdquo; هو الأساس لحماية سرية الاتصالات. وأبرزها &amp;ldquo;تشفير RSA&amp;rdquo; الذي طوره كل من رون ريفست (Ron Rivest)، آدي شامير (Adi Shamir)، وليونارد أدلمان (Leonard Adleman) في عام 1977. من مدفوعات التسوق عبر الإنترنت التي نستخدمها يوميًا، إلى تصفح مواقع الويب (HTTPS)، وإرسال واستقبال رسائل البريد الإلكتروني، يعمل تشفير RSA كقلب البنية التحتية للإنترنت.&lt;/p>
&lt;p>ولكن، مع ظهور &amp;ldquo;الحواسيب الكمومية&amp;rdquo;، تمت الإشارة إلى احتمال أن هذا الأمان قد يُدمر من جذوره. في وسائل الإعلام، تظهر أحيانًا عناوين مثيرة مثل &amp;ldquo;بمجرد اكتمال الحاسوب الكمومي، سيتم فك تشفير جميع كلمات المرور والتشفيرات في العالم في ثوانٍ&amp;rdquo;. هل هذا صحيح حقًا؟&lt;/p>
&lt;p>في هذه المقالة، سنتعمق في آليات GNFS (منخل حقل الأعداد العام) كطريقة فك تشفير كلاسيكية، والنسخة النهائية لخوارزمية فك التشفير باستخدام الحواسيب الكمومية، وهي &amp;ldquo;خوارزمية شور&amp;rdquo; (Shor&amp;rsquo;s Algorithm). سنشرح المفاهيم المتقدمة مثل تحويل فورييه الكمومي واكتشاف الدورة بطريقة سهلة الفهم، وسنحقق بالتفصيل في الوضع الحالي للأجهزة الكمومية في عصر NISQ (Noisy Intermediate-Scale Quantum) والعقبات الحقيقية لكسر RSA-2048.&lt;/p>
&lt;hr>
&lt;h2 id="أساس-تشفير-rsa-صعوبة-التحليل-إلى-العوامل-الأولية">أساس تشفير RSA: صعوبة التحليل إلى العوامل الأولية
&lt;/h2>&lt;p>يعتمد أمان تشفير RSA على عدم تناسق بسيط للغاية في الرياضيات. وهي حقيقة أنه &amp;ldquo;من السهل ضرب عددين أوليين ضخمين، ولكن من الصعب للغاية العثور على العددين الأوليين الأصليين (التحليل إلى عوامل أولية) من النتيجة المضروبة (الرقم المركب)&amp;rdquo;.&lt;/p>
&lt;p>على سبيل المثال، لنفترض أن لدينا عددين أوليين $ p = 61 $ و $ q = 53 $. حساب الضرب $ N = p \times q = 3233 $ يستغرق لحظة. ومع ذلك، إذا أُعطيت الرقم &amp;ldquo;3233&amp;rdquo; فقط وطُلب منك &amp;ldquo;ما هما العددان الأوليان اللذان مضروبهما يساوي هذا الرقم؟&amp;quot;، سيزداد حجم الحساب بشكل انفجاري كلما كبر الرقم.&lt;/p>
&lt;p>في RSA-2048 السائد حاليًا، يتم استخدام رقم مركب ضخم $ N $ بطول مفتاح 2048 بت، أي حوالي 617 رقمًا عشريًا. إذا أمكن تحليل $ N $ هذا إلى عوامله الأولية، فسيكون التشفير قد تم كسره.&lt;/p>
&lt;h3 id="تحدي-الحواسيب-الكلاسيكية-gnfs-منخل-حقل-الأعداد-العام">تحدي الحواسيب الكلاسيكية: GNFS (منخل حقل الأعداد العام)
&lt;/h3>&lt;p>لحل مشكلة التحليل إلى العوامل، طور علماء الرياضيات والتشفير خوارزميات مختلفة على مر السنين. من بينها، أسرع خوارزمية للحواسيب الكلاسيكية حاليًا هي ** منخل حقل الأعداد العام (GNFS: General Number Field Sieve) **.&lt;/p>
&lt;p>GNFS هي طريقة لتحليل عدد ضخم $ N $ عن طريق توسيع الحسابات في حلقة الأعداد الصحيحة إلى حقل جبري أكثر تجريدًا (Number Field). التدفق العام كالتالي:&lt;/p>
&lt;ol>
&lt;li>** اختيار متعددة الحدود **: ابحث عن متعددة حدود $ f(x) $ بدرجة ومعاملات مناسبة، بحيث يكون $ N $ جذرًا لها.&lt;/li>
&lt;li>** جمع البيانات (الغربلة) **: ابحث عن عدد كبير من أزواج الأرقام التي يمكن تقسيمها إلى أعداد أولية صغيرة (أرقام سلسة، Smooth numbers) فوق حقل الأعداد المنطقية والحقول الجبرية. تُعرف هذه العملية بـ &amp;ldquo;الغربلة&amp;rdquo; وهي الجزء الذي يستغرق وقتًا أطول.&lt;/li>
&lt;li>** توليد المصفوفة وتقليلها **: قم بإنشاء مصفوفة متناثرة ضخمة (مصفوفة معظم عناصرها 0) بناءً على العلاقات المجمعة، واعثر على الحل باستخدام طرق الجبر الخطي (مثل طريقة بلوك-لانكزوس).&lt;/li>
&lt;li>** حساب الجذر التربيعي **: أخيرًا، احسب الجذر التربيعي على الحقل الجبري، واستخرج عوامل (العوامل الأولية) $ N $.&lt;/li>
&lt;/ol>
&lt;p>يُقدّر تعقيد الحساب لـ GNFS بشكل غير تقاربي بـ $ O(\exp((\sqrt[3]{\frac{64}{9}} + o(1)) (\log N)^{\frac{1}{3}} (\log \log N)^{\frac{2}{3}})) $. يُسمى هذا تعقيد الوقت &amp;ldquo;شبه الأسي&amp;rdquo; (Sub-exponential). على الرغم من أنه أسرع من الوقت الأسي، إلا أنه أبطأ بكثير من الوقت متعدد الحدود (Polynomial time).&lt;/p>
&lt;p>في الواقع، في عام 2020، نجح فريق بحث دولي في تحليل RSA-250 (رقم مركب من 829 بت، 250 رقمًا) باستخدام GNFS. استغرق هذا الحساب وقتًا هائلاً يقدر بحوالي 2700 سنة أساسية (CPU core years) بجمع موارد الحوسبة من جميع أنحاء العالم. ومع ذلك، عندما يتعلق الأمر بـ 2048 بت، يُقال إن الحساب المطلوب سيتضخم إلى تريليونات من أضعاف عمر الكون، وبغض النظر عن عدد أجهزة الكمبيوتر العملاقة الحالية التي تعمل بالتوازي، فمن المستحيل كسرها في وقت واقعي باستخدام الطرق الكلاسيكية.&lt;/p>
&lt;hr>
&lt;h2 id="ورقة-الحواسيب-الكمومية-الرابحة-خوارزمية-شور">ورقة الحواسيب الكمومية الرابحة: خوارزمية شور
&lt;/h2>&lt;p>هنا تبرز &amp;ldquo;خوارزمية شور&amp;rdquo;، التي نشرها بيتر شور (Peter Shor) في عام 1994. كانت هذه الخوارزمية رائدة لأنها يمكن أن تحل مشكلة التحليل إلى العوامل الأولية على حاسوب كمومي في ** وقت متعدد الحدود ** ( $ O((\log N)^3) $ ). الفرق بين الوقت شبه الأسي والوقت متعدد الحدود حاسم، ومن الناحية النظرية، يعني ذلك أن استخدام الحواسيب الكمومية سيدمر تشفير RSA تمامًا.&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;/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[إدخال الرقم N المراد تحليله] --&amp;gt; B[اختيار عدد صحيح عشوائي a]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt; C{القاسم المشترك الأكبر&amp;lt;br&amp;gt;لـ a و N}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|أكبر من 1| D[لحسن الحظ تم اكتشاف العامل الأولي!]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|1 أوليان نسبيًا| E[دور الحاسوب الكمومي]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> E --&amp;gt; F[إيجاد الدورة r للدالة f_x = a^x mod N&amp;lt;br&amp;gt;بواسطة تحويل فورييه الكمومي]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F --&amp;gt; G{الدورة r زوجية و&amp;lt;br&amp;gt;a^r/2 ≢ -1 mod N}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt;|نعم| H[حساب القاسم المشترك الأكبر gcd_a^r/2 ± 1, N]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> H --&amp;gt; I((نجاح التحليل!))
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt;|لا| B
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>لا تحل خوارزمية شور مشكلة التحليل بشكل مباشر، بل تتخذ نهجًا يستخدم نظريات نظرية الأعداد لتحويلها إلى مشكلة أخرى تسمى &amp;ldquo;مشكلة اكتشاف الدورة&amp;rdquo; (Period Finding Problem)، ثم تحلها بسرعة باستخدام خصائص الحواسيب الكمومية.&lt;/p>
&lt;h3 id="الخطوة-1-التحويل-من-التحليل-إلى-مشكلة-اكتشاف-الدورة-المعالجة-الكلاسيكية">الخطوة 1: التحويل من التحليل إلى مشكلة اكتشاف الدورة (المعالجة الكلاسيكية)
&lt;/h3>&lt;p>تتم الخطوة الأولى من الخوارزمية على حاسوب كلاسيكي.
بالنسبة للرقم $ N $ الذي تريد تحليله، اختر رقمًا صحيحًا عشوائيًا $ a $ ($ 1 &lt; a &lt; N $) يكون أوليًا نسبيًا مع $ N $ (القاسم المشترك الأكبر هو 1). إذا حدث صدفة ألا يكون القاسم المشترك الأكبر 1، فإن القاسم المشترك الموجود هو العامل الأولي لـ $ N $ ويكتمل التشفير، لكن الاحتمال منخفض للغاية.&lt;/p>
&lt;p>بعد ذلك، نعتبر تسلسل المعادلة المعيارية التالية:
$ f(x) = a^x \pmod N $&lt;/p>
&lt;p>عند تعويض $ x = 1, 2, 3, \dots $ في هذه الدالة $ f(x) $، تبدو القيم عشوائية، ولكن لأن الحساب يتم ضمن نطاق محدود، فإنها ستعود بالتأكيد إلى القيمة الأصلية في مكان ما، وتكرر نفس التسلسل. تُسمى فترة هذا التكرار بـ $ r $. بمعنى آخر،
$ a^r \equiv 1 \pmod N $
مشكلة العثور على أصغر عدد صحيح موجب $ r $ يلبي هذه المعادلة هي &amp;ldquo;مشكلة اكتشاف الدورة&amp;rdquo;.&lt;/p>
&lt;p>إذا تم العثور على هذه الدورة $ r $ وكانت $ r $ عددًا زوجيًا، فإن $ a^r - 1 \equiv 0 \pmod N $، وبواسطة صيغة التحليل
$ (a^{r/2} - 1)(a^{r/2} + 1) \equiv 0 \pmod N $
يمكن تحويلها. من هنا، باستخدام خوارزمية إقليدس لحساب القاسم المشترك الأكبر لـ $ N $ و $ a^{r/2} \pm 1 $، يمكن الحصول على العوامل الأولية لـ $ N $ باحتمالية عالية جدًا.&lt;/p>
&lt;p>العثور على الدورة $ r $ باستخدام حاسوب كلاسيكي يتطلب في النهاية خطوات أسية ولا يمكن تسريعه. ولكن مع الحاسوب الكمومي، يمكن العثور على الدورة $ r $ في لحظة (في وقت متعدد الحدود).&lt;/p>
&lt;h3 id="الخطوة-2-تحضير-الحالة-الكمومية-والتراكب">الخطوة 2: تحضير الحالة الكمومية والتراكب
&lt;/h3>&lt;p>من هنا يبدأ دور الحاسوب الكمومي.
تستخدم الحواسيب الكمومية &amp;ldquo;الكيوبتات&amp;rdquo; (Qubits) التي يمكن أن تمتلك حالتي &amp;ldquo;0&amp;rdquo; و &amp;ldquo;1&amp;rdquo; في نفس الوقت. في خوارزمية شور، يتم إعداد سجلين: سجل لتخزين المدخلات (السجل الأول) وسجل لتخزين نتائج الحساب (السجل الثاني).&lt;/p>
&lt;p>أولاً، نطبق عملية بوابة كمومية تسمى بوابة هادامارد (Hadamard gate) على جميع الكيوبتات في السجل الأول. نتيجة لذلك، يصبح السجل الأول في ** حالة تراكب متساوية ** لجميع قيم $ x $ الممكنة (من $ 0 $ إلى $ 2^n-1 $. حيث $ n $ هو عدد كبير كافٍ من البتات).&lt;/p>
&lt;p>بمعنى آخر، داخل الحاسوب الكمومي، يتم إنشاء حالة تتواجد فيها عدد لا يحصى من قيم الإدخال $ x=0, 1, 2, 3, \dots $ في نفس الوقت والتوازي.&lt;/p>
&lt;h3 id="الخطوة-3-الأس-المعياري-الكمومي-quantum-modular-exponentiation">الخطوة 3: الأس المعياري الكمومي (Quantum Modular Exponentiation)
&lt;/h3>&lt;p>بعد ذلك، باستخدام حالة التراكب في السجل الأول كمدخل، يتم حساب $ f(x) = a^x \pmod N $ ويتم تخزين النتيجة في السجل الثاني.
نظرًا لأن هذا الحساب يتم كتحويل وحدوي (Unitary transformation) على الدائرة الكمومية، يتم حساب $ f(x) $ لجميع قيم $ x $ &amp;ldquo;في وقت واحد (التوازي الكمومي)&amp;rdquo; مع الحفاظ على التراكب.&lt;/p>
&lt;p>مساحة النظام الكمومي بأكمله في هذه المرحلة هي،
$ |x, a^x \bmod N\rangle $
تراكب هائل للحالات.&lt;/p>
&lt;p>ولكن، إذا قمنا ببساطة بقياس (رصد) السجل الثاني هنا، فسيتم اختيار قيمة واحدة عشوائية لـ $ a^x \bmod N $ احتماليًا، وبشكل متصل، سيتم تحديد $ x $ السجل الأول أيضًا بقيمة واحدة. هذا يعادل الحساب مرة واحدة على حاسوب كلاسيكي، ولن نتمكن من العثور على الدورة $ r $.&lt;/p>
&lt;p>وفقًا لقواعد ميكانيكا الكم، لا يمكننا النظر مباشرة داخل حالة التراكب. إذن، كيف نستخرج المعلومات العالمية المتمثلة في &amp;ldquo;الدورة&amp;rdquo; الشاملة؟&lt;/p>
&lt;h3 id="الخطوة-4-تحويل-فورييه-الكمومي-qft-quantum-fourier-transform">الخطوة 4: تحويل فورييه الكمومي (QFT: Quantum Fourier Transform)
&lt;/h3>&lt;p>الجوهر الحقيقي لخوارزمية شور لاختراق هذا الجدار هو تطبيق ** تحويل فورييه الكمومي (QFT) ** على السجل الأول.&lt;/p>
&lt;p>قبل إجراء القياس، نقوم بتحليل الخصائص الموجية للدالة $ f(x) $. لنفترض أننا رصدنا السجل الثاني. وحصلنا على قيمة معينة $ y $. عندئذٍ، ستتقلص حالة السجل الأول إلى &amp;ldquo;تراكب لجميع قيم $ x $ بحيث يكون $ a^x \pmod N = y $&amp;rdquo;.
ستصطف قيم $ x $ هذه بشكل منفصل بفترات دورية $ r $ مثل $ x_0, x_0 + r, x_0 + 2r, x_0 + 3r, \dots $ (نوع من التوزيع الاحتمالي على شكل مشط).&lt;/p>
&lt;p>نطبق تحويل فورييه الكمومي (QFT) على هذه الحالة. كما يحول تحويل فورييه المنفصل الكلاسيكي الإشارات في المجال الزمني إلى مجال التردد، يتسبب QFT في حدوث تداخل في السعات الاحتمالية للحالة الكمومية.&lt;/p>
&lt;p>عند تطبيق QFT، بسبب تأثيرات التداخل الكمومي، تلغي احتمالات الإجابات الخاطئة التي لا يتردد صداها مع الدورة $ r $ (تكون الأطوار غير متوافقة) بعضها البعض وتقترب من الصفر (تداخل هدام)، بينما يتم تضخيم احتمال الإجابة الصحيحة فقط التي تحمل معلومات الدورة $ r $ (تداخل بناء).&lt;/p>
&lt;h3 id="الخطوة-5-القياس-وتوسيع-الكسر-المستمر-المعالجة-الكلاسيكية-البعدية">الخطوة 5: القياس وتوسيع الكسر المستمر (المعالجة الكلاسيكية البعدية)
&lt;/h3>&lt;p>عند قياس السجل الأول بعد تطبيق QFT، سنحصل باحتمالية عالية جدًا على عدد صحيح $ c $ قريب من الصيغة $ c \approx \frac{j \cdot 2^n}{r} $ ($ j $ عدد صحيح غير معروف، $ 2^n $ هو حجم السجل).&lt;/p>
&lt;p>نعيد نتيجة القياس هذه $ c $ إلى حاسوب كلاسيكي، وننشئ الكسر $ \frac{c}{2^n} \approx \frac{j}{r} $. ثم باستخدام الطريقة الرياضية &amp;ldquo;توسيع الكسر المستمر&amp;rdquo; (Continued fraction expansion) لحساب التقريب، يمكننا استخراج القاسم، وهو الدورة $ r $ بنجاح.&lt;/p>
&lt;p>إذا عرفنا $ r $، نستخدم صيغة الخطوة 1 لحساب عوامل $ N $، وبذلك يتم كسر تشفير RSA تمامًا.&lt;/p>
&lt;hr>
&lt;h2 id="القدرة-الحالية-للحواسيب-الكمومية-nisq-والتحديات">القدرة الحالية للحواسيب الكمومية (NISQ) والتحديات
&lt;/h2>&lt;p>على الرغم من أن خوارزمية شور مثالية نظريًا، إلا أن الإجابة على سؤال &amp;ldquo;هل سيتم كسر تشفير RSA غدًا؟&amp;rdquo; هي &amp;ldquo;لا&amp;rdquo; بوضوح. يكمن السبب في حدود تكنولوجيا الأجهزة للحواسيب الكمومية الحالية.&lt;/p>
&lt;h3 id="عصر-nisq-noisy-intermediate-scale-quantum">عصر NISQ (Noisy Intermediate-Scale Quantum)
&lt;/h3>&lt;p>الزمن الذي نعيش فيه الآن هو عصر يسمى &amp;ldquo;NISQ&amp;rdquo;. تمتلك أجهزة NISQ العشرات إلى المئات من الكيوبتات المادية، لكنها ضعيفة للغاية أمام الضوضاء.&lt;/p>
&lt;p>الكيوبتات عرضة لتأثيرات البيئة الخارجية مثل الحرارة والموجات الكهرومغناطيسية، وكثيراً ما يحدث &amp;ldquo;فك الترابط&amp;rdquo; (فقدان التشابك الكمومي) حيث تنهار الحالة الكمومية، و &amp;ldquo;أخطاء البوابات&amp;rdquo; أثناء عمليات البوابات. عند محاولة تنفيذ دوائر كمومية عميقة جدًا (مع عدد هائل من خطوات العمليات) مثل خوارزمية شور، تتراكم الأخطاء أثناء الحساب، ويصبح الناتج النهائي مجرد ضوضاء عشوائية لا معنى لها.&lt;/p>
&lt;h3 id="الكيوبتات-المادية-والكيوبتات-المنطقية">الكيوبتات المادية والكيوبتات المنطقية
&lt;/h3>&lt;p>لحل مشكلة الخطأ هذه، لا غنى عن &amp;ldquo;تصحيح الخطأ الكمومي&amp;rdquo; (Quantum Error Correction).
تُستخدم أكواد تصحيح الأخطاء في الحواسيب الكلاسيكية أيضًا، ولكن نظرًا لوجود &amp;ldquo;نظرية عدم الاستنساخ الكمومي&amp;rdquo; التي تمنع نسخ الحالات الكمومية، فإن تصحيح الأخطاء الكمومية معقد للغاية.&lt;/p>
&lt;p>في تصحيح الخطأ الكمومي، باستخدام تقنيات مثل &amp;ldquo;الكود السطحي&amp;rdquo; (Surface Code)، من خلال دمج العديد من &amp;ldquo;الكيوبتات المادية&amp;rdquo; المليئة بالضوضاء، يتم إنشاء &amp;ldquo;كيوبت منطقي&amp;rdquo; واحد مثالي خالٍ من الأخطاء.&lt;/p>
&lt;p>بافتراض معدلات الخطأ الحالية، يُقدر أن هناك حاجة إلى ما بين 1000 إلى 10000 كيوبت مادي لإنشاء كيوبت منطقي واحد. يُطلق على هذا اسم &amp;ldquo;عبء تصحيح الخطأ&amp;rdquo; (Overhead).&lt;/p>
&lt;h3 id="ما-هي-الموارد-المطلوبة-لكسر-rsa-2048">ما هي الموارد المطلوبة لكسر RSA-2048؟
&lt;/h3>&lt;p>إذن، لتشغيل خوارزمية شور لكسر RSA-2048 فعليًا، ما مقدار الموارد المطلوبة؟&lt;/p>
&lt;p>وفقًا للتقدير المرجعي للموارد في ورقة عام 2021 التي قدمها كريج جيدني (Craig Gidney) (جوجل) ومارتن إكيرا (Martin Ekerå)، عند استخدام خوارزمية شور المُحسّنة وإجراء تصحيح الأخطاء باستخدام الكود السطحي، ستكون هناك حاجة للموارد التالية:&lt;/p>
&lt;ul>
&lt;li>** عدد الكيوبتات المنطقية **: حوالي 4,096&lt;/li>
&lt;li>** عدد الكيوبتات المادية **: ** حوالي 20 مليون ** (بافتراض معدل خطأ بنسبة $10^{-3}$)&lt;/li>
&lt;li>** وقت الحساب **: حوالي 8 ساعات (ملايين إلى مليارات عمليات البوابات المادية مطلوبة)&lt;/li>
&lt;/ul>
&lt;p>بالمقارنة مع هذا، ما هو المستوى الذي وصلت إليه الأجهزة الكمومية الحالية؟
يبلغ المعالج الكمومي فائق التوصيل &amp;ldquo;Condor&amp;rdquo; الذي أعلنت عنه شركة IBM في أواخر عام 2023 حوالي 1,121 كيوبت. ظهرت أيضًا أبحاث رائدة في توليد الكيوبتات المنطقية (مثل توليد 48 كيوبتًا منطقيًا باستخدام حاسوب كمومي للذرات المتعادلة بواسطة جامعة هارفارد وشركة QuEra)، لكننا لم نصل بعد إلى مرحلة يمكن فيها تشغيل &amp;ldquo;عمليات مثالية بدون ضوضاء&amp;rdquo; بشكل مستمر لفترات طويلة.&lt;/p>
&lt;p>لتوسيع النطاق من بضعة آلاف من الكيوبتات المادية إلى ** 20 مليون ** كيوبت مادي عملي (نظام متصل ببعضه البعض، يعمل باستقرار في درجات حرارة منخفضة للغاية، ويعالج إشارات التحكم بسرعة فائقة)، توجد حواجز هندسية هائلة (مشاكل الأسلاك، قيود قدرة التبريد، تضخم إلكترونيات التحكم). يتوقع العديد من الخبراء أن الأمر سيستغرق ما لا يقل عن 10 إلى 30 عامًا، أو ربما أكثر، لتحقيق &amp;ldquo;حاسوب كمومي متسامح مع الأخطاء (FTQC)&amp;rdquo; قادر على فك تشفير RSA-2048.&lt;/p>
&lt;hr>
&lt;h2 id="تهديد-store-now-decrypt-later-الخفي-وفجر-pqc">تهديد &amp;ldquo;Store Now, Decrypt Later&amp;rdquo; الخفي وفجر PQC
&lt;/h2>&lt;p>من السابق لأوانه الاعتقاد أنه &amp;ldquo;نحن في أمان لأن الأمر سيستغرق أكثر من 10 سنوات&amp;rdquo;. يوجد حاليًا بيانات مثل أسرار الدولة، البيانات الطبية، وتصميم البنية التحتية طويلة الأمد التي يجب ضمان سريتها لعقود قادمة.&lt;/p>
&lt;p>ما يُثير القلق هنا هو تقنية الهجوم ** &amp;ldquo;Store Now, Decrypt Later&amp;rdquo; (احفظ الآن، فك التشفير لاحقًا) **. تقوم دول أو منظمات خبيثة باعتراض جميع بيانات الاتصال المشفرة حاليًا بـ RSA أو ECC (تشفير المنحنى الإهليلجي) وتخزينها في مساحة التخزين. ثم بعد 10 أو 20 عامًا، بمجرد اكتمال حاسوب كمومي قوي، يستخدمون خوارزمية شور لفك تشفير جميع البيانات السابقة وكشف الأسرار.&lt;/p>
&lt;p>لمواجهة تهديد الفجوة الزمنية هذا، وبقيادة NIST (المعهد الوطني للمعايير والتكنولوجيا الأمريكي)، تم تسريع عملية توحيد معايير ** &amp;ldquo;التشفير ما بعد الكمي&amp;rdquo; (PQC: Post-Quantum Cryptography) **.&lt;/p>
&lt;p>PQC هي خوارزميات تشفير جديدة تستند إلى مسائل رياضية يصعب حلها حتى باستخدام الحواسيب الكمومية (بمعنى آخر، لا يمكن تطبيق خوارزمية شور عليها). تشمل الأساليب الرئيسية ما يلي:&lt;/p>
&lt;ul>
&lt;li>** التشفير القائم على الشبكة (Lattice-based cryptography) **: يعتمد على مشاكل مثل LWE (التعلم مع الأخطاء). هو السائد في توحيد معايير NIST (مثل Kyber، Dilithium).&lt;/li>
&lt;li>** التشفير القائم على الرمز (Code-based cryptography) **: يعتمد على صعوبة مشكلة فك تشفير أكواد تصحيح الأخطاء.&lt;/li>
&lt;li>** التشفير متعدد الحدود متعدد المتغيرات (Multivariate cryptography) **: يعتمد على صعوبة حل أنظمة المعادلات التربيعية متعددة المتغيرات.&lt;/li>
&lt;li>** التوقيعات القائمة على التجزئة (Hash-based signatures) **: توقيعات رقمية تعتمد فقط على أمان دوال التجزئة.&lt;/li>
&lt;/ul>
&lt;p>بدأ بالفعل اختبار إدخال وتنفيذ هجين لـ PQC في البرامج والمنصات الرئيسية مثل Google Chrome و Apple iMessage.&lt;/p>
&lt;h2 id="おわりに">おわりに
&lt;/h2>&lt;p>تنتقل الحواسيب الكمومية من حلم في عالم الخيال العلمي إلى تحدٍ هندسي في العالم الحقيقي. تعتبر خوارزمية شور إنجازًا فكريًا عظيمًا للبشرية يدمج بين الرياضيات وميكانيكا الكم، ولكنها في الوقت نفسه تحمل &amp;ldquo;قوة تدميرية&amp;rdquo; تهز أساس مجتمعنا الرقمي.&lt;/p>
&lt;p>لن يصبح تشفير RSA غير صالح للاستخدام غدًا. ولكن بالنظر إلى تطور التكنولوجيا الكمومية ومخاطر &amp;ldquo;Store Now, Decrypt Later&amp;rdquo;، فإن الهجرة واسعة النطاق في تاريخ التشفير والمتمثلة في الانتقال إلى PQC قد بدأت بالفعل. نحن نشهد الآن الخطوط الأمامية لتغيير جذري في أمن المعلومات.&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>