Delen via


Diffie-Hellman openbare-sleutel-BLObs van versie 3

Diffie-Hellman versie 3 openbare sleutel-BLObs (type PUBLICKEYBLOB) worden gebruikt om informatie over een openbare DH-sleutel te exporteren en te importeren. Ze hebben de volgende indeling:

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

Deze BLOB-indeling wordt geƫxporteerd wanneer de vlag CRYPT_BLOB_VER3 wordt gebruikt met CryptExportKey. Omdat de versie zich in de BLOB bevindt, hoeft u geen vlag op te geven bij het gebruik van deze BLOB- met CryptImportKey-.

Daarnaast wordt deze BLOB-indeling gebruikt met de functie CryptSetKeyParam wanneer de dwParam waarde KP_PUB_PARAMS wordt gebruikt om sleutelparameters in te stellen op een DH-sleutel. Dit gebeurt wanneer de vlag CRYPT_PREGEN is gebruikt om de sleutel te genereren. Wanneer deze situatie wordt gebruikt, wordt de y-waarde genegeerd en mag deze daarom niet worden opgenomen in de BLOB.

In de volgende tabel wordt elk onderdeel van de sleutel-BLOB beschreven.

Veld Beschrijving
blobheader Een BLOBHEADER structuur. Het lid bType moet de waarde PUBLICKEYBLOB hebben.
dhpubkeyver3 Een DHPUBKEY_VER3 structuur. Het magic lid moet worden ingesteld op 0x33484400 voor openbare sleutels. U ziet dat de hexadecimale waarde slechts een ASCII- codering van "DH3".
P De P-waarde bevindt zich direct na de DHPUBKEY_VER3 structuur en moet altijd de lengte zijn, in bytes, van het DHPUBKEY_VER3bitlenP-veld (bitlengte van P) gedeeld door acht (little-endian-indeling).
Q De Q-waarde bevindt zich direct na de P-waarde en moet altijd de lengte zijn in bytes van de DHPUBKEY_VER3bitlenQ veld gedeeld door acht (little-endian-indeling). Als de bitlenQ-waarde 0 is, is de waarde afwezig in de BLOB.
G De G-waarde bevindt zich direct na de Q-waarde en moet altijd de lengte, in bytes, zijn van het DHPUBKEY_VER3bitlenP- veld (bitlengte van P) gedeeld door acht. Als de lengte van de gegevens een of meer bytes korter is dan P gedeeld door 8, moeten de gegevens worden opgevuld met de benodigde bytes (nulwaarde) om de gegevens de gewenste lengte te geven (little-endian-indeling).
J De J-waarde bevindt zich direct na de G-waarde en moet altijd de lengte zijn in bytes van het DHPUBKEY_VER3bitlenJ-veld gedeeld door acht (little-endian-indeling). Als de bitlenQ-waarde 0 is, is de waarde afwezig in de BLOB.
Y De Y-waarde (G^X) mod P bevindt zich direct na de J-waarde en moet altijd de lengte zijn in bytes van het DHPUBKEY_VER3bitlenP- veld (bitlengte van P) gedeeld door acht. Als de lengte van de gegevens die het resultaat zijn van de berekening van (G^X) mod P een of meer bytes korter is dan P gedeeld door 8, moeten de gegevens worden opgevuld met de benodigde bytes (nulwaarde) om de gegevens de gewenste lengte (little-endian-indeling) te maken. Wanneer deze structuur wordt gebruikt met CryptSetKeyParam- met de dwParam waarde KP_PUB_PARAMS, wordt deze waarde niet opgenomen in de BLOB.

 

Notitie

Openbare-sleutel-BLOBS worden niet versleuteld, maar bevatten openbare sleutels in tekst zonder opmaak.