Derivarea cheilor ML-DSA-87
Stare: derivarea canonică este stabilă. Derivarea ierarhică este un draft:
implementările se pot schimba înainte de forma finală, iar cheile derivate cu ea
trebuie înregistrate pe lanț ca orice altă cheie. Sursa:
spec/hd-derivation-draft.md.
Derivarea canonică (stabilă)
Portofelele QoreChain și SDK-ul QoreChain derivă o cheie ML-DSA-87 per cont din mnemonica BIP-39 și adresa contului:
seed = SHAKE256( UTF-8( "qorechain:pqc:v1|" + bech32_address + "|" + mnemonic ), 32 bytes )
(pk, sk) = ML-DSA-87.KeyGen_internal(seed)
bech32_addresseste formaqor1a contului (o adresă0xeste mai întâi convertită în aceiași 20 de octeți).mnemoniceste fraza în formă canonică: cuvinte englezești cu litere mici, separate prin spații simple, fără nimic înainte sau după. Implementările trebuie să refuze orice altă scriere în loc să o normalizeze în tăcere, deoarece un șir diferit dă o cheie diferită.- Cheia este legată de adresă: aceeași mnemonică dă o cheie diferită pentru fiecare cont.
Un portofel care folosește această derivare semnează cu cheia deja înregistrată pentru conturile create de portofelele QoreChain.
Derivarea ierarhică (draft)
Pentru portofelele care au nevoie de mai multe chei post-cuantice dintr-un singur seed, fără a le lega de o adresă. ML-DSA nu are derivare publică de chei copil, deci fiecare segment al căii este hardened.
Construcția este SLIP-0010, cu propriul șir de master key:
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)
seedeste seed-ul BIP-39 de 64 de octeți (mnemonică plus parolă opțională) sau orice seed de 16 până la 64 de octeți.- Calea implicită este
m/44'/118'/{account}'/0'/0'. - O cale cu orice segment non-hardened este refuzată.
Puncte deschise înainte ca aceasta să devină finală: coin type-ul de folosit în
cale, interacțiunea cu rotirea cheilor pe lanț (MsgRotatePQCKey) și alinierea
cu alte ecosisteme care derivează chei post-cuantice dintr-un seed.
Vectori de test
vectors/qoresign-v1.json, câmpurile canonical, hd și hdRejected. Vezi
Vectori de test.