134 / 736SCHNORR

Schnorr Signature

توقيع شنور

عندما توقّع المحفظة دفعة، فهي لا ترسم صورة توقيع ولا ترسل مفتاحك الخاص. بل تنشئ دليلاً تستطيع الشبكة التحقق منه. يتيح Schnorr Signature إنشاء هذا الدليل بصورة موجزة، كما يتيح لعدة أشخاص التوقيع معاً. وفي Bitcoin يُستخدم مع Taproot.

Schnorr Signature طريقة رقمية للموافقة على رسالة محددة دون كشف المفتاح الخاص. تنشئ المحفظة التوقيع بهذا المفتاح السري، ويكفي الآخرين المفتاح العام المقابل للتحقق منه. في Bitcoin يساعد التوقيع على إثبات صلاحية إنفاق العملات، لكنه لا يحل محل بقية فحوص المعاملة. يحدد BIP340 نسخة بيتكوين المستخدمة مع Taproot.

تريد أليس إرسال بيتكوين إلى بوب. المحفظة تطبيق أو جهاز لاستقبال البيتكوين وإرساله. تُنشئ المحفظة المعاملة وتستخدم المفتاح الخاص لتوقيع البيانات التي يفرضها نمط التوقيع المختار. ثم تتحقق العقدة من التوقيع ومن بقية شروط الإنفاق. العقدة برنامج يتحقق من المعاملات والكتل ويتواصل مع المشاركين الآخرين في الشبكة. التوقيع الصحيح وحده لا يثبت هوية أليس الرسمية، ولا أن المستلم هو المقصود، ولا وجود أموال غير منفقة تكفي للدفع؛ فهذه مسائل منفصلة. وقد تكون الدفعة الموقّعة خطأً لم تقصده أليس. [5] [3] [10] [11]

يحدّد BIP340، الذي وضعه Pieter Wuille وJonas Nick وTim Ruffing، توقيع Schnorr في Bitcoin بدقة. ويُدخله BIP341 ضمن قواعد إنفاق Taproot التي فُعّلت على شبكة بيتكوين الرئيسية (Mainnet) عند الكتلة 709632 في عام 2021. تجمع الكتلة معاملات في دفعة تُضاف إلى السجل المشترك. هنا مستويان: خوارزمية التوقيع وشروط الإنفاق. ما زالت المخرجات القديمة وSegWit v0 تستخدم ECDSA، خوارزمية التوقيع الأقدم؛ ولم يستبدل التحديث توقيعاتها بأثر رجعي. [1] [2] [11]

البايت وحدة شائعة لقياس حجم البيانات. تستخدم نسخة بيتكوين المنحنى الإهليلجي secp256k1، وهو بنية رياضية للحسابات المتعلقة بالمفاتيح والتوقيعات. ينص BIP340 على صيغة ثابتة للتوقيع بحجم 64 بايت. ويُمثَّل المفتاح العام بـ32 بايت للإحداثي x؛ ولا تعني x-only إهمال فحص أمني. فالقواعد تحدّد أيضاً بصورة قاطعة أي تمثيل لنقطة المنحنى يجب أن يستخدمه المتحقق. تُسهّل الصيغة الأصغر والمحددة بدقة عمل البرامج، لكن هذين الرقمين لا يكفيان لمعرفة حجم المعاملة كاملة. [1] [12]

لا توقّع المحفظة عبارة مبهمة مثل «أوافق». يحدد نمط sighash بيانات المعاملة التي تكوّن الرسالة الموقعة. يحمي SIGHASH_DEFAULT معلومات جميع المدخلات والمخرجات، على نحو مشابه لـSIGHASH_ALL: أي العملات المستلمة سابقاً تُنفق، وأي مبالغ جديدة مرتبطة بشروط إنفاق تُنشأ. تغيير البيانات المشمولة يبطل التوقيع. لكن ذلك لا يعني توقيع كل بايت، مثل التوقيعات الأخرى نفسها. للأنماط الأخرى المسموح بها نطاق مختلف. حجم التوقيع 64 بايت؛ وفي النمط غير الافتراضي يضاف بايت للنوع، فيصبح حجم العنصر 65 بايت. وهذا ليس حجم المدخل أو المعاملة بالكامل. [2]

تُنشأ عند التوقيع قيمة nonce سرية. وقد يكشف استخدامها مجدداً لرسائل مختلفة مع المفتاح نفسه المفتاحَ الخاص. لذلك يشرح BIP340 اشتقاق nonce بدقة ويوصي ببيانات عشوائية إضافية لحماية التنفيذ. لا يبتكر المستخدم nonce ولا يدوّنها في نسخته الاحتياطية. تتولى إدارتها مكتبة توقيع خضعت للاختبار؛ فالارتجال هنا قد يقوّض نظاماً تشفيرياً صحيحاً في الأصل. [1] [9]

تسمح البنية الرياضية لتوقيع Schnorr ببروتوكولات يتفق فيها عدة أشخاص على رسالة واحدة وينتجون توقيعاً مشتركاً. ومن أمثلتها MuSig2 وفق BIP327. في الصيغة الأساسية لهذا البروتوكول، يجب أن يسهم كل عضو في المجموعة المختارة. يتطلب ذلك تنسيقاً ومعالجة صحيحة للمفاتيح وإجراءً مستقلاً وآمناً لقيم nonce. لا يكفي جمع توقيعات مكتملة كيفما اتفق. كما أن دعم المحفظة لـSchnorr Signature لا يعني وحده أنها تدعم هذا التعاون. [8]

يوفر Taproot مسارات مختلفة للإنفاق. في key path تتحقق الشبكة من توقيع مقابل المفتاح العام المسجل في المخرج. وقد يمثل هذا المفتاح شخصاً واحداً أو مجموعة متعاونة. في script path يُكشف السكربت المختار، أي برنامج يتضمن شروطاً يجب أن تستوفيها الدفعة. Tapscript هو نسخة لغة السكربت المستخدمة في Taproot. تتحقق تعليمة OP_CHECKSIGADD من توقيع واحد، وتضيف واحداً إلى العداد عند نجاحه. وبتكرارها يمكن فحص عدة توقيعات منفصلة والتحقق من بلوغ العدد المطلوب. يختلف Multisig القائم على السكربت هنا عن توقيع مجمّع واحد. عند اختيار محفظة، افهم من يجب أن يتعاون، وما الذي سيصبح علنياً، وما إمكانات الاستعادة عند فقد مفتاح. [7] [2]

في شبكة بلا حكم مركزي، لا يجوز أن تقبل عقدة توقيعاً وترفضه أخرى لمجرد اختلاف تفسير البايتات. لذلك يحدّد BIP340 المفاتيح والتوقيعات الصحيحة وإجراء التحقق بالتفصيل. ويتيح أيضاً batch verification، أي التحقق من عدة توقيعات معاً لتقليل الحسابات. لا يعيد ذلك كتابة سجلاتها على البلوكتشين، ولا يدمج توقيعات مداخل مختلفة للمعاملة. [1]

قد يبدو توقيع key-path المشترك مثل توقيع مفتاح واحد. ولذلك لا يكشف التوقيع وحده بالضرورة عدد الأشخاص الذين اتفقوا. لكن المبالغ والروابط بين المداخل والمخرجات ووقت المعاملة تبقى عادة قابلة للرصد. لا يُشفّر Schnorr Signature الدفعة. وتعتمد الخصوصية أيضاً على كيفية استخدام Taproot وسلوك المحفظة وظروف الدفع. [2] [3]

ما يهم المستخدم العادي هو محفظة تعرض المستلم والمبلغ والرسوم بصورة صحيحة وتتيح استعادة موثوقة. وعلى المطوّر كذلك فحص الدعم الدقيق لـBIP340 ومتجهات الاختبار وإدارة nonce والسلوك عند حدوث خطأ. اسم الخوارزمية لا يضمن جودة المنتج كله. تقوم مكتبة جيدة مثل libsecp256k1 بالحسابات التشفيرية، لكنها لا تقرر نيابة عن الإنسان إن كان عليه حقاً الموافقة على الدفعة المعروضة. [4] [9] [6]

للحصول على صورة أوضح، اقرأ هذا المدخل مع Taproot, MuSig2, Multisig, Bitcoin Script. تشير إلى هذا المدخل أيضًا SHA-256, Opcode, MuSig2, Nostr.

DOC · 001BIP 340 — Schnorr Signaturesمواصفة DOC · 002BIP 341 — Taprootمواصفة DOC · 003Bitcoin Optech — Schnorr signaturesتوثيق DOC · 004Bitcoin Core — secp256k1 verificationتوثيق DOC · 005Bitcoin Core — Script interpreterتوثيق DOC · 006BIP 340 rendered specificationمواصفة DOC · 007BIP342 — Validation of Taproot Scriptsمواصفة DOC · 008BIP327 — MuSig2مواصفة DOC · 009libsecp256k1 — Schnorr signature APIتوثيق DOC · 010Bitcoin Developer Guide — Walletsتوثيق DOC · 011Bitcoin Developer Guide — Block Chainتوثيق DOC · 012Bitcoin Developer Reference — Transactionsتوثيق
تمت المراجعة: المصادر أولًا · ليست نصيحة استثمارية