489 / 736PBKDF2

PBKDF2

اشتقاق البذرة في ⁦BIP39⁩

عند استعادة المحفظة، ينبغي أن تقود كلمات النسخة الاحتياطية نفسها وعبارة ⁦passphrase⁩ نفسها إلى المفاتيح نفسها. في ⁦BIP39⁩، يتولى ⁦PBKDF2⁩ جزءًا من هذا المسار: يحسب ⁦seed⁩، وهو الأساس السري للاشتقاقات اللاحقة. يكرر الحساب، لكنه لا يبتكر سرًا جديدًا.

الاسم الكامل لـ ⁦PBKDF2⁩ هو ⁦Password-Based Key Derivation Function 2⁩. يحول هذا الأسلوب مدخلًا يؤدي دور كلمة المرور ومعاملًا إضافيًا اسمه ⁦salt⁩ إلى مفتاح مشتق. وتعتمد النتيجة أيضًا على عدد التكرارات ودالة الحساب والطول المطلوب. المدخلات والإعدادات المتطابقة تعطي نتيجة متطابقة. يستخدم ⁦BIP39⁩ الصيغة المحددة ⁦PBKDF2-HMAC-SHA512⁩؛ وقد تختار التطبيقات الأخرى معاملات مختلفة.

تشكل كلمات الاستعادة المدخل المسمى ⁦password⁩. أما ⁦salt⁩ فهو المدخل الثاني: النص الحرفي "⁦mnemonic⁩" تتبعه مباشرة ⁦passphrase⁩، أي كلمة مرور إضافية اختيارية. لا يوضع بينهما فاصل، ولا تُضاف كلمات النسخة الاحتياطية مرة أخرى. وعند غياب ⁦passphrase⁩، تظل قيمة ⁦salt⁩ هي "⁦mnemonic⁩"، وليست نصًا فارغًا. يخضع المدخلان لمعالجة ⁦NFKD⁩ التي توحد بعض تمثيلات المحارف، ثم لترميز ⁦UTF-8⁩. يستخدم ⁦BIP39⁩ الدالة ⁦HMAC-SHA512⁩ مع ⁦2048⁩ تكرارًا ومخرج بطول ⁦64⁩ بايت، أي ⁦512⁩ بت. هذا المخرج هو ⁦seed⁩؛ وليس ⁦salt⁩ نسخة احتياطية أخرى عليك إنشاؤها. [1]

يستخدم الحساب داخليًا ⁦HMAC⁩، وهو أسلوب يجمع بين مفتاح ورسالة. ويظل مدخل كلمة المرور نفسه هو المفتاح في كل جولة. تعتمد النتيجة الوسيطة الأولى على ⁦salt⁩ ورقم كتلة المخرج، ثم تعالج الجولات التالية النتيجة الوسيطة السابقة. تُجمع النتائج بعملية ⁦XOR⁩ التي تعمل على البتات المتناظرة. تعيد ⁦HMAC-SHA512⁩ مقدار ⁦64⁩ بايت، ولذلك تكفي كتلة واحدة في ⁦BIP39⁩. أما تطبيق ⁦SHA-512⁩ وحدها على النص ⁦2048⁩ مرة فهو حساب مختلف ينتج قيمة مختلفة. [2] [1]

تخيل أنك تستعيد أموالك في محفظة أخرى. للحصول على ⁦seed⁩ نفسه، تحتاج المحفظة إلى البيانات نفسها بعد توحيد تمثيلها، وإلى الإعدادات نفسها. زيادة عدد التكرارات المحدد، وهو ⁦2048⁩، لا تحسن الاستعادة؛ بل تخرج عن ⁦BIP39⁩ وتعطي نتيجة أخرى. كذلك فإن ترجمة الكلمات إلى قائمة بلغة أخرى ليست تغييرًا محايدًا. الاستعادة تحتاج إلى التطابق، لا إلى تعديل شخصي للخوارزمية. [1]

تكرار الحساب يزيد كلفة كل محاولة، لكنه لا يولد عشوائية مستقلة جديدة. إذا عرف المهاجم كلماتك وكانت لديه معلومات تمكنه من التعرف على المحفظة الصحيحة، أمكنه تجربة عبارات ⁦passphrase⁩ ضعيفة دون اتصال، على حاسوبه. لذلك لا يعني ⁦seed⁩ بطول ⁦512⁩ بت وجود ⁦512⁩ بت من عدم قابلية التنبؤ. كما أن العدد ⁦2048⁩ ليس توصية عامة للأنظمة الجديدة؛ فهو هنا جزء من معيار محدد للاستعادة. [2] [1]

يساعد المجموع الاختباري في ⁦BIP39⁩ على اكتشاف الكلمات المنسوخة خطأ. أما ⁦PBKDF2⁩ فيجيب عن سؤال آخر: كيف نحسب ⁦seed⁩ من المدخلات المعطاة؟ هذا الحساب وحده لا يؤكد أن ⁦passphrase⁩ تخص محفظتك الأصلية. ويمكن بعد ذلك أن يعالج ⁦BIP32⁩ قيمة ⁦seed⁩ لاشتقاق عائلة كاملة من المفاتيح. التحقق من التسجيل، وتحويله إلى ⁦seed⁩، وإنشاء المفاتيح خطوات مترابطة، لكنها لا تحل إحداها محل الأخرى. [1]

يمكن للمطور مقارنة النتيجة بمتجهات اختبار عامة، أي مدخلات معروفة ومخرجات متوقعة. ينشر ⁦BIP39⁩ البيانات العشوائية الأصلية والكلمات وقيمة ⁦seed⁩ كاملة لعبارة الاختبار ⁦TREZOR⁩. يجب أن يعيد التنفيذ الصحيح إنتاج النتيجة مع تطبيق قواعد ⁦NFKD⁩. لا حاجة إلى نسختك الاحتياطية الحقيقية لهذا الاختبار. ولا تستخدم الأمثلة العامة لحفظ المال أبدًا، فهي معروفة للجميع. كذلك لا يثبت نجاح اختبار الحساب أمن التطبيق بأكمله. [1]

للحصول على صورة أوضح، اقرأ هذا المدخل مع BIP 39, BIP39 passphrase, Seed Generation, HD Wallet. تشير إلى هذا المدخل أيضًا BIP39 passphrase.

DOC · 001BIP39 — Mnemonic generation and seed conversionمواصفة DOC · 002RFC8018 — PBKDF2 constructionمواصفة
تمت المراجعة: المصادر أولًا · ليست نصيحة استثمارية