إنشاء مفتاح هرمي

في هذه المقالة ، سنتحدث عن محافظ حتمية ، وتوليد مفاتيح هرمية ، وكيف تعمل رياضيًا وفي أي الحالات يكون من المناسب وضعها موضع التنفيذ. ستكون هذه المواد مفيدة للمتخصصين الذين تتعلق أنشطتهم ببوابات الدفع ومحافظ Bitcoin ومتاجر العملات الأخرى. بالإضافة إلى ذلك ، ستكون المادة ذات أهمية لأولئك المهتمين بمخططات التشفير الإهليلجية ومخططات النشر الإلكترونية للتوقيع.

محفظة حتمية


بادئ ذي بدء ، دعنا نحدد ما هي المحفظة القطعية. عندما نتحدث عن توليد المفاتيح ، غالبًا ما نستخدم كلمة "محفظة" ، لأنه في سياق العملات المشفرة ، فإن امتلاك مفتاح خاص هو دليل على ملكية العملات المعدنية ، وفي هذه الحالة ، يكون للمحفظة والمفتاح معنى مماثل.

المحفظة الحتمية هي محفظة يتم فيها إنشاء جميع المفاتيح الخاصة المستخدمة من سر واحد مشترك بين جميع المفاتيح. تكمن الخصوصية في أنه من الممكن ، من سر واحد ، توليد أي عدد من أزواج المفاتيح للتوقيع الإلكتروني. يمكنك استخدام عناوين جديدة لكل دفعة واردة واردة.

بشكل ملائم ، يمكن نقل مفاتيح هذه المحفظة بسهولة إلى جهاز آخر ، وعمل نسخة احتياطية ثم استعادتها ، لأنه في الواقع تحتاج إلى حجز سر رئيسي واحد فقط. بالإضافة إلى ذلك ، لا ترتبط جميع المفاتيح الخاصة التي تم إنشاؤها من السر الرئيسي مع بعضها البعض. من المستحيل تتبع الاتصال بين العناوين التي تم إنشاؤها (لتحديد أنها كلها تنتمي إلى مستخدم واحد) ، وبعد الحصول على المفتاح الخاص الذي تم إنشاؤه ، لا يمكنك استعادة السر المشترك.

الترميز السري الأساسي


الآن دعونا نتحدث عن ترميز السر الرئيسي. هناك بعض النهج المعياري الذي تم تعريفه في BIP39. هذا هو ما يسمى ترميز Check Encoding للسر الرئيسي في عبارة مختزلة - مجموعة من الكلمات التي يسهل كتابتها على الورق ، وإذا لزم الأمر ، تذكر. عند الدخول ، من الممكن التحقق من المجموع الاختباري ، أي لتحديد خطأ ، إن وجد ، مع احتمال كبير إلى حد ما.

الصورة

كيف يعمل؟ في الواقع ، لديك السر الرئيسي (Entropy) - البيانات التي يتم من خلالها توسيع جميع المفاتيح الشخصية للمحفظة. يمكن أن يكون لهذا السر أطوال مختلفة. بالنسبة إلى المجموع الاختباري: لكل 32 بت من Entropy ، يوجد 1 بت من المجموع الاختباري ، أي أن المجموع الاختباري يتم حسابه بالصيغة على أنه طول من Entropy بالبت مقسومًا على 32.

يتسلل الإنتروبي مع المجموع الاختباري ، الذي يتم حسابه كتجزئة SHA-256 مزدوجة (SHA-2 بطول 256 بت) ، وبعد ذلك يتم قطع العدد المطلوب من البتات. يتم نقل البيانات المتسلسلة إلى نظام أرقام آخر: من النظام الثنائي إلى نظام الأرقام على أساس 2048 (كما ترى ، 2048 هو 211) وإذا قمت بإضافة طول بتات الإنتروبي والمجموع الاختباري ، فستحصل على مضاعف 11. وبالتالي ، نحصل على عدد الكلمات في جملة التذكر الناتج.

في الواقع ، يتم "تقطيع" البيانات في أجزاء 11 بت. يوجد قاموس من 2048 كلمة ( 211) التي تنطبق عليها متطلبات معينة. اللغة الافتراضية للقاموس هي الإنجليزية ، ولكن يمكن استخدام أي شخص. يجب ألا تتجاوز الكلمات طولًا معينًا (عادةً ما يصل إلى 7 أحرف). يجب ترميزهم جميعًا في UTF-8 مع تطبيع معين لجميع الأحرف. إلزامي هو تفرد كل كلمة في الأحرف الأربعة الأولى.

تحدد الأحرف الأربعة الأولى بشكل فريد الكلمة في القاموس ، ويتم استخدام الأحرف المتبقية لإكمال هذه الكلمة في شكل مناسب للقراءة والحفظ وما إلى ذلك. وهكذا ، فإن كل جزء من البيانات يتكون من 11 بت يتلقى تطابقًا لا لبس فيه في شكل كلمة من القاموس. إذا كان Entropy الخاص بسرّك 256 بت ، فستكون البيانات الخاصة بالتشفير 264 بت ، وستتضمن العبارة المساعدة الخاصة بك 24 كلمة. هذا هو النهج الرئيسي لتشفير أسرار المحفظة في BIP39 ، والذي يُستخدم غالبًا في الممارسة.

من أجل عمل نسخة احتياطية في المستقبل واستخدامها ، فأنت مدعو لكتابة هذه العبارة على وسيط خارجي. من الأفضل تخزين الورق الذي ستخزنه في مكان آمن. حتى تتمكن من استعادة الوصول الكامل إلى جميع مفاتيحك.

أنواع المحافظ القطعية


تأتي المحافظ الحتمية في نوعين. فكر في الاختلافات الرئيسية بينهما.

الأول هو الأبسط. السر الرئيسي هنا متسلسل بمؤشر المفتاح الفرعي الذي نريد الحصول عليه ، وبعد ذلك يتم تجزئة البيانات المتسلسلة. يحدث هذا غالبًا باستخدام دالة التجزئة SHA-256.

يشمل النوع الثاني محافظ حتمية هرمية ، محافظ عالية الدقة ، والتي تم تحديد مبادئها في BIP32 ، وهي نهج شائع جدًا لتوليد المفاتيح الهرمية.

جيل حتمي


ضع في اعتبارك الاختلافات بين هذه الأنواع من المحافظ في الرسم التخطيطي.

الصورة

تحتوي المحفظة القطعية العادية على بعض البذور ، حيث يتم إنشاء عدد كبير من المفاتيح الخاصة مباشرة. يمكن تحديد عددهم فقط من خلال بعد المؤشر ، الذي يتسلسل إلى السر قبل التجزئة. عادة ما تكون 4 بايت ، أي أن مساحة الخيارات الممكنة تسمح بحوالي 4 مليار مفتاح محفظة حتمية فريد. من الناحية العملية ، يجب أن يكون هذا كافيًا لأي موقف.

الجيل الحتمي الهرمي


دعنا ننتقل إلى محفظة حتمية هرمية ، يتم تقديم مخطط النشر الرئيسي لها في شكل مبسط حتى الآن. هناك بذرة ، حيث يتم الحصول على زوج من المفاتيح الرئيسية مباشرة. إذا حصلنا على مفتاح خاص في محفظة حتمية عادية ، فعندئذٍ نحصل على زوج من المفاتيح. علاوة على ذلك ، هناك مستويات هرمية ، نقوم في كل منها بحساب المؤشر لإنشاء المفتاح الفرعي. يمكننا أيضًا بناء فروع رئيسية عامة وفروع رئيسية خاصة.

مستويات التسلسل الهرمي


فيما يتعلق بالمحافظ عالية الدقة ، تجدر الإشارة إلى أنه وفقًا لقواعد BIP32 في كل مستوى من مستويات التسلسل الهرمي ، تحتوي عقدة التفريخ على ثلاثة كائنات: مفتاح خاص ومفتاح عام ورمز سلسلة يتم استخدامه لتوليد مستوى التسلسل الهرمي التالي.

مخطط التوليد الهرمي


دعونا ننظر بمزيد من التفصيل في مخطط توليد المفاتيح لـ BIP32.

الصورة

يبدأ كل شيء بالبذرة ، ويسمى أيضًا البذرة الرئيسية ، والتي يتم من خلالها حساب المستوى صفر للتسلسل الهرمي - زوج من المفاتيح الرئيسية ورمز السلسلة.

يمكن إنشاء عدد كبير من أزواج المفاتيح بمؤشرات محددة من زوج من المفاتيح الرئيسية. يتم تكوين مستوى جديد من التسلسل الهرمي ، والذي يستخدم لإنشاء الحسابات. لنفترض أن مستخدمًا لديه تصنيف أساسي ويرغب في إنشاء عدة عناوين تختلف عن بعضها البعض. لن يتم خلط عملات هذه العناوين ، ولن يتم نشرها معًا ، وفي المعاملات النهائية بينهما لن يكون من الممكن العثور على اتصال. سيتم استخدام هذه المفاتيح بشكل منفصل تمامًا عن بعضها البعض. في أحد الحسابات ، سيتم استخدام المجموعة الرئيسية لميزانية العمل ، وفي الأخرى للميزانية الشخصية ، وحساب آخر لمسك الدفاتر السوداء. لن تختلط العملات مع بعضها البعض.

يحدد المستوى الهرمي التالي سلاسل توليد المفاتيح المختلفة. في معظم الأحيان ، يتم استخدام السلاسل ذات الفهارس 0 و 1. ستنشئ السلسلة ذات الفهرس 0 مفاتيح نهائية لتكوين عنوان للدفعات الواردة ، وستؤدي السلسلة ذات الفهرس 1 إلى إنشاء محافظ للعملات المعدنية التي يرسلها المستخدم لأنفسهم ، أي التغيير. يعد ذلك ضروريًا حتى تميز المحفظة على مستوى البرنامج الدفعات المرسلة من الخارج عن التغيير ، وتحسب التغييرات في رصيد كل معاملة وتجميع قائمة مرئية مع تاريخ جميع المدفوعات. هذا يبسط تطوير المحفظة واستخدامها في المدفوعات اليومية.

رمز مصادقة الرسائل المستندة إلى التجزئة


الآن دعنا ننتقل إلى المكون الرياضي لعمليات توليد المفاتيح الهرمية. بادئ ذي بدء ، ضع في اعتبارك رمز مصادقة الرسائل المستندة إلى التجزئة. هذه فئة مختلفة لحساب وظائف التجزئة. وهو يختلف في أنه يأخذ قيمتين عند المدخل ، وليس واحدًا. القيمة الأولى هي المفتاح الخاص ، والثانية هي الرسالة نفسها.

HMAC(K،m)=H((Kopad)||H(Kipad)||m))



K هو المفتاح
م - رسالة
opad، ipad - بعض القيم الثابتة اللازمة لتوليد مفاتيح تختلف عن بعضها البعض في مراحل مختلفة من التجزئة.
كدالة تجزئة ، يتم استخدام SHA-512.

تكمن الخصوصية في أنه من أجل استخدام HMAC ، تحتاج إلى امتلاك مفتاح سري من أجل الحصول على قيمة التجزئة الصحيحة للرسالة.

لذا ، لحساب قيمة تجزئة HMAC ، تكون قيمة مفتاح XOR مع قيمة ipad الثابتة ، وبعد ذلك يتم تجزئة النتيجة. يتم توصيل الرسالة بهذه القيمة ، وبعد ذلك يتم حساب المفتاح XOR بقيمة ثابتة ، متسلسلة بقيمة التجزئة ، ثم يتم تجزئتها مرة أخرى. ونتيجة لذلك ، نحصل على 512 بت من قيمة التجزئة.

وظائف الاشتقاق


دعونا نلقي نظرة على بعض الوظائف التي يتم استخدامها في حساب المفاتيح الهرمية.

الصورة

بادئ ذي بدء ، نحن مهتمون بتحويل البذور الرئيسية إلى زوج مفاتيح رئيسي. بعد ذلك ، تحتاج إلى الحصول على مفتاح الطفل الخاص ومفتاح الطفل العام من مفتاح الوالدين الشخصي. في الحالة الثانية ، يتم استخدام نفس الوظيفة بالضبط كما في الحالة الأولى ، ولكن يتم إضافة ضرب الرقم بواسطة نقطة الأساس ، وبالتالي لن يتم النظر فيه بشكل منفصل. الخطوة التالية هي الحصول على الطفل العام من مفتاح الوالدين العام. تجدر الإشارة إلى أنه لا يمكن الحصول على طفل شخصي من المفتاح العام للوالدين. يرجع هذا القيد إلى خصائص معينة متأصلة في محافظ HD ، والتي سننظر فيها أكثر.

لذا ، دعنا نراجع كل وظيفة من وظائف التوليد بشكل منفصل.

الصورة

للحصول على المفتاح الرئيسي من السيد الرئيسي ، يتم استخدام وظيفة HMAC ، حيث يتم إرسال السلسلة الثابتة "Bitcoin seed" كمفتاح ، والبيانات السرية الرئيسية نفسها كرسالة. وبالتالي ، يتم الحصول على قيمة تجزئة 512 بت ، والتي نعتبرها جزئين: اليسار واليمين. الجانب الأيسر هو مفتاح خاص رئيسي ، والجانب الأيمن سيكون رمز السلسلة. علاوة على ذلك ، سيتم استخدام هذه القيم لتوليد مستويات لاحقة من المفاتيح الفرعية.

للحصول على مفتاح عام ، فقط اضرب قيمة النقطة الأساسية في قيمة المفتاح الخاص الرئيسي. كما ترى ، يحدث هذا عن طريق القياس مع المفاتيح العادية في مجموعة من النقاط على منحنى بيضاوي.

الآن دعونا نرى كيف يأتي المفتاح الخاص التابع من المفتاح الخاص للوالدين.

الصورة

سنستخدم وظيفة HMAC مرة أخرى. كمفتاح ، نقوم بتمرير رمز السلسلة لمستوى التسلسل الهرمي الحالي ، وكرسالة ، تسلسل ، حيث سيكون الجزء الأول هو المفتاح الرئيسي الشخصي مضروبًا في نقطة الأساس. في الواقع ، هذا يلقي إلى حد وتسلسل هذه النقطة. يحدث التسلسل مع فهرس المفتاح التابع الذي نريد تلقيه ، والذي يتم تسلسله عند 32 بت ، أي 4 بايت.

بناءً على نتيجة دالة HMAC ، نحصل على القيمة I ، ومرة ​​أخرى نعتبرها منفصلة: الأجزاء اليسرى واليمنى من قيم الإخراج هي 256 بت. ثم مفتاح الطفل الخاص kiنحسب عن طريق إضافة إلى قيمة الإخراج اليسرى Ilقيم المفتاح الخاص الأصل. يتم الإضافة modulo n ، حيث n هي ترتيب النقطة الأساسية للمنحنى البيضاوي ، حتى لا تتجاوز القيمة القصوى للمفتاح الخاص. وبالتالي ، تلقينا مفتاحًا خاصًا تابعًا للطفل.

وفقًا لذلك ، سيكون رمز السلسلة الفرعية مساوياً لقيمة الإخراج الصحيحة لوظيفة HMAC ، أي IR. إذا أردنا العثور على المفتاح العام الفرعي من مفتاح الوالدين الشخصي ، فإننا نضرب القيمة kiبقيمة نقطة الأساس على المنحنى البيضاوي. لذا نحصل على المفتاح العام Ki.

كيف نحسب المفتاح العام التابع من مفتاح الوالدين العام؟

الصورة

هنا سيكون الحساب مختلفًا قليلاً. نقوم بتمرير التسلسل الهرمي لسلسلة التسلسل الهرمي الحالي كمفتاح في وظيفة HMAC ، وبعد ذلك نقوم بتسلسل المفتاح العمومي الأصلي وربطه مع الفهرس المطلوب المتسلسل إلى 32 بت. يتم الحصول على بيانات الإدخال بنفس الطريقة تمامًا كما في الحالة السابقة. لحساب المفتاح العام ، نأخذ الجانب الأيسر من قيمة الإخراج لوظيفة HMAC ، ونعتبرها 256 بتًا مأخوذة من نمط ترتيب النقطة الأساسية ، ونحيلها إلى نقطة على المنحنى البيضاوي ، أي الضرب في نقطة الأساس ، ثم نضيف النتيجة باستخدام المفتاح العام الأصلي . ستكون نتيجة الإضافة أيضًا نقطة ، وستكون مفتاحًا تابعًا عامًا للأطفال. سيكون رمز السلسلة لهذا المفتاح هو الجانب الأيمن من قيمة الإخراج لوظيفة HMAC.

مطابقة المفاتيح لبعضها البعض


قد يثير هذا سؤالًا منطقيًا حول كيفية توافق المفاتيح الخاصة والعامة التي يتم الحصول عليها بطرق مختلفة مع بعضها البعض. هل من الممكن حقًا الحصول على نفس القيمة تمامًا من مفتاح عام تم إنشاؤه بطريقة عامة عن طريق أخذ مفتاح خاص تم الحصول عليه بطريقة أخرى وضربه في نقطة أساسية؟ من السهل التحقق من ذلك.

الصورة

إذا تذكرنا كيف قمنا بحساب المفتاح الفرعي الشخصي ، وقمنا بضربه في نقطة الأساس ، أي يؤدي إلى وظيفة النقطة ، ثم نتذكر حساب المفتاح العام الفرعي ومقارنة هذه الحسابات ، فسوف نرى أنه إذا اعتبرنا المفتاح العام الرئيسي كمنتج للأصل الشخصي مفتاح لنقطة الأساس ، ثم سنرى أنه تم إجراء نفس الحسابات ، فقط في ترتيب مختلف.

في حالة واحدة ، أضفنا المفاتيح الخاصة وضربنا في نقطة الأساس ، وفي الحالة الثانية ، قمنا أولاً بضرب القيم في نقطة الأساس ، ثم أضفناها وحصلنا على النتيجة. استنادًا إلى حقيقة أن عملية إضافة النقاط على منحنى إهليلجي هي إضافة ، يمكننا القول أن هاتين القيمتين متساويتان - سنحصل على نفس المفتاح العام بطريقتين.

مثال المفتاح العام


من أجل الاهتمام ، يمكننا إلقاء نظرة على مثال لمفتاح عام تم الحصول عليه لقيم الاختبار وحسابات BIP32. إذا كانت Entropy الخاصة بنا تتكون من 128 بت ، فستبدو في نظام الأرقام السداسي العشري مثل الصورة أدناه.

الصورة

ستبدو نفس القيمة المشفرة في العبارة المساعدة BIP39 مثل الكلمات الـ 12 الموضحة. إذا كنت تستخدم هذه العبارة التذكيرية كمصدر رئيسي لتوليد المفاتيح الهرمية ، فستحصل على هذا المفتاح الخاص الرئيسي برمز سلسلة 256 بت المتوافق.

مفاتيح ممتدة


هناك أيضًا مفاهيم مثل المفتاح العام الممتد والمفتاح الخاص الممتد. كيف يتم استخدامه؟ لفهم أفضل ، نصف الوضع البصري.

لنفترض أن لدينا مستخدمًا معينًا وبعض الخدمات. تقوم الخدمة بنقل المدفوعات ، على سبيل المثال بعملة البيتكوين ، إلى مستخدم بتردد معين. يهتم كل من المستخدم والخدمة باستخدام عنوان جديد لكل دفعة ، من أجل جعل من الصعب على مراقب خارجي إثبات حقيقة والخلط بين تاريخ التفاعل مع بعضهم البعض.

في أبسط الحالات ، سيبدو الأمر كما يلي: يقوم المستخدم لكل دفعة واردة بإنشاء زوج مفاتيح جديد ، ويحسب العنوان الذي يمرره إلى الخدمة ، وبعد ذلك يمكن للخدمة إنشاء معاملة وإجراء الدفع. ومع ذلك ، فهذا غير مريح لأي من الطرفين إذا كانت كثافة هذه المدفوعات عالية.

مفتاح عام ممتد


في موقف مماثل ، يساعد المفتاح العام الممتد (xPubKey) على التخلص من الإزعاج. يمكن للمستخدم تمكين خدمة طرف ثالث لإنشاء عناوين بدلاً من أن تكون معروفة لدى الخدمة ، ولكن سيكون لدى المستخدم فقط مفاتيح خاصة. يمكن للخدمة إنشاء أي عدد من العناوين دون علم المستخدم وإرسال الأموال إليه ، ويمكن للمستخدم ، حسب ما يناسبه ، نشر مفاتيح خاصة والحصول على الوصول إلى أي من هذه العناوين.

كيف يعمل؟ يحتاج المستخدم إلى إنشاء حساب جديد في المستوى الثاني من التسلسل الهرمي للمفاتيح ، ويحسب له المفتاح العام ورمز السلسلة للمستوى الحالي. بعد ذلك ، تحتاج إلى نقل كل من المفتاح العام ورمز السلسلة إلى الخدمة. من أجل الراحة ، تم تقديم ترميز Base58Check ، الذي تحدثنا عنه (هناك إصدار خاص هنا). بعد ذلك ، يتم تسلسل المفتاح العام ورمز السلسلة والمجموع الاختباري. يتم ترميز كل هذا في نظام الرقم الأساسي 58 ونحصل على مفتاح موسع عام مشفر بالفعل وفقًا لمعيار معين. يبدأ بالحرف "xpub" ، والذي يمكن التعرف عليه بسهولة. ستبدو كما هو موضح في الصورة.

الصورة

يمكن للخدمة قبول مثل هذا المفتاح ونشر المفاتيح العامة للمستخدم عبر BIP32 ، وتلقي العناوين منها ودفع ثمنها. ومع ذلك ، يمكن للمستخدم فقط حساب المفاتيح الخاصة المقابلة.

الاشتقاق المتصلب


في الجيل الهرمي للمفاتيح يوجد شيء مثل الاشتقاق المقسى. هذا نهج لا يسمح بحساب المفاتيح العمومية التابعة من المفتاح العمومي المقابل المقابل. هذا يختلف عن الجيل العادي في أننا نستخدم فيه سلسلة من النقطة المتسلسلة كمفتاح عمومي رئيسي كرسالة إلى وظيفة HMAC ، وفي الاشتقاق المقسى ، نستخدم تسلسل المفتاح الخاص الرئيسي.

بالإضافة إلى ذلك ، يختلف حساب المؤشر. يتم إجراء تسلسل مباشر للمؤشر في التوليد العادي إلى 32 بت ، وفي الاشتقاق المقوى يتم تحويله قليلاً: يتم إضافة قيمة ثابتة إليه 231يقوم بتعيين البتة الأكثر أهمية إلى 1 (يصبح من السهل التمييز بين أنواع الاشتقاق). وفقًا لذلك ، فإن مساحة متغيرات المفاتيح المحتملة هي نفسها لكل من التوليد العادي والاشتقاق المقوى ، وهي تساوي 231.

الصورة

وبالتالي ، مع وجود مفتاح عمومي أصل واشتقاق مقسى ، لا يمكن حساب المفاتيح العمومية الفرعية. إذا تلقى المهاجم مفتاح الوالدين العام ، فلن يتمكن من حساب المفاتيح الفرعية. لذلك ، لن تتمكن من حساب العناوين وعلاقتها بمفتاح الوالد المتلقي. في حالة الاشتقاق العادي ، أي ، في المعتاد ، يمكن استخدام هذه الوظيفة وتتبع علاقة العناوين فيما بينها.

مسارات التوليد


لنتحدث عن الطرق التي يمكن من خلالها إنشاء المفاتيح.

الصورة

في كل مستوى من مستويات التسلسل الهرمي ، يوجد فهرس محدد يحدد جوانب إنشاء المفاتيح. يمكن كتابة المسار من المفتاح الرئيسي إلى المفتاح النهائي من خلال الخطوط المائلة في الفهارس. إذا كنا نتحدث عن مفتاح خاص ، فإن التسجيل يبدأ بمفتاح "m" صغير ، وإذا كنا نتحدث عن إنشاء مفتاح عام ، ثم بمفتاح "M" كبير. إذا تمت الإشارة إلى الفهرس بفاصلة عليا ، فيجب أن نفهم أننا نتحدث عن الاشتقاق المتصلب ، بدون الفاصلة العليا - الاشتقاق العادي.

ضع في اعتبارك أحد مسارات توليد المفاتيح الشائعة المستخدمة في BIP32 ، حيث تم تحديد المفاتيح الهرمية.

الصورة

ويستخدم مسارًا حيث يكون المفتاح الرئيسي هو المستوى صفر للتسلسل الهرمي. فيما يلي فهارس الحسابات التي تعين المستخدم نفسه ، تليها سلاسل حيث يمكن أن تكون هناك سلاسل من العناوين التي يتم نشرها في الخارج لقبول المدفوعات الواردة ، ومع الفهرس 1 ، سيتم إنشاء هذه السلاسل التي يرسل المستخدم إليها المدفوعات (في كثير من الأحيان كل هذا استسلام). سيتم استخدام الفهرس النهائي لتوليد المفاتيح التي سيتم من خلالها حساب العناوين.

من أجل حساب المفتاح الأول مع مؤشر 0 وفقًا لمعيار BIP32 ، سيكون لدينا m ، 0 مع توليد سلسلة مقواة - 0 ، مؤشر - 0 (م / 0 '/ 0/0). لذا نحصل على المسار لأول مفتاح تم إنشاؤه بتسلسل هرمي.

هناك اقتراح لتحسين Bitcoin ، يطلق عليه BIP43 ، والذي يتضمن الكتابة إلى المستوى الأول من التسلسل الهرمي رقم التحسين ، والذي يقدم مسار تفرخ جديد (m / bip_number '/ *).

الصورة

وهكذا ، ظهر BIP44 ، الذي استخدم ميزة الجملة السابقة ، أي أن المؤشر 44 مكتوب للمستوى الهرمي الأول ، واقترح التحسينات التالية: في مؤشر المستوى الهرمي الثاني ، سجل قيمة معينة تتوافق مع نوع العملة التي نستخدمها لهذه المحفظة. الآن ، يمكن نشر مفاتيح العملات المختلفة واستخدامها في محفظة واحدة.

الصورة

بالنسبة إلى Bitcoin ، سيبدو المسار مثل "m / 44" / 0 "/ 0" / 0/0 "، بالنسبة إلى Bitcoin testnet -" m / 44 '/ 1 "/ 0" / 0/0 "، بالنسبة إلى Litecoin -" m / 44 '/ 2' / 0 '/ 0/0 "، للشرطة -" m / 44' / 5 "/ 0" / 0/0 ". ومن المثير للاهتمام ، أن Ethereum يستخدم نفس المنحنى البيضاوي لحساب المفاتيح والتوقيع الرقمي تمامًا ، ولأن محفظته سيبدو المسار مثل "m / 44" / 60 "/ 0" / 0/0 ".

هناك تحسن آخر - BIP45. يهدف التحسين إلى تحديد قواعد توليد المفاتيح في حالة استخدامها في المحافظ متعددة التوقيع وتشكيل العناوين باستخدام BIP16 ، أي P2SH. يتضمن الجملة BIP43 ويشير إلى الفهرس 45 في المستوى الأول من التسلسل الهرمي ؛ في المستوى الثاني من التسلسل الهرمي ، فإنه يتطلب إشارة إلى الموقّع (cosigner).

الصورة

على سبيل المثال ، هناك قاعدة متعددة التوقيع 3 من 5. لذلك ، هناك 5 موقعين ، ولكن لإنفاق العملات المعدنية ، تحتاج إلى 3 توقيعات على الأقل. وبالتالي ، سيكون لكل من الموقعين محفظة عالية الدقة مع بذرتها الرئيسية الخاصة بها ، وسيشير إلى الرقم التسلسلي في مسارها. يمكن حسابه كمؤشر عند فرز المفاتيح التي تم إنشاؤها في المستوى الأول من التسلسل الهرمي لكل مستخدم. لنفترض ، في المستوى الأول ، أن كل مستخدم قام بإنشاء مفاتيح ، وتبادلها مع بعضها البعض ، وفرز واكتشف من لديه أي مؤشر للمستوى الثاني من التسلسل الهرمي. يعد ذلك ضروريًا للتخلص من الحاجة إلى التفاعل بهذه الطريقة ، وإنشاء العناوين بشكل صحيح ومعرفة الرقم التسلسلي الخاص بك بشكل صحيح.

بمعنى ، يمكنك استبدال المفتاح العام الموسع مرة واحدة حتى تتمكن بشكل مستقل ، وبصورة مستقلة عن الأعضاء الآخرين في المجموعة ، من تكوين عناوين متعددة التواقيع وقبول المدفوعات عليها.

الأسئلة


دعنا ننتقل إلى الأسئلة المتداولة.

- كيف تختلف البذور الرئيسية باختلاف العملات؟

Seed عبارة عن رقم يتم إنشاؤه عشوائيًا ، أو بعض تسلسل البتات ، أو عبارة جملة مُنشأة ، على سبيل المثال ، وفقًا لـ BIP39 ، والتي تُستخدم لتوليد المفاتيح. يمكن استخدامه لعملة واحدة وأي عملة أخرى - ليس من الضروري استخدام عبارات ذاكرة مختلفة لعملات مختلفة. علاوة على ذلك ، هناك BIP44 ، الذي يحدد قواعد توليد المفاتيح لعملات مختلفة من نفس العبارة المساعدة. لن تتقاطع هذه المفاتيح الخاصة مع بعضها البعض ، ولكن سيتم استخدامها لعناوين مختلفة للعملات المختلفة.

- قاموس من BIP39 ، حيث يتم توحيد 2048 كلمة لعبارة مختزلة؟ هل يمكنني استخدامه في جميع المحافظ والتطبيقات؟

والحقيقة هي أن هذا المعيار موصوف لـ BIP39. بالنسبة لـ BIP39 أن هناك قواميس: الإنجليزية ، واثنين من اليابانية ، والصينية ، والإيطالية ، والروسية ، والأوكرانية ، وما إلى ذلك. إذا ادعى بعض التطبيقات أنه يستخدم BIP39 ويجعل من الممكن استيراد وتصدير عبارة مفيدة ، فهذا يعني أنه يستخدم أيضًا مجموعة من الكلمات نفس الشيء. ومع ذلك ، هناك محافظ لا تستخدم BIP39 ، ولكن تعديلها الخاص. تحتاج إلى إلقاء نظرة على وصف المحفظة واستخدام إما تطوير قياسي أو تطويرك الخاص أو تطوير الخدمة التي تقدمها المحفظة.

- في عمليات التبادل والمخازن المركزية مثل Coinbase ، هل يتم إنشاء مفاتيح المحفظة لجميع المستخدمين من نفس العبارة الشائعة للجميع أم لا؟

من الصعب القول لأنها لا تفتح هيكلها الداخلي ، ولكن تلك الخدمات الجديدة التي تظهر يمكنها إما إنشاء مفاتيح بشكل منفصل ، أو استخدام معيار BIP32 ، أو استخدام نسخته المعدلة. يبدو أن تلك الخدمات التي كانت موجودة قبل معايير توليد المفاتيح الهرمية ، على الأرجح ، تستمر في توليد مفاتيح خاصة منفصلة فقط. ربما هذه هي الطريقة التي يسهل إدارتها إذا كان هناك دوران كبير لجميع المفاتيح.

"هل المفتاح نقطة على المنحنى البيضاوي ، أي رقمين كبيرين جدًا X و Y؟"

المفتاح العام - نعم ، هذه نقطة على المنحنى البيضاوي ، والمفتاح الخاص هو رقم طبيعي يوضح عدد المرات التي تحتاج فيها لإضافة نقطة الأساس مع نفسك. يتكون المفتاح العام نفسه من قيمتين - هذه هي إحداثيات X و Y ، كل منها بحجم 256 بت.

- ما هو "الإرسال إلى نقطة" وتسلسل النقطة والفهرس؟

يعني الاختزال إلى نقطة أن هناك رقمًا طبيعيًا نعتبره مفتاحًا خاصًا. نضيف نقطة الأساس مع أنفسنا مرات عديدة ، أي في مجموعة النقاط على المنحنى البيضاوي ، يتم تحديد عملية الإضافة فقط ، ثم يمكننا ضرب النقطة برقم طبيعي. تسلسل نقطة يعني التسجيل بطريقة معينة إحداثيات اثنين. قد يكون هذا السجل مضغوطًا ، ولكنه ليس ضروريًا. مضغوطة بمعنى أن أحد الإحداثيات ، أي Y يتم تحويله إلى علامة ، ثم يتم استبدال البيانات في المعادلة وتنظر في مكان النقطة: أعلى أو أسفل. في حالة تسلسل الفهرس ، يجب أن تفهم أنه يمكن كتابة رقم عادي ، والذي يعتمد على الحجم ، بالبايت أو بت. كلما كبر الرقم ، ستكون هناك حاجة إلى المزيد من البيانات. في حالة الحسابات التي فحصناها ،مطلوب عدد من طول معين. تحتاج إلى إجراء تسلسل لها إلى طول محدد - 4 بايت. ونتيجة لذلك ، يشير هذا إلى تحويل الفهرس إلى رقم 4 بايت. إذا بقيت القيم العليا فارغة هناك ، فستكون صفرًا.

- من توصل إلى هذه الحسابات لوظائف اشتقاق المحافظ عالية الدقة؟ لماذا هذه الصيغ حيث توجد مبررات وحيث يمكنك قراءة المزيد عن هذا؟

يمكنك القراءة بشكل أكثر دقة في BIP32 ، إذا كنت مهتمًا بعبارة مختزلة ، ثم في BIP39 ، إلخ. يمكنك فتح GitHub والعثور على مستخدم تحت لقب Bitcoin. لديه مستودع Bitcoin حيث يتم تخزين شفرة مصدر Bitcoin ، ولديه مستودع BIPs (المصدر الأساسي) ، حيث يتم تسجيل جميع الاقتراحات لتحسين Bitcoin.

توصلوا إلى فكرة إجراء الحسابات بهذه الطريقة ، لأنها مرتبطة بمجموعة من نقاط منحنى بيضاوي. عندما كنت ترغب في تحقيق مثل هذه الوظيفة التي تسمح لك بحساب فروع المفاتيح العامة والخاصة بشكل منفصل ، مع الحفاظ على مراسلاتها مع بعضها البعض ، كان هذا هو أسهل خيار تنفيذ. في الواقع ، استخدم المطورون أبسط خيار ، والذي يسمح لك بتحقيق خصائص مثيرة للاهتمام باستخدام التشفير الذي تم اختباره بمرور الوقت. مؤلفو التحسينات المقترحة كثيرة. مجتمع Bitcoin ، الذي يقدم المشاركون فيه نوعًا من التطوير للتحسينات والتحولات الرياضية ، كبير جدًا.

- الاشتقاق المقسى دائما في المستوى الثاني فقط من التسلسل الهرمي؟

كل هذا يتوقف على الوضع. في حالة إنشاء مفاتيح للتوقيع المتعدد ، فمن المنطقي القيام بالاشتقاق المتشدد فقط في المستوى الأول من التسلسل الهرمي. في BIP44 ، يتم تطبيق الاشتقاق المقسى على المستويات الثلاثة الأولى: في المستوى الأول هو رقم BIP نفسه ، وفي الثاني هو رقم الحساب حيث يكون مناسبًا ، وفي الثالث هو رقم العملة ، حيث يكون منطقيًا أيضًا. لنفترض أنه من غير المحتمل أن تعجبك إذا نشرت المفتاح العام ، ومن خلاله يمكن للأشخاص تتبع جميع عناوينك في Bitcoin. إذا كنت تستخدم حسابًا لتلقي مدفوعات من خدمات معينة ، فيمكنك عندئذٍ الكشف عن هذا المفتاح ولا تحتاج إلى اشتقاق أكثر صلابة هنا.

- أين يمكن تطبيق توليد المفاتيح الهرمي؟

يمكنك تطبيقه عند العمل مع البورصة بحيث يدفعك التبادل دائمًا إلى عناوين مختلفة. على الرغم من أنه من الأفضل في هذه الحالة تنظيم كل هذا يدويًا. هذا هو الأكثر صلة بالمحافظ الرقمية اليومية ، لأنها هنا عملية بسيطة للغاية لإنشاء نسخة احتياطية من المفاتيح الخاصة واستعادة المحفظة. يتم أيضًا دعم إنشاء المفاتيح لعملات مختلفة ، ويتم استخدام المعيار نفسه بالفعل في تطبيقات مختلفة للمحافظ الرقمية. المفاتيح بين هذه المحافظ ملائمة للنقل باستخدام نفس العبارة المساعدة.

يتم تناول هذا الموضوع في إحدى محاضرات دورة blockchain عبر الإنترنت " الجيل الرئيسي الهرمي ".

Source: https://habr.com/ru/post/ar413627/


All Articles