BLOB-объекты ключей базового поставщика
Базовый поставщик и расширенный поставщик используют те же ключевые BLOB-объекты.
BLOB-объекты открытого ключа
BLOB-объекты открытого ключатипа PUBLICKEYBLOBиспользуются для хранения открытых ключей за пределамипоставщика служб шифрования(CSP). BLOB-объекты открытого ключа базового поставщика имеют следующий формат.
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
В следующей таблице описан каждый компонент открытого ключа. Все значения находятся в маленьком формате.
Поле | Описание |
---|---|
модуль | Данные модуля открытого ключа находятся непосредственно после структуры RSAPUBKEY. Размер этих данных зависит от размера открытого ключа. Количество байтов можно определить, разделив значение битлен RSAPUBKEY на восемь. |
publickeystruc | Структура PUBLICKEYSTRUC. |
rsapubkey | СтруктураRSAPUBKEY. Для 0x31415352 необходимо задать 0x31415352 магический элемент. Это шестнадцатеричное значение является кодировкой ASCII RSA1. |
Заметка
BLOB-объекты открытого ключа не шифруются. Они содержат открытые ключи в виде открытого текста форме.
BLOB-объекты закрытого ключа
BLOB-объекты закрытого ключатипа PRIVATEKEYBLOBиспользуются для хранения закрытых ключей за пределами CSP. BLOB-объекты закрытого ключа базового поставщика имеют следующий формат.
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
BYTE prime1[rsapubkey.bitlen/16];
BYTE prime2[rsapubkey.bitlen/16];
BYTE exponent1[rsapubkey.bitlen/16];
BYTE exponent2[rsapubkey.bitlen/16];
BYTE coefficient[rsapubkey.bitlen/16];
BYTE privateExponent[rsapubkey.bitlen/8];
В следующей таблице описывается компонент BLOB закрытого ключа.
Заметка
Эти поля соответствуют полям, описанным в разделе 7.2 стандартов шифрования открытого ключа (PKCS) #1 с незначительными различиями.
Поле | Описание |
---|---|
коэффициент | Коэффициент. Это имеет числовое значение (обратное значение q) mod p. |
экспонент1 | Экспонент 1. Это имеет числовое значение мода d (p – 1). |
экспонент2 | Экспонент 2. Это имеет числовое значение мода d (q – 1). |
Модуль | Модуль. Это имеет значение Prime1×Prime2 и часто называется n. |
prime1 | Прайм-номер 1, часто известный как p. |
prime2 | Прайм-номер 2, часто известный как q. |
private Exponent | Частный экспонент, часто известный как d. |
publickeystruc | Структура PUBLICKEYSTRUC. |
rsapubkey | СтруктураRSAPUBKEY. Для 0x32415352 необходимо задать 0x32415352 магический. Это шестнадцатеричное значение — это кодировка ASCII RSA2. |
Заметка
BLOB-объекты закрытого ключа не шифруются. Они содержат закрытые ключи в виде открытого текста.
При вызове CryptExportKeyразработчик может выбрать, следует ли шифровать ключ. PRIVATEKEYBLOB шифруется, если параметр hExpKey содержит допустимый дескриптор ключа сеанса. Все, кроме PUBLICKEYSTRUC части BLOB-объекта, шифруется.
Заметка
Алгоритм шифрования и параметры ключа шифрования не хранятся вместе с BLOB-объектом закрытого ключа. Приложение должно управлять и хранить эти сведения. Если нулевое значение передается для hExpKey, закрытый ключ будет экспортирован без шифрования.
Осторожность
Это опасно для экспорта закрытых ключей без шифрования, так как они затем уязвимы для перехвата и использования несанкционированными сущностями.
Простые BLOB-объекты ключей
простые BLOB-объекты ключей, тип SIMPLEBLOB, используются для хранения и передачи ключей сеансов за пределами CSP. Базовый поставщик простых BLOB-объектов ключей всегда шифруется с помощью открытого ключа обмена ключами. Элемент pbDataSIMPLEBLOB представляет собой последовательность байтов в следующем формате.
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
В следующей таблице описан каждый компонент pbData члена SIMPLEBLOB.
Поле | Описание |
---|---|
холодный | Структура ALG_ID, указывающая алгоритм шифрования, используемый для шифрования данных ключа сеанса. Обычно это значение имеет значение CALG_RSA_KEYX, указывающее, что данные ключа сеанса были зашифрованы с открытым ключом обмена ключами с помощью алгоритма открытого ключа RSA. |
зашифрованный ключ | Последовательность BYTE, представляющая зашифрованные данные ключа сеанса в виде блока шифрования PKCS #1, типа 2. Сведения об этом формате данных см. в разделе "Стандарты шифрования открытого ключа" (PKCS) #1, опубликованном RSA Data Security, Inc. Эти данные всегда совпадают с модулами открытого ключа. Например, открытые ключи, созданные базовым поставщиком Microsoft RSA, могут иметь длину 512 бит (64 байта), поэтому зашифрованные данные ключа сеанса также всегда 512 бит (64 байта). |
publickeystruc | Структура PUBLICKEYSTRUC. |