Blob-объекты ключа базового поставщика
Базовый поставщик и расширенный поставщик используют одни и те же ключевые BLOB-объекты.
Blob-объекты с открытым ключом
Большие двоичные объекты с открытым ключом типа PUBLICKEYBLOB используются для хранения открытых ключей за пределами поставщика служб шифрования (CSP). Blob-объекты с открытым ключом базового поставщика имеют следующий формат.
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
В следующей таблице описан каждый компонент открытого ключа. Все значения имеют формат с маленьким байтом .
Поле | Описание |
---|---|
остатка от деления | Данные модуля открытого ключа расположены непосредственно после структуры RSAPUBKEY . Размер этих данных зависит от размера открытого ключа. Количество байтов можно определить, разделив значение поля bitlen RSAPUBKEY на восемь. |
publickeystruc | Структура PUBLICKEYSTRUC . |
rsapubkey | Структура RSAPUBKEY . Магический элемент должен иметь значение 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) No 1, с незначительными отличиями.
Поле | Описание |
---|---|
Коэффициент | Коэффициент. Имеет числовое значение (обратное q) mod p. |
экспонента1 | Экспонента 1. Имеет числовое значение d mod (p –1). |
экспонента2 | Экспонента 2. Имеет числовое значение d mod (q–1). |
Модуль | Модуль . Он имеет значение Prime1×Prime2 и часто называется n. |
прайм1 | Простое число 1, часто известное как p. |
prime2 | Простое число 2, часто называемое q. |
private Exponent | Частная степень, часто известная как d. |
publickeystruc | Структура PUBLICKEYSTRUC . |
rsapubkey | Структура RSAPUBKEY . Магический элемент должен иметь значение 0x32415352. Это шестнадцатеричное значение является кодировкой ASCII RSA2. |
Примечание
Blob-объекты с закрытым ключом не шифруются. Они содержат закрытые ключи в виде открытого текста.
При вызове CryptExportKey разработчик может выбрать, следует ли шифровать ключ. PrivateKEYBLOB шифруется, если параметр hExpKey содержит допустимый дескриптор сеансового ключа. Все, кроме части PUBLICKEYSTRUC большого двоичного объекта, шифруются.
Примечание
Параметры алгоритма шифрования и ключа шифрования не хранятся вместе с большим двоичным объектом закрытого ключа. Приложение должно управлять и хранить эти сведения. Если для hExpKey передается ноль, закрытый ключ будет экспортирован без шифрования.
Внимание!
Экспортировать закрытые ключи без шифрования опасно, так как они уязвимы для перехвата и использования неавторизованными сущностями.
Простые ключевые BLOB-объекты
Простые ключевые BLOB-объекты типа SIMPLEBLOB используются для хранения и передачи ключей сеанса за пределами CSP. Базовый поставщик простых ключей BLOB-объекты всегда шифруются с помощью открытого ключа обмена ключами. Элемент pbDataэлемента SIMPLEBLOB представляет собой последовательность байтов в следующем формате.
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
В следующей таблице описаны все компоненты элемента pbDatasimpleBLOB.
Поле | Описание |
---|---|
algid | Структура ALG_ID , задающая алгоритм шифрования, используемый для шифрования данных ключа сеанса. Обычно оно имеет значение CALG_RSA_KEYX, указывающее, что данные ключа сеанса были зашифрованы с помощью открытого ключа обмена ключами с использованием алгоритма открытого ключа RSA. |
encryptedkey | Последовательность BYTE , представляющая зашифрованные данные ключа сеанса в виде блока шифрования PKCS #1 типа 2. Сведения об этом формате данных см. в разделе Стандарты шифрования с открытым ключом (PKCS) No 1, опубликованные RSA Data Security, Inc. Размер этих данных всегда совпадает с модулю открытого ключа. Например, открытые ключи, созданные базовым поставщиком Microsoft RSA, могут иметь длину 512 бит (64 байта), поэтому зашифрованные данные ключа сеанса также всегда 512 бит (64 байта). |
publickeystruc | Структура PUBLICKEYSTRUC . |