اليوم سوف أتظاهر معاملة إنشاء مفتاح مشفرة 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 هي وظيفة لتجزئة مدخلات البايت إلى هاش. ضمن أشياء أخرى، هي الخوارزمية 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