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.
Usługa DSS w wersji 3 BLOBs klucza publicznego typu PUBLICKEYBLOB służy do eksportowania i importowania informacji o kluczu publicznym DH. Mają one następujący format:
BLOBHEADER blobheader;
// As explained under "Data Structures"
DSSPUBKEY_VER3 dsspubkeyver3;
BYTE p[dsspubkeyver3.bitlenP/8];
// Where P is the prime modulus
BYTE q[dsspubkeyver3.bitlenQ/8];
// Where Q is a large factor of P-1
BYTE g[dsspubkeyver3.bitlenP/8];
// Where G is the generator parameter
BYTE j[dsspubkeyver3.bitlenJ/8];
// Where J is (P-1)/Q
BYTE y[dsspubkeyver3.bitlenP/8];
// Where Y is (G^X) mod P
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.
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 w kluczu DSS. 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 |
|---|---|
| Obiekt blobheader | StrukturaBLOBHEADER. Element członkowski bType musi mieć wartość PUBLICKEYBLOB. |
| Dsspubkeyver3 | Struktura DSSPUBKEY_VER3. Element członkowski magic powinien mieć wartość "DSS3" (0x33535344) dla kluczy publicznych. Zwróć uwagę, że wartość szesnastkowa to tylko kodowanie ASCII "DSS3". |
| P | Wartość P znajduje się bezpośrednio po strukturze DSSPUBKEY_VER3 i zawsze powinna być długością w bajtach pola DSSPUBKEY_VER3 bitlenP (długość bitów P) podzieloną przez osiem (format). |
| Q | Wartość Q znajduje się bezpośrednio po wartości P i zawsze powinna być długością w bajtach elementu członkowskiegoDSSPUBKEY_VER3 bitlenQ podzielonego przez osiem (format little-endian). |
| G | Wartość G znajduje się bezpośrednio po wartości Q i zawsze powinna być długością w bajtach DSSPUBKEY_VER3bitlenP składowej (długość bitów P) podzieloną 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 elementu członkowskiegoDSSPUBKEY_VER3 bitlenJ 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 DSSPUBKEY_VER3bitlenP składowej (długość bitów P) podzieloną 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).
Uwaga: Gdy 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.