Standardele ML-KEM și ML-DSA permit ambele să stochezi cheia privată în două moduri. Există o mică seed, 64 de bytes pentru ML-KEM și 32 bytes pentru ML-DSA, iar o formă extinsă mai mare este derivată din acea seed printr-o funcție hash (hash). Cele două sunt matematic echivalente și poți trece de la sămânță la forma extinsă oricând dorești, dar nu poți da înapoi. Dacă alegi între ce să stochezi ca cheie privată, stochează sămânța. Este secretul real din care derivă tot restul. O poți extinde în cheia completă oricând ai nevoie, iar durează cam 40 de microsecunde, deci nu există un motiv real să stochezi versiunea extinsă pe disc. Dacă ai nevoie de el în memorie pentru operații repetate, doar extinde o dată la încărcare. Seed-ul este format doar din octeți aleatori, deci orice valoare este o cheie validă. Forma extinsă are o structură; coeficienți care trebuie să fie în interval, o cheie publică încorporată, un hash care trebuie să se potrivească, iar standardul cere să verifici toate acestea la import. Asta oferă mult mai multă prezență pentru ca lucrurile să meargă prost decât nu ai cu o sămânță. Există, de asemenea, o problemă continuă de serializare la IETF, unde formatul actual de compromis permite atât seed-ul, cât și cheia extinsă să stea în aceeași structură de date. Asta înseamnă că două implementări conforme pot citi câmpuri diferite din aceeași cheie și pot ajunge la materiale diferite ale cheii, ceea ce nu este ceva ce îți dorești de la un format de cheie. Pe scurt; Pe scurt: păstrează sămânța și extinde-o după utilizare, după nevoie. Articolul complet mai jos.