Gli standard ML-KEM e ML-DSA ti permettono entrambi di memorizzare la chiave privata in due modi. C'è un piccolo seed, 64 byte per ML-KEM e 32 byte per ML-DSA, e c'è una forma espansa più grande che viene derivata da quel seed attraverso una o più funzioni hash. I due sono matematicamente equivalenti e puoi passare dal seed alla forma espansa ogni volta che vuoi, ma non puoi tornare indietro. Se devi scegliere cosa memorizzare come chiave privata, memorizza il seed. È il segreto reale da cui tutto il resto viene derivato. Puoi espanderlo nella chiave completa ogni volta che ne hai bisogno, e ci vogliono circa 40 microsecondi, quindi non c'è davvero motivo di memorizzare la versione espansa su disco. Se hai bisogno di essa in memoria per operazioni ripetute, espandi una sola volta al momento del caricamento. Il seed è solo byte casuali, quindi qualsiasi valore è una chiave valida. La forma espansa ha una struttura; coefficienti che devono essere nel range, una chiave pubblica incorporata, un hash che deve corrispondere, e lo standard richiede di controllare tutto ciò all'importazione. Questo è molto più soggetto a errori rispetto a un seed. C'è anche un problema di serializzazione in corso all'IETF dove l'attuale formato di compromesso consente sia al seed che alla chiave espansa di trovarsi nella stessa struttura dati. Ciò significa che due implementazioni conformi possono leggere campi diversi dalla stessa chiave e finire con materiali di chiave diversi, il che non è ciò che desideri da un formato di chiave. TL;DR: memorizza il seed ed espandilo all'uso secondo necessità. Scrittura completa qui sotto.