Condividi tramite


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.