Поделиться через


BLOB-объекты с открытым ключом DSS версии 3

BLOB-объекты открытого ключа DSS версии 3 типа PUBLICKEYBLOB используются для экспорта и импорта сведений об открытом ключе DH. Они имеют следующий формат:

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

Этот формат больших двоичных объектов экспортируется при использовании флага CRYPT_BLOB_VER3 с CryptExportKey. Так как версия находится в большом двоичном объекте, при использовании этого большого двоичного объекта с CryptImportKey указывать флаг не нужно.

Кроме того, этот формат BLOB используется с функцией CryptSetKeyParam , когда значение dwParam KP_PUB_PARAMS используется для задания параметров ключа DSS. Это делается при использовании флага CRYPT_PREGEN для создания ключа. При использовании в этой ситуации значение y игнорируется и поэтому не должно включаться в большой двоичный объект.

В следующей таблице описаны все компоненты ключевого большого двоичного объекта.

Поле Описание
Blobheader Структура BLOBHEADER . Элемент bType должен иметь значение PUBLICKEYBLOB.
Dsspubkeyver3 Структура DSSPUBKEY_VER3 . Магический элемент должен иметь значение DSS3 (0x33535344) для открытых ключей. Обратите внимание, что шестнадцатеричное значение — это просто кодировка ASCII "DSS3".
P Значение P находится непосредственно после структуры DSSPUBKEY_VER3 и всегда должно быть длиной (в байтах) поля bitlenP DSSPUBKEY_VER3 (битовая длина P), разделенной на восемь (формат байтов ).
Q Значение Q расположено непосредственно после значения P и всегда должно быть длиной в байтах элементаbitlenQ DSSPUBKEY_VER3, разделенным на восемь (формат с прямым байтом ).
G Значение G находится непосредственно после значения Q и всегда должно быть длиной в байтах элементаbitlenP DSSPUBKEY_VER3 (битовой длины P), разделенной на восемь. Если длина данных составляет один или несколько байтов меньше P, разделенных на 8, данные должны быть заполнены необходимыми байтами (с нулевым значением), чтобы сделать данные требуемой длины (формат с маленьким байтом ).
J Значение J находится непосредственно после значения G и всегда должно быть длиной в байтах элементаbitlenJ DSSPUBKEY_VER3, разделенным на восемь (формат с маленьким байтом ). Если значение bitlenQ равно 0, это значение отсутствует в большом двоичном объекте.
Да Значение Y (G^X) mod P расположено непосредственно после значения J и всегда должно быть длиной в байтах элемента DSSPUBKEY_VER3bitlenP (длина бита P), делённой на восемь. Если длина данных, полученных в результате вычисления (G^X) mod P, на один или несколько байтов короче P, разделенных на 8, данные должны быть заполнены необходимыми байтами (с нулевым значением), чтобы сделать данные требуемой длины (формат с маленьким байтом ). Примечание: Если эта структура используется с CryptSetKeyParam со значением dwParam KP_PUB_PARAMS, это значение не включается в большой двоичный объект.

 

Примечание

Большие двоичные объекты с открытым ключом не шифруются, но содержат открытые ключи в виде открытого текста.