BLOB con chiave pubblica DSS versione 3
I BLOB di chiave pubblica DSS versione 3 di tipo PUBLICKEYBLOB vengono usati per esportare e importare informazioni su una chiave pubblica DH. Hanno il formato seguente:
BLOBHEADER blobheader;
// As explained under "Data Structures"
DSSPUBKEY_VER3 dsspubkeyver3;
BYTE p[dsspubkeyver3.bitlenP/8];
// Where P is the prime modulus
BYTE q[dsspubkeyver3.bitlenQ/8];
// Where Q is a large factor of P-1
BYTE g[dsspubkeyver3.bitlenP/8];
// Where G is the generator parameter
BYTE j[dsspubkeyver3.bitlenJ/8];
// Where J is (P-1)/Q
BYTE y[dsspubkeyver3.bitlenP/8];
// Where Y is (G^X) mod P
Questo formato BLOB viene esportato quando il flag CRYPT_BLOB_VER3 viene usato con CryptExportKey. Poiché la versione è nel BLOB, non è necessario specificare un flag quando si usa questo BLOB con CryptImportKey.
Questo formato BLOB viene inoltre usato con la funzione CryptSetKeyParam quando il valore dwParam KP_PUB_PARAMS viene usato per impostare i parametri chiave in una chiave DSS. Questa operazione viene eseguita quando è stato usato il flag di CRYPT_PREGEN per generare la chiave. Se usato in questa situazione, il valore y viene ignorato e pertanto non deve essere incluso nel BLOB.
La tabella seguente descrive ogni componente del BLOB della chiave.
Campo | Descrizione |
---|---|
Blobheader | Struttura BLOBHEADER . Il membro bType deve avere un valore PUBLICKEYBLOB. |
Dsspubkeyver3 | Struttura DSSPUBKEY_VER3 . Il membro magic deve essere impostato su "DSS3" (0x33535344) per le chiavi pubbliche. Si noti che il valore esadecimale è solo una codifica ASCII di "DSS3". |
P | Il valore P si trova direttamente dopo la struttura DSSPUBKEY_VER3 e deve essere sempre la lunghezza, in byte, del campo bitlenP DSSPUBKEY_VER3 (lunghezza bit di P) diviso per otto (formato little-endian ). |
Q | Il valore Q si trova direttamente dopo il valore P e deve essere sempre la lunghezza in byte del membro bitlenQDSSPUBKEY_VER3 diviso per otto (formato little-endian). |
G | Il valore G si trova direttamente dopo il valore Q e deve essere sempre la lunghezza, in byte, del membro bitlenPDSSPUBKEY_VER3 (lunghezza bit di P) diviso per otto. Se la lunghezza dei dati è uno o più byte più brevi di P diviso per 8, i dati devono essere riempiti con i byte necessari (di valore zero) per rendere i dati la lunghezza desiderata (formato little-endian ). |
J | Il valore J si trova direttamente dopo il valore G e deve essere sempre la lunghezza in byte del membro bitlenJDSSPUBKEY_VER3 diviso per otto (formato little-endian). Se il valore bitlenQ è 0, il valore è assente dal BLOB. |
S | Il valore Y, (G^X) mod P, si trova direttamente dopo il valore J e deve essere sempre la lunghezza, in byte, del membro bitlenP (lunghezza bit di P) DSSPUBKEY_VER3 diviso per otto. Se la lunghezza dei dati risultanti dal calcolo del mod P (G^X) è uno o più byte più brevi di P diviso per 8, i dati devono essere riempiti con i byte necessari (di valore zero) per rendere i dati la lunghezza desiderata (formato little-endian ).
Nota: Quando questa struttura viene usata con CryptSetKeyParam con il valore dwParam KP_PUB_PARAMS, questo valore non viene incluso nel BLOB. |
Nota
I BLOB con chiave pubblica non sono crittografati, ma contengono chiavi pubbliche in formato testo non crittografato.