Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.