BLOB a chiave pubblica di Diffie-Hellman versione 3
I BLOB a chiave pubblica Diffie-Hellman versione 3 (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 viene usato il flag CRYPT_BLOB_VER3 con CryptExportKey. Poiché la versione è nel BLOB, non è necessario specificare un flag quando si usa questo BLOB con CryptImportKey.
Inoltre, questo formato BLOB viene 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 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 DHPUBKEY_VER3 bitlenP (lunghezza bit di P) diviso per otto (formato little-endian). |
T | Il valore Q si trova direttamente dopo il valore P e deve essere sempre la lunghezza in byte del campo bitlenQ DHPUBKEY_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 DHPUBKEY_VER3 bitlenP (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 bitlenJ DHPUBKEY_VER3 diviso per otto (formato little-endian). Se il valore bitlenQ è 0, il valore è assente dal BLOB. |
Y | Il valore Y, (G^X) mod P, si trova direttamente dopo il valore J e deve essere sempre la lunghezza in byte del campo DHPUBKEY_VER3 bitlenP (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.