إنتقل إلى المحتوى الرئيسي

اشتقاق مفاتيح ML-DSA-87

الحالة: الاشتقاق القياسي مستقر. أما الاشتقاق الهرمي فهو مسودة: قد تتغير التنفيذات قبل أن يصبح نهائيًا، ويجب تسجيل المفاتيح المشتقة به على السلسلة كأي مفتاح آخر. المصدر: spec/hd-derivation-draft.md.

الاشتقاق القياسي (مستقر)​

تشتق محافظ QoreChain وQoreChain SDK مفتاح ML-DSA-87 واحدًا لكل حساب من العبارة الاسترداديّة BIP-39 وعنوان الحساب:

seed = SHAKE256( UTF-8( "qorechain:pqc:v1|" + bech32_address + "|" + mnemonic ), 32 bytes )
(pk, sk) = ML-DSA-87.KeyGen_internal(seed)
  • bech32_address هو صيغة qor1 للحساب (يُحوَّل عنوان 0x أولًا إلى البايتات العشرين نفسها).
  • mnemonic هي العبارة بالصيغة القياسية: كلمات إنجليزية بأحرف صغيرة تفصل بينها مسافات مفردة، دون أي شيء قبلها أو بعدها. يجب أن ترفض التنفيذات أي تهجئة أخرى بدلًا من تطبيعها بصمت، لأن السلسلة المختلفة تعطي مفتاحًا مختلفًا.
  • المفتاح مرتبط بالعنوان: العبارة الاسترداديّة نفسها تعطي مفتاحًا مختلفًا لكل حساب.

تُوقّع المحفظة التي تستخدم هذا الاشتقاق بالمفتاح المسجَّل أصلًا للحسابات التي أنشأتها محافظ QoreChain.

الاشتقاق الهرمي (مسودة)​

للمحافظ التي تحتاج إلى عدة مفاتيح ما بعد كمّية من بذرة واحدة دون ربطها بعنوان. لا يوجد في ML-DSA اشتقاق عام للمفاتيح الفرعية، لذا فكل مقطع من المسار مقوّى.

البناء هو SLIP-0010 مع سلسلة مفتاح رئيسي خاصة به:

I = HMAC-SHA512(key = "qorechain-mldsa87-seed", data = seed)
k = I[0..32], c = I[32..64]
for each index i (all >= 2^31):
I = HMAC-SHA512(key = c, data = 0x00 || k || ser32(i))
k = I[0..32], c = I[32..64]
(pk, sk) = ML-DSA-87.KeyGen_internal(k)
  • seed هي بذرة BIP-39 ذات 64 بايتًا (العبارة الاسترداديّة مع عبارة المرور الاختيارية)، أو أي بذرة بطول 16 إلى 64 بايتًا.
  • المسار الافتراضي هو m/44'/118'/{account}'/0'/0'.
  • يُرفض أي مسار فيه مقطع غير مقوّى.

نقاط مفتوحة قبل أن يصبح هذا نهائيًا: نوع العملة المستخدم في المسار، والتفاعل مع تدوير المفاتيح على السلسلة (MsgRotatePQCKey)، والمواءمة مع منظومات أخرى تشتق مفاتيح ما بعد كمّية من بذرة.

نواقل الاختبار​

vectors/qoresign-v1.json، الحقول canonical وhd وhdRejected. راجع نواقل الاختبار.