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.
Po wyeksportowaniu Diffie-Hellman w wersji 3 klucza prywatnego obiektu BLOB jest on w formacie w następujący sposób:
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
Ten formatobiektów blobjest eksportowany, gdy flaga CRYPT_BLOB_VER3 jest używana z CryptExportKey. Ponieważ wersja znajduje się w obiekcie BLOB, nie ma potrzeby określania flagi w przypadku używania tego obiektu blOB z CryptImportKey.
W poniższej tabeli opisano każdy składnik klucza obiektu blOB .
| Pole | Opis |
|---|---|
| Blobheader | StrukturaBLOBHEADER. |
| dhprivkeyver3 | Struktura DHPRIVKEY_VER3. Element członkowski magic powinien być ustawiony na 0x34484400 dla kluczy prywatnych. Zwróć uwagę, że wartość szesnastkowa to tylko kodowanie ASCII "DH4". |
| P | Wartość P znajduje się bezpośrednio po strukturze DHPRIVKEY_VER3 i zawsze powinna być długością w bajtach pola DHPRIVKEY_VER3bitlenP (długość bitów P) podzielona 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 DHPRIVKEY_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 DHPRIVKEY_VER3bitlenP pole (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 DHPRIVKEY_VER3bitlenJ pola podzielonego przez osiem (format little-endian). Jeśli wartość bitlenJ 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 DHPRIVKEY_VER3bitlenP pola (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). |
| X | Wartość X jest losową dużą liczbą całkowitą, tak aby publiczna część pary kluczy DH, Y, jest równa: Y = (G^X) mod P |
Podczas wywoływania CryptExportKeydeweloper może wybrać, czy chcesz zaszyfrować klucz. Klucz jest szyfrowany, jeśli parametr hExpKey zawiera prawidłowy uchwyt klucza sesji. Wszystkie elementy, ale BLOBHEADER część obiektu BLOB jest szyfrowana. Należy pamiętać, że algorytm szyfrowania i parametry klucza szyfrowania nie są przechowywane wraz z klucz prywatny BLOB. Aplikacja musi zarządzać tymi informacjami i przechowywać je. Jeśli wartość zero zostanie przekazana dla hExpKey, klucz prywatny zostanie wyeksportowany bez szyfrowania.
Nuta
Eksportowanie kluczy prywatnych bez szyfrowania jest niebezpieczne, ponieważ są one następnie narażone na przechwytywanie i używanie przez nieautoryzowane jednostki.