BLOB a chiave pubblica Diffie-Hellman versione 3

Diffie-Hellman versione 3 I BLOB a chiave pubblica (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"
DHPUBKEY_VER3 dhpubkeyver3;
BYTE p[dhpubkeyver3.bitlenP/8]; 
                 // Where P is the prime modulus
BYTE q[dhpubkeyver3.bitlenQ/8]; 
                 // Where Q is a large factor of P-1
BYTE g[dhpubkeyver3.bitlenP/8]; 
                 // Where G is the generator parameter
BYTE j[dhpubkeyver3.bitlenJ/8]; 
                 // Where J is (P-1)/Q
BYTE y[dhpubkeyver3.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 su una chiave DH. 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.
dhpubkeyver3 Struttura DHPUBKEY_VER3 . Il membro magic deve essere impostato su 0x33484400 per le chiavi pubbliche. Si noti che il valore esadecimale è solo una codifica ASCII di "DH3".
P Il valore P si trova direttamente dopo la struttura DHPUBKEY_VER3 e deve essere sempre la lunghezza, in byte, del campo bitlenPDHPUBKEY_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 campo bitlenQDHPUBKEY_VER3 diviso per otto (formato little-endian). Se il valore bitlenQ è 0, il valore è assente dal BLOB.
G Il valore G si trova direttamente dopo il valore Q e deve essere sempre la lunghezza, in byte, del campo bitlenPDHPUBKEY_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 campo bitlenJDHPUBKEY_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 campo bitlenPDHPUBKEY_VER3 (lunghezza bit di P) 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 ). Quando questa struttura viene usata con CryptSetKeyParam con il valore dwParam KP_PUB_PARAMS, questo valore non è incluso nel BLOB.

 

Nota

I BLOB con chiave pubblica non sono crittografati, ma contengono chiavi pubbliche in formato testo non crittografato.