Главная // Актуальные документы // Приказ
СПРАВКА
Источник публикации
М.: Стандартинформ, 2016
Примечание к документу
Документ введен в действие с 1 июня 2017 года.
Название документа
"Р 50.1.110-2016. Рекомендации по стандартизации. Информационная технология. Криптографическая защита информации. Контейнер хранения ключей"
(утв. и введены в действие Приказом Росстандарта от 23.11.2016 N 1751-ст)

"Р 50.1.110-2016. Рекомендации по стандартизации. Информационная технология. Криптографическая защита информации. Контейнер хранения ключей"
(утв. и введены в действие Приказом Росстандарта от 23.11.2016 N 1751-ст)


Содержание


Утверждены и введены в действие
Приказом Федерального
агентства по техническому
регулированию и метрологии
от 23 ноября 2016 г. N 1751-ст
РЕКОМЕНДАЦИИ ПО СТАНДАРТИЗАЦИИ
ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ
КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ
КОНТЕЙНЕР ХРАНЕНИЯ КЛЮЧЕЙ
Information technology. Cryptographic data security.
Key storage container
Р 50.1.110-2016
Группа П85
ОКС 35.040
ОКСТУ 5002
Дата введения
1 июня 2017 года
Предисловие
1 РАЗРАБОТАНЫ подкомитетом 2 Технического комитета по стандартизации ТК 26 "Криптографическая защита информации"
2 ВНЕСЕНЫ Техническим комитетом по стандартизации ТК 26 "Криптографическая защита информации"
3 УТВЕРЖДЕНЫ И ВВЕДЕНЫ В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 23 ноября 2016 г. N 1751-ст
4 ВВЕДЕНЫ ВПЕРВЫЕ
Правила применения настоящих рекомендаций установлены в статье 26 Федерального закона от 29 июня 2015 г. N 162-ФЗ "О стандартизации в Российской Федерации". Информация об изменениях к настоящим рекомендациям публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе "Национальные стандарты", а официальный текст изменений и поправок - в ежемесячном информационном указателе "Национальные стандарты". В случае пересмотра (замены) или отмены настоящих рекомендаций соответствующее уведомление будет опубликовано в ближайшем выпуске ежемесячного информационного указателя "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)
Введение
Настоящие рекомендации содержат описание расширения документа PKCS#15 "Cryptographic Token Information Format Standard" [1], разработанного и опубликованного RSA Laboratories. Он описывает синтаксис представления ключевой информации, цифровых сертификатов, аутентификационной информации и других данных при их хранении на внешних носителях.
Данное расширение [1] позволяет использовать синтаксис базового стандарта для создания контейнеров хранения ключевой информации, используемой в криптографических алгоритмах по ГОСТ Р 34.10 и ГОСТ 28147-89.
Целесообразность разработки настоящих рекомендаций вызвана потребностью в унифицированном решении, использующем национальные криптографические стандарты и позволяющем обеспечить совместимость средств криптографической защиты различных разработчиков в части формата хранения ключевой информации на носителе пользователя.
Примечание - Основная часть настоящих рекомендаций дополнена приложениями А и Б.
1 Область применения
Настоящие рекомендации предназначены для применения в общедоступных информационно-телекоммуникационных, корпоративных сетях и информационных системах для защиты информации, не содержащей сведений, составляющих государственную тайну, с использованием механизмов шифрования и защиты аутентичности данных.
2 Нормативные ссылки
В настоящих рекомендациях использованы нормативные ссылки на следующие стандарты:
ГОСТ Р 34.10 Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи
ГОСТ Р 34.11 Информационная технология. Криптографическая защита информации. Функция хэширования
ГОСТ 28147-89 "Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования"
Р 50.1.111-2016 Информационная технология. Криптографическая защита информации. Парольная защита ключевой информации
Р 50.1.112-2016 Информационная технология. Криптографическая защита информации. Транспортный ключевой контейнер
Р 50.1.113-2016 Информационная технология. Криптографическая защита информации. Криптографические алгоритмы, сопутствующие применению алгоритмов электронной цифровой подписи и функции хэширования
Примечание - При пользовании настоящими рекомендациями целесообразно проверить действие ссылочных стандартов (рекомендаций) в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодному информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по выпускам ежемесячного информационного указателя "Национальные стандарты" за текущий год. Если заменен ссылочный стандарт (рекомендации), на который дана недатированная ссылка, то рекомендуется использовать действующую версию этого стандарта (рекомендаций) с учетом всех внесенных в данную версию изменений. Если заменен ссылочный стандарт (рекомендации), на который дана датированная ссылка, то рекомендуется использовать версию этого стандарта (рекомендаций) с указанным выше годом утверждения (принятия). Если после утверждения настоящих рекомендаций в ссылочный стандарт (рекомендации), на который дана датированная ссылка, внесено изменение, затрагивающее положение, на которое дана ссылка, то это положение рекомендуется применять без учета данного изменения. Если ссылочный стандарт (рекомендации) отменен без замены, то положение, в котором дана ссылка на него, применяется в части, не затрагивающей эту ссылку.
3 Термины, определения и обозначения
В настоящих рекомендациях применены термины, определения и обозначения, определенные в документах, приведенных в разделе "Библиография".
4 Базовые типы [1]
Базовые типы подробно описаны в 6.1 [1]. Этих базовых типов достаточно для спецификации информации о ключах, включая назначение ключей, сроки действия, данные о владельце, издателе и т.п.
В [1] отсутствует определение "имя контейнера", и для наименования объектов применена метка (6.1.3 [1]).
Label ::= UTF8String (SIZE(0..pkcs15-ub-label))
Объекты закрытых, открытых ключей и сертификатов содержат идентификатор iD (см. структуры CommonKeyAttributes, CommonCertificateAttributes [1]). Идентификатор имеет следующий тип:
Identifier ::= OCTET STRING (SIZE(0..pkcs15-ub-identifier).
Идентификатор является уникальным для объекта одного типа в рамках одного контейнера [1]. Совпадение идентификаторов объектов разного типа означает их взаимосвязь. Например, соответствие закрытого ключа открытому ключу или соответствие ключа сертификату.
Для идентификации ключей также могут использоваться поля subjectName, содержащие имя субъекта ключа (см. структуры CommonPrivateKeyAttributes, CommonPublicKeyAttributes [1]).
В [1] объекты могут храниться как в виде значений, так и в виде ссылок на другие объекты. Для этого применен тип данных PathOrObjects (6.1.7 [1]).
PathOrObjects {ObjectType} ::= CHOICE {
path Path,
objects [0] SEQUENCE OF ObjectType,
...,
indirect-protected [1] ReferencedValue {EnvelopedData {SEQUENCE OF
ObjectType}},
direct-protected [2] EnvelopedData {SEQUENCE OF ObjectType},
}
Настоящие рекомендации определяют, что для хранения неконфиденциальных объектов (открытые ключи, сертификаты) должен использоваться вариант objects[0], а для хранения конфиденциальных объектов (закрытые и симметричные ключи) - вариант direct-protected[2].
Для идентификации параметров объектов и области их применения используется тип KeyInfo (6.1.13 [1]).
KeyInfo {ParameterType, OperationsType} ::= CHOICE {
reference Reference,
paramsAndOps SEQUENCE {
parameters ParameterType,
supportedOperations OperationsType OPTIONAL
}
}
Сами объекты [1] представляют собой набор атрибутов разного уровня детализации, позволяющих описать всевозможные свойства объектов и при необходимости расширить перечень описываемых свойств.
PKCS15Object {ClassAttributes, SubClassAttributes, TypeAttributes} ::= SEQUENCE {
commonObjectAttributes CommonObjectAttributes,
ClassAttributes ClassAttributes,
SubClassAttributes [0] SubClassAttributes OPTIONAL,
typeAttributes [1] TypeAttributes
}
5 Объекты для хранения ключей
[1] определено, что в контейнере могут храниться ключи трех типов: закрытые, открытые и симметричные. Ниже определены расширения соответствующих структур для хранения ключей алгоритмов ГОСТ Р 34.10 и ГОСТ 28147-89.
5.1 Представление ключа
Для обеспечения защиты закрытых и симметричных ключей от утечек по побочным каналам при считывании и проведении операций с ключами целесообразно использование маскированных ключей. Для хранения маскированных ключей и наборов масок использованы представления ключей в виде:
GostR3410-2012-KeyValueMask ::= OCTET STRING {Km|M1||M2|....|Mk}
Gost28147-89-KeyValueMask ::= OCTET STRING {Km|M1|M2|....|Mk}
Подробное описание данных представлений ключей изложено в разделе 4 Р 50.1.112-2016.
5.2 Объект закрытого ключа
В соответствии с 6.3.1 [1]:
PrivateKeyType ::= CHOICE {
privateRSAKeyPrivateKeyObject{PrivateRSAKeyAttributes},
privateECKey [0] PrivateKeyObject {PrivateECKeyAttributes},
privateDHKey [1] PrivateKeyObject {PrivateDHKeyAttributes},
privateDSAKey [2] PrivateKeyObject {PrivateDSAKeyAttributes},
privateKEAKey [3] PrivateKeyObject {PrivateKEAKeyAttributes},
... -- For future extensions
}
PrivateKeyObject {KeyAttributes} ::= PKCS15Object {
CommonKeyAttributes, CommonPrivateKeyAttributes, KeyAttributes}
Для хранения ключей, выработанных по алгоритму ГОСТ Р 34.10, в структуру PrivateKeyType введен следующий тип ключа:
privateGostR3410-2012Key [27] PrivateKeyObject {
PrivateGostR3410-2012KeyAttributes}
PrivateGostR3410-2012KeyAttributes ::= SEQUENCE {
value ObjectValue {GostR3410-2012PrivateKey},
keyInfo KeyInfo {GostPrivateKeyParameters, PublicKeyOperations}
OPTIONAL,
... -- For future extensions
}
GostR3410-2012PrivateKey ::= GostR3410-2012-KeyValueMask
GostPrivateKeyParameters ::= CHOICE {
gostR3410-2012ParamSet OBJECT IDENTIFIER,
privateKeyParamSet [0] GostR3410-2001-ParamSetParameters,
...
}
где gostR3410-2012ParamSet - идентификатор параметров алгоритма, который выбран в соответствии с "Идентификаторы объектов (OID) технического комитета по стандартизации" [2]. Рекомендуется использовать значение id-tc26-gost-3410-12-512-paramSetA.
Если структура keyInfo отсутствует, то предполагается значение параметров по умолчанию:
KeyInfo.paramsAndOps.parameters = id-tc26-gost-3410-12-512-paramSetA
5.3 Объект открытого ключа
В 6.4.1 [1] определены открытые ключи:
PublicKeyType ::= CHOICE {
publicRSAKey PublicKeyObject {PublicRSAKeyAttributes},
publicECKey [0] PublicKeyObject {PublicECKeyAttributes},
publicDHKey [1] PublicKeyObject {PublicDHKeyAttributes},
publicDSAKey [2] PublicKeyObject {PublicDSAKeyAttributes},
publicKEAKey [3] PublicKeyObject {PublicKEAKeyAttributes},
... -- For future extensions
}
PublicKeyObject {KeyAttributes} ::= PKCS15Object {
CommonKeyAttributes, CommonPublicKeyAttributes, KeyAttributes}
Для хранения открытого ключа, выработанного по алгоритму ГОСТ Р 34.10, в структуру PublicKeyType введен следующий тип:
publicGostR3410-2012Key [27] PublicKeyObject {
PublicGostR3410-2012KeyAttributes}
PublicGostR3410-2012KeyAttributes ::= SEQUENCE {
value ObjectValue {GostR3410-2012PublicKeyChoice},
keyInfo KeyInfo {GostPrivateKeyParameters, PublicKeyOperations}
OPTIONAL,
... -- For future extensions
}
GostR3410-2012PublicKeyChoice ::= CHOICE {
raw GostR3410-2012Point,
spki SubjectPublicKeyInfo,
...
}
При использовании SubjectPublicKeyInfo открытый ключ и его параметры должны быть представлены в соответствии с 4.3 [3]. Поле SubjectPublicKeyInfo.algorithm.parameters не должно быть NULL.
При использовании GostR3410-2012Point открытый ключ должен иметь представление, описанное в Р 50.1.112-2016.
GostR3410-2012Point ::= GostR3410-2012-PublicKey.
Если структура keyInfo отсутствует, то предполагается значение параметров по умолчанию:
KeyInfo.paramsAndOps.parameters = id-tc26-gost-3410-12-512-paramSetA
5.4 Объект симметричного ключа
Структура симметричного секретного ключа определена в 6.5.1 [1].
SecretKeyType ::= CHOICE {
genericSecretKey SecretKeyObject {GenericSecretKeyAttributes},
rc2key [0] SecretKeyObject {GenericSecretKeyAttributes},
rc4key [1] SecretKeyObject {GenericSecretKeyAttributes},
desKey [2] SecretKeyObject {GenericSecretKeyAttributes},
des2Key [3] SecretKeyObject {GenericSecretKeyAttributes},
des3Key [4] SecretKeyObject {GenericSecretKeyAttributes},
castKey [5] SecretKeyObject {GenericSecretKeyAttributes},
cast3Key [6] SecretKeyObject {GenericSecretKeyAttributes},
cast128Key [7] SecretKeyObject {GenericSecretKeyAttributes},
rc5Key [8] SecretKeyObject {GenericSecretKeyAttributes},
ideaKey [9] SecretKeyObject {GenericSecretKeyAttributes},
skipjackKey [10] SecretKeyObject {GenericSecretKeyAttributes},
batonKey [11] SecretKeyObject {GenericSecretKeyAttributes},
juniperKey [12] SecretKeyObject {GenericSecretKeyAttributes},
rc6Key [13] SecretKeyObject {GenericSecretKeyAttributes},
otherKey [14] OtherKey,
... -- For future extensions
}
SecretKeyObject {KeyAttributes} ::= PKCS15Object {
CommonKeyAttributes, CommonSecretKeyAttributes, KeyAttributes}
Для хранения симметричного ключа для алгоритма ГОСТ 28147-89 в структуру SecretKeyType введен тип:
gostKey [27] GostSecretKey
GostSecretKey ::= SEQUENCE {
keyTypeGost OBJECT IDENTIFIER,
keyAttr SecretKeyObject {GostSecretKeyAttributes}
}
В качестве идентификатора типа ключа должен быть представлен идентификатор алгоритма в соответствии с 8.1 [4]:
keyTypeGost = id-Gost28147-89
Атрибуты симметричного ключа определены следующим образом:
GostSecretKeyAttributes ::= SEQUENCE {
value ObjectValue {Gost28147-89-KeyValueMask},
keyInfo KeyInfo {GostSecretKeyParameters, SecretKeyOperations}
OPTIONAL,
...
}
GostSecretKeyParameters ::= CHOICE {
cryptoProParamSet OBJECT IDENTIFIER,
secretKeyParamSet [0] Gost28147-89-ParamSetParameters,
...
}
SecretKeyOperations ::= Operations
Идентификаторы параметров алгоритма cryptoProParamSet выбираются в соответствии с 8.1 RFC4357 [4] и разделом 4 [5].
Структура Gost28147-89-ParamSetParameters определена в 8.1 [4].
Если структура keyInfo отсутствует, то принимается значение по умолчанию:
KeyInfo.paramsAndOps.parameters = id-Gost28147-89-CryptoPro-A-ParamSet
6 Обеспечение конфиденциальности ключей
Для обеспечения конфиденциальности объектов закрытого и симметричного ключа в соответствии с [1] использован тип EnvelopedData. Данный тип определен в разделе 6 [6].
EnvelopedData {Type} ::= SEQUENCE {
version INTEGER {v0(0), v1(1), v2(2), v3(3), v4(4)}(v0|v1|v2,...),
originatorInfo [0] OriginatorInfo OPTIONAL,
recipientInfos RecipientInfos,
encryptedContentInfo EncryptedContentInfo{Type},
unprotectedAttrs [1] SET SIZE (1..MAX) OF Attribute OPTIONAL
}
Зашифрованное содержимое контейнера представлено в виде:
EncryptedContentInfo {Type} ::= SEQUENCE {
contentType OBJECT IDENTIFIER,
contentEncryptionAlgorithm AlgorithmIdentifier
{{ContentEncryptionAlgorithms}},
encryptedContent [0] OCTET STRING OPTIONAL
}(CONSTRAINED BY {
-- 'encryptedContent' shall be the result of encrypting DER-encoded
-- value of type - Type}
)
Тип инкапсулированных данных Type в соответствии с 7.3 [1] идентифицирован как:
pkcs15-ct-PKCS15Token OBJECT IDENTIFIER ::= {pkcs15-ct 1}
pkcs15-ct OBJECT IDENTIFIER ::= {pkcs15 3}
pkcs15 OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840)
rsadsi(113549) pkcs(1) pkcs-15(15)}
При шифровании должен быть использован алгоритм ГОСТ 28147-89. Алгоритм и параметры шифрования contentEncryptionAlgorithm указывают в соответствии с 5.1 [7] и разделом 5 [5].
Могут быть использованы алгоритмы шифрования с завершающей имитовставкой:
Алгоритм гаммирования с обратной связью (раздел 4 ГОСТ 28147-89):
id-Gost28147-89-cbc-imm OBJECT IDENTIFIER ::=
{iso(1) member-body(2) ru(643) rans(2) infotecs(4)
algorithms(3) gost28147-89(2) cbc-imm(2)}
Алгоритм гаммирования (раздел 3 ГОСТ 28147-89):
id-Gost28147-89-cnt-imm OBJECT IDENTIFIER ::=
{iso(1) member-body(2) ru(643) rans(2) infotecs(4)
algorithms(3) gost28147-89(2) cnt-imm(3)}
Параметры алгоритмов с завершающей имитовставкой указаны в соответствии с 5.1 [7] и раздел 5 [5]. Зашифрованные данные содержат результат зашифрования конкатенированный с имитовставкой, вычисленной на тех же параметрах, что и при зашифровании.
В качестве ключа шифрования (Key Encryption Key, KEK) использован симметричный ключ ГОСТ 28147-89. Информация о ключе шифрования размещена в структуре RecipientInfo:
RecipientInfo ::= CHOICE {
ktri KeyTransRecipientInfo,
kari [1] KeyAgreeRecipientInfo,
kekri [2] KEKRecipientInfo,
pwri [3] PasswordRecipientinfo,
ori [4] OtherRecipientInfo
}
Информация о шифровании в этом случае может быть представлена как в виде kekri, так и в виде pwri (6.2.3 и 6.2.4 [6] соответственно).
KEKRecipientInfo ::= SEQUENCE {
version CMSVersion, -- always set to 4
kekid KEKIdentifier,
keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
encryptedKey EncryptedKey
}
PasswordRecipientInfo ::= SEQUENCE {
version CMSVersion, -- Always set to 0
keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
OPTIONAL,
keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
encryptedKey EncryptedKey
}
При использовании варианта pwri поле keyDerivationAlgorithm описывает алгоритм и параметры выработки ключа из пароля пользователя в соответствии с рекомендациями PKCS#5 по схеме PBKDF2 с использованием ГОСТ Р 34.11 в соответствии с 7.1 Р 50.1.111-2016.
При шифровании ключа должен быть использован алгоритм ГОСТ 28147-89. Алгоритм и параметры шифрования keyEncryptionAlgorithm указаны в соответствии с 5.1 [7] и разделом 5 [5].
Зашифрованный ключ представлен в виде:
Gost28147-89-EncryptedKey ::= SEQUENCE {
encryptedKey Gost28147-89-Key,
maskKey [0] IMPLICIT Gost28147-89-Key OPTIONAL,
macKey Gost28147-89-MAC
}
7 Обеспечение целостности информации
Для обеспечения целостности ключей результирующая структура PKCS15Token инкапсулирована в AuthenticatedData в соответствии с 9 [6] и E.1.3 [1] с использованием алгоритма HMAC_GOSTR3411_2012_512 по Р 50.1.113-2016.
AuthenticatedData ::= SEQUENCE {
version CMSVersion,
originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
recipientInfos RecipientInfos,
macAlgorithm MessageAuthenticationCodeAlgorithm,
digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
encapContentInfo EncapsulatedContentInfo,
authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
mac MessageAuthenticationCode,
unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL
}
MessageAuthenticationCodeAlgorithm ::= AlgorithmIdentifier
Использован следующий идентификатор алгоритма:
MessageAuthenticationCodeAlgorithm.algorithm
= id-tc26-hmac-gost-3411-12-512
Параметры HMAC_GOSTR3411_2012_512 не указаны:
MessageAuthenticationCodeAlgorithm.parameters = NULL
8 Общая структура контейнера хранения ключей
В соответствии с 7.3 и E [1] контейнер хранения ключей может быть представлен в структурах трех видов:
1) структура PKCS15Token в соответствии с [1];
2) структура AuthenticatedData в соответствии с [6], инкапсулирующая структуру PKCS15Token;
3) структура SignedData в соответствии с [6] и [8], инкапсулирующая структуру PKCS15Token.
Структуры видов 2 и 3 используют в тех случаях, когда необходимо обеспечить целостность контейнера хранения ключей.
В соответствии с 7.3 [1] структура PKCS15Token определена, как:
PKCS15Token ::= SEQUENCE {
version INTEGER {v1(0)} (v1,...),
keyManagementInfo [0] KeyManagementInfo OPTIONAL,
pkcs15Objects SEQUENCE OF PKCS15Objects
}
KeyManagementInfo ::= SEQUENCE OF SEQUENCE {
keyId Identifier,
keyInfo CHOICE {
recipientInfo RecipientInfo,
passwordInfo [0] PasswordInfo
}
} (CONSTRAINED BY {-- Each keyID must be unique --})
PasswordInfo ::= SEQUENCE {
hint Label OPTIONAL,
algId AlgorithmIdentifier {{KeyDerivationAlgorithms}},
...
} (CONSTRAINED BY {-- keyID shall point to a KEKRecipientInfo--})
При использовании представления информации в виде pwri в KeyManagementInfo фактически дублируется информация о шифровании ключа в структуре EnvelopedData. Данную информацию можно опционально использовать для выбора и предварительной проверки пароля в том случае, если для разных объектов используют разные пароли.
При использовании представления kekri идентификаторы в таблице ключей keyId обеспечивают однозначное сопоставление параметров выработки парольного ключа и ключа, зашифрованного на данном пароле в структуре KEKRecipientInfo.
Приложение А
(справочное)
ASN.1 МОДУЛЬ КОНТЕЙНЕРА ХРАНЕНИЯ КЛЮЧЕЙ
PKCS15-GOST-V2-0
DEFINITIONS IMPLICIT TAGS ::=
BEGIN
IMPORTS
AuthenticatedData, SignedData
FROM CryptographicMessageSyntax2004 { iso(1) member-body(2) us(840)
rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2004(24) }
PKCS15Token, PrivateKeyObject, PublicKeyOperations, PublicKeyObject, ObjectValue,
Operations, SecretKeyObject, SubjectPublicKeyInfo, KeyInfo
FROM PKCS-15 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-15(15)
modules(1) pkcs-15(1)}
ALGORITHM-IDENTIFIER, id-PBKDF2, PBKDF2-params
FROM PKCS5v2-0 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-5(5)
modules(16) pkcs5v2-0(1)}
GostR3410-2001-ParamSetParameters
FROM GostR3410-2001-ParamSetSyntax { iso(1) member-body(2) ru(643) rans(2)
cryptopro(2) other(1) modules(1) gostR3410-2001-ParamSetSyntax(12) 1 }
id-GostR3410-2001-TestParamSet, id-GostR3410-2001-CryptoPro-A-ParamSet,
id-GostR3410-2001-CryptoPro-B-ParamSet, id-GostR3410-2001-CryptoPro-C-ParamSet,
id-GostR3410-2001-CryptoPro-XchA-ParamSet, id-GostR3410-2001-CryptoPro-XchB-ParamSet
FROM GostR3410-2001-PKISyntax { iso(1) member-body(2) ru(643) rans(2)
cryptopro(2) other(1) modules(1) gostR3410-2001-PKISyntax(9) 1 }
id-Gost28147-89-CryptoPro-KeyWrap
FROM GostR3410-EncryptionSyntax { iso(1) member-body(2) ru(643) rans(2)
cryptopro(2) other(1) modules(1) gostR3410-EncryptionSyntax(5) 2 }
id-Gost28147-89, id-Gost28147-89-TestParamSet, id-Gost28147-89-CryptoPro-A-ParamSet,
id-Gost28147-89-CryptoPro-B-ParamSet, id-Gost28147-89-CryptoPro-C-ParamSet,
id-Gost28147-89-CryptoPro-D-ParamSet, id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet,
id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet, id-Gost28147-89-CryptoPro-RIC-1-ParamSet,
Gost28147-89-IV
FROM Gost28147-89-EncryptionSyntax { iso(1) member-body(2) ru(643) rans(2)
cryptopro(2) other(1) modules(1) gost28147-89-EncryptionSyntax(4) 1 }
Gost28147-89-ParamSetParameters
FROM Gost28147-89-ParamSetSyntax { iso(1) member-body(2) ru(643) rans(2)
cryptopro(2) other(1) modules(1) gost28147-89-ParamSetSyntax(6) 1 }
;
-- OID-ы
id-tc26 OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) ru(643) std-org(7) tc26(1) }
id-tc26-algorithms OBJECT IDENTIFIER ::=
{ id-tc26 algorithms(1) }
id-tc26-digest OBJECT IDENTIFIER ::=
{ id-tc26-algorithms digest(2) }
id-tc26-gost3411-12-512 OBJECT IDENTIFIER ::=
{ id-tc26-digest gost3411-12-512(3) }
id-tc26-mac OBJECT IDENTIFIER ::=
{ id-tc26-algorithms mac(4) }
id-tc26-hmac-gost3411-12-512 OBJECT IDENTIFIER ::=
{ id-tc26-mac hmac-gost3411-12-512(2) }
id-tc26-constants OBJECT IDENTIFIER ::=
{ id-tc26 constants(2) }
id-tc26-sign-constants OBJECT IDENTIFIER ::=
{ id-tc26-constants sign-constants(1) }
id-tc26-gost3410-12-512-constants OBJECT IDENTIFIER ::=
{ id-tc26-sign-constants gost3410-12-512-constants(2) }
id-tc26-gost3410-12-512-paramSetTest OBJECT IDENTIFIER ::=
{ id-tc26-gost3410-12-512-constants paramSetTest(0) }
id-tc26-gost3410-12-512-paramSetA OBJECT IDENTIFIER ::=
{ id-tc26-gost3410-12-512-constants paramSetA(1) }
id-tc26-gost3410-12-512-paramSetB OBJECT IDENTIFIER ::=
{ id-tc26-gost3410-12-512-constants paramSetB(2) }
id-tc26-cipher-constants OBJECT IDENTIFIER ::=
{ id-tc26-constants cipher-constants(5) }
id-tc26-gost-28147-constants OBJECT IDENTIFIER ::=
{ id-tc26-cipher-constants gost-28147-constants(1) }
id-tc26-gost-28147-param-Z OBJECT IDENTIFIER ::=
{ id-tc26-gost-28147-constants param-Z(1) }
id-infotecs-gost28147-algorithms OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) ru(643) rans(2) infotecs(4) algorithms(3) gost28147-89(2) }
id-Gost28147-89-cbc-imm OBJECT IDENTIFIER ::=
{ id-infotecs-gost28147-algorithms cbc-imm(2) }
id-Gost28147-89-cnt-imm OBJECT IDENTIFIER ::=
{ id-infotecs-gost28147-algorithms cnt-imm(3) }
-- Контейнеры PKCS15-GOST
PKCS15-GOST-Token ::= PKCS15Token (CONSTRAINED BY {
-- 1. Разделы 7.2, 7.3 и E.1.2 в "PKCS #15 v1.1: Cryptographic Token
-- Information Format Standard".
-- 2. В структуре 'PathOrObjects' должны использоваться варианты
-- 'objects' или 'direct-protected' (для открытых и зашифрованных
-- объектов соответственно).
-- 3. Все ссылки на 'ContentEncryptionAlgorithms' должны быть заменены
-- на 'ContentEncryptionAlgorithmsGost'.
-- 4. Все ссылки на 'KeyDerivationAlgorithms' должны быть заменены на
-- 'KeyDerivationAlgorithmsGost'.
-- 5. Все ссылки на 'KeyEncryptionAlgorithms' должны быть заменены на
-- 'KeyEncryptionAlgorithmsGost'.
-- 6. В структурах 'RecipientInfo' должны использоваться только
-- варианты 'kekri' и 'pwri'.
-- 7. Все ссылки на 'PrivateKeyType' должны быть заменены на
-- 'PrivateKeyTypeGost'.
-- 8. Все ссылки на 'PublicKeyType' должны быть заменены на
-- 'PublicKeyTypeGost'.
-- 9. Все ссылки на 'SecretKeyType' должны быть заменены на
-- 'SecretKeyTypeGost'.
})
PKCS15-GOST-AuthenticatedToken ::= AuthenticatedData (CONSTRAINED BY {
-- 1. Разделы 7.3 и E.1.3 в "PKCS #15 v1.1: Cryptographic Token
-- Information Format Standard".
-- 2. Все ссылки на 'PKCS15Token' должны быть заменены на
-- 'PKCS15-GOST-Token'.
-- 3. Все ссылки на 'KeyEncryptionAlgorithms' должны быть заменены на
-- 'KeyEncryptionAlgorithmsGost'.
-- 4. Все ссылки на 'DigestAlgorithms' должны быть заменены на
-- 'DigestAlgorithmsGost'.
-- 5. Все ссылки на 'MACAlgorithms' должны быть заменены на
-- 'MACAlgorithmsGost'.
})
PKCS15-GOST-SignedToken ::= SignedData (CONSTRAINED BY {
-- 1. Раздел 7.3 в "PKCS #15 v1.1: Cryptographic Token Information
-- Format Standard".
-- 2. "Методические рекомендации ТК 26. Использование алгоритмов
-- ГОСТ 28147-89, ГОСТ Р 34.11 и ГОСТ Р 34.10 в криптографических
-- сообщениях формата CMS".
-- 3. Все ссылки на 'PKCS15Token' должны быть заменены на
-- 'PKCS15-GOST-Token'.
})
-- Типы для PKCS15-GOST
-- OID-ы и наборы параметров
GostSecretKeyAlgs OBJECT IDENTIFIER ::= {
id-Gost28147-89,
...
}
Gost28147-89-ParamSets OBJECT IDENTIFIER ::= {
Gost28147-89-CryptoPro-ParamSets |
Gost28147-89-TC26-ParamSets
}
Gost28147-89-CryptoPro-ParamSets OBJECT IDENTIFIER ::= {
id-Gost28147-89-TestParamSet | -- Only for testing purposes
id-Gost28147-89-CryptoPro-A-ParamSet |
id-Gost28147-89-CryptoPro-B-ParamSet |
id-Gost28147-89-CryptoPro-C-ParamSet |
id-Gost28147-89-CryptoPro-D-ParamSet |
id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet |
id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet |
id-Gost28147-89-CryptoPro-RIC-1-ParamSet
}
Gost28147-89-TC26-ParamSets OBJECT IDENTIFIER ::= {
id-tc26-gost-28147-param-Z,
}
Gost3410-2001-ParamSets OBJECT IDENTIFIER ::= {
id-GostR3410-2001-TestParamSet | -- Only for testing purposes
id-GostR3410-2001-CryptoPro-A-ParamSet |
id-GostR3410-2001-CryptoPro-B-ParamSet |
id-GostR3410-2001-CryptoPro-C-ParamSet |
id-GostR3410-2001-CryptoPro-XchA-ParamSet |
id-GostR3410-2001-CryptoPro-XchB-ParamSet,
...
}
Gost3410-2012-ParamSets OBJECT IDENTIFIER ::= {
id-tc26-gost3410-12-512-paramSetTest | -- Only for testing purposes
id-tc26-gost3410-12-512-paramSetA |
id-tc26-gost3410-12-512-paramSetB,
...
}
ContentEncryptionAlgorithmsGost ALGORITHM-IDENTIFIER ::= {
{ Gost28147-89-Parameters IDENTIFIED BY id-Gost28147-89 } |
{ Gost28147-89-Parameters IDENTIFIED BY id-Gost28147-89-cbc-imm } |
{ Gost28147-89-Parameters IDENTIFIED BY id-Gost28147-89-cnt-imm },
...
}
KeyDerivationAlgorithmsGost ALGORITHM-IDENTIFIER ::= {
{ PBKDF2-Gost3411-2012-512-params IDENTIFIED BY id-PBKDF2 },
...
}
KeyEncryptionAlgorithmsGost ALGORITHM-IDENTIFIER ::= {
{ Gost28147-89-KeyWrapParameters IDENTIFIED BY id-Gost28147-89-CryptoPro-
KeyWrap },
...
}
DigestAlgorithmsGost ALGORITHM-IDENTIFIER ::= {
{ NULL IDENTIFIED BY id-tc26-gost3411-12-512 },
...
}
MacAlgorithmsGost ALGORITHM-IDENTIFIER ::= {
{ NULL IDENTIFIED BY id-tc26-hmac-gost3411-12-512 },
...
}
Gost28147-89-Parameters ::= SEQUENCE {
iv Gost28147-89-IV,
encryptionParamSet OBJECT IDENTIFIER (Gost28147-89-ParamSets)
}
PBKDF2-Gost3411-2012-512-params ::= PBKDF2-params (CONSTRAINED BY {
-- Рекомендации по стандартизации Р 50.1.111-2016 "Информационная технология.
-- Криптографическая защита информации. Парольная защита ключевой информации"
})
Gost28147-89-KeyWrapParameters ::= SEQUENCE {
encryptionParamSet OBJECT IDENTIFIER (Gost28147-89-ParamSets),
ukm OCTET STRING (SIZE (8)) OPTIONAL
}
-- Закрытый ключ
PrivateKeyTypeGost ::= CHOICE {
privateGostR3410-2012Key
[27] PrivateKeyObject {PrivateGostR3410-2012KeyAttributes},
...
}
PrivateGostR3410-2012KeyAttributes ::= SEQUENCE {
value ObjectValue {GostR3410-2012PrivateKey},
keyInfo KeyInfo {GostPrivateKeyParameters, PublicKeyOperations} OPTIONAL,
...
}
GostR3410-2012PrivateKey ::= GostR3410-2012-KeyValueMask
GostR3410-2012-KeyValueMask ::= OCTET STRING (CONSTRAINED BY {
-- Рекомендации по стандартизации Р 50.1.112-2016 "Информационная технология.
-- Криптографическая защита информации. Транспортный ключевой контейнер"
})
GostPrivateKeyParameters ::= CHOICE {
gostR3410-2012ParamSet OBJECT IDENTIFIER
(Gost3410-2001-ParamSets | Gost3410-2012-ParamSets),
privateKeyParamSet [0] GostR3410-2001-ParamSetParameters,
...
}
-- Открытый ключ
PublicKeyTypeGost ::= CHOICE {
publicGostR3410-2012Key
[27] PublicKeyObject {PublicGostR3410-2012KeyAttributes},
...
}
PublicGostR3410-2012KeyAttributes ::= SEQUENCE {
value ObjectValue {GostR3410-2012PublicKeyChoice},
keyInfo KeyInfo {GostPrivateKeyParameters, PublicKeyOperations} OPTIONAL,
... -- For future extensions
}
GostR3410-2012PublicKeyChoice ::= CHOICE {
raw GostR3410-2012Point,
spki SubjectPublicKeyInfoGost,
...
}
GostR3410-2012Point ::= GostR3410-2012-PublicKey
GostR3410-2012-PublicKey ::= OCTET STRING (CONSTRAINED BY {
-- Рекомендации по стандартизации Р 50.1.112-2016 "Информационная технология.
-- Криптографическая защита информации. Транспортный ключевой контейнер"
})
SubjectPublicKeyInfoGost ::= SubjectPublicKeyInfo (CONSTRAINED BY {
-- Методические рекомендации ТК 26 "Техническая спецификация использования алгоритмов ГОСТ Р 34.10, ГОСТ Р 34.11 в профиле сертификата и списке отзыва сертификатов
-- (CRL) инфраструктуры открытых ключей X.509" (проект)
})
-- Secret Keys
SecretKeyTypeGost ::= CHOICE {
gostKey [27] GostSecretKey,
...
}
GostSecretKey ::= SEQUENCE {
keyTypeGost OBJECT IDENTIFIER (GostSecretKeyAlgs),
keyAttr SecretKeyObject {GostSecretKeyAttributes}
}
GostSecretKeyAttributes ::= SEQUENCE {
value ObjectValue {Gost28147-89-KeyValueMask},
keyInfo KeyInfo {GostSecretKeyParameters, SecretKeyOperations} OPTIONAL,
...
}
Gost28147-89-KeyValueMask ::= OCTET STRING (CONSTRAINED BY {
-- Рекомендации по стандартизации Р 50.1.112-2016 "Информационная технология.
-- Криптографическая защита информации. Транспортный ключевой контейнер"
})
GostSecretKeyParameters ::= CHOICE {
cryptoProParamSet OBJECT IDENTIFIER (Gost28147-89-ParamSets),
secretKeyParamSet [0] Gost28147-89-ParamSetParameters,
...
}
SecretKeyOperations ::= Operations
END
Приложение Б
(справочное)
КОНТРОЛЬНЫЙ ПРИМЕР
В данном примере приведено значение контейнера хранения ключей, содержащего:
- начальное заполнение ДСЧ;
- корневой сертификат;
- список отзыва;
- сертификат пользователя 1;
- 256-разрядный закрытый ключ пользователя 1;
- 256-разрядный закрытый ключ пользователя 2;
- открытый ключ пользователя 2;
- 512-разрядный закрытый ключ пользователя 3;
- открытый ключ пользователя 3;
- секретные произвольные данные;
- открытые произвольные данные.
Для защиты секретных данных и обеспечения целостности контейнера использован пароль "123" (шестнадцатеричное представление - 31 32 33).
Значение контейнера хранения ключей (инкапсулированного в AuthenticatedData) в Base64 представлении:
Процесс формирования контейнера:
p15_add_cert: Adding certificate 'Root Certificate of CA':
trusted: 1
ca: 1
certificate (701 bytes):
p15_add_crl: Adding CRL 'CRL from CA':
crl (690 bytes):
p15_add_private_key: Adding key 'Private Key of Andrey Fedotov':
key~usage: DECRYPT SIGN UNWRAP NON_REPUDIATION
key access: SENSITIVE EXTRACTABLE ALWAYSSENSITIVE
key parameters (1-8 - cproA,B,C,XchA,XchB,512test,512A,512B): 1
start date: 2012-05-18 11:03:00
end date: 2013-05-18 11:12:00
key (little-endian):
Remasking private key 'Private Key of Andrey Fedotov':
Unmasked key (little-endian):
Masked key (little-endian):
Mask 1:
Mask 2:
p15_add_cert: Adding certificate 'Certificate of Andrey Fedotov':
trusted: 0
ca: 0
certificate (963 bytes):
p15_add_private_key: Adding key 'New Generated Private Key':
key usage: SIGN
key access: SENSITIVE EXTRACTABLE ALWAYSSENSITIVE
key parameters (1-8 - cproA,B,C,XchA,XchB,512test,512A,512B): 2
start date: absent
end date: absent
key (little-endian):
Remasking private key 'New Generated Private Key':
Unmasked key (little-endian):
Masked key (little-endian):
Mask 1:
Mask 2:
p15_add_public_key: Adding key 'Public Key for New Generated Private Key'
key usage: VERIFY
key parameters (1-8 - cproA,B,C,XchA,XchB,512Test,512A,512B): 2
start date: absent
end date: absent
key (little-endian):
p15_add_private_key: Adding key '512-bit private key':
key usage: SIGN
key access: SENSITIVE EXTRACTABLE ALWAYSSENSITIVE
key parameters (1-8 - cproA,B,C,XchA,XchB,512test,512A,512B): 6
start date: 2013-10-22 12:14:33
end date: 2014-10-18 22:00:00
key (little-endian):
Remasking private key '512-bit private key':
Unmasked key (little-endian):
Masked key (little-endian):
Mask 1:
Mask 2:
p15_add_public_key: Adding key 'Public key for 512-bit private key'
key usage: VERIFY
key parameters (1-8 - cproA,B,C,XchA,XchB,512Test,512A,512B): 6
start date: 2013-10-22 12:14:33
end date: 2014-10-18 22:00:00
key (little-endian):
p15_add_oiddo: Adding abstract data object 'Top-secret Data':
oid: 1.1.456.7890
to_encrypt: 1
data (80 bytes):
p15_add_oiddo: Adding abstract data object 'Public Data':
oid: 1.1.765.432.1
to_encrypt: 0
data (55 bytes):
p15_get_pwkey: Generating the password key from the password using PBKDF2 (HMAC-GOST3411-2012).
Input password:
Iteration count: 2000
Salt:
Generated password key:
Making KEKRecipientInfo for AuthenticatedData:
kekri.kekid.keyIdentifier:
kekri.keyEncryptionAlgorithm.algorithm: 1.2.643.2.2.13.1
kekri.keyEncryptionAlgorithm.parameters.encryptionParamSet (1-4 = cproA-cproD): 1
kekri.keyEncryptionAlgorithm.parameters.ukm:
Key wrap:
Pw key:
Session key:
Wrapped key:
MAC of key:
kekri.encryptedKey content:
AuthenticatedData.macAlgorithm.algorithm: 1.2.643.7.1.1.4.2
AuthenticatedData.digestAlgorithm.algorithm: 1.2.643.7.1.1.2.3
AuthenticatedData.encapContentInfo.eContentType: 1.2.840.113549.1.15.3.1
Making PKCS15Token:
token.keyManagementInfo.keyId:
token.keyManagementInfo.keyInfo.passwordInfo.algId.algorithm:
1.2.840.113549.1.5.12
Making token.keyManagementInfo.keyInfo.passwordInfo.algId.parameters (PBKDF2-params):
par.salt.specified:
par.iterationCount:
par.keyLength: 32
par.prf.algorithm: 1.2.643.7.1.1.4.2
token.keyManagementInfo.keyInfo.passwordInfo.algId.parameters (encoded):
Making token.pkcs15Objects:
Making Factor-TS version DataObject:
Setting DataType.oidDO choice.
oidDO.commonObjectAttributes.label:
oidDO.commonObjectAttributes.flags: 0x00, size=1, unused_bits=6
oidDO.classAttributes.applicationOID: 1.3.6.1.4.1.13312.503.1.3
oidDO.typeAttributes.id: 1.3.6.1.4.1.13312.503.1.3
Choosing oidDO.typeAttributes.value.direct choice.
FactorTSVersion.majorVersion: 4
FactorTSVersion.minorVersion: 0
Encoded oidDO.typeAttributes.value.direct:
Making RandomInitValue DataObject:
Choosing DataType.oidDO choice.
oidDO.commonObjectAttributes.label:
oidDO.commonObjectAttributes.flags: 0xC0, len=1, unused_bits=6
oidDO.classAttributes.applicationOID: 1.3.6.1.4.1.13312.503.1.1
oidDO.typeAttributes.id: 1.3.6.1.4.1.13312.503.1.1
Choosing oidDO.typeAttributes.value.direct-protected.
Making RandomInitValue:
RandomInitValue.randomInit:
RandomInitValue.moreRandom:
Encoded RandomInitValue:
Making EnvelopedData of RandomInitValue:
p15_mk_enveloped_data: Making EnvelopedData.recipientInfos (1 kekri):
kekri.kekid.keyIdentifier:
kekri.keyEncryptionAlgorithm.algorithm: 1.2.643.2.2.13.1
kekri.keyEncryptionAlgorithm.parameters.encryptionParamSet (1-4 = cproA-cproD): 1
kekri.keyEncryptionAlgorithm.parameters.ukm:
Key wrap:
Pw key:
Session key:
Wrapped key:
MAC of key:
kekri.encryptedKey content:
EnvelopedData.encryptedContentInfo.contentType: 1.2.840.113549.1.7.1
EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.algorithm:
1.2.643.2.4.3.2.2
Making EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.parameters
(Gost28147_89_Parameters):
par.iv
par.encryptionParamSet (1-4 - cproA-cproD): 1
Encoded Gost28147-89-Parameters:
Making EnvelopedData.encryptedContentInfo.encryptedContent (enc data + imit):
EnvelopedData.encryptedContentInfo.encryptedContent (w/o ostr header):
Adding token.pkcs15Objects.trustedCertificates element:
Making object for certificate 'Root Certificate of CA':
Choosing CertificateType. x509Certificate choice.
x509.commonObjectAttributes.label:
x509.commonObjectAttributes.flags: 0x00, len=1, unused_bits=6
x509.classAttributes.iD:
x509.classAttributes.authority: true
Choosing x509.typeAttributes.value.direct choice.
Certificate (701 bytes):
x509.typeAttributes.subject:
x509.typeAttributes.issuer:
Adding token.pkcs15Objects.dataObjects (CRL) element:
Making CRL object 'CRL from CA'
Choosing DataType.oidDO choice.
oidDO.commonObjectAttributes.label:
oidDO.commonObjectAttributes.flags: 0x00, len=1, unused_bits=6
oidDO.classAttributes.applicationOID: 1.3.6.1.4.1.13312.503.1.2
oidDO.typeAttributes.id: 1.3.6.1.4.1.13312.503.1.2
Choosing oidDO.typeAttributes.value.direct choice.
Making CRLContainer structure:
CRLContainer.iD:
CRLContainer.issuer:
CRLContainer.crl (690 bytes).
Encoded oidDO.typeAttributes.value.direct (CRLContainer):
Adding token.pkcs15Objects.privateKeys element:
p15_mk_prkey_obj: Making private key 'Private Key of Andrey Fedotov' object:
Choosing PrivateKeyType.privateGostR3410_2012Key choice.
key.commonObjectAttributes.label:
key.commonObjectAttributes.flags: 0x80, len=1, unused_bits=6
key.classAttributes.iD:
key.classAttributes.usage: len=2, unused_bits=6:
key.classAttributes.accessFlags: len=1, unused_bits=3: 0xE0
key.classAttributes.startDate:
key.classAttributes.endDate:
key.subClassAttributes.subjectName:
Encoded GostPrivateKey (98 bytes):
Wrapping GostPrivateKey to EnvelopedData (key.typeAttributes.value.direct-protected:
p15_mk_enveloped_data: Making EnvelopedData.recipientInfos (1 kekri):
kekri.kekid.keyIdentifier:
kekri.keyEncryptionAlgorithm.algorithm: 1.2.643.2.2.13.1
kekri.keyEncryptionAlgorithm.parameters.encryptionParamSet (1-4 = cproA-cproD): 1
kekri.keyEncryptionAlgorithm.parameters.ukm:
Key wrap:
Pw key:
Session key:
Wrapped key:
MAC of key:
kekri.encryptedKey content:
EnvelopedData.encryptedContentInfo.contentType: 1.2.840.113549.1.7.1
EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.algorithm:
1.2.643.2.4.3.2.2
Making EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.parameters
(Gost28147_89_Parameters):
par.iv
par.encryptionParamSet (1-4 - cproA-cproD): 1
Encoded Gost28147-89-Parameters:
Making EnvelopedData.encryptedContentInfo.encryptedContent (enc data + imit):
EnvelopedData.encryptedContentInfo.encryptedContent (w/o ostr header):
Making key.typeAttributes.keyInfo.paramsAndOps.parameters:
pars.gostR3410-2012ParamSet (1-8 - cproA,B,C,XchA,XchB,512Test,512A,512B): 1
Adding token.pkcs15Objects.certificates element:
Making object for certificate 'Certificate of Andrey Fedotov':
Choosing CertificateType.x509Certificate choice.
x509.commonObjectAttributes.label:
x509.commonObjectAttributes.flags: 0x00, len=1, unused_bits=6
x509.classAttributes.iD:
Choosing x509.typeAttributes.value.direct choice.
Certificate (963 bytes).
x509.typeAttributes.subject:
x509.typeAttributes.issuer:
Adding token.pkcs15Objects.privateKeys element:
pl5_mk_prkey_obj: Making private key 'New Generated Private Key' object:
Choosing PrivateKeyType.privateGostR3410_2012Key choice.
key.commonObjectAttributes.label:
key.commonObjectAttributes.flags: 0x80, len=1, unused_bits=6
key.classAttributes.iD:
key.classAttributes.usage: len=2, unused_bits=6:
key.classAttributes.accessFlags: len=1, unused_bits=3: 0xE0
Encoded GostPrivateKey (98 bytes):
Wrapping GostPrivateKey to EnvelopedData (key.typeAttributes.value.direct-protected:
p15_mk_enveloped_data: Making EnvelopedData.recipientInfos (1 kekri):
kekri.kekid.keyIdentifier:
kekri.keyEncryptionAlgorithm.algorithm: 1.2.643.2.2.13.1
kekri.keyEncryptionAlgorithm.parameters.encryptionParamSet (1-4 = cproA-cproD): 1
kekri.keyEncryptionAlgorithm.parameters.ukm:
Key wrap:
Pw key:
Session key:
Wrapped key:
MAC of key:
kekri.encryptedKey content:
EnvelopedData.encryptedContentInfo.contentType: 1.2.840.113549.1.7.1
EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.algorithm:
1.2.643.2.4.3.2.2
Making EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.parameters
(Gost28147_89_Parameters):
par.iv
par.encryptionParamSet (1-4 - cproA-cproD): 1
Encoded Gost28147-89-Parameters:
Making EnvelopedData.encryptedContentInfo.encryptedContent (enc data + imit):
EnvelopedData.encryptedContentInfo.encryptedContent (w/o ostr header):
Making key.typeAttributes.keyInfo.paramsAndOps.parameters:
pars.gostR3410-2012ParamSet (1-8 - cproA,B,C,XchA,XchB,512Test,512A,512B): 2
Adding token.pkcs15Objects.publicKeys element:
p15_mk_pubkey_obj: Making public key 'Public Key for New Generated Private Key'
object:
Choosing PublicKeyType.publicGostR3410_2012Key choice.
key.commonObjectAttributes.label:
key.commonObjectAttributes.flags: 0x00, len=1, unused_bits=6
key.classAttributes.iD:
key.classAttributes.usage: len=2, unused_bits=6:
Making key.typeAttributes.value:
Choosing key.typeAttributes.value.direct.raw choice.
GostR3410Point (w/o ostr header):
Making key.typeAttributes.keyInfo.paramsAndOps.parameters:
pars.gostR3410-2012ParamSet (1-8 - cproA,B,C,XchA,XchB,512Test,512A,512B): 2
Adding token.pkcs15Objects.privateKeys element:
p15_mk_prkey_obj: Making private key '512-bit private key' object:
Choosing PrivateKeyType.privateGostR3410_2012Key choice.
key.commonObjectAttributes.label:
key.commonObjectAttributes.flags: 0x80, len=1, unused_bits=6
key.classAttributes.iD:
key.classAttributes.usage: len=2, unused_bits=6:
key.classAttributes.accessFlags: len=1, unused_bits=3: 0xE0
key.classAttributes.startDate:
key.classAttributes.endDate:
Encoded GostPrivateKey (195 bytes):
Wrapping GostPrivateKey to EnvelopedData (key.typeAttributes.value.direct-protected:
p15_mk_enveloped_data: Making EnvelopedData.recipientInfos (1 kekri):
kekri.kekid.keyIdentifier:
kekri.keyEncryptionAlgorithm.algorithm: 1.2.643.2.2.13.1
kekri.keyEncryptionAlgorithm.parameters.encryptionParamSet (1-4 = cproA-cproD): 1
kekri.keyEncryptionAlgorithm.parameters.ukm:
Key wrap:
Pw key:
Session key:
Wrapped key:
MAC of key:
kekri.encryptedKey content:
EnvelopedData.encryptedContentInfo.contentType: 1.2.840.113549.1.7.1
EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.algorithm:
1.2.643.2.4.3.2.2
Making EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.parameters
(Gost28147_89_Parameters):
par.iv
par.encryptionParamSet (1-4 - cproA-cproD): 1
Encoded Gost28147-89-Parameters:
Making EnvelopedData.encryptedContentInfo.encryptedContent (enc data + imit):
EnvelopedData.encryptedContentInfo.encryptedContent (w/o ostr header):
Making key.typeAttributes.keyInfo.paramsAndOps.parameters:
pars.gostR3410-2012ParamSet (1-8 - cproA,B,C,XchA,XchB,512Test,512A,512B): 6
Adding token.pkcs15Objects.publicKeys element:
p15_mk_pubkey_obj: Making public key 'Public key for 512-bit private key' object:
Choosing PublicKeyType.publicGostR3410_2012Key choice.
key.commonObjectAttributes.label:
key.commonObjectAttributes. flags: 0x00, len=1, unused_bits=6
key.classAttributes.iD:
key.classAttributes.usage: len=2, unused_bits=6:
key.classAttributes.startDate:
key.classAttributes.endDate:
Making key.typeAttributes.value:
Choosing key.typeAttributes.value.direct.raw choice.
GostR3410Point (w/o ostr header):
Making key.typeAttributes.keyInfo.paramsAndOps.parameters:
pars.gostR3410-2012ParamSet (1-8 - cproA,B,C,XchA,XchB,512Test,512A,512B): 6
Adding token.pkcs15Objects.dataObjects (abstract data) element:
Making abstract data object 'Top-secret Data'
Choosing DataType.oidDO choice.
oidDO.commonObjectAttributes.label:
oidDO.commonObjectAttributes.flags: 0xC0, len=1, unused_bits=6
oidDO.classAttributes.applicationOID: 1.3.6.1.4.1.13312.503.1.4
oidDO.typeAttributes.id: 1.1. 456.7890
Choosing oidDO.typeAttributes.value.direct-protected choice.
Data to encrypt (wrapped in OCTET STRING): (82 bytes):
Wrapping the data to EnvelopedData (oidDO.typeAttributes.value.direct-protected):
p15_mk_enveloped_data: Making EnvelopedData.recipientInfos (1 kekri):
kekri.kekid.keyIdentifier:
kekri.keyEncryptionAlgorithm.algorithm: 1.2.643.2.2.13.1
kekri.keyEncryptionAlgorithm.parameters.encryptionParamSet (1-4 = cproA-cproD): 1
kekri.keyEncryptionAlgorithm.parameters.ukm:
Key wrap:
Pw key:
Session key:
Wrapped key:
MAC of key:
kekri.encryptedKey content:
EnvelopedData.encryptedContentInfo.contentType: 1.2.840.113549.1.7.1
EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.algorithm:
1.2.643.2.4.3.2.2
Making EnvelopedData.encryptedContentInfo.contentEncryptionAlgorithm.parameters
(Gost28147_89_Parameters):
par.iv
par.encryptionParamSet (1-4 - cproA-cproD): 1
Encoded Gost28147-89-Parameters:
Making EnvelopedData.encryptedContentInfo.encryptedContent (enc data + imit):
EnvelopedData.encryptedContentInfo.encryptedContent (w/o ostr header):
Adding token.pkcs15Objects.dataObjects (abstract data) element:
Making abstract data object 'Public Data'
Choosing DataType.oidDO choice.
oidDO.commonObjectAttributes.label:
oidDO.commonObjectAttributes.flags: 0x40, len=1, unused_bits=6
oidDO.classAttributes.applicationOID: 1.3.6.1.4.1.13312.503.1.4
oidDO.typeAttributes.id: 1.1.765.432.1
Choosing oidDO.typeAttributes.value.direct choice.
Data (wrapped in OCTET STRING) oidDO.typeAttributes.value.direct:
AuthenticatedData.encapContentInfo.eContent (w/o ostr header) (5855 bytes):
Message digest (hash) of the eContent (ostr header not included):
Making AuthenticatedData.authAttrs:
attr1 (id-contentType):
attr1.attrType: 1.2. 840.113549.1.9.3
attr1.attrValue1: 1.2. 840.113549.1.15.3.1
attr2 (id-messageDigest):
attr2.attrType: 1.2.840.113549.1.9.4
attr2.attrValuel: ostr len=64 - message digest (see above)
Encoded authAttrs (standalone):
Calculating HMAC of authAttr:
Key:
authAttrs HMAC (AuthenticatedData.mac):
БИБЛИОГРАФИЯ
[1]
PKCS #15
PKCS#15 (версия 1.1) Формат представления информации в криптографическом токене [Cryptographic Token Information Format Standard (v.1.1), RSA Laboratories]
[2]
Методические рекомендации ТК 26
Идентификаторы объектов (OID) технического комитета по стандартизации "Криптографическая защита информации" (ТК 26OID)
[3]
Техническая спецификация ТК 26
Использование алгоритмов ГОСТ Р 34.10 и ГОСТ Р 34.11 в профиле сертификата и списке отзыва сертификатов (CRL) инфраструктуры открытых ключей X.509 (ТК26ИОК)
[4]
RFC4357
В. Попов, И. Курепкин, С. Леонтьев. Дополнительные алгоритмы шифрования для использования с алгоритмами по ГОСТ 28147-89, ГОСТ Р 34.10-94, ГОСТ Р 34.10-2001 и ГОСТ Р 34.11-94 [Popov V., Kurepkin I. and S. Leontiev. Additional Cryptographic Algorithms for Use with GOST 28147-89, GOST R 34.10-94, GOST R 34.10-2001 and GOST R 34.11-94 Algorithms, Informational, IETF RFC4357, January 2006]
[5]
Методические рекомендации ТК 26
Задание узлов замены блока подстановки алгоритма шифрования ГОСТ 28147-89 (ТК26УЗ)
[6]
RFC5652
Р. Хаусли. Синтаксис криптографических сообщений [R. Housley. Cryptographic Message Syntax (CMS), Standards Track, IETF RFC5652, September 2009]
[7]
RFC4490
С. Леонтьев, Г. Чудов. Использование алгоритмов ГОСТ 28147-89, ГОСТ Р 34.11-94, ГОСТ Р 34.10-94 и ГОСТ Р 34.10-2001 с синтаксисом криптографических сообщений (CMS) [Leontiev S., Chudov G. Using the GOST 28147-89, GOST R 34.11-94, GOST R 34.10-94 and GOST R 34.10-2001 Algorithms with Cryptographic Message Syntax (CMS), Standards Track, IETF RFC4490, May 2006]
[8]
Методические рекомендации ТК 26
Использование алгоритмов ГОСТ 28147-89, ГОСТ Р 34.11 и ГОСТ Р 34.10 в криптографических сообщениях формата CMS (ТК26CMS)