This repository has been archived by the owner on Jan 24, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
draft-ietf-lamps-cms-shakes-07.xml
831 lines (736 loc) · 38.7 KB
/
draft-ietf-lamps-cms-shakes-07.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2104 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2104.xml">
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3279 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3279.xml">
<!ENTITY RFC4055 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4055.xml">
<!-- <!ENTITY RFC4086 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4086.xml"> -->
<!ENTITY RFC5480 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5480.xml">
<!ENTITY RFC5652 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
<!ENTITY RFC5753 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5753.xml">
<!ENTITY RFC5911 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5911.xml">
<!ENTITY RFC6268 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6268.xml">
<!ENTITY RFC6979 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6979.xml">
<!ENTITY RFC8017 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
<!ENTITY RFC8174 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!-- <!ENTITY I-D.draft-ietf-lamps-pkix-shake SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.draft-ietf-lamps-pkix-shake-00.xml"> -->
<!ENTITY I-D.draft-housley-lamps-cms-sha3-hash SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.draft-housley-lamps-cms-sha3-hash-00.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
(Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
(using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-ietf-lamps-cms-shakes-07" ipr="trust200902">
<!-- category values: std, bcp, info, exp, and historic
ipr="full3978" (probably old)
ipr values: full3667, noModification3667, noDerivatives3667
you can add the attributes updates="NNNN" and obsoletes="NNNN"
they will automatically be output with "(if approved)" -->
<!-- ***** FRONT MATTER ***** -->
<front>
<title abbrev="SHAKEs in CMS">Use of the SHAKE One-way Hash
Functions in the Cryptographic Message Syntax (CMS)</title>
<author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
<organization>Cisco Systems</organization>
<address><email>pkampana@cisco.com</email></address>
</author>
<author fullname="Quynh Dang" initials="Q." surname="Dang">
<organization>NIST</organization>
<address><postal><street>100 Bureau Drive</street>
<street>Gaithersburg, MD 20899</street>
</postal>
<email>quynh.Dang@nist.gov</email>
</address>
</author>
<date year="2019"/>
<area>General</area>
<workgroup>LAMPS WG</workgroup>
<abstract>
<t>This document describes the conventions for using the SHAKE family of
hash functions with the Cryptographic Message Syntax (CMS) as one-way hash
functions with the RSA Probabilistic signature and ECDSA signature algorithms,
as message digests and message authentication codes. The conventions for the
associated signer public keys in CMS are also described. </t>
</abstract>
</front>
<middle>
<section title="Change Log">
<t>[ EDNOTE: Remove this section before publication. ]</t>
<t><list style="symbols">
<t>draft-ietf-lamps-cms-shake-07:
<list>
<t>Small nit from Russ while in WGLC.</t>
</list></t>
<t>draft-ietf-lamps-cms-shake-06:
<list>
<t>Incorporated Eric's suggestion from WGLC.</t>
</list></t>
<t>draft-ietf-lamps-cms-shake-05:
<list>
<t>Added informative references.</t>
<t>Updated ASN.1 so it compiles.</t>
<t>Updated IANA considerations.</t>
</list></t>
<t>draft-ietf-lamps-cms-shake-04:
<list>
<t>Added RFC8174 reference and text. </t>
<t>Explicitly explained why RSASSA-PSS-params are omitted in section 4.2.1.</t>
<t>Simplified Public Keys section by removing redundand info from RFCs.</t>
</list></t>
<t>draft-ietf-lamps-cms-shake-03:
<list>
<t>Removed paragraph suggesting KMAC to be used in generating k in Deterministric ECDSA. That should be RFC6979-bis. </t>
<t>Removed paragraph from Security Considerations that talks about randomness of k because we are using deterministric ECDSA.</t>
<t>Completed ASN.1 module and fixed KMAC ASN.1 based on Jim's feedback.</t>
<t>Text fixes.</t>
</list></t>
<t>draft-ietf-lamps-cms-shake-02:
<list>
<t>Updates based on suggestions and clarifications by Jim. </t>
<t>Started ASN.1 module.</t>
</list></t>
<t>draft-ietf-lamps-cms-shake-01:
<list>
<t>Significant reorganization of the sections to simplify the introduction, the new OIDs and their use in CMS.</t>
<t>Added new OIDs for RSASSA-PSS that hardcodes hash, salt and MGF, according the WG consensus.</t>
<t>Updated Public Key section to use the new RSASSA-PSS OIDs and clarify the algorithm identifier usage.</t>
<t>Removed the no longer used SHAKE OIDs from section 3.1.</t>
</list></t>
<t>draft-ietf-lamps-cms-shake-00:
<list>
<t>Various updates to title and section names.</t>
<t>Content changes filling in text and references.</t>
</list></t>
<t>draft-dang-lamps-cms-shakes-hash-00:
<list>
<t>Initial version</t>
</list></t>
</list></t>
</section>
<section title="Introduction" anchor="intro">
<t>The Cryptographic Message Syntax (CMS) <xref target="RFC5652"/> is used to
digitally sign, digest, authenticate, or encrypt arbitrary message contents.
This specification describes the use of the SHAKE128 and SHAKE256
specified in <xref target="SHA3"/> as new hash functions in CMS. In addition,
it describes the use of these functions with the RSASSA-PSS signature
algorithm <xref target="RFC8017"/> and the Elliptic Curve Digital Signature
Algorithm (ECDSA) <xref target="X9.62"/> with the CMS signed-data content type.</t>
<t>In the SHA-3 family, two extendable-output functions (SHAKEs), SHAKE128 and SHAKE256,
are defined. Four other hash function instances, SHA3-224, SHA3-256,
SHA3-384, and SHA3-512 are also defined but are out of scope for this document.
A SHAKE is a variable length hash function defined as SHAKE(M, d) where the
output is a d-bits long digest of message M. The corresponding collision and second
preimage resistance strengths for SHAKE128 are min(d/2,128) and min(d,128) bits
respectively. And, the corresponding collision and second preimage resistance
strengths for SHAKE256 are min(d/2,256) and min(d,256) bits respectively.</t>
<t>A SHAKE can be used in CMS as the message digest function (to hash the
message to be signed) in RSASSA-PSS and ECDSA, message
authentication code and as the mask generating function in RSASSA-PSS.
This specification describes the identifiers for SHAKEs to be used in
CMS and their meaning. </t>
<!-- <section title="ASN.1" anchor="section-1.1">
<t>CMS values are generated using ASN.1 <xref target="ASN1-B"/>, using the Basic
Encoding Rules (BER) and the Distinguished Encoding Rules (DER)
<xref target="ASN1-E"/>.</t>
</section> -->
<section anchor="terminology" title="Terminology">
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
</section> <!-- Terminology -->
</section>
<section title="Identifiers" anchor="oids">
<!-- <figure><artwork><![CDATA[
id-RSASSA-PSS OBJECT IDENTIFIER ::= { pkcs-1 10 }
RSASSA-PSS-params ::= SEQUENCE {
hashAlgorithm HashAlgorithm,
maskGenAlgorithm MaskGenAlgorithm,
saltLength INTEGER,
trailerField INTEGER }
]]></artwork></figure> -->
<!-- Commention out the below OIDs as they are no longer pertinent for the below public keys and sigs -->
<!-- The mask generation function used in RSASSA-PSS
is defined in <xref target="RFC8017"/>, but we include it here as well
for convenience:
<t><figure><artwork><![CDATA[
id-mgf1 OBJECT IDENTIFIER ::= { pkcs-1 8 }]]></artwork></figure></t>
<t>The parameters field associated with id-mgf1 MUST have a
hashAlgorithm value that identifies the hash used with MGF1. To use
SHAKE as this hash, this parameter MUST be id-shake128-len or id-
shake256-len as specified in <xref target="mdmgf" /> above. </t> -->
<t>This section defines six new object identifiers (OIDs) for using SHAKE128 and SHAKE256 in CMS. </t>
<t>EDNOTE: If PKIX draft is standardized first maybe we should not say the
identifiers are new for the RSASSA-PSS and ECDSA. </t>
<t>Two object identifiers for SHAKE128 and SHAKE256 hash functions are defined
in <xref target="shake-nist-oids"/> and we include them here for convenience.</t>
<t><figure><artwork><![CDATA[
id-shake128-len OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101) csor(3)
nistAlgorithm(4) 2 17 }
id-shake256-len OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101) csor(3)
nistAlgorithm(4) 2 18 }
]]></artwork></figure></t>
<t>In this specification, when using the id-shake128-len or id-shake256-len algorithm identifiers, the parameters
MUST be absent. That is, the identifier SHALL be a SEQUENCE of one component, the OID.
<!-- present, and they MUST employ the ShakeOutputLen -->
<!-- "MUST employ syntax borrowed from RFC4055 -->
<!-- syntax that contains an encoded positive integer value of 32 or 64 respectively.--></t>
<t>We define two new identifiers for RSASSA-PSS signatures using SHAKEs.</t>
<t><figure><artwork><![CDATA[
id-RSASSA-PSS-SHAKE128 OBJECT IDENTIFIER ::= { TBD }
]]></artwork></figure></t>
<t><figure><artwork><![CDATA[
id-RSASSA-PSS-SHAKE256 OBJECT IDENTIFIER ::= { TBD }
[ EDNOTE: "TBD" will be specified by NIST later. ]
]]></artwork></figure></t>
<t>The same RSASSA-PSS algorithm identifiers can be used for identifying
public keys and signatures.</t>
<t>We define two new algorithm identifiers of ECDSA signatures using SHAKEs.</t>
<t><figure><artwork><![CDATA[
id-ecdsa-with-SHAKE128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101) csor(3)
nistAlgorithm(4) 3 TBD }
id-ecdsa-with-SHAKE256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101) csor(3)
nistAlgorithm(4) 3 TBD }
[ EDNOTE: "TBD" will be specified by NIST. ]
]]></artwork></figure></t>
<t>The parameters for the four RSASSA-PSS and ECDSA identifiers
MUST be absent. That is, each identifier SHALL be a SEQUENCE of one component,
the OID.</t>
<!-- <figure><artwork><![CDATA[
sigAlgs OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16)
us(840) organization(1) gov(101) csor(3) nistAlgorithm(4) 3 }
id-ecdsa-with-SHAKE128 ::= { sigAlgs x }
id-ecdsa-with-SHAKE256 ::= { sigAlgs y }
Note: x and y will be specified by NIST.
]]></artwork> </figure> -->
<t>Two new object identifiers for KMACs using SHAKE128 and SHAKE256 are defined below.</t>
<t><figure><artwork><![CDATA[
id-KmacWithSHAKE128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101) csor(3)
nistAlgorithm(4) 2 19 }
id-KmacWithSHAKE256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1) gov(101) csor(3)
nistAlgorithm(4) 2 20 }
]]></artwork></figure></t>
<t>The parameters for id-KmacWithSHAKE128 and id-KmacWithSHAKE256 MUST be absent.
That is, each identifier SHALL be a SEQUENCE of one component, the OID.</t>
<!-- <figure><artwork><![CDATA[
hashAlgs OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16)
us(840) organization(1) gov(101) csor(3) nistAlgorithm(4) 2 }
id-KmacWithSHAKE128 OBJECT IDENTIFIER ::= { x }
id-KmacWithSHAKE256 OBJECT IDENTIFIER ::= { y }
Note: x and y will be specified by NIST.
]]></artwork></figure> -->
<t><xref target="md"/>, <xref target="rsa-sigs"/>, <xref target="ecdsa-sigs"/>
and <xref target="kmac"/> specify the required output length for each use
of SHAKE128 or SHAKE256 in message digests, RSASSA-PSS, ECDSA
and KMAC.</t>
</section>
<section title="Use in CMS">
<section anchor="md" title="Message Digests">
<t>The id-shake128-len and id-shake256-len OIDs (<xref target="oids"/>) can
be used as the digest algorithm identifiers located in the SignedData,
SignerInfo, DigestedData, and the AuthenticatedData digestAlgorithm fields
in CMS <xref target="RFC5652"/>. The encoding MUST omit the parameters field
and the output size, d, for the SHAKE128 or SHAKE256 message digest MUST be
256 or 512 bits respectively.</t>
<t>The digest values are located in the DigestedData field and the Message
Digest authenticated attribute included in the signedAttributes of the
SignedData signerInfo. In addition, digest values are input to
signature algorithms. The digest algorithm MUST be the same as the
message hash algorithms used in signatures.</t>
</section>
<section title="Signatures" anchor="sigs">
<t>In CMS, signature algorithm identifiers are located in the SignerInfo
signatureAlgorithm field of SignedData content type and countersignature attribute.
Signature values are located in the SignerInfo signature field of SignedData and
countersignature.</t>
<t>Conforming implementations that process RSASSA-PSS and
ECDSA with SHAKE signatures when processing CMS data MUST recognize the
corresponding OIDs specified in <xref target="oids"/>.</t>
<section title="RSASSA-PSS Signatures" anchor="rsa-sigs">
<t>The RSASSA-PSS algorithm is defined in <xref target="RFC8017"/>.
When id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256 specified in <xref target="oids"/>
is used, the encoding MUST omit the parameters field. That is,
the AlgorithmIdentifier SHALL be a SEQUENCE of one component,
id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256. <xref target="RFC4055"/>
defines RSASSA-PSS-params that are used to define the algorithms and inputs
to the algorithm. This specification does not use parameters because the
hash and mask generating algorithsm and trailer and salt are embedded in
the OID definition.</t>
<t>The hash algorithm to hash a message being signed and the hash and the hash
algorithm as the mask generation function used in RSASSA-PSS MUST be
the same, SHAKE128 or SHAKE256 respectively. The output-length of
the hash algorithm which hashes the message SHALL be 32 or 64 bytes
respectively.</t>
<t>The mask generation function takes an octet string of variable length
and a desired output length as input, and outputs an octet string of
the desired length. In RSASSA-PSS with SHAKES, the SHAKEs MUST be
used natively as the MGF function, instead of the MGF1 algorithm that
uses the hash function in multiple iterations as specified in
Section B.2.1 of [RFC8017]. In other words, the MGF is defined as
the SHAKE128 or SHAKE256 output of the mgfSeed for id-RSASSA-PSS-
SHAKE128 and id-RSASSA-PSS-SHAKE256 respectively. The mgfSeed is the seed
from which mask is generated, an octet string <xref target="RFC8017"/>.
As explained in Step 9 of section 9.1.1 of <xref target="RFC8017"/>, the output
length of the MGF is emLen - hLen - 1 bytes. emLen is the maximum message
length ceil((n-1)/8), where n is the RSA modulus in bits. hLen is 32 and
64-bytes for id-RSASSA-PSS-SHAKE128 and id-RSASSA-PSS-SHAKE256 respectively.
Thus when SHAKE is used as the MGF, the SHAKE output length maskLen is
(n - 264) or (n - 520) bits respectively. For example, when RSA modulus n is 2048,
the output length of SHAKE128 or SHAKE256 as the MGF will be 1784 or 1528-bits
when id-RSASSA-PSS-SHAKE128 or id-RSASSA-PSS-SHAKE256 is used respectively.</t>
<t>The RSASSA-PSS saltLength MUST be 32 or 64 bytes respectively.
Finally, the trailerField MUST be 1, which represents the trailer
field with hexadecimal value 0xBC <xref target="RFC8017"/>.</t>
</section>
<section title="ECDSA Signatures" anchor="ecdsa-sigs">
<t>The Elliptic Curve Digital Signature Algorithm (ECDSA) is defined in
<xref target="X9.62"/>. When the id-ecdsa-with-SHAKE128 or id-ecdsa-with-SHAKE256
(specified in <xref target="oids"/>) algorithm identifier appears, the
respective SHAKE function is used as the hash.
The encoding MUST omit the parameters field. That is, the AlgorithmIdentifier
SHALL be a SEQUENCE of one component, the OID id-ecdsa-with-SHAKE128 or
id-ecdsa-with-SHAKE256.</t>
<t>For simplicity and compliance with the ECDSA standard specification,
the output size of the hash function must be explicitly determined.
The output size, d, for SHAKE128 or SHAKE256 used in ECDSA MUST be 256
or 512 bits respectively. </t>
<t>It is RECOMMENDED that conforming implementations that generate
ECDSA with SHAKE signatures in CMS generate such signatures with a
deterministically generated, non-random k in accordance
with all the requirements specified in <xref target="RFC6979"/>.
<!-- Sections 7.2 and 7.3 of
<xref target="X9.62"/> or with all the requirements specified in Section
4.1.3 of <xref target="SEC1"/>. -->
They MAY also generate such signatures
in accordance with all other recommendations in <xref target="X9.62"/> or
<xref target="SEC1"/> if they have a stated policy that requires
conformance to these standards. </t>
<!-- <t>In Section 3.2 "Generation of k" of <xref target="RFC6979"/>, HMAC is used to derive
the deterministic k. Conforming implementations that generate deterministic
ECDSA with SHAKE signatures in X.509 MUST use KMAC with SHAKE128 or KMAC with
SHAKE256 as specfied in <xref target="SP800-185"/> when SHAKE128 or SHAKE256 is
used as the message hashing algorithm, respectively. In this situation, KMAC with
SHAKE128 and KMAC with SHAKE256 have 256-bit and 512-bit outputs respectively,
and the optional customization bit string S is an empty string.</t> -->
</section>
</section>
<section title="Public Keys">
<t>In CMS, the signer's public key algorithm identifiers are located in the
OriginatorPublicKey's algorithm attribute.
The conventions and encoding for RSASSA-PSS and ECDSA <!-- and EdDSA -->
public keys algorithm identifiers are as specified in
Section 2.3 of <xref target="RFC3279"/>,
Section 3.1 of <xref target="RFC4055"/>
and Section 2.1 of <xref target="RFC5480"/>.
<!-- and <xref target="I-D.josefsson-pkix-eddsa"/> --></t>
<t>Traditionally, the rsaEncryption object identifier is used to
identify RSA public keys. The rsaEncryption object identifier
continues to identify the public key when the RSA private
key owner does not wish to limit the use of the public key
exclusively to RSASSA-PSS with SHAKEs. When the RSA private key
owner wishes to limit the use of the public key exclusively
to RSASSA-PSS, the AlgorithmIdentifier for RSASSA-PSS defined
in <xref target="oids"/> SHOULD be used as the algorithm attribute
in the OriginatorPublicKey sequence. Conforming client
implementations that process RSASSA-PSS with SHAKE public keys
in CMS message MUST recognize the corresponding OIDs in <xref target="oids"/>.</t>
<t>Conforming implementations MUST specify and process the
algorithms explicitly by using the OIDs specified in
<xref target="oids"/> when encoding ECDSA with SHAKE
public keys in CMS messages. </t>
<t>The identifier parameters, as explained in <xref target="oids"/>,
MUST be absent. </t>
</section>
<section anchor="kmac" title="Message Authentication Codes">
<t>KMAC message authentication code (KMAC) is specified in <xref target="SP800-185"/>.
In CMS, KMAC algorithm identifiers are located in the AuthenticatedData
macAlgorithm field. The KMAC values are located in the AuthenticatedData mac field.</t>
<t>When the id-KmacWithSHAKE128 or id-KmacWithSHAKE256 algorithm identifier
is used as the MAC algorithm identifier, the parameters field is optional
(absent or present). If absent, the SHAKE256 output length used in KMAC is
256 or 512 bits respectively and the customization string is an empty string by default.</t>
<t>Conforming implementations that process KMACs with the SHAKEs
when processing CMS data MUST recognize these identifiers.</t>
<t>When calculating the KMAC output, the variable N is 0xD2B282C2, S
is an empty string, and L, the integer representing the requested output
length in bits, is 256 or 512 for KmacWithSHAKE128 or KmacWithSHAKE256
respectively in this specification.</t>
</section>
</section>
<section anchor="IANA" title="IANA Considerations">
<t>One object identifier for the ASN.1 module in <xref target="section-a"/>
was assigned in the SMI Security for S/MIME Module Identifiers
(1.2.840.113549.1.9.16.0) registry: </t>
<t><figure><artwork><![CDATA[
CMSAlgsForSHAKE-2019 { iso(1) member-body(2) us(840)
rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0)
id-mod-cms-shakes-2019(TBD) } ]]></artwork></figure></t>
</section>
<section title="Security Considerations">
<t>The SHAKEs are deterministic functions. Like any other deterministic
function, executing each function with the same input multiple times
will produce the same output. Therefore, users should not expect
unrelated outputs (with the same or different output lengths) from
excuting a SHAKE function with the same input multiple times.
The shorter one of any 2 outputs produced from a SHAKE with the same
input is a prefix of the longer one. It is a similar situation as
truncating a 512-bit output of SHA-512 by taking its 256 left-most bits.
These 256 left-most bits are a prefix of the 512-bit output.</t>
<!-- <t>Implementations must protect the signer's private key. Compromise of
the signer's private key permits masquerade.</t> -->
<t>When more than two parties share the same message-authentication key,
data origin authentication is not provided. Any party that knows the
message-authentication key can compute a valid MAC, therefore the
content could originate from any one of the parties.</t>
<!-- <t>Implementations must randomly generate message-authentication keys
and one-time values, such as the k value when generating a ECDSA
signature. In addition, the generation of public/private key pairs
relies on random numbers. The use of inadequate pseudo-random
number generators (PRNGs) to generate such cryptographic values can
result in little or no security. The generation of quality random
numbers is difficult. <xref target="RFC4086"/> offers important guidance
in this area, and <xref target="SP800-90A"/> series provide acceptable
PRNGs.</t> -->
<!--<t>Implementers should be aware that cryptographic algorithms may
become weaker with time. As new cryptanalysis techniques are developed
and computing power increases, the work factor or time required to break
a particular cryptographic algorithm may decrease. Therefore, cryptographic
algorithm implementations should be modular allowing new algorithms to
be readily inserted. That is, implementers should be prepared to
regularly update the set of algorithms in their implementations.</t> -->
<t>When using ECDSA with SHAKEs, the ECDSA curve order SHOULD be
chosen in line with the SHAKE output length. NIST has defined appropriate
use of the hash functions in terms of the algorithm strengths and
expected time frames for secure use in Special Publications (SPs)
<xref target="SP800-78-4"/> and <xref target="SP800-107"/>.
These documents can be used as guides to choose appropriate key sizes
for various security scenarios. In the context of this document
id-ecdsa-with-shake128 is RECOMMENDED for curves with group order
of 256-bits. id-ecdsa-with-shake256 is RECOMMENDED for curves
with group order of 384-bits or more.</t>
</section>
<section title="Acknowledgements" anchor="ack">
<t>This document is based on Russ Housley's draft
<xref target="I-D.housley-lamps-cms-sha3-hash"/>.
It replaces SHA3 hash functions by SHAKE128 and SHAKE256 as the LAMPS
WG agreed.</t>
<t>The authors would like to thank Russ Housley for his guidance and
very valuable contributions with the ASN.1 module. Valuable
feedback was also provided by Eric Rescorla. </t>
</section>
</middle>
<back>
<references title="Normative References">
&RFC2119;
&RFC8174;
&RFC5652;
&RFC8017; <!-- RFC8017 is Informational draft but we are keeping it in the Normative References even though idnits complains because we need a normative reference for RSASSA-PSS. RFC4056 does the same thing with RSASS-PSS v2.1 -->
&RFC4055;
&RFC5480;
<reference anchor="SHA3">
<front>
<title>SHA-3 Standard - Permutation-Based Hash and Extendable-Output Functions</title>
<author>
<organization>National Institute of Standards and Technology, U.S. Department of Commerce</organization>
</author>
<date month="August" year="2015"/>
</front>
<seriesInfo name="FIPS" value="PUB 202"/>
</reference>
<reference anchor="SP800-185" target="http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-185.pdf">
<front>
<title>SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash and ParallelHash. NIST SP 800-185</title>
<author>
<organization>National Institute of Standards and Technology</organization>
</author>
<date month="December" year="2016" />
</front>
</reference>
<!-- <reference anchor="ASN1-B"><front>
<title>Information technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
<author>
<organization>ITU-T</organization>
</author>
<date year="2015"/>
</front>
<seriesInfo name="ITU-T" value="Recommendation X.680"/>
</reference> -->
<!-- <reference anchor="ASN1-E"><front>
<title>Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
<author>
<organization>ITU-T</organization>
</author>
<date year="2015"/>
</front>
<seriesInfo name="ITU-T" value="Recommendation X.690"/>
</reference> -->
<!-- <reference anchor="DSS"><front>
<title>Digital Signature Standard, version 4</title>
<author>
<organization>National Institute of Standards and Technology, U.S. Department of Commerce</organization>
</author>
<date year="2013"/>
</front>
<seriesInfo name="NIST" value="FIPS PUB 186-4"/>
</reference> -->
</references>
<references title="Informative References">
&RFC3279;
<!-- &RFC4086; -->
&RFC5753;
&RFC5911;
&RFC6268;
&RFC6979;
<!-- <?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.draft-ietf-lamps-pkix-shake-00.xml"?> -->
<?rfc include="http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.draft-housley-lamps-cms-sha3-hash-00.xml"?>
<reference anchor="shake-nist-oids" target="https://csrc.nist.gov/Projects/Computer-Security-Objects-Register/Algorithm-Registration">
<front>
<title>Computer Security Objects Register</title>
<author>
<organization>National Institute of Standards and Technology</organization>
</author>
<date month="October" year="2017" />
</front>
</reference>
<reference anchor="X9.62">
<front>
<title>X9.62-2005 Public Key Cryptography for the Financial Services Industry: The Elliptic Curve Digital Signature Standard (ECDSA)</title>
<author>
<organization>American National Standard for Financial Services (ANSI)</organization>
</author>
<date month="November" year="2005" />
</front>
</reference>
<reference anchor="SP800-78-4" target="https://csrc.nist.gov/csrc/media/publications/sp/800-78/4/final/documents/sp800_78-4_revised_draft.pdf">
<front>
<title>SP800-78-4: Cryptographic Algorithms and Key Sizes for Personal Identity Verification</title>
<author>
<organization>National Institute of Standards and Technology (NIST)</organization>
</author>
<date month="May" year="2014" />
</front>
</reference>
<reference anchor="SP800-107" target="https://csrc.nist.gov/csrc/media/publications/sp/800-107/rev-1/final/documents/draft_revised_sp800-107.pdf">
<front>
<title>SP800-107: Recommendation for Applications Using Approved Hash Algorithms</title>
<author>
<organization>National Institute of Standards and Technology (NIST)</organization>
</author>
<date month="May" year="2014" />
</front>
</reference>
<reference anchor="SEC1" target="http://www.secg.org/sec1-v2.pdf">
<front>
<title>SEC 1: Elliptic Curve Cryptography</title>
<author>
<organization>Standards for Efficient Cryptography Group</organization>
</author>
<date month="May" year="2009" />
</front>
</reference>
<!-- <reference anchor="SP800-90A" target="http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf">
<front>
<title>Recommendation for Random Number Generation Using Deterministic Random Bit Generators. NIST SP 800-90A</title>
<author>
<organization>National Institute of Standards and Technology</organization>
</author>
<date month="June" year="2015" />
</front>
</reference> -->
</references>
<section title="ASN.1 Module" anchor="section-a">
<t>This appendix includes the ASN.1 modules for SHAKEs in CMS.
This module includes some ASN.1 from other standards for reference.</t>
<t><figure><artwork><![CDATA[
CMSAlgsForSHAKE-2019 { iso(1) member-body(2) us(840)
rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0)
id-mod-cms-shakes-2019(TBD) }
DEFINITIONS EXPLICIT TAGS ::=
BEGIN
-- EXPORTS ALL;
IMPORTS
DIGEST-ALGORITHM, MAC-ALGORITHM, SMIME-CAPS
FROM AlgorithmInformation-2009
{ iso(1) identified-organization(3) dod(6) internet(1) security(5)
mechanisms(5) pkix(7) id-mod(0)
id-mod-algorithmInformation-02(58) }
RSAPublicKey, rsaEncryption, id-ecPublicKey
FROM PKIXAlgs-2009 { iso(1) identified-organization(3) dod(6)
internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
id-mod-pkix1-algorithms2008-02(56) } ;
--
-- Message Digest Algorithms (mda-)
-- used in SignedData, SignerInfo, DigestedData,
-- and the AuthenticatedData digestAlgorithm
-- fields in CMS
--
MessageDigestAlgs DIGEST-ALGORITHM ::= {
-- This expands MessageAuthAlgs from [RFC5652]
-- and MessageDigestAlgs in [RFC5753]
mda-shake128 |
mda-shake256,
...
}
--
-- One-Way Hash Functions
-- SHAKE128
mda-shake128 DIGEST-ALGORITHM ::= {
IDENTIFIER id-shake128 -- with output length 32 bytes.
}
id-shake128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16)
us(840) organization(1) gov(101)
csor(3) nistAlgorithm(4)
hashAlgs(2) 11 }
-- SHAKE-256
mda-shake256 DIGEST-ALGORITHM ::= {
IDENTIFIER id-shake256 -- with output length 64 bytes.
}
id-shake256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16)
us(840) organization(1) gov(101)
csor(3) nistAlgorithm(4)
hashAlgs(2) 12 }
--
-- Public key algorithm identifiers located in the
-- OriginatorPublicKey's algorithm attribute in CMS.
-- And Signature identifiers used in SignerInfo
-- signatureAlgorithm field of SignedData content
-- type and countersignature attribute in CMS.
--
-- From RFC5280, for reference.
-- rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 }
-- When the rsaEncryption algorithm identifier is used
-- for a public key, the AlgorithmIdentifier parameters
-- field MUST contain NULL.
--
id-RSASSA-PSS-SHAKE128 OBJECT IDENTIFIER ::= { TBD }
id-RSASSA-PSS-SHAKE256 OBJECT IDENTIFIER ::= { TBD }
-- When the id-RSASSA-PSS-* algorithm identifiers are used
-- for a public key or signature in CMS, the AlgorithmIdentifier
-- parameters field MUST be absent. The message digest algorithm
-- used in RSASSA-PSS MUST be SHAKE128 or SHAKE256 with a 32 or
-- 64 byte outout length respectively. The mask generating
-- function MUST be SHAKE128 or SHAKE256 with an output length
-- of (n - 264) or (n - 520) bits respectively, where n
-- is the RSA modulus in bits. The RSASSA-PSS saltLength MUST
-- be 32 or 64 bytes respectively. The trailerField MUST be 1,
-- which represents the trailer field with hexadecimal value
-- 0xBC. Regardless of id-RSASSA-PSS-* or rsaEncryption being
-- used as the AlgorithmIdentifier of the OriginatorPublicKey,
-- the RSA public key MUST be encoded using the RSAPublicKey
-- type.
-- From RFC4055, for reference.
-- RSAPublicKey ::= SEQUENCE {
-- modulus INTEGER, -- -- n
-- publicExponent INTEGER } -- -- e
id-ecdsa-with-shake128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1)
gov(101) csor(3) nistAlgorithm(4)
sigAlgs(3) TBD }
id-ecdsa-with-shake256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1)
gov(101) csor(3) nistAlgorithm(4)
sigAlgs(3) TBD }
-- When the id-ecdsa-with-shake* algorithm identifiers are
-- used in CMS, the AlgorithmIdentifier parameters field
-- MUST be absent and the signature algorithm should be
-- deterministric ECDSA [RFC6979]. The message digest MUST
-- be SHAKE128 or SHAKE256 with a 32 or 64 byte outout
-- length respectively. In both cases, the ECDSA public key,
-- MUST be encoded using the id-ecPublicKey type.
-- From RFC5480, for reference.
-- id-ecPublicKey OBJECT IDENTIFIER ::= {
-- iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 }
-- The id-ecPublicKey parameters must be absent or present
-- and are defined as
-- ECParameters ::= CHOICE {
-- namedCurve OBJECT IDENTIFIER
-- -- -- implicitCurve NULL
-- -- -- specifiedCurve SpecifiedECDomain
-- }
--
-- Message Authentication (maca-) Algorithms
-- used in AuthenticatedData macAlgorithm in CMS
--
MessageAuthAlgs MAC-ALGORITHM ::= {
-- This expands MessageAuthAlgs from [RFC5652] and [RFC6268]
maca-KMACwithSHAKE128 |
maca-KMACwithSHAKE256,
...
}
SMimeCaps SMIME-CAPS ::= {
-- The expands SMimeCaps from [RFC5911]
maca-KMACwithSHAKE128.&smimeCaps |
maca-KMACwithSHAKE256.&smimeCaps,
...
}
--
-- KMAC with SHAKE128
maca-KMACwithSHAKE128 MAC-ALGORITHM ::= {
IDENTIFIER id-KMACWithSHAKE128
PARAMS TYPE KMACwithSHAKE128-params ARE optional
-- If KMACwithSHAKE128-params parameters are absent
-- the SHAKE128 output length used in KMAC is 256 bits
-- and the customization string is an empty string.
IS-KEYED-MAC TRUE
SMIME-CAPS {IDENTIFIED BY id-KMACWithSHAKE128}
}
id-KMACWithSHAKE128 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1)
gov(101) csor(3) nistAlgorithm(4)
hashAlgs(2) 19 }
KMACwithSHAKE128-params ::= SEQUENCE {
kMACOutputLength INTEGER DEFAULT 256, -- Output length in bits
customizationString OCTET STRING DEFAULT ''H
}
-- KMAC with SHAKE256
maca-KMACwithSHAKE256 MAC-ALGORITHM ::= {
IDENTIFIER id-KMACWithSHAKE256
PARAMS TYPE KMACwithSHAKE256-params ARE optional
-- If KMACwithSHAKE256-params parameters are absent
-- the SHAKE256 output length used in KMAC is 512 bits
-- and the customization string is an empty string.
IS-KEYED-MAC TRUE
SMIME-CAPS {IDENTIFIED BY id-KMACWithSHAKE256}
}
id-KMACWithSHAKE256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
country(16) us(840) organization(1)
gov(101) csor(3) nistAlgorithm(4)
hashAlgs(2) 20 }
KMACwithSHAKE256-params ::= SEQUENCE {
kMACOutputLength INTEGER DEFAULT 512, -- Output length in bits
customizationString OCTET STRING DEFAULT ''H
}
END
]]></artwork></figure>
</t>
</section>
</back>
</rfc>