Standardy ML-KEM i ML-DSA pozwalają na przechowywanie klucza prywatnego na dwa sposoby. Istnieje małe ziarno, 64 bajty dla ML-KEM i 32 bajty dla ML-DSA, oraz większa forma rozszerzona, która jest wyprowadzana z tego ziarna za pomocą funkcji haszującej. Obie są matematycznie równoważne i możesz przejść od ziarna do formy rozszerzonej w dowolnym momencie, ale nie możesz wrócić. Jeśli wybierasz, co przechować jako klucz prywatny, przechowuj ziarno. To jest rzeczywisty sekret, z którego wszystko inne jest wyprowadzane. Możesz je rozszerzyć do pełnego klucza, kiedy tylko potrzebujesz, a zajmuje to około 40 mikrosekund, więc nie ma realnego powodu, aby przechowywać rozszerzoną wersję na dysku. Jeśli potrzebujesz go w pamięci do powtarzających się operacji, po prostu rozszerz go raz w czasie ładowania. Ziarno to po prostu losowe bajty, więc każda wartość jest ważnym kluczem. Forma rozszerzona ma swoją strukturę; współczynniki, które muszą być w zakresie, osadzony klucz publiczny, hasz, który musi pasować, a standard wymaga, abyś sprawdził to wszystko przy imporcie. To znacznie więcej powierzchni, na której mogą wystąpić błędy, czego nie masz z ziarnem. Istnieje również trwający problem serializacji w IETF, gdzie obecny kompromisowy format pozwala zarówno na ziarno, jak i rozszerzony klucz, aby znajdowały się w tej samej strukturze danych. Oznacza to, że dwie zgodne implementacje mogą odczytywać różne pola z tego samego klucza i kończyć z różnym materiałem klucza, co nie jest tym, czego chcesz od formatu klucza. TL;DR: przechowuj ziarno i rozszerzaj je w razie potrzeby.