Udostępnij przez


Diffie-Hellman wersja 3 BLOB klucza publicznego

Diffie-Hellman w wersji 3 BLOBs klucza publicznego (typ PUBLICKEYBLOB) służą do eksportowania i importowania informacji o kluczu publicznym DH. Mają one następujący format:

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

Ten format obiektu BLOB jest eksportowany, gdy flaga CRYPT_BLOB_VER3 jest używana z CryptExportKey. Ponieważ wersja znajduje się w obiekcie BLOB, nie ma potrzeby określania flagi podczas korzystania z tej obiektu BLOB z CryptImportKey.

Ponadto ten format obiektu BLOB jest używany z funkcją CryptSetKeyParam, gdy wartość dwParam KP_PUB_PARAMS jest używana do ustawiania kluczowych parametrów klucza DH. Dzieje się tak, gdy flaga CRYPT_PREGEN została użyta do wygenerowania klucza. W przypadku użycia w tej sytuacji wartość y jest ignorowana i dlatego nie powinna być uwzględniana w obiekcie blob.

W poniższej tabeli opisano każdy składnik klucza obiektu BLOB.

Pole Opis
Blobheader StrukturaBLOBHEADER. Element członkowski bType musi mieć wartość PUBLICKEYBLOB.
dhpubkeyver3 Struktura DHPUBKEY_VER3. Element członkowski magic powinien być ustawiony na 0x33484400 dla kluczy publicznych. Zwróć uwagę, że wartość szesnastkowa to tylko kodowanie ASCII "DH3".
P Wartość P znajduje się bezpośrednio po strukturze DHPUBKEY_VER3 i zawsze powinna być długością w bajtach DHPUBKEY_VER3bitlenP pola (długość bitu P) podzielonego przez osiem (format mało endian).
Q Wartość Q znajduje się bezpośrednio po wartości P i zawsze powinna być długością w bajtach DHPUBKEY_VER3bitlenQ pola podzielonego przez osiem (format little-endian). Jeśli wartość bitlenQ wynosi 0, wartość jest nieobecna w obiekcie BLOB.
G Wartość G znajduje się bezpośrednio po wartości Q i zawsze powinna być długością w bajtach DHPUBKEY_VER3bitlenP pola (długość bitów P) podzielone przez osiem. Jeśli długość danych jest jedną lub więcej bajtów krótsza niż P podzielona przez 8, dane muszą być wypełnione przy użyciu niezbędnych bajtów (z wartością zerową), aby dane o żądanej długości (formacie mało endian).
J Wartość J znajduje się bezpośrednio po wartości G i zawsze powinna być długością w bajtach DHPUBKEY_VER3bitlenJ pola podzielonego przez osiem (format little-endian). Jeśli wartość bitlenQ wynosi 0, wartość jest nieobecna w obiekcie BLOB.
Y Wartość Y (G^X) mod P znajduje się bezpośrednio po wartości J i zawsze powinna być długością w bajtach pola DHPUBKEY_VER3bitlenP (długość bitów P) podzielona przez osiem. Jeśli długość danych wynikających z obliczenia (G^X) mod P jest jedną lub więcej bajtów krótszych niż P podzielona przez 8, dane muszą być wypełnione przy użyciu niezbędnych bajtów (zero wartości), aby dane o żądanej długości (mało endian format). Jeśli ta struktura jest używana z CryptSetKeyParam z wartością dwParam KP_PUB_PARAMS, ta wartość nie jest uwzględniana w obiekcie blOB.

 

Nuta

BLOB klucza publicznego nie są szyfrowane, ale zawierają klucze publiczne w postaci zwykłego tekstu.