
السلسلة: Zcash from First Principles . المقالة 2 . المنحنيات الإهليلجية الجمهور: المبتدئون. نفترض فقط المقالة 1 (الحقول المنتهية): حساب يلتف حول نفسه بترديد عدد أولي. لا حاجة إلى أي خلفية أخرى. ما الذي ستخرج به: صورة حدسية وصحيحة للمنحنيات الإهليلجية، و"الباب السري" الذي يجعلها مفيدة، وكيف يحولها Zcash بالضبط إلى مفاتيح والتزامات.
قدمت لنا المقالة 1 ساحة مثالية للحساب: الحقل المنتهي. لكن الحقل وحده ليس سوى أعداد. ولكي يبني Zcash المفاتيح و"المظاريف المختومة" من المقالة 0، فهو يحتاج إلى كائن له نوع خاص من الصعوبة أحادية الاتجاه: سهل الحساب في الاتجاه الأمامي، ومستحيل عمليًا عكسه. هذا الكائن هو المنحنى الإهليلجي. تبني هذه المقالة الفكرة من الأساس، مقدمةً الحدس قبل الجبر.
كل نظام خصوصية يحتاج إلى شارع باتجاه واحد: عملية يكون التقدم فيها إلى الأمام تافهًا، والعودة فيها إلى الخلف مستحيلة عمليًا.
إليك السبب. مفتاحك السري هو عدد تحتفظ به مخفيًا. أما مفتاحك العام (وعنوانك) فيُشتق منه ويُعرض للعالم. ويستند أمن النظام كله إلى حقيقة واحدة: إذا أُعطي المفتاح العام، فلا يستطيع أحد الرجوع منه إلى مفتاحك السري. ولو استطاعوا ذلك، لأمكنهم إنفاق أموالك.
لذلك نحتاج إلى عملية رياضية يكون فيها:
الضرب العادي في الحقول المنتهية لا يكفي؛ فالقسمة تعكسه فورًا (وكانت تلك الفكرة الأساسية في المقالة 1). نحن بحاجة إلى شيء لا يملك زر "تراجع" سهلًا. وتوفر المنحنيات الإهليلجية ذلك بالضبط، ومع ميزة إضافية: أن نقاطها تتحد بطريقة مثالية لبناء الالتزامات. لنرَ كيف يحدث ذلك.
انسَ التشفير للحظة. المنحنى الإهليلجي هو ببساطة مجموعة النقاط (x, y) التي تحقق معادلة من الشكل:
y^2 = x^3 + ax + b
فوق الأعداد العادية يبدو كمنحنى أملس منساب، غالبًا مع حلقة مستديرة وذيلين:

الجزء المدهش حقًا هو: يمكنك "جمع" نقطتين على هذا المنحنى لتحصل على نقطة ثالثة على المنحنى نفسه. هذا ليس جمعًا عاديًا للإحداثيات. بل هو قاعدة هندسية، ومن الأسهل رؤيتها من وصفها.
لحساب P + Q:
P وQ.R*.R* حول المحور الأفقي. ذلك الانعكاس هو الجواب، أي P + Q.
لحساب P + P (وتكتب 2P)، لا توجد نقطة ثانية لرسم خط عبرها، لذا تستخدم خط المماس عند P بدلًا من ذلك، ثم تتبع الوصفة نفسها: "التقاطع الثالث، ثم الانعكاس".
هذه هي العملية كلها. قاعدتان هندسيتان. وبهما تشكل نقاط المنحنى الإهليلجي ما يسميه علماء الرياضيات زمرة: مجموعة لها "جمع" منضبط. بل ولها أيضًا "صفر".
كل نظام عددي يحتاج إلى 0، وهو الشيء الذي لا يغيّر شيئًا عند جمعه. وفي المنحنى الإهليلجي، تؤدي هذا الدور نقطة إضافية خاصة تسمى النقطة عند اللانهاية، وتكتب O. يمكنك تصورها على أنها "بعيدة إلى الأعلى بلا نهاية"، أي الموضع الذي تلتقي فيه الخطوط العمودية. وإضافة O إلى أي نقطة تتركها دون تغيير، تمامًا مثل إضافة 0.
المنحنى الأملس أعلاه هو الحدس. لكن Zcash لا يستخدم الأعداد الحقيقية (لأنها تقرب وتتسبب في تسرب الحجم، كما ورد في المقالة 1). بل يستخدم منحنى إهليلجيًا فوق حقل منتهٍ: المعادلة نفسها y^2 = x^3 + ax + b، ولكن مع إجراء كل الحسابات بترديد عدد أولي.
عندما تفعل ذلك، يتحطم المنحنى الجميل إلى تناثر من النقاط المنفصلة، نقطة واحدة لكل زوج (x, y) يحقق المعادلة بترديد p. ويتوقف عن أن يبدو كمنحنى أصلًا. لكن إليك الأمر الحاسم:
إن جبر قاعدة الوتر والمماس يظل يعمل على نحو مثالي. فالصيغ نفسها التي كانت تجد
P + Qهندسيًا تحسبه الآن بحسابات الحقل المنتهي. وتظل النقاط تشكل زمرة، وبالصفر نفسه (النقطة عند اللانهاية).
لنجعل هذا ملموسًا بمثال صغير ومتحقق منه بالكامل.
خذ y^2 = x^3 + 2x + 2 فوق الحقل المنتهي F_17. إن حساب كل نقطة صالحة يعطي بالضبط 18 نقطة، بالإضافة إلى النقطة عند اللانهاية = 19 نقطة إجمالًا. بعض منها:
(0,6) (0,11) (3,1) (3,16) (5,1) (5,16) (6,3) (6,14) (7,6) (7,11) ...
الآن اختر النقطة G = (5, 1) واستمر في جمعها مع نفسها. راقب ما يحدث (كل سطر أدناه قد حُسب فعلًا، ولم يُخمَّن):
| الخطوة | النقطة | الخطوة | النقطة |
|---|---|---|---|
1G | (5, 1) | 11G | (13, 10) |
2G | (6, 3) | 12G | (0, 11) |
3G | (10, 6) | 13G | (16, 4) |
4G | (3, 1) | 14G | (9, 1) |
5G | (9, 16) | 15G | (3, 16) |
6G | (16, 13) | 16G | (10, 11) |
7G | (0, 6) | 17G | (6, 14) |
هناك أمران ينبغي ملاحظتهما:
O في الخطوة 19، ثم ستبدأ بالتكرار إلى الأبد. والنقطة الابتدائية G "تولد" الزمرة كلها، لذا نسميها مولِّدًا.1G + 2G = (5,1) + (6,3) = (10,6)، وهو بالضبط 3G. إن عملية الجمع متسقة داخليًا، كما تتطلب الزمرة.ذلك الجدول الذي يحتوي على 1G, 2G, 3G, ... هو جوهر كل شيء. إن إضافة نقطة إلى نفسها مرارًا وتكرارًا يُسمّى الضرب القياسي: فالنقطة kG تعني "إضافة G إلى نفسها k مرة."
والآن يأتي السحر. تأمّل الاتجاهين التاليين:
| الاتجاه | السؤال | الصعوبة |
|---|---|---|
| إلى الأمام | إذا أُعطيَت k و G، احسب kG | سهل. حتى عندما تكون k ضخمة على نحو فلكي، فإن حيلة تُسمّى double-and-add توصلك إلى النتيجة في بضع مئات من الخطوات |
| إلى الخلف | إذا أُعطيَت G و kG، استرجع k | مستحيل عمليًا على منحنى تشفيري حقيقي |
هذا اللاتناظر هو الطريق ذو الاتجاه الواحد الذي احتجناه في القسم 1. أمّا المسألة العكسية ("أيّ k أنتجت هذه النقطة؟") فتُسمّى مسألة اللوغاريتم المتقطع على المنحنيات الإهليلجية (ECDLP)، وعلى المنحنيات التي يستخدمها Zcash، لا توجد طريقة معروفة لحلّها قبل الموت الحراري للكون.

في منحنى
F_17التعليمي الخاص بنا، يمكنك ببساطة أن تقرأkمن الجدول، لأنه يحتوي على 19 نقطة فقط. أمّا المنحنيات الحقيقية فلديها نحو2^(255)نقطة. وسيكون للجدول صفوف أكثر من عدد الذرات في الكون، لذا فإن "قراءته مباشرة" ليس خيارًا. إن صِغَر الحجم هو ما يجعل المنحنى التعليمي قابلًا للفهم، وهو أيضًا سبب كونه غير آمن.
أصبح لدينا الآن كل ما نحتاجه لشرح مفتاح تشفيري حقيقي، والأمر أبسط بشكل مدهش:
اختر عددًا سريًا
k. وانشر النقطةkG. هذا كل شيء.kهو مفتاحك الخاص. وkGهو مفتاحك العام. ويضمن الطريق ذو الاتجاه الواحد (ECDLP) ألّا يتمكّن أحد من الرجوع منkGإلىk.
هذه الفكرة الواحدة، أن المفتاح العام هو عدد قياسي سري مضروب في مولّد ثابت، هي البذرة التي تنطلق منها مفاتيح الإنفاق ومفاتيح العرض والعناوين في Zcash. تضيف شجرة المفاتيح الكاملة المزيد من البنية فوق ذلك، لكن كل فرع ينمو من هذا الجذر.
تذكّر "الظرف المختوم" (الالتزام) من المقالة 0، الذي كان يجب أن يُخفي محتواه ومع ذلك يكون مستحيل التزوير. تمنحنا المنحنيات الإهليلجية طريقة نظيفة لبنائه. خذ نقطتي مولّد عامتين وثابتتين G و H، وقيمة سرية v، ورقم تعمية عشوائي r، ثم كوّن:
Commitment = v.G + r.H
هذا هو Pedersen commitment، ويمتلك الخاصيتين اللتين أردناهما:
r يوزّع النتيجة على امتداد المنحنى كله، لذلك لا تكشف النقطة شيئًا عن v.(v, r) يعطي النقطة نفسها، لذلك لا يمكنك تغيير رأيك بشأن ما التزمت به.وتظهر لاحقًا خاصية إضافية لا تُقدّر بثمن: هذه الالتزامات تُجمع. فالالتزام بـ v_1 مضافًا إلى الالتزام بـ v_2 هو التزام صالح بـ v_1 + v_2. وهذا السلوك "التجانسي" هو ما سيسمح لـ Zcash لاحقًا بإثبات أن المال الداخل إلى المعاملة يساوي المال الخارج منها، من دون الكشف عن أي مبلغ. سنستفيد من ذلك تقريبًا عند المقالة 6.
البصمات هنا ملموسة ويمكن التحقق منها.
| تصميم Zcash | المنحنيات التي يستخدمها | الدور |
|---|---|---|
| Sapling (الأقدم) | BLS12-381 بالإضافة إلى منحنى مضمَّن يُسمّى Jubjub | يحمل BLS12-381 نظام الإثبات؛ وقد بُني Jubjub فوق الحقل القياسي لـ BLS12-381 بحيث تكون عمليات المفاتيح والالتزامات رخيصة التنفيذ داخل إثبات عدم المعرفة |
| Orchard (الحالي) | Pallas و Vesta (دورة "Pasta") | يحمل Pallas مفاتيح Orchard والتزاماته؛ وقد جرى ترتيب اقتران Pallas/Vesta خصيصًا لجعل الإثباتات المتقدمة فعّالة |
إن أسباب "تضمين" منحنى داخل حقل منحنى آخر، ولماذا تكون الدورة المؤلفة من منحنيين مفيدة، أسباب حقيقية ومهمّة، لكنها تنتمي إلى مقالات أنظمة الإثبات. أمّا الآن فالخلاصة ثابتة: كل مفتاح في Zcash هو عدد قياسي مضروب في مولّد، وكل التزام في Zcash هو مجموع نقاط على منحنى، ويعيش على أحد هذه المنحنيات المسماة.

لقد أبقت بعض التبسيطات هذا النص سهل القراءة. استخدمنا الصيغة Weierstrass القصيرة (y^2 = x^3 + ax + b)؛ وغالبًا ما تُكتب منحنيات Zcash بصيغ مكافئة أخرى (فـ Jubjub هو منحنى twisted Edwards) اختيرت للكفاءة والأمان، لكن فكرة المجموعة متطابقة. لم نعرّف صيغ جمع النقاط الدقيقة (وهي النسخة الجبرية من "التقاطع الثالث ثم الانعكاس")، وتجاوزنا تفاصيل دقيقة مثل رتبة المنحنى، والعوامل المرافقة، و"الاقترانات"، التي تصبح مهمّة في مقالات أنظمة الإثبات. لا يغيّر أيّ من هذا الحدس؛ بل يزيده دقة.
y^2 = x^3 + ax + b، ويمكن جمع نقاطه باستخدام القاعدة الهندسية الوتر والمماس، مع وجود نقطة عند اللانهاية خاصة تعمل بوصفها الصفر.y^2 = x^3 + 2x + 2 فوق F_17 يحتوي على 19 نقطة، و G = (5,1) يولّدها جميعًا.)kG سهل الحساب لكنه غير عملي للعكس: وهذه هي ECDLP. وهذا هو الباب السري.k، والمفتاح العام kG. الالتزامات: صيغة Pedersen v.G + r.H، التي تُخفي، وتربط، وبصورة مريحة تُجمع.| المصطلح | المعنى المبسط بالإنجليزية |
|---|---|
| المنحنى الإهليلجي | نقاط تحقق y^2 = x^3 + ax + b، مع "جمع" خاص للنقاط |
| جمع النقاط | قاعدة الوتر والمماس: ارسم خطًا يمر عبر نقطتين، خذ نقطة التقاطع الثالثة، ثم اعكسها |
النقطة عند اللانهاية (O) | "الصفر" الخاص بالمنحنى؛ إضافتها لا تغيّر شيئًا |
المولّد (G) | نقطة أساس تغطي مضاعفاتها في النهاية المجموعة كلها |
الضرب القياسي (kG) | جمع G إلى نفسه k مرات؛ سهل في الاتجاه الأمامي، وصعب في الاتجاه العكسي |
| ECDLP | المسألة الصعبة المتمثلة في استرجاع k من kG؛ وهي أساس الأمان |
| التزام Pedersen | v.G + r.H؛ ظرف مختوم يخفي، ويُحكم الربط، ويمكن جمعه |
لماذا المنحنيات بدلًا من مجرد أعداد كبيرة بترديد عدد أولي؟ يمكن لكليهما أن يوفّرا طريقًا أحادي الاتجاه، لكن المنحنيات الإهليلجية تحقق مستوى الأمان نفسه بمفاتيح أصغر بكثير وعمليات أسرع، كما أن حسابيات النقاط فيها مثالية للالتزامات.
هل ثبت أن ECDLP صعبة؟ لم يثبت أنها مستحيلة، لكن عقودًا من الجهد المكثف لم تجد أي هجوم فعّال على المنحنيات المختارة جيدًا. ويعتمد الأمان على هذا الافتراض المختبَر جيدًا.
هل يمكن لحاسوب كمومي أن يكسر هذا؟ يمكن لحاسوب كمومي كبير بما يكفي أن يكسر ECDLP. وهذا مصدر قلق معروف على المدى الطويل في مختلف أنحاء الصناعة، ومجال بحث نشط؛ أما منحنيات اليوم فما تزال آمنة أمام الحواسيب التقليدية.
لماذا تستخدم Zcash أكثر من منحنى واحد؟ لأن لكل منها وظيفة مختلفة. أحد المنحنيات يحمل نظام البرهان صفري المعرفة؛ ومنحنى آخر (مضمَّن داخل حقل الأول) يجعل عمليات المفاتيح والالتزامات داخل البرهان فعّالة. وتشرح المقالات التالية لماذا يهم هذا الاقتران.
باستخدام الجدول المتحقق منه في القسم 3، ما هو 9G + 10G على منحنانا المبسط؟ وماذا يخبرك الجواب عن G؟ (الإجابة أدناه.)
9 + 10 = 19، وقد رأينا أن 19G = O، أي النقطة عند اللانهاية. إذن 9G + 10G = O. وهذا يعني أن 10G هو السالب (المعكوس الجمعي) لـ 9G: نقطتان مجموعهما يساوي نقطة "الصفر". على المنحنى، سالب النقطة هو ببساطة صورتها المنعكسة عبر المحور x، وبالفعل فإن 9G = (7,6) و 10G = (7,11) لهما القيمة نفسها لـ x، كما أن قيمتي y فيهما مجموعهما 17 = 0 (mod 17). البنية متسقة تمامًا، وهذا بالضبط ما يضمنه قولنا "إنها مجموعة".
المقالة 3 . التجزئة والالتزامات: سنفتح "الظرف المختوم السحري" على نحو صحيح. لقد رأيت الآن طريقة واحدة لبناء التزام من نقاط المنحنى؛ وفي المقالة التالية نسأل عمّا يعنيه الإخفاء والإلزام حقًا، ونتعرّف إلى دوال التجزئة، ونربط الأمرين معًا بالتزامات الملاحظات التي ترتكز إليها كل دفعة في Zcash.
جزء من سلسلة Zcash from First Principles لـ ZecHub. مرخّص تحت CC BY-SA 4.0.
8G |
| (13, 7) |
18G |
| (5, 16) |
9G | (7, 6) | 19G | O (اللانهاية) |
10G | (7, 11) |