7.1.2. SerializePrivateKey and DeserializePrivateKey (Serializzazione e deserializzazione di chiavi private)
7.1.2. SerializePrivateKey and DeserializePrivateKey (Serializzazione e deserializzazione di chiavi private)
Secondo [SECG], le chiavi private P-256, P-384 e P-521 sono elementi di campo nel campo scalare della curva utilizzata. Per questa sezione e per la sezione 7.1.3, si presume che gli implementatori di ECDH su queste curve utilizzino una rappresentazione intera delle chiavi private che sia compatibile con la funzione OS2IP().
Per P-256, P-384 e P-521, la funzione SerializePrivateKey() del KEM esegue la conversione da Elemento-di-Campo a Stringa-di-Ottetti secondo [SECG]. Se la chiave privata è un intero al di fuori dell'intervallo [0, order-1], dove order è l'ordine della curva utilizzata, la chiave privata DEVE essere ridotta al suo rappresentante in [0, order-1] prima di essere serializzata. DeserializePrivateKey() esegue la conversione da Stringa-di-Ottetti a Elemento-di-Campo secondo [SECG].
Per X25519 e X448, le chiavi private sono identiche alla loro rappresentazione in stringa di byte, quindi è necessaria poca elaborazione. La funzione SerializePrivateKey() DEVE clampare il suo output e la funzione DeserializePrivateKey() DEVE clampare il suo input, dove clamping si riferisce alle operazioni bit a bit eseguite su k nelle funzioni decodeScalar25519() e decodeScalar448() definite nella sezione 5 di [RFC7748].
Per rilevare chiavi non valide in anticipo, gli implementatori di DHKEM DOVREBBERO verificare che le chiavi private deserializzate non siano equivalenti a 0 (mod order), dove order è l'ordine del gruppo DH. Si noti che questa proprietà è banalmente vera per i gruppi X25519 e X448, poiché i valori clampati non possono mai essere 0 (mod order).