7.1.2. SerializePrivateKey and DeserializePrivateKey (Sérialisation et désérialisation de clés privées)
7.1.2. SerializePrivateKey and DeserializePrivateKey (Sérialisation et désérialisation de clés privées)
Selon [SECG], les clés privées P-256, P-384 et P-521 sont des éléments de champ dans le champ scalaire de la courbe utilisée. Pour cette section et pour la section 7.1.3, on suppose que les implémenteurs d'ECDH sur ces courbes utilisent une représentation entière des clés privées qui est compatible avec la fonction OS2IP().
Pour P-256, P-384 et P-521, la fonction SerializePrivateKey() du KEM effectue la conversion Élément-de-Champ-vers-Chaîne-d'Octets selon [SECG]. Si la clé privée est un entier en dehors de la plage [0, order-1], où order est l'ordre de la courbe utilisée, la clé privée DOIT être réduite à son représentant dans [0, order-1] avant d'être sérialisée. DeserializePrivateKey() effectue la conversion Chaîne-d'Octets-vers-Élément-de-Champ selon [SECG].
Pour X25519 et X448, les clés privées sont identiques à leur représentation en chaîne d'octets, donc peu de traitement doit être effectué. La fonction SerializePrivateKey() DOIT clamper sa sortie et la fonction DeserializePrivateKey() DOIT clamper son entrée, où clamping fait référence aux opérations bit à bit effectuées sur k dans les fonctions decodeScalar25519() et decodeScalar448() définies dans la section 5 de [RFC7748].
Pour détecter les clés invalides tôt, les implémenteurs de DHKEMs DEVRAIENT vérifier que les clés privées désérialisées ne sont pas équivalentes à 0 (mod order), où order est l'ordre du groupe DH. Notez que cette propriété est trivialement vraie pour les groupes X25519 et X448, car les valeurs clampées ne peuvent jamais être 0 (mod order).