Diffie-Hellman версии 3 открытых ключей BLOB-объектов
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. Так как версия находится в BLOB-объекте, при использовании этого BLOB-объекта с CryptImportKey не требуется указывать флаг.
Кроме того, этот формат BLOB используется с функцией CryptSetKeyParam , когда значение dwParam KP_PUB_PARAMS используется для задания параметров ключа DH. Это делается при использовании флага CRYPT_PREGEN для создания ключа. При использовании в этой ситуации значение y игнорируется и поэтому не должно быть включено в БОЛЬШОЙ ДВОИЧНЫй объект.
В следующей таблице описывается каждый компонент ключевого BLOB-объекта.
Поле | Description |
---|---|
Blobheader | Структура BLOBHEADER. Элемент bType должен иметь значение PUBLICKEYBLOB. |
dhpubkeyver3 | Структура DHPUBKEY_VER3 . Для открытых ключей необходимо задать значение 0x33484400 волшебный элемент. Обратите внимание, что шестнадцатеричное значение является просто кодировкой ASCII dH3. |
P | Значение P находится непосредственно после структуры DHPUBKEY_VER3 и всегда должно быть длиной в байтах поля DHPUBKEY_VER3 bitlenP (битовая длина P), разделенного на восемь (маленький формат). |
К | Значение Q находится непосредственно после значения P и всегда должно быть длиной в байтах поля DHPUBKEY_VER3 bitlenQ, разделенным на восемь (маленький формат). Если значение bitlenQ равно 0, то значение отсутствует в BLOB-объекте. |
G | Значение G находится непосредственно после значения Q и всегда должно быть длиной в байтах поля DHPUBKEY_VER3 bitlenP (битовая длина P), разделенного на восемь. Если длина данных составляет один или несколько байтов, чем P, разделенных на 8, данные должны быть заполнены необходимыми байтами (нулевое значение), чтобы сделать данные требуемой длиной (маленький формат). |
J | Значение J находится непосредственно после значения G и всегда должно быть длиной в байтах поля DHPUBKEY_VER3 bitlenJ, разделенным на восемь (маленький формат). Если значение bitlenQ равно 0, то значение отсутствует в BLOB-объекте. |
Y | Значение Y (G^X) mod P находится непосредственно после значения J и всегда должно быть длиной в байтах поля DHPUBKEY_VER3 bitlenP (длина бита P), разделенного на восемь. Если длина данных, полученных от вычисления мода G^X, составляет один или несколько байтов, чем P, разделенных на 8, данные должны быть заполнены необходимыми байтами (нулевого значения), чтобы сделать данные требуемой длиной (маленький формат). Если эта структура используется с CryptSetKeyParam со значением dwParam KP_PUB_PARAMS, это значение не включается в БОЛЬШОЙ ДВОИЧНЫй объект. |
Примечание.
BLOB-объекты открытого ключа не шифруются, но содержат открытые ключи в виде открытого текста.