rfc9548.original.xml   rfc9548.xml 
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- [CS] updated by Chris 10/18/22 --> <!-- [ST] updated by Sarah 01/03/24 -->
<!-- draft submitted in xml v3 --> <!-- draft submitted in xml v3 -->
<!DOCTYPE rfc [ <!DOCTYPE rfc [
<!ENTITY nbsp "&#160;"> <!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;"> <!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;"> <!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;"> <!ENTITY wj "&#8288;">
]> ]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="independent" cat <rfc xmlns:xi="http://www.w3.org/2001/XInclude"
egory="info" docName="draft-pkcs12-gost-08" ipr="trust200902" tocInclude="true" submissionType="independent"
tocDepth="4" symRefs="true" sortRefs="true" updates="" obsoletes="" xml:lang="en category="info"
" version="3"> docName="draft-pkcs12-gost-08"
number="9548"
ipr="trust200902"
tocInclude="true"
tocDepth="4"
symRefs="true"
sortRefs="true"
updates=""
obsoletes=""
xml:lang="en"
version="3">
<!-- xml2rfc v2v3 conversion 3.12.10 --> <!-- xml2rfc v2v3 conversion 3.12.10 -->
<front> <front>
<title abbrev="GOST usage in password-based pkcs12"> <title abbrev="GOST Usage in Password-Based PKCS #12">Generating
Generating the Transport Key Containers Using the GOST Algorithms Transport Key Containers Using the GOST Algorithms</title>
</title> <seriesInfo name="RFC" value="9548"/>
<author fullname="Ekaterina Karelina" initials="E." role="editor" surname="K arelina"> <author fullname="Ekaterina Karelina" initials="E." role="editor" surname="K arelina">
<organization>InfoTeCS</organization> <organization>InfoTeCS</organization>
<address> <address>
<postal> <postal>
<street>2B stroenie 1, ul. Otradnaya</street> <street>2B stroenie 1, ul. Otradnaya</street>
<city>Moscow</city> <city>Moscow</city>
<code>127273</code> <code>127273</code>
<country>Russian Federation</country> <country>Russian Federation</country>
</postal> </postal>
<email>Ekaterina.Karelina@infotecs.ru</email> <email>Ekaterina.Karelina@infotecs.ru</email>
</address> </address>
</author> </author>
<date year="2023" month="December"/> <date year="2024" month="March"/>
<keyword>the transport key containers, certificates, GOST algorithms, pkcs12, go
st, PFX</keyword> <keyword>transport key containers</keyword>
<keyword>certificates</keyword>
<keyword>GOST algorithms</keyword>
<keyword>pkcs12</keyword>
<keyword>gost</keyword>
<keyword>PFX</keyword>
<abstract> <abstract>
<t> This document specifies how to use "PKCS #12: Personal Information Exchang e Syntax v1.1" (RFC 7292) to generate the transport key containers for storing k eys and certificates in conjunction with the <t> This document specifies how to use "PKCS #12: Personal Information Exchang e Syntax v1.1" (RFC 7292) to generate transport key containers for storing keys and certificates in conjunction with the
Russian national standard GOST algorithms. Russian national standard GOST algorithms.
</t> </t>
<t> <t>
This specification has been developed outside the IETF. The purpose of publication being to This specification has been developed outside the IETF. The purpose of publication is to
facilitate interoperable implementations that wish to support the facilitate interoperable implementations that wish to support the
GOST algorithms. This document does not imply IETF endorsement of th e cryptographic algorithms GOST algorithms. This document does not imply IETF endorsement of th e cryptographic algorithms
used here. used here.
</t> </t>
</abstract> </abstract>
</front> </front>
<middle> <middle>
<section anchor="Introduction"> <section anchor="Introduction">
<name>Introduction</name> <name>Introduction</name>
<t> <t>
This document provides a specification of the usage of GOST algorith ms with PKCS #12 v1.1. This document provides a specification of the usage of GOST algorith ms with PKCS #12 v1.1.
</t> </t>
<t> <t>
PKCS #12 v1.1 describes a syntax for transfer of personal informatio n such as private keys, certificates, various secrets. PKCS #12 v1.1 describes a syntax for transfer of personal informatio n such as private keys, certificates, and various secrets.
</t> </t>
<t> <t>
This memo describes the creating of transport key containers for key This memo describes the creation of transport key containers for key
s and certificates of electronic signature verification keys which are created i s and certificates using the GOST R 34.10-2012 algorithm.
n accordance with GOST R 34.10–2012 algorithm. The GOST R 34.11-2012 algorithm is used to ensure the integrity of t
The GOST R 34.11-2012 algorithm is used to ensure integrity of trans ransport key containers.
port key containers. </t>
<t>
Caution:
</t>
<t>
This specification is not a standard and does not have IETF community
consensus. It makes use of a cryptographic algorithm that is a national
standard for Russia. Neither the IETF nor the IRTF has analyzed that algor
ithm
for suitability for any given application, and it may contain either inten
ded
or unintended weaknesses.
</t> </t>
</section> </section>
<section> <section>
<name>Conventions Used in This Document</name> <name>Conventions Used in This Document</name>
<t> <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> "<bcp14>SHOULD NOT</bcp14>",
RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
be interpreted as are to be interpreted as described in BCP&nbsp;14
described in BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
when, and only when, they appear in all capitals, as shown here. when, they appear in all capitals, as shown here.</t>
</t>
</section> </section>
<section anchor="Definition"> <section anchor="Definition">
<name>Basic Terms and Definitions</name> <name>Basic Terms and Definitions</name>
<t> <t>
Throughout this document, the following notation is used: Throughout this document, the following notations are used:
</t> </t>
<table align="center"> <dl spacing="normal" newline="false">
<name>Terms and Definitions</name> <dt>P</dt>
<thead> <dd>a password encoded as a Unicode UTF-8 string</dd>
<tr> <dt>S</dt>
<th>Notation</th> <dd>a random initializing value</dd>
<th>Definition</th> <dt>V<sub>s</sub></dt>
</tr> <dd>the set of byte strings of length s, where s &gt;= 0; the string
</thead> 𝑏 = (b<sub>1</sub>,...,b<sub>s</sub>) belongs to the set V<sub>s</sub> if b<sub
<tbody> >1</sub>,...,b<sub>s</sub>∈{0,...,255}</dd>
<tr> <dt>|A|</dt>
<td align="left">P</td> <dd>the number of components (a length) of the vector A belonging to
<td align="left">a password encoded as a Unicode UTF-8 string</td> V<sup>*</sup> (if A is an empty string, then |A| = 0)</dd>
</tr> <dt>A||C</dt>
<tr> <dd>a concatenation of two byte strings A, C from V<sub>s</sub>, i.e
<td align="left">S</td> .,
<td align="left">a random initializing value</td> a string from V<sub>|A|+|C|</sub>, where the left substring from V<s
</tr> ub>|A|</sub>
<tr> is equal to the string A and the right substring from V<sub>|C|</sub
<td align="left">V<sup>*</sup></td> > is
<td align="left">the set of all binary row vectors of finite length equal to the string C: A = (a<sub>n<sub>1</sub></sub>,...,a<sub>1</s
(hereinafter referred to as vectors) including empty string</td> ub>) in V<sub>n<sub>1</sub></sub> and C =
</tr> (c<sub>n<sub>2</sub></sub>,...,c<sub>1</sub>) in V<sub>n<sub>2</sub><
<tr> /sub>, res = (a<sub>n<sub>1</sub></sub>,...,a<sub>1</sub>,c<sub>n<sub>2</sub></s
<td align="left">V<sub>s</sub></td> ub>,...,c<sub>1</sub>) in V<sub>n<sub>1</sub>+n<sub>2</sub></sub>)</dd>
<td align="left">the set of all binary row vectors of length s, s &g <dt>F_q</dt>
t;= 0; if s = 0, then the set V<sub>s</sub> consists of an empty string of lengt <dd>a finite prime field represented as a set of q integers {0,1,...
h 0</td> ,q - 1}, where q > 3 - prime number</dd>
</tr> <dt>b mod q</dt>
<tr> <dd>the minimum non-negative number comparable to b modulo p</dd>
<td align="left">|A|</td> <dt>INT(b)</dt>
<td align="left">the number of components (a length) of the vector A <dd>integer INT(b) = b_1+b_2∙256+...+b_s∙ 256^(s-1), where b∈ V<sub>s</sub></dd>
belonging to V<sup>*</sup> (if A is an empty string, then |A| = 0)</td> </dl>
</tr>
<tr>
<td align="left">A||C</td>
<td align="left">a concatenation of two octet strings A, C, i.e.,
a vector from V<sub>|A|+|C|</sub>, where the left subvector from V<s
ub>|A|</sub>
is equal to the vector A and the right subvector from V<sub>|C|</sub
> is
equal to the vector C: A = (a<sub>n<sub>1</sub></sub>,...,a<sub>1</s
ub>) in V<sub>n<sub>1</sub></sub> and C =
(c<sub>n<sub>2</sub></sub>,..., c<sub>1</sub>) in V<sub>n<sub>2</sub
></sub>, res = (a<sub>n<sub>1</sub></sub>,...,a<sub>1</sub>,c<sub>n<sub>2</sub><
/sub>,...,
c<sub>1</sub>) in V<sub>n<sub>1</sub>+n<sub>2</sub></sub>)</td>
</tr>
<tr>
<td align="left">F_q</td>
<td align="left">a finite prime field represented as a set of q inte
gers {0,1,..., q - 1}, where q > 3 prime number</td>
</tr>
<tr>
<td align="left">b mod q</td>
<td align="left">the minimum non-negative number comparable to b mod
ulo p</td>
</tr>
</tbody>
</table>
<t> <t>
This document uses the following abbreviations and definitions:</t> This document uses the following terms and abbreviations:</t>
<table align="center"> <dl spacing="normal" newline="false">
<name>Abbreviations and Definition</name> <dt>Signature</dt>
<thead> <dd>one or more data elements resulting from the signature process (
<tr> Clause 3.12 of <xref target="ISO14888-1"/>).
<th>Abbreviations and Terms</th> Note: The terms "digital signature", "electronic signature", and "el
<th>Definition</th> ectronic digital signature" are considered
</tr> equivalent in this document.</dd>
</thead> <dt>Signature key</dt>
<tbody> <dd>set of private data elements specific to an entity and usable on
<tr> ly by this entity
<td align="left">Signature</td> in the signature process (Clause 3.13 of <xref target="ISO14
<td align="left">one or more data elements resulting from the signat 888-1"/>).
ure process (clause 3.12 of <xref target="ISO14888-1"/>). Note: Sometimes called a private key.</dd>
Note: the terms "digital signature", "electronic signature", and "el <dt>Verification key</dt>
ectronic digital signature" are considered <dd>set of public data elements that is mathematically related to an
equivalent in this document. entity's signature key
</td> and is used by the verifier in the verification process (Cla
</tr> use 3.16 of <xref target="ISO14888-1"/>).
<tr> Note: Sometimes called a public key.</dd>
<td align="left">Signature key</td> <dt>ASN.1</dt>
<td align="left">set of private data elements specific to an entity <dd>Abstract Syntax Notation One, as defined in <xref target="X.680"
and usable only by this entity />.</dd>
in the signature process (clause 3.13 of <xref target="ISO14 <dt>BER</dt>
888-1"/>). <dd>Basic Encoding Rules, as defined in <xref target="X.690"/>.</dd>
Note: Sometimes called a private key.</td> <dt>HMAC_GOSTR3411</dt>
</tr> <dd>Hash-Based Message Authentication Code. A
<tr>
<td align="left">Verification key</td>
<td align="left">set of public data elements which is mathematically
related to an entity's signature key
and which is used by the verifier in the verification proces
s (clause 3.16 of <xref target="ISO14888-1"/>).
Note: Sometimes called a public key.</td>
</tr>
<tr>
<td align="left">ASN.1</td>
<td align="left">Abstract Syntax Notation One, as defined in <xref t
arget="X.680"/>.</td>
</tr>
<tr>
<td align="left">BER</td>
<td align="left">Basic Encoding Rules, as defined in <xref target="X
.690"/>.</td>
</tr>
<tr>
<td align="left">HMAC_GOSTR3411</td>
<td align="left">Hashed-Based Message Authentication Code. A
function for calculating a Message Authentication Code (MAC) based function for calculating a Message Authentication Code (MAC) based
on the GOST R 34.11-2012 hash function (see <xref on the GOST R 34.11-2012 hash function (see <xref
target="RFC6986"/>) with 512-bit output in accordance with <xref target="RFC6986"/>) with 512-bit output in accordance with <xref
target="RFC2104"/>.</td> target="RFC2104"/>.</dd>
</tr> </dl>
</tbody>
</table>
</section> </section>
<section anchor="PFX"> <section anchor="PFX">
<name>PFX</name> <name>PFX</name>
<t> <t>
The transport key container (PFX, see <xref target="RFC7292"/>) is d esigned for secure storage and data transfer. The transport key container (PFX; see <xref target="RFC7292"/>) is d esigned for secure storage and data transfer.
The scope of this document is to define how the transport key contai ner is used for private key and certificate protection with a password when GOST R 34.10-2012 is applied. The scope of this document is to define how the transport key contai ner is used for private key and certificate protection with a password when GOST R 34.10-2012 is applied.
.
<!-- [rfced] Section 4: This sentence as written seems to indicate
that "PFX" means "transport key container". However, we see that
RFC 7292 says that "PFX" is sometimes expanded as "Personal
Information Exchange". Are some words missing from this sentence, or
do "PFX", "transport key container", and "Personal Information
Exchange" all mean the same thing?
Original:
The transport key container (PFX, see [RFC7292]) is designed for
secure storage and data transfer.
Possibly (if all three terms mean the same thing):
The transport key container (PFX, which is sometimes expanded as
"Personal Information Exchange"; see [RFC7292]) is designed for
secure storage and data transfer. -->
</t> </t>
<section anchor="StrucurePFX"> <section anchor="StrucurePFX">
<name>Structure of PFX</name> <name>Structure of PFX</name>
<t>In accordance with <xref target="RFC7292"/> the transport key container has the following structure:</t> <t>In accordance with <xref target="RFC7292"/>, the transport ke y container has the following structure:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
PFX ::= SEQUENCE PFX ::= SEQUENCE
{ {
version INTEGER {v3(3)}(v3,...), version INTEGER {v3(3)}(v3,...),
authSafe ContentInfo, authSafe ContentInfo,
macData MacData OPTIONAL macData MacData OPTIONAL
}]]></sourcecode> }]]></sourcecode>
<t>The fields of PFX have the following meanings:</t> <t>The fields of the PFX have the following meanings:</t>
<ul spacing="normal"><li>version is the syntax version numbe <ul spacing="normal"><li>version is the syntax version numbe
r; the only allowed value for this specification is 3;</li> r; the only allowed value for this specification is 3.</li>
<li>authSafe contains the data of type ContentInfo. In the c <li>authSafe contains the data of type ContentInfo. In the c
ase of password integrity mode the authSafe.content field has a Data type value ase of password integrity mode, the authSafe.content field has a Data type value
and contains a BER-encoded value of AuthenticatedSafe structure;</li> and contains a BER-encoded value of the AuthenticatedSafe structure.</li>
<li>macData has a MacData type and in the case of password i <li>macData has a MacData type; in the case of password inte
ntegrity mode the macData field should contain the information about algorithm a grity mode, the macData field should contain information about the algorithm and
nd parameters for a password key generation. parameters for password key generation.
The integrity control is ensured by using the HMAC_GOSTR Integrity control is ensured by using the HMAC_GOSTR3411
3411_2012_512 algorithm: the macData.mac.digestAlgorithm.algorithm field contain _2012_512 algorithm: the macData.mac.digestAlgorithm.algorithm field contains th
s the HMAC_GOSTR3411_2012_512 algorithm identifier (see <xref target="SecurityM" e HMAC_GOSTR3411_2012_512 algorithm identifier (see <xref target="SecurityM"/>).
/>).
When processing a transport key container, this field sh ould be checked first.</li> When processing a transport key container, this field sh ould be checked first.</li>
</ul> </ul>
</section> </section>
<section anchor="AuthenticatedSafe"> <section anchor="AuthenticatedSafe">
<name>AuthenticatedSafe</name> <name>AuthenticatedSafe</name>
<t>The AuthenticatedSafe structure is a sequence of ContentInfo v alues (see <xref target="RFC5652"/>):</t> <t>The AuthenticatedSafe structure is a sequence of ContentInfo v alues (see <xref target="RFC5652"/>):</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
AuthenticatedSafe ::= SEQUENCE OF ContentInfo AuthenticatedSafe ::= SEQUENCE OF ContentInfo
-- Data if unencrypted -- Data if unencrypted
-- EncryptedData if password-encrypted -- EncryptedData if password-encrypted
-- EnvelopedData if public key-encrypted -- EnvelopedData if public key-encrypted
]]></sourcecode> ]]></sourcecode>
<section anchor="Unencrypted"> <section anchor="Unencrypted">
<name>Unencrypted Data</name> <name>Unencrypted Data</name>
<t>If the data is not encrypted then the content field is the BE R-encoded value of the SafeContents structure. The contentType field is set to t he id-data type.</t> <t>If the data is not encrypted, then the content field is the B ER-encoded value of the SafeContents structure. The contentType field is set to the id-data type.</t>
</section> </section>
<section anchor="Password-encrypted"> <section anchor="Password-encrypted">
<name>Password-encrypted data</name> <name>Password-Encrypted Data</name>
<t>When password integrity mode is used the data is represented a <t>When password integrity mode is used, the data is represented
s an EncryptedData structure (<xref target="RFC5652"/>). as an EncryptedData structure (see <xref target="RFC5652"/>).
The encryption algorithm and parameters have the following values The encryption algorithm and parameters have the following values
:</t> :
<!-- [rfced] Section 4.2, Section 4.3, and Appendix A: We do not see
"Data structure" or "EncryptedData structure" in RFC 5652. Will
these sentences be clear to readers?
Original:
When password integrity mode is used the data is represented as an
EncryptedData structure ([RFC5652]).
...
If the certificate is not encrypted, the CertBag structure is placed
in the Data structure (see [RFC5652]). If the certificate is
encrypted, the CertBag structure is placed in the EncryptedData
structure (see [RFC5652]).
...
In this example the PKCS8SHroudedKeybag structure is used to store
the key, which is placed in the Data structure. The certBag
structure is used to store the certificate, which is placed in the
Data structure.
...
In this example the PKCS8SHroudedKeybag structure is used to store
the key, which is placed in the Data structure (see [RFC5652]). The
certBag structure is used to store the certificate, which is placed
in the EncryptedData structure (see [RFC5652]). -->
</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
ContentEncryptionAlgorithmIdentifier ::= SEQUENCE ContentEncryptionAlgorithmIdentifier ::= SEQUENCE
{ {
encryptionAlgorithmOID OBJECT IDENTIFIER, encryptionAlgorithmOID OBJECT IDENTIFIER,
parameters PBES2-params parameters PBES2-params
} }
]]></sourcecode> ]]></sourcecode>
<t>The PBES2-params type is defined in <xref target="RFC9337"/>. <t>The PBES2-params type is defined in <xref target="RFC9337"/>.
The content should be encrypted according to the encryption algorithm in the PB The content should be encrypted according to the encryption algorithm in the PB
ES2 scheme, described in <xref target="RFC9337"/>. ES2 scheme, as described in <xref target="RFC9337"/>.
The following identifier MUST be specified in EncryptedData.Encr The following identifier <bcp14>MUST</bcp14> be specified in the
yptedContentInfo.contentEncryptionAlgorithm.encryptionAlgorithmOID field:</t> EncryptedData.EncryptedContentInfo.contentEncryptionAlgorithm.<br/>
encryptionAlgorithmOID field:
</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
{ {
iso(1) member-body(2) us(840) rsadsi(113549) iso(1) member-body(2) us(840) rsadsi(113549)
pkcs(1) pkcs-5(5) pbes2(13) pkcs(1) pkcs-5(5) pbes2(13)
} }
]]></sourcecode> ]]></sourcecode>
<t>The encrypted content is specified in EncryptedData.Encrypted ContentInfo.encryptedContent field.</t> <t>The encrypted content is specified in the EncryptedData.Encry ptedContentInfo.encryptedContent field.</t>
</section> </section>
</section> </section>
<section anchor="SC"> <section anchor="SC">
<name>SafeContents and SafeBag</name> <name>SafeContents and SafeBag</name>
<t>In accordance with <xref target="RFC7292"/> the SafeContents structure is a sequence of SafeBag:</t> <t>In accordance with <xref target="RFC7292"/>, the SafeContents structure is a sequence of SafeBag:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
SafeContents ::= SEQUENCE OF SafeBag SafeContents ::= SEQUENCE OF SafeBag
]]></sourcecode> ]]></sourcecode>
<t>where</t> <t>where</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
SafeBag ::= SEQUENCE SafeBag ::= SEQUENCE
{ {
bagId BAG-TYPE.&id ({PKCS12BagSet}) bagId BAG-TYPE.&id ({PKCS12BagSet})
bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}) bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId})
bagAttributes SET OF PKCS12Attribute OPTIONAL bagAttributes SET OF PKCS12Attribute OPTIONAL
} }
]]></sourcecode> ]]></sourcecode>
<t>The fields of SafeBag have the following meanings:</t> <t>The fields of SafeBag have the following meanings:</t>
<ul spacing="normal"><li>bagId is an object identifier, it d <ul spacing="normal"><li>bagId is an object identifier; it d
efines the type of object;</li> efines the type of object.</li>
<li>bagValue is the value of an object;</li> <li>bagValue is the value of an object.</li>
<li>bagAttributes contains the users names, the key identifi <li>bagAttributes contains the users' names, the key identif
ers and other additional information. It is optional.</li> iers, and other additional information. This field is optional.</li>
</ul>
<t>See <xref target="RFC7292"/> Section 4.2. for the different b
ag types.
This document describes the 2 object types of SafeBag structure:
</t>
<ul spacing="normal">
<li>pkcs8ShroudedKeyBag,</li>
<li>certBag.</li>
</ul> </ul>
<t>When password integrity mode is used the private key has the <t>See <xref target="RFC7292" sectionFormat="comma" section="4.2
following structure:</t> "/>
for the different bag types.
This document describes the two object types of the SafeBag stru
cture:</t>
<ol spacing="normal">
<li>pkcs8ShroudedKeyBag</li>
<li>certBag</li>
</ol>
<t>When password integrity mode is used, the private key has the
following structure:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
pkcs8ShroudedKeyBag BAG-TYPE ::= pkcs8ShroudedKeyBag BAG-TYPE ::=
{ {
PKCS8ShroudedKeyBag IDENTIFIED BY {bagtypes 2} PKCS8ShroudedKeyBag IDENTIFIED BY {bagtypes 2}
} }
]]></sourcecode> ]]></sourcecode>
<t>The bagValue field contains the key and information about it in the encrypted form in the EncryptedPrivateKeyInfo structure.</t> <t>The bagValue field contains the key and information about the key, in encrypted form, in the EncryptedPrivateKeyInfo structure.</t>
<t>A certBag contains a certificate of a certain type. Object id entifiers are used to distinguish between different certificate types.</t> <t>A certBag contains a certificate of a certain type. Object id entifiers are used to distinguish between different certificate types.</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
certBag BAG-TYPE ::= certBag BAG-TYPE ::=
{ {
CertBag IDENTIFIED BY { bagtypes 3 } CertBag IDENTIFIED BY { bagtypes 3 }
} }
]]></sourcecode> ]]></sourcecode>
<t>If the certificate is not encrypted, the CertBag structure is placed in the Data structure (see <xref target="RFC5652"/>). <t>If the certificate is not encrypted, the CertBag structure is placed in the Data structure (see <xref target="RFC5652"/>).
If the certificate is encrypted, the CertBag structure is placed in the EncryptedData structure (see <xref target="RFC5652"/>).</t> If the certificate is encrypted, the CertBag structure is placed in the EncryptedData structure (see <xref target="RFC5652"/>).</t>
</section> </section>
</section> </section>
<section anchor="Key_repres"> <section anchor="Key_repres">
<name>GOST R 34.10–2012 key representation</name> <name>GOST R 34.10-2012 Key Representation</name>
<t>This section describes the GOST R 34.10–2012 private keys represe <t>This section describes the GOST R 34.10-2012 private key represen
ntation for asymmetric key pairs. tation for asymmetric key pairs.
Masked keys should be used to ensure the protection of private keys Masked keys should be used to ensure that private keys are protected
from leaks through the side channels when reading and performing operations with from leaking through side channels when reading and performing operations with
keys.</t> keys.</t>
<section anchor="Key_mask"> <section anchor="Key_mask">
<name>Masking GOST R 34.10–2012 keys</name> <name>Masking GOST R 34.10-2012 Keys</name>
<t>The masking algorithm is defined by the basic cryptographic t <t>The masking algorithm is defined by the basic cryptographic t
ransformation operation of the algorithm: multiplication in the F_q field for G ransformation operation of the algorithm: multiplication in the F_q field for G
OST R 34.10–2012 keys.</t> OST R 34.10-2012 keys.</t>
<t>Let M<sub>1</sub>, M<sub>2</sub>, ..., M<sub>k</sub> be a seq uence of k masks. Let M<sub>i</sub>() denote the operation of applying the i-th mask and M<sub>i</sub><sup>-1</sup>() denote the operation of removing the i-th mask, 1 &lt;= i &lt;= k. <t>Let M<sub>1</sub>, M<sub>2</sub>, ..., M<sub>k</sub> be a seq uence of k masks. Let M<sub>i</sub>() denote the operation of applying the i-th mask and M<sub>i</sub><sup>-1</sup>() denote the operation of removing the i-th mask, 1 &lt;= i &lt;= k.
Let K be a key. The masked key K<sub>M</sub> is obtained by appl ying the masking operation k times:</t> Let K be a key. The masked key K<sub>M</sub> is obtained by appl ying the masking operation k times:</t>
<ul empty="true" spacing="normal"> <t indent="3">K<sub>M</sub> = M<sub>k</sub> (...(M<sub>2</sub>(M
<li>K<sub>M</sub> = M<sub>k</sub> (...(M<sub>2</sub>(M<sub>1</su <sub>1</sub>(K)...).</t>
b>(K)...).</li> <t>Unmasking is performed by applying the removal operation k ti
</ul> mes, but in reverse order:</t>
<t>Unmasking is performed by applying the removing operation k t <t indent="3">K = M<sub>1</sub><sup>-1</sup>(...(M<sub>k-1</sub>
imes, but in reverse order:</t> <sup>-1</sup>(M<sub>k</sub><sup>-1</sup>(K<sub>M</sub>))...).</t>
<ul empty="true" spacing="normal">
<li>K = M<sub>1</sub><sup>-1</sup>(...(M<sub>k-1</sub><sup>-1</s
up>(M<sub>k</sub><sup>-1</sup>(K<sub>M</sub>))...).</li>
</ul>
<t>The masked key is represented as the sequence</t> <t>The masked key is represented as the sequence</t>
<ul empty="true" spacing="normal"> <t indent="3">I = K<sub>M</sub>||M<sub>1</sub>||M<sub>2</sub>||.
<li>I = K<sub>M</sub>||M<sub>1</sub>||M<sub>2</sub>||...||M<sub> ..||M<sub>k</sub>.</t>
k</sub>.</li> <t>Let the key K be n bits in length; then, the sequence I is re
</ul> presented in memory as a sequence of (k + 1)*n bits. I is represented in little-
<t>Let the key K be n bits in length, then the sequence I is rep endian format.
resented in memory as a sequence of (k + 1)*n bits. I is represented in little-e
ndian format.
It is possible to use an unmasked private key (i.e., k = 0, K<su b>M</sub> = K). It is possible to use an unmasked private key (i.e., k = 0, K<su b>M</sub> = K).
The masking operation is the multiplication of the key by the in For GOST R 34.10-2012 keys, the masking operation is the multipl
verse of the mask: K<sub>M</sub> = K * M<sup>-1</sup> mod Q, where the Q value i ication of the key by the inverse of the mask: INT(K<sub>M</sub>) = INT(K) * INT
s taken from the key parameters. (M)<sup>-1</sup> mod Q, where the Q value is taken from the key parameters.
The operation of removing the mask is the multiplication of the The operation of removing the mask is the multiplication of the masked key by th
masked key by the mask: K = K<sub>M</sub> * M mod Q. e mask: INT(K) = INT(K<sub>M</sub>) * INT(M) mod Q.
The public key is specified by a pair of coordinates (x, y) defi The public key is specified by a pair of coordinates (x, y) as d
ned in GOST R 34.10–2012, presented in the following format:</t> efined in GOST R 34.10-2012, presented in the following format:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>a public key corresponding to the GOST R 34.10–2012 algorith <li>a public key corresponding to the GOST R 34.10-2012 algorith
m with a key length of 256 bits m with a key length of 256 bits
has the GostR3410–2012-256-PublicKey representation. It is speci has the GostR3410-2012-256-PublicKey representation. It is speci
fied by a 64-byte string, where the first 32 bytes contain the little-endian rep fied by a 64-byte string, where the first 32 bytes contain the little-endian rep
resentation of the x coordinate, resentation of the x coordinate
and the last 32 bytes contain the little-endian representation o and the last 32 bytes contain the little-endian representation o
f the y coordinate;</li> f the y coordinate.</li>
<li>a public key corresponding to the GOST R 34.10–2012 algorith <li>a public key corresponding to the GOST R 34.10-2012 algorith
m with a key length of 512 bits m with a key length of 512 bits
has the GostR3410–2012-512-PublicKey representation. It is speci has the GostR3410-2012-512-PublicKey representation. It is speci
fied by a 128-byte string, where the first 64 bytes contain the little-endian re fied by a 128-byte string, where the first 64 bytes contain the little-endian re
presentation of the x coordinate, presentation of the x coordinate
and the last 64 bytes contain the little-endian representation o f the y coordinate.</li> and the last 64 bytes contain the little-endian representation o f the y coordinate.</li>
</ul> </ul>
<t>The public keys GostR3410-2012-256-PublicKey and GostR3410-20 <t>The public keys GostR3410-2012-256-PublicKey and GostR3410-20
12-512-PublicKey MUST be DER-encoded as an octet string in accordance with <xref 12-512-PublicKey <bcp14>MUST</bcp14> be DER encoded as an octet string in accord
target="RFC9215"/> (section 4.3):</t> ance with <xref target="RFC9215" sectionFormat="of" section="4.3"/>:</t>
<ul empty="true" spacing="normal"> <sourcecode type="asn.1"><![CDATA[
<li>GostR3410–2012-256-PublicKey ::= OCTET STRING (64),</li> GostR3410-2012-256-PublicKey ::= OCTET STRING (64),
<li>GostR3410–2012-512-PublicKey ::= OCTET STRING (128).</li> GostR3410-2012-512-PublicKey ::= OCTET STRING (128).
</ul> ]]></sourcecode>
</section> </section>
<section anchor="KeyBag"> <section anchor="KeyBag">
<name>KeyBag structure for GOST R 34.10–2012 key</name> <name>KeyBag Structure for GOST R 34.10-2012 Key</name>
<t> <t>
In accordance with <xref target="RFC7292"/> a KeyBag is defined as information about a private key represented as the PrivateKeyInfo structure:< /t> In accordance with <xref target="RFC7292"/>, a KeyBag is defined as information about a private key represented as the PrivateKeyInfo structure: </t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
KeyBag := PrivateKeyInfo KeyBag ::= PrivateKeyInfo
]]></sourcecode> ]]></sourcecode>
<t>In accordance with <xref target="RFC5958"/>, information abou t a private key is presented in the following form:</t> <t>In accordance with <xref target="RFC5958"/>, information abou t a private key is presented in the following form:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
PrivateKeyInfo := OneAsymmetricKey PrivateKeyInfo ::= OneAsymmetricKey
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="OneAsymmetricKey"> <section anchor="OneAsymmetricKey">
<name>OneAsymmetricKey structure</name> <name>OneAsymmetricKey Structure</name>
<t>In accordance with <xref target="RFC5958"/> OneAsymmetricKey <t>In accordance with <xref target="RFC5958"/>, OneAsymmetricKey
has the following structure: </t> has the following structure: </t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
OneAsymmetricKey::= SEQUENCE OneAsymmetricKey::= SEQUENCE
{ {
version Version, version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier, privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey, privateKey PrivateKey,
attributes [0] Attributes OPTIONAL, attributes [0] Attributes OPTIONAL,
..., ...,
[[2:publicKey [1] PublicKey OPTIONAL]], [[2:publicKey [1] PublicKey OPTIONAL]],
... ...
} }
Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2) Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
PrivateKey ::= OCTET STRING PrivateKey ::= OCTET STRING
PublicKey ::= BIT STRING PublicKey ::= BIT STRING
Attributes ::= SET OF Attribute Attributes ::= SET OF Attribute
]]></sourcecode> ]]></sourcecode>
<t>The fields have the following meanings:</t> <t>The fields have the following meanings:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>version identifies the version of OneAsymmetricKey. If publi <li>version identifies the version of OneAsymmetricKey. If publi
cKey is present, then version is set to 2 else version is set to 1.</li> cKey is present, then version is set to 2; else, version is set to 1.</li>
<li>privateKeyAlgorithm identifies the private-key algorithm and <li>privateKeyAlgorithm identifies the private key algorithm and
optionally contains parameters associated with the asymmetric key optionally contains parameters associated with the asymmetric key
pair. For GOST R 34.10–2012 private keys the identifiers of the pair. For GOST R 34.10-2012 private keys, the identifiers of the
corresponding public keys are used, they are defined in the <xref target="RFC921 corresponding public keys are used; they are defined in <xref target="RFC9215"/
5"/>. >.
The use of identifiers and public key parameters is defined in t The use of identifiers and public key parameters is defined in <
he <xref target="RFC9215"/>.</li> xref target="RFC9215"/>.</li>
<li>privateKey is an OCTET STRING that contains the value of the masked private key I.</li> <li>privateKey is an OCTET STRING that contains the value of the masked private key I.</li>
<li>attributes are optional. They contain information correspond ing to the public key (e.g., certificates).</li> <li>attributes are optional. They contain information correspond ing to the public key (e.g., certificates).</li>
<li>publicKey contains the value of the public key GostR3410–201 2-256-PublicKey or GostR3410–2012-512-PublicKey encoded in a BIT STRING. It is a n optional field.</li> <li>publicKey contains the value of the public key GostR3410-201 2-256-PublicKey or GostR3410-2012-512-PublicKey encoded in a BIT STRING. This fi eld is optional.</li>
</ul> </ul>
</section> </section>
<section anchor="PKCS8ShroudedKeyBag"> <section anchor="PKCS8ShroudedKeyBag">
<name>EncryptedPrivateKeyInfo structure for GOST R 34.10–2012 ke <name>EncryptedPrivateKeyInfo Structure for GOST R 34.10-2012 Ke
y</name> y</name>
<t>In accordance with <xref target="RFC7292"/> the encrypted inf <t>In accordance with <xref target="RFC7292"/>, the encrypted in
ormation of the private key is defined as the PKCS8ShroudedKeyBag structure:</t> formation regarding the private key is defined as the PKCS8ShroudedKeyBag struct
ure:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
PKCS8ShroudedKeyBag::= EncryptedPrivateKeyInfo PKCS8ShroudedKeyBag::= EncryptedPrivateKeyInfo
]]></sourcecode> ]]></sourcecode>
<t>In accordance with <xref target="RFC5958"/> the EncryptedPriv ateKeyInfo has the following structure:</t> <t>In accordance with <xref target="RFC5958"/>, EncryptedPrivate KeyInfo has the following structure:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
EncryptedPrivateKeyInfo ::= SEQUENCE EncryptedPrivateKeyInfo ::= SEQUENCE
{ {
encryptionAlgorithm EncryptionAlgorithmIdentifier, encryptionAlgorithm EncryptionAlgorithmIdentifier,
encryptedData EncryptedData encryptedData EncryptedData
} }
EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
EncryptedData ::= OCTET STRING EncryptedData ::= OCTET STRING
]]></sourcecode> ]]></sourcecode>
<t>The fields have the following meanings:</t> <t>The fields have the following meanings:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>encryptionAlgorithm identifies the algorithm under which the private key information is encrypted. Encryption MUST use PBES2 scheme. The alg orithm and parameters of this scheme are presented in <xref target="RFC9337"/>.< /li> <li>encryptionAlgorithm identifies the algorithm under which the private key information is encrypted. Encryption <bcp14>MUST</bcp14> use the PB ES2 scheme. The algorithm and parameters of this scheme are presented in <xref t arget="RFC9337"/>.</li>
<li>encryptedData is the DER-encoded PrivateKeyInfo structure.</ li> <li>encryptedData is the DER-encoded PrivateKeyInfo structure.</ li>
</ul> </ul>
</section> </section>
</section> </section>
<section anchor="Cert_repres"> <section anchor="Cert_repres">
<name>GOST R 34.10–2012 certificate representation</name> <name>GOST R 34.10-2012 Certificate Representation</name>
<t> <t>
In accordance with <xref target="RFC7292"/> a CertBag is defined as info rmation about a certificate and represented as the following structure:</t> In accordance with <xref target="RFC7292"/>, a CertBag is defined as inf ormation about a certificate and has the following structure:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
CertBag ::= SEQUENCE CertBag ::= SEQUENCE
{ {
certId BAG-TYPE.&id ({CertTypes}), certId BAG-TYPE.&id ({CertTypes}),
certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId}) certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId})
} }
]]></sourcecode> ]]></sourcecode>
<t>The fields have the following meanings:</t> <t>The fields have the following meanings:</t>
<ul spacing="normal"> <ul spacing="normal">
<li>certId identifies the type of certificate.</li> <li>certId identifies the type of certificate.</li>
<li>certValue contains certificate.</li> <li>certValue contains the certificate.</li>
</ul> </ul>
</section> </section>
<section anchor="SecurityM"> <section anchor="SecurityM">
<name>Security Mechanisms</name> <name>Security Mechanisms</name>
<t>Let the sender and receiver have a pre-agreed password P. The sender generates a password key using the PBKDF2 algorithm in accordance with <xref tar get="RFC9337"/> and uses it to encrypt the transmitted private key. <t>Let the sender and receiver have a previously agreed-upon password P. The sender generates a password key using the PBKDF2 algorithm in accordance wi th <xref target="RFC9337"/> and uses it to encrypt the transmitted private key.
The recipient independently generates a password key using the same PBKD F2 diversification algorithm in accordance with <xref target="RFC9337"/> and use s it to extract the private key from the PFX.</t> The recipient independently generates a password key using the same PBKD F2 diversification algorithm in accordance with <xref target="RFC9337"/> and use s it to extract the private key from the PFX.</t>
<t>The same password P is used to encrypt different sections of the PFX <t>The same password P is used to encrypt different sections of the PFX
using different random initializing value S with a length of 8 to 32 bytes, using a different random initializing value S with a length of 8 to 32 bytes,
where S and P are the input parameters of the PBKDF2 function. The passw where S and P are the input parameters of the PBKDF2 function. The passw
ord MUST be encoded as a Unicode UTF-8 string and fed into the PBKDF2 algorithm ord <bcp14>MUST</bcp14> be encoded as a Unicode UTF-8 string and fed into the PB
as a P parameter.</t> KDF2 algorithm as a P parameter.</t>
<t>The integrity of PFX is ensured by using the HMAC_GOSTR3411_2012_512 <t>The integrity of the PFX is ensured by using the HMAC_GOSTR3411_2012_
algorithm in accordance with <xref target="RFC7836"/>. For checking the integrit 512 algorithm in accordance with <xref target="RFC7836"/>. To check the integrit
y of PFX with the HMAC_GOSTR3411_2012_512 algorithm y of the PFX with the HMAC_GOSTR3411_2012_512 algorithm,
the key for this algorithm is also generated by using the PBKDF2 algorit the key for this algorithm is also generated by using the PBKDF2 algorit
hm in accordance with <xref target="RFC9337"/> with the same value of the P para hm in accordance with <xref target="RFC9337"/>, with the same value for the P pa
meter and a different initializing value S with a length of 8 to 32 bytes. rameter and a different initializing value S with a length of 8 to 32 bytes.
The dkLen parameter for the PBKDF2 algorithm is set to 96 bytes. The key for the HMAC_GOSTR3411_2012_512 algorithm must be the last 32 bytes of the 96-b yte sequence generated by the PBKDF2 algorithm. The dkLen parameter for the PBKDF2 algorithm is set to 96 bytes. The key for the HMAC_GOSTR3411_2012_512 algorithm must be the last 32 bytes of the 96-b yte sequence generated by the PBKDF2 algorithm.
The PBKDF2 algorithm parameters S and c are saved in macData.Salt and ma cData.iterations fileds respectively. The PBKDF2 algorithm parameters S and c are saved in the macData.Salt an d macData.iterations fields, respectively.
The HMAC_GOSTR3411_2012_512 function is calculated from the content fiel d of the authSafe structure field. The authSafe structure field is a PFX structu re field. The HMAC_GOSTR3411_2012_512 function is calculated from the content fiel d of the authSafe structure field. The authSafe structure field is a PFX structu re field.
The value of the calculated checksum is saved in the macData.mac.digest field. The macData.mac.digestAlgorithm.algorithm field contains the following al gorithm identifier:</t> The value of the calculated checksum is saved in the macData.mac.digest field. The macData.mac.digestAlgorithm.algorithm field contains the following al gorithm identifier:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
id-tc26-gost3411-12-512 :: = id-tc26-gost3411-12-512 :: =
{ {
iso(1) member-body(2) ru(643) rosstandart(7) tc26(1) iso(1) member-body(2) ru(643) rosstandart(7) tc26(1)
algorithms (1) digest(2) gost3411–2012-512(3) algorithms(1) digest(2) gost3411-12-512(3)
} }
]]></sourcecode> ]]></sourcecode>
<t>The macData.mac.digestAlgorithm.parameters field isn't used and shoul d be omitted.</t> <t>The macData.mac.digestAlgorithm.parameters field isn't used and shoul d be omitted.</t>
</section> </section>
<section anchor="Security"> <section anchor="Security">
<name>Security Considerations</name> <name>Security Considerations</name>
<t>The masked keys SHOULD be used to ensure the protection of private ke ys from leaking through side channels when reading and performing operations wit h keys. <t>The masked keys <bcp14>SHOULD</bcp14> be used to ensure that private keys are protected from leaking through side channels when reading and performin g operations with keys.
Applications MUST use unique values for ukm and S in the PBKDF2 algorith Applications <bcp14>MUST</bcp14> use unique values for ukm and S in the
m. PBKDF2 algorithm.
It is RECOMMENDED that parameter S consist of at least 32 octets of pseu It is <bcp14>RECOMMENDED</bcp14> that parameter S consist of at least 32
do-random data in order to reduce the probability of collisions of keys generate octets of pseudorandom data in order to reduce the probability of collisions of
d from the same password. keys generated from the same password.
The password MUST be encoded as a Unicode UTF-8 string and fed into the The password <bcp14>MUST</bcp14> be encoded as a Unicode UTF-8 string an
PBKDF2 algorithm as a P parameter. d fed into the PBKDF2 algorithm as a P parameter.
For more information see <xref target="RFC9337"/>. For more information, see <xref target="RFC9337"/>.
Encryption MUST use PBES2 scheme for encryption private keys. Public key Encryption <bcp14>MUST</bcp14> use the PBES2 scheme to encrypt private k
s MUST be DER-encoded as an octet string in accordance with <xref target="RFC921 eys. Public keys <bcp14>MUST</bcp14> be DER encoded as an octet string in accord
5"/>. ance with <xref target="RFC9215"/>.
Passwords SHOULD be stored in secure way. Passwords <bcp14>SHOULD</bcp14> be stored in a secure way.
For information on security considerations for generating the transport For information on security considerations for generating transport key
key containers see <xref target="RFC7292"/>.</t> containers, see <xref target="RFC7292"/>.</t>
</section> </section>
<section anchor="IANA_Considerations"> <section anchor="IANA_Considerations">
<name>IANA Considerations</name> <name>IANA Considerations</name>
<t>This document has no IANA actions.</t> <t>This document has no IANA actions.</t>
</section> </section>
<section anchor="ASN"> <section anchor="ASN">
<name>ASN.1 Modules</name> <name>ASN.1 Modules</name>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
PKCS-12RU PKCS-12RU
{ {
iso(1) member-body(2) ru(643) rosstandart(7) iso(1) member-body(2) ru(643) rosstandart(7)
tc26(1) modules(0) pkcs-12ruSyntax(5) tc26(1) modules(0) pkcs-12ruSyntax(5)
} }
DEFINITIONS EXPLICIT TAGS ::= DEFINITIONS EXPLICIT TAGS ::=
BEGIN BEGIN
IMPORTS IMPORTS
GostR3410–2012-PublicKey GostR3410-2012-PublicKey
FROM GostR3410–2012-PKISyntax FROM GostR3410-2012-PKISyntax
{ {
iso(1) member-body(2) ru(643) rosstandart(7) tc26(1) iso(1) member-body(2) ru(643) rosstandart(7) tc26(1)
modules(0) gostR34102012-PKISyntax(2) modules(0) gostR3410-2012-PKISyntax(2)
}; };
END END
]]></sourcecode> ]]></sourcecode>
<!-- [rfced] Section 10:
a) We could not get output for "pkcs-12ruSyntax(5)" on the OID
repository (http://www.oid-info.com/index.htm).
1.2.643.7.1.0.5 yields an error, as seen on
<http://www.oid-info.com/cgi-bin/display?oid=1.2.643.7.1.0.5&a=display>.
Original:
PKCS-12RU
{
iso(1) member-body(2) ru(643) rosstandart(7)
tc26(1) modules(0) pkcs-12ruSyntax(5)
}
Backing out one level, we see the following on
<http://www.oid-info.com/cgi-bin/display?oid=1.2.643.7.1.0&action=display>:
modules(0)
child OIDs:
gostR3411-2012-PKISyntax(2)
ruStrongCertsSyntax(6)
Please let us know if any updates are needed. Is "pkcs-12ruSyntax(5)"
an unregistered entry?
b) We did not find a match for "gostR3410-2012-PKISyntax(2)" on
<http://www.oid-info.com/index.htm>.
Original:
FROM GostR3410–2012-PKISyntax
{
iso(1) member-body(2) ru(643) rosstandart(7) tc26(1)
modules(0) gostR3410–2012-PKISyntax(2)
};
We see the following on
<http://www.oid-info.com/cgi-bin/display?oid=1.2.643.7.1.0.2&a=display>:
gostR3411-2012-PKISyntax(2)
Is the "3410" entry an unregistered entry? We also see
gostR3410-2012-PKISyntax(2) at the beginning of Appendix A of
RFC 9215. -->
</section> </section>
</middle> </middle>
<back> <back>
<references> <references>
<name>References</name> <name>References</name>
<references> <references>
<name>Normative References</name> <name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.210
.2104.xml"/> 4.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.211
.2119.xml"/> 9.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.817
.8174.xml"/> 4.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.729
.7292.xml"/> 2.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.595
.5958.xml"/> 8.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.565
.5652.xml"/> 2.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.783
.7836.xml"/> 6.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.698
.6986.xml"/> 6.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.921
.9215.xml"/> 5.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.933
.9337.xml"/> 7.xml"/>
<reference anchor="X.680">
<reference anchor="X.680" target="https://www.itu.int/rec/T-REC-X.680">
<front> <front>
<title>Information Technology - Abstract Syntax Notation One: Specific ation of Basic Notation.</title> <title>Information Technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
<author> <author>
<organization>ITU-T</organization> <organization>ITU-T</organization>
</author> </author>
<date year="2002"/> <date month="February" year="2021"/>
</front> </front>
<refcontent>ITU-T, Recommendation X.680, ISO/IEC 8824-1:2002</refcontent <seriesInfo name="ITU-T Recommendation" value="X.680"/>
> <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
</reference> </reference>
<reference anchor="X.690">
<reference anchor="X.690" target="https://www.itu.int/rec/T-REC-X.690">
<front> <front>
<title>Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical <title>Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical
Encoding Rules (CER) and Distinguished Encoding Rules (DER).</titl e> Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title >
<author> <author>
<organization>ITU-T</organization> <organization>ITU-T</organization>
</author> </author>
<date month="November" year="2008"/> <date month="February" year="2021"/>
</front> </front>
<refcontent>ITU-T, Recommendation X.690, ISO/IEC International Standard <seriesInfo name="ITU-T Recommendation" value="X.690"/>
8825-1:2008</refcontent> <seriesInfo name="ISO/IEC International Standard" value="8825-1:2021"/>
</reference> </reference>
</references> </references>
<references> <references>
<name>Informative References</name> <name>Informative References</name>
<reference anchor="ISO14888-1">
<reference anchor="ISO14888-1" target="https://www.iso.org/standard/44226.
html">
<front> <front>
<title>Information technology - Security techniques - Digital signatur es with appendix - Part 1: General.</title> <title>Information technology - Security techniques - Digital signatur es with appendix - Part 1: General</title>
<author> <author>
<organization>ISO/IEC</organization> <organization>ISO/IEC</organization>
</author> </author>
<date year="2008"/> <date month="April" year="2008"/>
</front>
<refcontent>ISO/IEC 14888-1</refcontent>
</reference>
<reference anchor="GostPkcs12">
<front>
<title>Information technology. Cryptographic Data Security. The transp
ort key containers.</title>
<author initials="A." surname="Potashnikov" fullname="A. Potashnikov
">
<organization/>
</author>
<author initials="E." surname="Karelina" fullname="E. Karelina">
<organization/>
</author>
<author initials="S." surname="Pianov" fullname="S. Pianov">
<organization/>
</author>
<author initials="A." surname="Naumenko" fullname="A. Naumenko">
<organization/>
</author>
</front> </front>
<refcontent>R 1323565.1.041–2022. Federal Agency on Technical Regulating and Metrology (In Russian)</refcontent> <seriesInfo name="ISO/IEC" value="14888-1"/>
</reference> </reference>
</references> </references>
</references> </references>
<section anchor="Examples"> <section anchor="Examples">
<name>Examples</name> <name>Examples</name>
<t>This section contains examples of using GOST cryptographic algorithms to create a PFX.</t> <t>This section contains examples of using GOST cryptographic algorithms to create a PFX.</t>
<section anchor="Data"> <section anchor="Data">
<name>Test data</name> <name>Test Data</name>
<t>In all examples the following data is used.</t> <t>In all examples, the following data is used.</t>
<section anchor="Test_cert"> <section anchor="Test_cert">
<name>Test certificate</name> <name>Test Certificate</name>
<t>This section contains a test certififcate in BASE64 format.</t> <t>This section contains a test certificate in BASE64 format.</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type=""><![CDATA[
MIICLjCCAdugAwIBAgIEAYy6hDAKBggqhQMHAQEDAjA4MQ0wCwYDVQQKEwRUSzI2 MIICLjCCAdugAwIBAgIEAYy6hDAKBggqhQMHAQEDAjA4MQ0wCwYDVQQKEwRUSzI2
MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwHhcNMDEw MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwHhcNMDEw
MTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA7MQ0wCwYDVQQKEwRUSzI2MSowKAYD MTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA7MQ0wCwYDVQQKEwRUSzI2MSowKAYD
VQQDEyFPUklHSU5BVE9SOiBHT1NUIDM0LjEwLTEyIDUxMi1iaXQwgaAwFwYIKoUD VQQDEyFPUklHSU5BVE9SOiBHT1NUIDM0LjEwLTEyIDUxMi1iaXQwgaAwFwYIKoUD
BwEBAQIwCwYJKoUDBwECAQIBA4GEAASBgLSLt1q8KQ4YZVxioU+1LV9QhE7MHR9g BwEBAQIwCwYJKoUDBwECAQIBA4GEAASBgLSLt1q8KQ4YZVxioU+1LV9QhE7MHR9g
BEh7S1yVNGlqt7+rNG5VFqmrPM74rbUsOlhV8M+zZKprXdk35Oz8lSW/n2oIUHZx BEh7S1yVNGlqt7+rNG5VFqmrPM74rbUsOlhV8M+zZKprXdk35Oz8lSW/n2oIUHZx
ikXIH/SSHj4rv3K/Puvz7hYTQSZl/xPdp78nUmjrEa6d5wfX8biEy2z0dgufFvAk ikXIH/SSHj4rv3K/Puvz7hYTQSZl/xPdp78nUmjrEa6d5wfX8biEy2z0dgufFvAk
Mw1Ua4gdXqDOo4GHMIGEMGMGA1UdIwRcMFqAFKxsDkxEZqJCluKfCTslZvPLpFMq Mw1Ua4gdXqDOo4GHMIGEMGMGA1UdIwRcMFqAFKxsDkxEZqJCluKfCTslZvPLpFMq
oTykOjA4MQ0wCwYDVQQKEwRUSzI2MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0 oTykOjA4MQ0wCwYDVQQKEwRUSzI2MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0
LjEwLTEyIDI1Ni1iaXSCBAGMuoEwHQYDVR0OBBYEFH4GVwmYDK1rCKhX7nkAWDrJ LjEwLTEyIDI1Ni1iaXSCBAGMuoEwHQYDVR0OBBYEFH4GVwmYDK1rCKhX7nkAWDrJ
16CkMAoGCCqFAwcBAQMCA0EACl6p8dAbpi9Hk+3mgMyI0WIh17IrlrSp/mB0F7Zz 16CkMAoGCCqFAwcBAQMCA0EACl6p8dAbpi9Hk+3mgMyI0WIh17IrlrSp/mB0F7Zz
Mt8XUD1Dwz3JrrnxeXnfMvOA5BdUJ9hCyDgMVAGs/IcEEA== Mt8XUD1Dwz3JrrnxeXnfMvOA5BdUJ9hCyDgMVAGs/IcEEA==
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="Test_key"> <section anchor="Test_key">
<name>Test key</name> <name>Test Key</name>
<t>This section contains a test key bytes in hexadecimal.</t> <t>This section contains test key bytes in hexadecimal.</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type=""><![CDATA[
F95A5D44C5245F63F2E7DF8E782C1924EADCB8D06C52D91023179786154CBDB1 F95A5D44C5245F63F2E7DF8E782C1924EADCB8D06C52D91023179786154CBDB1
561B4DF759D69F67EE1FBD5B68800E134BAA12818DA4F3AC75B0E5E6F9256911 561B4DF759D69F67EE1FBD5B68800E134BAA12818DA4F3AC75B0E5E6F9256911
]]></sourcecode> ]]></sourcecode>
</section> </section>
</section> </section>
<section anchor="PFXUnencrypted"> <section anchor="PFXUnencrypted">
<name>The example of a PFX with a password-protected key and unencry <name>Example of a PFX with a Password-Protected Key and Unencrypted
pted certificate.</name> Certificate</name>
<t>In this example the PKCS8SHroudedKeybag structure is used to stor <t>In this example, the PKCS8SHroudedKeybag structure is used to sto
e the key, which is placed in the Data structure. re the key, which is placed in the Data structure.
The certBag structure is used to store the certificate, which is pla ced in the Data structure. The certBag structure is used to store the certificate, which is pla ced in the Data structure.
A following password is used to encrypt the key and control the inte grity: The following password is used to encrypt the key and provide integr ity control:
"Пароль для PFX". "Пароль для PFX".
The password is in hexadecimal:</t> The password is in hexadecimal:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type=""><![CDATA[
D09FD0B0D180D0BED0BBD18C20D0B4D0BBD18F20504658 D09FD0B0D180D0BED0BBD18C20D0B4D0BBD18F20504658
]]></sourcecode> ]]></sourcecode>
<t>The key encryption algorithm identifier:</t> <t>The key encryption algorithm identifier:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
1.2.643.7.1.1.5.2.2 1.2.643.7.1.1.5.2.2
]]></sourcecode> ]]></sourcecode>
<section anchor="PFX_BASE64"> <section anchor="PFX_BASE64">
<name>PFX in BASE64 format</name> <name>PFX in BASE64 Format</name>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type=""><![CDATA[
MIIFKwIBAzCCBMQGCSqGSIb3DQEHAaCCBLUEggSxMIIErTCCAswGCSqGSIb3DQEH MIIFKwIBAzCCBMQGCSqGSIb3DQEHAaCCBLUEggSxMIIErTCCAswGCSqGSIb3DQEH
AaCCAr0EggK5MIICtTCCArEGCyqGSIb3DQEMCgEDoIICSjCCAkYGCiqGSIb3DQEJ AaCCAr0EggK5MIICtTCCArEGCyqGSIb3DQEMCgEDoIICSjCCAkYGCiqGSIb3DQEJ
FgGgggI2BIICMjCCAi4wggHboAMCAQICBAGMuoQwCgYIKoUDBwEBAwIwODENMAsG FgGgggI2BIICMjCCAi4wggHboAMCAQICBAGMuoQwCgYIKoUDBwEBAwIwODENMAsG
A1UEChMEVEsyNjEnMCUGA1UEAxMeQ0EgVEsyNjogR09TVCAzNC4xMC0xMiAyNTYt A1UEChMEVEsyNjEnMCUGA1UEAxMeQ0EgVEsyNjogR09TVCAzNC4xMC0xMiAyNTYt
Yml0MB4XDTAxMDEwMTAwMDAwMFoXDTQ5MTIzMTAwMDAwMFowOzENMAsGA1UEChME Yml0MB4XDTAxMDEwMTAwMDAwMFoXDTQ5MTIzMTAwMDAwMFowOzENMAsGA1UEChME
VEsyNjEqMCgGA1UEAxMhT1JJR0lOQVRPUjogR09TVCAzNC4xMC0xMiA1MTItYml0 VEsyNjEqMCgGA1UEAxMhT1JJR0lOQVRPUjogR09TVCAzNC4xMC0xMiA1MTItYml0
MIGgMBcGCCqFAwcBAQECMAsGCSqFAwcBAgECAQOBhAAEgYC0i7davCkOGGVcYqFP MIGgMBcGCCqFAwcBAQECMAsGCSqFAwcBAgECAQOBhAAEgYC0i7davCkOGGVcYqFP
tS1fUIROzB0fYARIe0tclTRpare/qzRuVRapqzzO+K21LDpYVfDPs2Sqa13ZN+Ts tS1fUIROzB0fYARIe0tclTRpare/qzRuVRapqzzO+K21LDpYVfDPs2Sqa13ZN+Ts
/JUlv59qCFB2cYpFyB/0kh4+K79yvz7r8+4WE0EmZf8T3ae/J1Jo6xGunecH1/G4 /JUlv59qCFB2cYpFyB/0kh4+K79yvz7r8+4WE0EmZf8T3ae/J1Jo6xGunecH1/G4
hMts9HYLnxbwJDMNVGuIHV6gzqOBhzCBhDBjBgNVHSMEXDBagBSsbA5MRGaiQpbi hMts9HYLnxbwJDMNVGuIHV6gzqOBhzCBhDBjBgNVHSMEXDBagBSsbA5MRGaiQpbi
skipping to change at line 618 skipping to change at line 670
0dL5f6ga4aPWLrWbbgWERFOoOPyh4DotlPF37AQOwiEjsbyyRHq3HgbWiaxQRuAh 0dL5f6ga4aPWLrWbbgWERFOoOPyh4DotlPF37AQOwiEjsbyyRHq3HgbWiaxQRuAh
eqHOn4QVGY92/HFvJ7u3TcnQdLWhTe/lh1RHLNF3RnXtN9if9zC23laDZOiWZplU eqHOn4QVGY92/HFvJ7u3TcnQdLWhTe/lh1RHLNF3RnXtN9if9zC23laDZOiWZplU
yLrUiTCbHrtn1RppPDmLFNMt9dJ7KKgCkOi7Zm5nhqPChbywX13wcfYxVDAjBgkq yLrUiTCbHrtn1RppPDmLFNMt9dJ7KKgCkOi7Zm5nhqPChbywX13wcfYxVDAjBgkq
hkiG9w0BCRUxFgQUeVV0+dS25MICJChpmGc/8AoUwE0wLQYJKoZIhvcNAQkUMSAe hkiG9w0BCRUxFgQUeVV0+dS25MICJChpmGc/8AoUwE0wLQYJKoZIhvcNAQkUMSAe
HgBwADEAMgBGAHIAaQBlAG4AZABsAHkATgBhAG0AZTBeME4wCgYIKoUDBwEBAgME HgBwADEAMgBGAHIAaQBlAG4AZABsAHkATgBhAG0AZTBeME4wCgYIKoUDBwEBAgME
QAkBKw4ihn7pSIYTEhu0bcvTPZjI3WgVxCkUVlOsc80G69EKFEOTnObGJGSKJ51U QAkBKw4ihn7pSIYTEhu0bcvTPZjI3WgVxCkUVlOsc80G69EKFEOTnObGJGSKJ51U
KkOsXF0a7+VBZf3BcVVQh9UECIVEtO+VpuskAgIIAA== KkOsXF0a7+VBZf3BcVVQh9UECIVEtO+VpuskAgIIAA==
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="PFX_ASN"> <section anchor="PFX_ASN">
<name>PFX in ASN.1 format</name> <name>PFX in ASN.1 Format</name>
<!-- [rfced] Appendices A.2.2 and subsequent: Please note that when
creating the output files, we receive quite a few "Too long line"
warnings. Entries that are 1, 2, or 3 characters too long can be
left as is, but anything that is 4 or more characters too long -
approx. 22 entries, by our count - will need to have line breaks
inserted. Please review the list of warnings below, and let us know
where proper line breaks can be placed (e.g., perhaps between strings
and corresponding bracketed numbers or after colons (":"), as has
already been done on some lines, such as lines containing
"OBJECT IDENTIFIER:" and "OCTET STRING:"; also, the octet strings
following Lines "1010 229" and "1344 64" in Appendix A.3.2
create lines that are too long).
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L796), 3 characters
longer than 72 characters:
: authorityKeyIdentifier [2.5.29.35]
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L810), 2 characters
longer than 72 characters:
505 4: PRINTABLE STRING:'TK26'
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L814), 1 characters
longer than 72 characters:
: commonName [2.5.4.3]
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L822), 2 characters
longer than 72 characters:
: subjectKeyIdentifier [2.5.29.14]
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L828), 1 characters
longer than 72 characters:
591 8: OBJECT IDENTIFIER:[1.2.643.7.1.1.3.2]
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L853), 1 characters
longer than 72 characters:
785 11: OBJECT IDENTIFIER:pkcs-12-pkcs-8ShroudedKeyBag
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L858), 1 characters
longer than 72 characters:
808 9: OBJECT IDENTIFIER:[1.2.840.113549.1.5.13]
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L871), 2 characters
longer than 72 characters:
866 9: OBJECT IDENTIFIER:[1.2.643.7.1.1.5.2.2]
draft-pkcs12-gost-08.xml(735): Warning: Too long line found (L898), 1 characters
longer than 72 characters:
: 795574F9D4B6E4C20224286998673FF00A14C04D
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1006), 4 characte
rs longer than 72 characters:
38 9: OBJECT IDENTIFIER:encryptedData [1.2.840.113549.1.7.6]
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1076), 31 charact
ers longer than 72 characters:
902 11: OBJECT IDENTIFIER:pkcs-12-pkcs-8ShroudedKeyBag [1.2.
840.113549.1.12.10.1.2]
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1080), 2 characte
rs longer than 72 characters:
925 9: OBJECT IDENTIFIER:[1.2.840.113549.1.5.13]
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1083), 5 characte
rs longer than 72 characters:
940 9: OBJECT IDENTIFIER:[1.2.840.113549.1.5.12]
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1089), 4 characte
rs longer than 72 characters:
969 8: OBJECT IDENTIFIER:[1.2.643.7.1.1.4.2]
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1092), 3 characte
rs longer than 72 characters:
983 9: OBJECT IDENTIFIER:[1.2.643.7.1.1.5.1.1]
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1097), 22 charact
ers longer than 72 characters:
: 2A8FD988DD10DF2B984C77411E630B3B7E864AFF900DAF6
C1484FE6A9C38C
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1098), 22 charact
ers longer than 72 characters:
: 06609FBEA513127EC2EBE59D2F4F0A17D656E82F765FFD5
C9810BEFAFD0AE
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1099), 22 charact
ers longer than 72 characters:
: E293A1E08097A65721732D1D1A4FCCCC8B474550B9C0ADA
74F1C10E242939
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1100), 22 charact
ers longer than 72 characters:
: 06F7184B173A03D7A761B6A5F4FBF75083D1BCA44E44CC2
0486115CB9B502
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1101), 22 charact
ers longer than 72 characters:
: B733F64ECA56C4C9B8D32316BAFB110BAE4EBF340134903
ADB2AE74CE9172
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1102), 22 charact
ers longer than 72 characters:
: AE9CE754F182ACE7488E9CA667135DBF0E3C6D9C6A4ED45
50F1098013386A
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1103), 22 charact
ers longer than 72 characters:
: B3D29C070A55942C70FD2C86A32CC0761A104AC90C3ABA3
22596D26CD13F9
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1107), 11 charact
ers longer than 72 characters:
1246 9: OBJECT IDENTIFIER:localKeyID [1.2.840.113549.1.9.
21]
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1110), 2 characte
rs longer than 72 characters:
: 795574F9D4B6E4C20224286998673FF00A14C04D
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1112), 13 charact
ers longer than 72 characters:
1283 9: OBJECT IDENTIFIER:friendlyName [1.2.840.113549.1.
9.20]
draft-pkcs12-gost-08.xml(1024): Warning: Too long line found (L1120), 35 charact
ers longer than 72 characters:
: E9E1EDB62665DD9EF474C40F7DC90BB342E27CA7105E3A9B0B9B675942AB7
71637B9CEA5B5BA4FFB54E71F57 -->
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
0 1323:SEQUENCE: 0 1323:SEQUENCE:
4 1: INTEGER: 3 4 1: INTEGER: 3
7 1220: SEQUENCE: 7 1220: SEQUENCE:
11 9: OBJECT IDENTIFIER:data [1.2.840.113549.1.7.1] 11 9: OBJECT IDENTIFIER:data [1.2.840.113549.1.7.1]
22 1205: CONTEXT SPECIFIC (0): 22 1205: CONTEXT SPECIFIC (0):
26 1201: OCTET STRING: 26 1201: OCTET STRING:
30 1197: SEQUENCE: 30 1197: SEQUENCE:
34 716: SEQUENCE: 34 716: SEQUENCE:
38 9: OBJECT IDENTIFIER:data [1.2.840.113549.1.7.1] 38 9: OBJECT IDENTIFIER:data [1.2.840.113549.1.7.1]
skipping to change at line 823 skipping to change at line 942
1247 64: OCTET STRING: 1247 64: OCTET STRING:
: 09012B0E22867EE9488613121BB46DCB : 09012B0E22867EE9488613121BB46DCB
: D33D98C8DD6815C429145653AC73CD06 : D33D98C8DD6815C429145653AC73CD06
: EBD10A1443939CE6C624648A279D542A : EBD10A1443939CE6C624648A279D542A
: 43AC5C5D1AEFE54165FDC171555087D5 : 43AC5C5D1AEFE54165FDC171555087D5
1313 8: OCTET STRING:'8544B4EF95A6EB24' 1313 8: OCTET STRING:'8544B4EF95A6EB24'
1323 2: INTEGER:2048 1323 2: INTEGER:2048
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="Dec_key"> <section anchor="Dec_key">
<name>Decrypted key value in BASE64 format</name> <name>Decrypted Key Value in BASE64 Format</name>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type=""><![CDATA[
MIHiAgEBMBcGCCqFAwcBAQECMAsGCSqFAwcBAgECAQRAEWkl+eblsHWs86SNgRKq MIHiAgEBMBcGCCqFAwcBAQECMAsGCSqFAwcBAgECAQRAEWkl+eblsHWs86SNgRKq
SxMOgGhbvR/uZ5/WWfdNG1axvUwVhpcXIxDZUmzQuNzqJBkseI7f5/JjXyTFRF1a SxMOgGhbvR/uZ5/WWfdNG1axvUwVhpcXIxDZUmzQuNzqJBkseI7f5/JjXyTFRF1a
+YGBgQG0i7davCkOGGVcYqFPtS1fUIROzB0fYARIe0tclTRpare/qzRuVRapqzzO +YGBgQG0i7davCkOGGVcYqFPtS1fUIROzB0fYARIe0tclTRpare/qzRuVRapqzzO
+K21LDpYVfDPs2Sqa13ZN+Ts/JUlv59qCFB2cYpFyB/0kh4+K79yvz7r8+4WE0Em +K21LDpYVfDPs2Sqa13ZN+Ts/JUlv59qCFB2cYpFyB/0kh4+K79yvz7r8+4WE0Em
Zf8T3ae/J1Jo6xGunecH1/G4hMts9HYLnxbwJDMNVGuIHV6gzg== Zf8T3ae/J1Jo6xGunecH1/G4hMts9HYLnxbwJDMNVGuIHV6gzg==
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="Dec_key_ASN"> <section anchor="Dec_key_ASN">
<name>Decrypted key value in ASN.1 format</name> <name>Decrypted Key Value in ASN.1 Format</name>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
0 226:SEQUENCE : 0 226:SEQUENCE:
3 1: INTEGER : 1 3 1: INTEGER: 1
6 23: SEQUENCE : 6 23: SEQUENCE:
8 8: OBJECT IDENTIFIER : [1.2.643.7.1.1.1.2] 8 8: OBJECT IDENTIFIER: [1.2.643.7.1.1.1.2]
18 11: SEQUENCE : 18 11: SEQUENCE:
20 9: OBJECT IDENTIFIER : [1.2.643.7.1.2.1.2.1] 20 9: OBJECT IDENTIFIER: [1.2.643.7.1.2.1.2.1]
31 64: OCTET STRING : 31 64: OCTET STRING:
: 116925F9E6E5B075ACF3A48D8112AA4B130E80685BBD1FEE679FD6 : 116925F9E6E5B075ACF3A48D8112AA4B130E80685BBD1FEE679FD6
: 59F74D1B56B1BD4C158697172310D9526CD0B8DCEA24192C788EDF : 59F74D1B56B1BD4C158697172310D9526CD0B8DCEA24192C788EDF
: E7F2635F24C5445D5AF9 : E7F2635F24C5445D5AF9
97 129: CONTEXT SPECIFIC (1) : 97 129: CONTEXT SPECIFIC (1):
: 01B48BB75ABC290E18655C62A14FB52D5F50844ECC1D1F6004487B : 01B48BB75ABC290E18655C62A14FB52D5F50844ECC1D1F6004487B
: 4B5C9534696AB7BFAB346E5516A9AB3CCEF8ADB52C3A5855F0CFB3 : 4B5C9534696AB7BFAB346E5516A9AB3CCEF8ADB52C3A5855F0CFB3
: 64AA6B5DD937E4ECFC9525BF9F6A085076718A45C81FF4921E3E2B : 64AA6B5DD937E4ECFC9525BF9F6A085076718A45C81FF4921E3E2B
: BF72BF3EEBF3EE1613412665FF13DDA7BF275268EB11AE9DE707D7 : BF72BF3EEBF3EE1613412665FF13DDA7BF275268EB11AE9DE707D7
: F1B884CB6CF4760B9F16F024330D546B881D5EA0CE : F1B884CB6CF4760B9F16F024330D546B881D5EA0CE
]]></sourcecode> ]]></sourcecode>
</section> </section>
</section> </section>
<section anchor="PFXEncrypted"> <section anchor="PFXEncrypted">
<name>The example of a PFX with a password-protected key and a passw <name>Example of a PFX with a Password-Protected Key and a Password-
ord-protected certificate.</name> Protected Certificate</name>
<t>In this example the PKCS8SHroudedKeybag structure is used to stor <t>In this example, the PKCS8SHroudedKeybag structure is used to sto
e the key, which is placed in the Data structure (see <xref target="RFC5652"/>). re the key, which is placed in the Data structure (see <xref target="RFC5652"/>)
.
The certBag structure is used to store the certificate, which is pla ced in the EncryptedData structure (see <xref target="RFC5652"/>). The certBag structure is used to store the certificate, which is pla ced in the EncryptedData structure (see <xref target="RFC5652"/>).
A following password is used to encrypt the key and control the inte The following password is used to encrypt the key and provide integr
grity. The password is in hexadecimal.</t> ity control. The password is in hexadecimal.</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type=""><![CDATA[
0xD09FD0B0D180D0BED0BBD18C20D0B4D0BBD18F20504658 0xD09FD0B0D180D0BED0BBD18C20D0B4D0BBD18F20504658
]]></sourcecode> ]]></sourcecode>
<t>The key encryption algorithm identifier:</t> <t>The key encryption algorithm identifier:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
1.2.643.7.1.1.5.1.1 1.2.643.7.1.1.5.1.1
]]></sourcecode> ]]></sourcecode>
<t>The certificate encryption algorithm identifier:</t> <t>The certificate encryption algorithm identifier:</t>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
1.2.643.7.1.1.5.1.2 1.2.643.7.1.1.5.1.2
]]></sourcecode> ]]></sourcecode>
<section anchor="PFX_BASE64_Ex2"> <section anchor="PFX_BASE64_Ex2">
<name>PFX in BASE64 format</name> <name>PFX in BASE64 Format</name>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type=""><![CDATA[
MIIFjAIBAzCCBSUGCSqGSIb3DQEHAaCCBRYEggUSMIIFDjCCA0EGCSqGSIb3DQEH MIIFjAIBAzCCBSUGCSqGSIb3DQEHAaCCBRYEggUSMIIFDjCCA0EGCSqGSIb3DQEH
BqCCAzIwggMuAgEAMIIDJwYJKoZIhvcNAQcBMFUGCSqGSIb3DQEFDTBIMCkGCSqG BqCCAzIwggMuAgEAMIIDJwYJKoZIhvcNAQcBMFUGCSqGSIb3DQEFDTBIMCkGCSqG
SIb3DQEFDDAcBAgUuSVGsSwGjQICCAAwDAYIKoUDBwEBBAIFADAbBgkqhQMHAQEF SIb3DQEFDDAcBAgUuSVGsSwGjQICCAAwDAYIKoUDBwEBBAIFADAbBgkqhQMHAQEF
AQIwDgQM9Hk3dagtS48+G/x+gIICwWGPqxxN+sTrKbruRf9R5Ya9cf5AtO1frqMn AQIwDgQM9Hk3dagtS48+G/x+gIICwWGPqxxN+sTrKbruRf9R5Ya9cf5AtO1frqMn
f1eULfmZmTg/BdE51QQ+Vbnh3v1kmspr6h2+e4Wli+ndEeCWG6A6X/G22h/RAHW2 f1eULfmZmTg/BdE51QQ+Vbnh3v1kmspr6h2+e4Wli+ndEeCWG6A6X/G22h/RAHW2
YrVmf6cCWxW+YrqzT4h/8RQL/9haunD5LmHPLVsYrEai0OwbgXayDSwARVJQLQYq YrVmf6cCWxW+YrqzT4h/8RQL/9haunD5LmHPLVsYrEai0OwbgXayDSwARVJQLQYq
sLNmZK5ViN+fRiS5wszVJ3AtVq8EuPt41aQEKwPy2gmH4S6WmnQRC6W7aoqmIifF sLNmZK5ViN+fRiS5wszVJ3AtVq8EuPt41aQEKwPy2gmH4S6WmnQRC6W7aoqmIifF
PJENJNn5K2M1J6zNESs6bFtYNKMArNqtvv3rioY6eAaaLy6AV6ljsekmqodHmQjv PJENJNn5K2M1J6zNESs6bFtYNKMArNqtvv3rioY6eAaaLy6AV6ljsekmqodHmQjv
Y4eEioJs0xhpXhZY69PXT+ZBeHv6MSheBhwXqxAd1DqtPTafMjNK8rqKCap9TtPG Y4eEioJs0xhpXhZY69PXT+ZBeHv6MSheBhwXqxAd1DqtPTafMjNK8rqKCap9TtPG
vONvo5W9dgwegxRRQzlum8dzV4m1W9Aq4W7t8/UcxDWRz3k6ijFPlGaA9+8ZMTEO vONvo5W9dgwegxRRQzlum8dzV4m1W9Aq4W7t8/UcxDWRz3k6ijFPlGaA9+8ZMTEO
skipping to change at line 907 skipping to change at line 1026
kG9xhLFzoD16dhtqX0+/dQg9G8pE5EzCBIYRXLm1Arcz9k7KVsTJuNMjFrr7EQuu kG9xhLFzoD16dhtqX0+/dQg9G8pE5EzCBIYRXLm1Arcz9k7KVsTJuNMjFrr7EQuu
Tr80ATSQOtsq50zpFyrpznVPGCrOdIjpymZxNdvw48bZxqTtRVDxCYATOGqz0pwH Tr80ATSQOtsq50zpFyrpznVPGCrOdIjpymZxNdvw48bZxqTtRVDxCYATOGqz0pwH
ClWULHD9LIajLMB2GhBKyQw6ujIlltJs0T+WNdX/AT2FLi1LFSS3+Cj9MVQwIwYJ ClWULHD9LIajLMB2GhBKyQw6ujIlltJs0T+WNdX/AT2FLi1LFSS3+Cj9MVQwIwYJ
KoZIhvcNAQkVMRYEFHlVdPnUtuTCAiQoaZhnP/AKFMBNMC0GCSqGSIb3DQEJFDEg KoZIhvcNAQkVMRYEFHlVdPnUtuTCAiQoaZhnP/AKFMBNMC0GCSqGSIb3DQEJFDEg
Hh4AcAAxADIARgByAGkAZQBuAGQAbAB5AE4AYQBtAGUwXjBOMAoGCCqFAwcBAQID Hh4AcAAxADIARgByAGkAZQBuAGQAbAB5AE4AYQBtAGUwXjBOMAoGCCqFAwcBAQID
BEDp4e22JmXdnvR0xA99yQuzQuJ8pxBeOpsLm2dZQqt3Fje5zqW1uk/7VOcfV5r2 BEDp4e22JmXdnvR0xA99yQuzQuJ8pxBeOpsLm2dZQqt3Fje5zqW1uk/7VOcfV5r2
bKm8nsLOs2rPT8hBOoeAZvOIBAjGIUHw6IjG2QICCAA= bKm8nsLOs2rPT8hBOoeAZvOIBAjGIUHw6IjG2QICCAA=
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="PFX_ASN_Ex2"> <section anchor="PFX_ASN_Ex2">
<name>PFX in ASN.1 format</name> <name>PFX in ASN.1 Format</name>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
0 1420:SEQUENCE: 0 1420:SEQUENCE:
4 1: INTEGER:3 4 1: INTEGER:3
7 1317: SEQUENCE: 7 1317: SEQUENCE:
11 9: OBJECT IDENTIFIER:data [1.2.840.113549.1.7.1] 11 9: OBJECT IDENTIFIER:data [1.2.840.113549.1.7.1]
22 1302: CONTEXT SPECIFIC (0): 22 1302: CONTEXT SPECIFIC (0):
26 1298: OCTET STRING: 26 1298: OCTET STRING:
30 1294: SEQUENCE: 30 1294: SEQUENCE:
34 833: SEQUENCE: 34 833: SEQUENCE:
38 9: OBJECT IDENTIFIER:encryptedData [1.2.840.113549.1.7.6] 38 9: OBJECT IDENTIFIER:encryptedData [1.2.840.113549.1.7.6]
skipping to change at line 1003 skipping to change at line 1122
938 41: SEQUENCE: 938 41: SEQUENCE:
940 9: OBJECT IDENTIFIER:[1.2.840.113549.1.5.12] 940 9: OBJECT IDENTIFIER:[1.2.840.113549.1.5.12]
951 28: SEQUENCE: 951 28: SEQUENCE:
953 8: OCTET STRING: 953 8: OCTET STRING:
: FD04424D0ED6DC2F : FD04424D0ED6DC2F
963 2: INTEGER:2048 963 2: INTEGER:2048
967 12: SEQUENCE: 967 12: SEQUENCE:
969 8: OBJECT IDENTIFIER:[1.2.643.7.1.1.4.2] 969 8: OBJECT IDENTIFIER:[1.2.643.7.1.1.4.2]
979 0: NULL: 979 0: NULL:
981 27: SEQUENCE: 981 27: SEQUENCE:
983 9: OBJECT IDENTIFIER:[1.2.643.7.1.1.5.1.1] 983 9: OBJECT IDENTIFIER:[1.2.643.7.1.1.5.1.1]
994 14: SEQUENCE: 994 14: SEQUENCE:
996 12: OCTET STRING: 996 12: OCTET STRING:
: F0C52AA00000000000000000 : F0C52AA00000000000000000
1010 229: OCTET STRING: 1010 229: OCTET STRING:
: 2A8FD988DD10DF2B984C77411E630B3B7E864AFF900DAF6C14 84FE6A9C38C : 2A8FD988DD10DF2B984C77411E630B3B7E864AFF900DAF6C14 84FE6A9C38C
: 06609FBEA513127EC2EBE59D2F4F0A17D656E82F765FFD5C98 10BEFAFD0AE : 06609FBEA513127EC2EBE59D2F4F0A17D656E82F765FFD5C98 10BEFAFD0AE
: E293A1E08097A65721732D1D1A4FCCCC8B474550B9C0ADA74F 1C10E242939 : E293A1E08097A65721732D1D1A4FCCCC8B474550B9C0ADA74F 1C10E242939
: 06F7184B173A03D7A761B6A5F4FBF75083D1BCA44E44CC2048 6115CB9B502 : 06F7184B173A03D7A761B6A5F4FBF75083D1BCA44E44CC2048 6115CB9B502
: B733F64ECA56C4C9B8D32316BAFB110BAE4EBF340134903ADB 2AE74CE9172 : B733F64ECA56C4C9B8D32316BAFB110BAE4EBF340134903ADB 2AE74CE9172
: AE9CE754F182ACE7488E9CA667135DBF0E3C6D9C6A4ED4550F 1098013386A : AE9CE754F182ACE7488E9CA667135DBF0E3C6D9C6A4ED4550F 1098013386A
skipping to change at line 1038 skipping to change at line 1157
1332 10: SEQUENCE: 1332 10: SEQUENCE:
1334 8: OBJECT IDENTIFIER:[1.2.643.7.1.1.2.3] 1334 8: OBJECT IDENTIFIER:[1.2.643.7.1.1.2.3]
1344 64: OCTET STRING: 1344 64: OCTET STRING:
: E9E1EDB62665DD9EF474C40F7DC90BB342E27CA7105E3A9B0B9B675942AB7716 37B9CEA5B5BA4FFB54E71F57 : E9E1EDB62665DD9EF474C40F7DC90BB342E27CA7105E3A9B0B9B675942AB7716 37B9CEA5B5BA4FFB54E71F57
: 9AF66CA9BC9EC2CEB36ACF4FC8413A878066F388 : 9AF66CA9BC9EC2CEB36ACF4FC8413A878066F388
1410 8: OCTET STRING:'C62141F0E888C6D9' 1410 8: OCTET STRING:'C62141F0E888C6D9'
1420 2: INTEGER:2048 1420 2: INTEGER:2048
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="Dec_key_Ex2"> <section anchor="Dec_key_Ex2">
<name>Decrypted key value in BASE64 format</name> <name>Decrypted Key Value in BASE64 Format</name>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type=""><![CDATA[
MIHiAgEBMBcGCCqFAwcBAQECMAsGCSqFAwcBAgECAQRAEWkl+eblsHWs86SNgRKq MIHiAgEBMBcGCCqFAwcBAQECMAsGCSqFAwcBAgECAQRAEWkl+eblsHWs86SNgRKq
SxMOgGhbvR/uZ5/WWfdNG1axvUwVhpcXIxDZUmzQuNzqJBkseI7f5/JjXyTFRF1a SxMOgGhbvR/uZ5/WWfdNG1axvUwVhpcXIxDZUmzQuNzqJBkseI7f5/JjXyTFRF1a
+YGBgQG0i7davCkOGGVcYqFPtS1fUIROzB0fYARIe0tclTRpare/qzRuVRapqzzO +YGBgQG0i7davCkOGGVcYqFPtS1fUIROzB0fYARIe0tclTRpare/qzRuVRapqzzO
+K21LDpYVfDPs2Sqa13ZN+Ts/JUlv59qCFB2cYpFyB/0kh4+K79yvz7r8+4WE0Em +K21LDpYVfDPs2Sqa13ZN+Ts/JUlv59qCFB2cYpFyB/0kh4+K79yvz7r8+4WE0Em
Zf8T3ae/J1Jo6xGunecH1/G4hMts9HYLnxbwJDMNVGuIHV6gzg== Zf8T3ae/J1Jo6xGunecH1/G4hMts9HYLnxbwJDMNVGuIHV6gzg==
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="Dec_key_ASN_Ex2"> <section anchor="Dec_key_ASN_Ex2">
<name>Decrypted key value in ASN.1 format</name> <name>Decrypted Key Value in ASN.1 Format</name>
<sourcecode type="asn.1"><![CDATA[ <sourcecode type="asn.1"><![CDATA[
0 226:SEQUENCE : 0 226:SEQUENCE:
3 1: INTEGER : 1 3 1: INTEGER: 1
6 23: SEQUENCE : 6 23: SEQUENCE:
8 8: OBJECT IDENTIFIER : [1.2.643.7.1.1.1.2] 8 8: OBJECT IDENTIFIER: [1.2.643.7.1.1.1.2]
18 11: SEQUENCE : 18 11: SEQUENCE:
20 9: OBJECT IDENTIFIER : [1.2.643.7.1.2.1.2.1] 20 9: OBJECT IDENTIFIER: [1.2.643.7.1.2.1.2.1]
31 64: OCTET STRING : 31 64: OCTET STRING:
: 116925F9E6E5B075ACF3A48D8112AA4B130E80685BBD1FEE679FD6 : 116925F9E6E5B075ACF3A48D8112AA4B130E80685BBD1FEE679FD6
: 59F74D1B56B1BD4C158697172310D9526CD0B8DCEA24192C788EDF : 59F74D1B56B1BD4C158697172310D9526CD0B8DCEA24192C788EDF
: E7F2635F24C5445D5AF9 : E7F2635F24C5445D5AF9
97 129: CONTEXT SPECIFIC (1) : 97 129: CONTEXT SPECIFIC (1):
: 01B48BB75ABC290E18655C62A14FB52D5F50844ECC1D1F6004487B : 01B48BB75ABC290E18655C62A14FB52D5F50844ECC1D1F6004487B
: 4B5C9534696AB7BFAB346E5516A9AB3CCEF8ADB52C3A5855F0CFB3 : 4B5C9534696AB7BFAB346E5516A9AB3CCEF8ADB52C3A5855F0CFB3
: 64AA6B5DD937E4ECFC9525BF9F6A085076718A45C81FF4921E3E2B : 64AA6B5DD937E4ECFC9525BF9F6A085076718A45C81FF4921E3E2B
: BF72BF3EEBF3EE1613412665FF13DDA7BF275268EB11AE9DE707D7 : BF72BF3EEBF3EE1613412665FF13DDA7BF275268EB11AE9DE707D7
: F1B884CB6CF4760B9F16F024330D546B881D5EA0CE : F1B884CB6CF4760B9F16F024330D546B881D5EA0CE
]]></sourcecode> ]]></sourcecode>
</section> </section>
</section> </section>
</section> </section>
<section anchor="Acknowledgments" numbered="false"> <section anchor="Acknowledgments" numbered="false">
<name>Acknowledgments</name> <name>Acknowledgments</name>
<t>The author thanks <contact fullname="Potashnikov Alexander"/>, <contact fullname="Pianov Semen"/> and <contact fullname="Smyslov Valery"/> for their ca reful readings and useful comments.</t> <t>The author thanks <contact fullname="Alexander Potashnikov"/>, <contact fullname="Semen Pianov"/>, and <contact fullname="Valery Smyslov"/> for their c areful readings and useful comments.</t>
</section> </section>
</back> </rfc> </back>
</rfc>
 End of changes. 94 change blocks. 
405 lines changed or deleted 551 lines changed or added

This html diff was produced by rfcdiff 1.48.