Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer een Diffie-Hellman versie 3 persoonlijke sleutel BLOB wordt geëxporteerd, heeft deze als volgt een indeling:
BLOBHEADER blobheader;
DHPRIVKEY_VER3 dhprivkeyver3;
BYTE p[dhprivkeyver3.bitlenP/8];
// Where P is the prime modulus
BYTE q[dhprivkeyver3.bitlenQ/8];
// Where Q is a large factor of P-1
BYTE g[dhprivkeyver3.bitlenP/8];
// Where G is the generator parameter
BYTE j[dhprivkeyver3.bitlenJ/8];
// Where J is (P-1)/Q
BYTE y[dhprivkeyver3.bitlenP/8];
// Where Y is (G^X) mod P
BYTE x[dhprivkeyver3.bitlenX/8];
// Where X is the private exponent
Deze blob--indeling wordt geëxporteerd wanneer de CRYPT_BLOB_VER3 vlag 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.
In de volgende tabel wordt elk onderdeel van de -sleutel-BLOB-beschreven.
| Veld | Beschrijving |
|---|---|
| blobheader | Een BLOBHEADER structuur. |
| dhprivkeyver3 | Een DHPRIVKEY_VER3 structuur. Het magic lid moet worden ingesteld op 0x34484400 voor persoonlijke sleutels. U ziet dat de hexadecimale waarde slechts een ASCII- codering van "DH4". |
| P | De P-waarde bevindt zich direct na de DHPRIVKEY_VER3 structuur en moet altijd de lengte zijn in bytes van het veld DHPRIVKEY_VER3bitlenP (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 DHPRIVKEY_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 zijn in bytes van het DHPRIVKEY_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 DHPRIVKEY_VER3bitlenJ veld gedeeld door acht (little-endian-indeling). Als de bitlenJ-waarde 0 is, is de waarde afwezig van 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 DHPRIVKEY_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. |
| X | De X-waarde is een willekeurig groot geheel getal, zodat het openbare gedeelte van het DH-sleutelpaar, Y, gelijk is aan: Y = (G^X) mod P |
Bij het aanroepen van CryptExportKey, kan de ontwikkelaar kiezen of de sleutel moet worden versleuteld. De sleutel wordt versleuteld als de parameter hExpKey een geldige ingang voor een sessiesleutel bevat. Alles behalve de BLOBHEADER gedeelte van de BLOB is versleuteld. Houd er rekening mee dat het versleutelingsalgoritmen en de parameters voor versleutelingssleutels niet samen met de blob-van depersoonlijke sleutel worden opgeslagen. De toepassing moet deze gegevens beheren en opslaan. Als er nul wordt doorgegeven voor hExpKey, wordt de persoonlijke sleutel zonder versleuteling geëxporteerd.
Notitie
Het is gevaarlijk om persoonlijke sleutels zonder versleuteling te exporteren, omdat ze vervolgens kwetsbaar zijn voor onderschepping en gebruik door onbevoegde entiteiten.