Bitcoin Forum

Local => إستفسارات و أسئلة المبتدئين => Topic started by: NotATether on March 23, 2021, 10:54:28 AM



Title: كيفية تستعمل مفاتيح مشفرة (BIP38)
Post by: NotATether on March 23, 2021, 10:54:28 AM
اليوم سوف أتظاهر معاملة إنشاء مفتاح مشفرة BIP38 إما من مفتاح خاص موجود او من مفتاح خاص جديدا إنشاء خاصة ليكون باطن بالمفتاح المشفرة. و يجد التقنة تشفير BIP38 مستعملات في توزيع بيتكوينات مادية الذي لديهم المفتاح مطبوعة خلف ملصق قابل للنزع، و هذا مفتاح الخاص الذي يمكن حصول عليها بواسطة فك التشفير فعلا محمل كمية بيتكوين فيها، و من الممكن استردادها باستيرادها في محفظة و إرسال البيتكوين إلى عنوان ثاني.

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

العملية بدون ECmultiply

- استخرج عنوان كسلسلة بايت من اي مفتاح الخاص. اعمل (()SHA256(SHA256خد الأول 4 بايت يسمى تجزئة العنوان اي الملح.
- نادي وظيفة scrypt بالمعطيات password=الكملة المرور في UTF-8 مطبوع في Unicode NFC, salt=تجزئة العنوان، n=16384, p=8, r=8 و length=64.
- خذ النصف الأول من النتيجة يسمى نصف مستمد 1 و النصف الثاني اطلق عليها اسم نصف مستمد 2.
- اعمل تشفير بوظيفة AES بالمعطيات block=مفتاح الخاص[15-0] XOR نصف مستمد 1[15-0] و key=نصف مستمد 2 و يسمى النتيجة نصف مشفر 1. قم بتسفير وظيفة AES ثاني بمعطيات block=مفتاح الخاص[31-16] XOR نصف مستمد 1[31-16] و key=نصف مستمد 2 و يسمى النتيجة نصف مشفر 2.

ثم يكون المفتاح المشفرة BIP38 سلسلة: نصف مشفر 2 + نصف مفشر 1 + الملح + واحد بايت إعلام + 0x1 0x42.

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

و scrypt (https://en.wikipedia.org/wiki/Scrypt) هي وظيفة لتجزئة مدخلات البايت إلى هاش. ضمن أشياء أخرى، هي الخوارزمية PoW في العملة الرقمية لايتكوين (ولكن هذا خارج نطاق موضوعي).

العملية بECmultiply

العملية تشفير ECmultiply مكسور في مرحلتين: توليد الكود وسيط و استعمالها لإنشاء المفتاح.

و يدعم هدا طريق زيادة ارقام دفعة و تسلسل في المفتاح القشر BIP38 و لكن بسبب ايجاز لا أتكلم عنها.

الطريق لإنشاء الكود الوسيط هو التالي:

-  ولد سلسلة 8 بايت عشوائي يسمى الملح.
- نادي وظيفة scrypt بالمعطيات password=الكملة المرور في UTF-8 مطبوع في Unicode NFC, salt=الملح، n=16384, p=8, r=8 و length=32. اطلق عليها اسم عامل بادية.
- اعمل (()SHA256(SHA256 على العامل بادية متسلسلة بالملح يسمها عامل مرور.
- قم بتضاعف النقطة G بالعامل مرور، يسمى نقطة مرور (هذا هو عملية ECmultiply).
- يوضع الملح والنقطة المرور في الكود الوسيط.

طريقة توليد المفتاح المشفرة BIP38 من الكود الوسيط:

- استخرج النقطة المرور والملح من الكود الوسيط.
- ولد سلسلة 24 بايت عشوائي يسمى عامل ا. اعمل (()SHA256(SHA256 على عامل ا يسمى عامل ب.
قم بتضاعف نقطة مرور بعامل ب.
- ثم نستخدم النقطة النتيجة مفتاح عامة و نستمد عنوان منها.

ثم ننشأ المرتبطة بمفتاح العامة:
- استخرج عنوان كسلسلة بايت من اي مفتاح الخاص. اعمل (()SHA256(SHA256خد الأول 4 بايت يسمى تجزئة العنوان.
- نادي وظيفة scrypt بالمعطيات password=الكملة المرور في UTF-8 مطبوع في Unicode NFC, salt=تجزئة العنوان، n=1024, p=1, r=1 و length=64.
- خذ النصف الأول من النتيجة يسمى نصف مستمد 1 و النصف الثاني اطلق عليها اسم نصف مستمد 2.
- اعمل تشفير بوظيفة AES بالمعطيات block=عامل ا[15-0] XOR نصف مستمد 1[15-0] و key=نصف مستمد 2 و يسمى النتيجة نصف مشفر 1. قم بتسفير وظيفة AES ثاني بمعطيات block=نصف مفشر 1 + عامل ا[31-16] XOR نصف مستمد 1[31-16] و key=نصف مستمد 2 و يسمى النتيجة نصف مشفر 2

ثم المفتاح المشفر يكون سلسلة من نصف المشفرة 2 + نصف مشفرة 1[8-0] + الملح + تجزئة العنوان + 0x1 0x43

و عملية فك التشفير يشبه عملية فك التشفير بدون ECmultiply و عملية تشفير بECmultiply بما اننا نحسب معظم المتغيرات مرة ثانية.

يمكنكم قراء BIP38 هنا: https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki