Стандарты ML-KEM и ML-DSA позволяют хранить закрытый ключ двумя способами. Существует небольшой семя, 64 байта для ML-KEM и 32 байта для ML-DSA, а также более крупная расширенная форма, которая выводится из этого семени с помощью хеш-функции(ий). Оба варианта математически эквивалентны, и вы можете перейти от семени к расширенной форме в любое время, но обратно вернуться нельзя. Если вы выбираете, что хранить в качестве закрытого ключа, храните семя. Это фактическая тайна, от которой выводится все остальное. Вы можете расширить его до полного ключа, когда вам это нужно, и это занимает около 40 микросекунд, так что нет реальной причины хранить расширенную версию на диске. Если вам нужно это в памяти для повторяющихся операций, просто расширьте один раз во время загрузки. Семя — это просто случайные байты, поэтому любое значение является допустимым ключом. Расширенная форма имеет свою структуру; коэффициенты, которые должны быть в диапазоне, встроенный открытый ключ, хеш, который должен совпадать, и стандарт требует, чтобы вы проверяли все это при импорте. Это гораздо больше возможностей для ошибок, которых у вас нет с семенем. Существует также текущая проблема сериализации в IETF, где текущий компромиссный формат позволяет как семени, так и расширенному ключу находиться в одной и той же структуре данных. Это означает, что две соответствующие реализации могут читать разные поля из одного и того же ключа и в итоге получить разные ключевые материалы, что не является тем, что вы хотите от формата ключа. Кратко: храните семя и расширяйте его по мере необходимости.