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


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

Diffie-Hellman версии 3 blob с открытым ключом (тип PUBLICKEYBLOB) используются для экспорта и импорта сведений об открытом ключе DH. Они имеют следующий формат:

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

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

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

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

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

 

Примечание

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