summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc5752.txt
blob: b2b207781d0fe5398faea3542a5fd4a5a4ddf1e9 (plain) (blame)
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
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
Internet Engineering Task Force (IETF)                         S. Turner
Request for Comments: 5752                                          IECA
Category: Standards Track                                      J. Schaad
ISSN: 2070-1721                                             Soaring Hawk
                                                            January 2010


       Multiple Signatures in Cryptographic Message Syntax (CMS)

Abstract

   Cryptographic Message Syntax (CMS) SignedData includes the SignerInfo
   structure to convey per-signer information.  SignedData supports
   multiple signers and multiple signature algorithms per signer with
   multiple SignerInfo structures.  If a signer attaches more than one
   SignerInfo, there are concerns that an attacker could perform a
   downgrade attack by removing the SignerInfo(s) with the 'strong'
   algorithm(s).  This document defines the multiple-signatures
   attribute, its generation rules, and its processing rules to allow
   signers to convey multiple SignerInfo objects while protecting
   against downgrade attacks.  Additionally, this attribute may assist
   during periods of algorithm migration.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in Section 2 of RFC 5741.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   http://www.rfc-editor.org/info/rfc5752.

Copyright Notice

   Copyright (c) 2010 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must



Turner & Schaad              Standards Track                    [Page 1]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

   This document may contain material from IETF Documents or IETF
   Contributions published or made publicly available before November
   10, 2008.  The person(s) controlling the copyright in some of this
   material may not have granted the IETF Trust the right to allow
   modifications of such material outside the IETF Standards Process.
   Without obtaining an adequate license from the person(s) controlling
   the copyright in such materials, this document may not be modified
   outside the IETF Standards Process, and derivative works of it may
   not be created outside the IETF Standards Process, except to format
   it for publication as an RFC or to translate it into languages other
   than English.

Table of Contents

   1. Introduction ....................................................3
      1.1. Conventions Used in This Document ..........................3
   2. Rationale .......................................................3
      2.1. Attribute Design Requirements ..............................4
   3. Multiple Signature Indication ...................................5
   4. Message Generation and Processing ...............................6
      4.1. SignedData Type ............................................6
      4.2. EncapsulatedContentInfo Type ...............................7
      4.3. SignerInfo Type ............................................7
      4.4. Message Digest Calculation Process .........................7
           4.4.1. multiple-signatures Signed Attribute Generation .....7
           4.4.2. Message Digest Calculation Process ..................7
      4.5. Signature Generation Process ...............................8
      4.6. Signature Verification Process .............................8
   5. Signature Evaluation Processing .................................8
      5.1. Evaluation of a SignerInfo Object ..........................9
      5.2. Evaluation of a SignerInfo Set .............................9
      5.3. Evaluation of a SignedData Set ............................10
   6. Security Considerations ........................................11
   7. References .....................................................11
      7.1. Normative References ......................................11
      7.2. Informative References ....................................12
   Appendix A. ASN.1 Module...........................................13
   Appendix B. Background.............................................15
      B.1. Attacks....................................................15
      B.2. Hashes in CMS..............................................15







Turner & Schaad              Standards Track                    [Page 2]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


1.  Introduction

   The Cryptographic Message Syntax (CMS; see [CMS]) defined SignerInfo
   to provide data necessary for relying parties to verify the signer's
   digital signature, which is also included in the SignerInfo
   structure.  Signers include more than one SignerInfo in a SignedData
   if they use different digest or signature algorithms.  Each
   SignerInfo exists independently and new SignerInfo structures can be
   added or existing ones removed without perturbing the remaining
   signatures.

   The concern is that if an attacker successfully attacked a hash or
   signature algorithm, the attacker could remove all SignerInfo
   structures except the SignerInfo with the successfully attacked hash
   or signature algorithm.  The relying party is then left with the
   attacked SignerInfo even though the relying party supported more than
   just the attacked hash or signature algorithm.

   A solution is to have signers include a pointer to all the signer's
   SignerInfo structures.  If an attacker removes any SignerInfo, then
   relying parties will be aware that an attacker has removed one or
   more SignerInfo objects.

   Note that this attribute ought not be confused with the
   countersignature attribute (see Section 11.4 of [CMS]) as this is not
   intended to sign over an existing signature.  Rather, it is to
   provide a pointer to additional signatures by the signer that are all
   at the same level.  That is, countersignature provides a serial
   signature while the attribute defined herein provides pointers to
   parallel signatures by the same signer.

1.1.  Conventions Used in This Document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

2.  Rationale

   The rationale for this specification is to protect against downgrade
   attacks that remove the 'strong' signature to leave the 'weak'
   signature, which has presumably been successfully attacked.  If a CMS
   SignedData object has multiple SignerInfo objects, then the attacker,
   whether it be Alice, Bob, or Mallory, can remove a SignerInfo object
   without the relying party being aware that more than one was
   generated.





Turner & Schaad              Standards Track                    [Page 3]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


   Removal of a SignerInfo does not render the signature invalid nor
   does it constitute an error.  In the following scenario, a signer
   generates a SignedData with two SignerInfo objects, one with a 'weak'
   algorithm and one with a 'strong' algorithm; there are three types of
   relying parties:

   1) Those that support only a 'weak' algorithm.  If both SignerInfo
      objects are present, the relying party processes the algorithm it
      supports.  If both SignerInfo objects are not present, the relying
      party can easily determine that another SignerInfo has been
      removed, but not changed.  In both cases, if the 'weak' signature
      verifies, the relying party MAY consider the signature valid.

   2) Those that support only a 'strong' algorithm.  If both SignerInfo
      objects are present, the relying party processes the algorithm it
      supports.  If both SignerInfo objects are not present, the relying
      party can easily determine that another SignerInfo has been
      removed, but the relying party doesn't care.  In both cases, if
      the 'strong' signature verifies, the relying party MAY consider
      the signature valid.

   3) Those that support both a 'weak' algorithm and a 'strong'
      algorithm.  If both SignerInfo objects are present, the relying
      party processes both algorithms.  If both SignerInfo objects are
      not present, the relying party can easily determine that another
      SignerInfo has been removed.  In both cases, if the 'strong'
      and/or 'weak' signatures verify, the relying party MAY consider
      the signature valid.  (Policy may dictate that both signatures are
      required to validate if present.)

   Local policy MAY dictate that the removal of the 'strong' algorithm
   results in an invalid signature.  See Section 5 for further
   processing.

2.1.  Attribute Design Requirements

   The attribute will have the following characteristics:

   1) Use CMS attribute structure;

   2) Be computable before any signatures are applied;

   3) Contain enough information to identify individual signatures
      (i.e., a particular SignerInfo); and

   4) Contain enough information to resist collision, preimage, and
      second preimage attacks.




Turner & Schaad              Standards Track                    [Page 4]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


3.  Multiple Signature Indication

   The multiple-signatures attribute type specifies a pointer to a
   signer's other multiple-signatures attribute(s).  For example, if a
   signer applies three signatures, there must be two attribute values
   for multiple-signatures in each SignerInfo.  The 1st SignerInfo
   object points to the 2nd and 3rd SignerInfo objects.  The 2nd
   SignerInfo object points to the 1st and 3rd SignerInfo objects.  The
   3rd SignerInfo object points to the 1st and 2nd SignerInfo objects.

   The multiple-signatures attribute MUST be a signed attribute.  The
   number of attribute values included in a SignerInfo is the number of
   signatures applied by a signer less one.  This attribute is multi-
   valued, and there MAY be more than one AttributeValue present.  The
   following object identifier identifies the multiple-signatures
   attribute:

      id-aa-multipleSignatures OBJECT IDENTIFIER ::= {
        iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
        id-aa(16) 51 }

   multiple-signatures attribute values have the ASN.1 type
   MultipleSignatures:

      MultipleSignatures ::= SEQUENCE {
        bodyHashAlg     DigestAlgorithmIdentifier,
        signAlg         SignatureAlgorithmIdentifier,
        signAttrsHash   SignAttrsHash,
        cert            ESSCertIDv2 OPTIONAL}

      SignAttrsHash ::= SEQUENCE {
        algID            DigestAlgorithmIdentifier,
        hash             OCTET STRING }

   The fields in MultipleSignatures have the following meaning:

   - bodyHashAlg includes the digest algorithmIdentifier for the
     referenced multiple-signatures attribute.

   - signAlg includes the signature algorithmIdentifier for the
     referenced multiple-signatures attribute.

   - signAttrsHash has two fields:

     -- algId MUST match the digest algorithm for the SignerInfo in
        which this multiple-signatures attribute value is placed.

     -- hash is the hash value of the signedAttrs (see Section 4.3).



Turner & Schaad              Standards Track                    [Page 5]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


   - cert is optional.  It identities the certificate used to sign the
     SignerInfo that contains the other multiple-signatures
     attribute(s).  It MUST be present if the fields in the other
     multiple-signatures attribute(s) are the same.

   The following is an example:

      SignedData
        DigestAlg=sha1,sha256
        SignerInfo1                SignerInfo2
          digestAlg=sha1             digestAlg=sha256
          signatureAlg=dsawithsha1   signatureAlg=ecdsawithsha256
          signedAttrs=               signedAttrs=
            signingTime1               signingTime1
            messageDigest1             messageDigest2
            multiSig1=                 multiSig2=
              bodyHash=sha256           bodyHash=sha1
              signAlg=ecdsawithsha256   signAlg=dsawithsha1
                signAttrsHash=          signAttrsHash=
                algID=sha1              algID=sha256
                hash=value1             hash=value2

4.  Message Generation and Processing

   The following are the additional procedures for message generation
   when using the multiple-signatures attribute.  These paragraphs track
   with Sections 5.1-5.6 in [CMS].

4.1.  SignedData Type

   The following steps MUST be followed by a signer when generating
   SignedData:

   - The signer MUST indicate the CMS version.

   - The signer SHOULD include the digest algorithm used in
     SignedData.digestAlgorithms, if the digest algorithm's identifier
     is not already present.

   - The signer MUST include the encapContentInfo.  Note that the
     encapContentInfo is the same for all signers in this SignedData.

   - The signer SHOULD add certificates sufficient to contain
     certificate paths from a recognized "root" or "top-level
     certification authority" to the signer, if the signer's
     certificates are not already present.





Turner & Schaad              Standards Track                    [Page 6]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


   - The signer MAY include the Certificate Revocation Lists (CRLs)
     necessary to validate the digital signature, if the CRLs are not
     already present.

   - The signer MUST:

     -- Retain the existing signerInfo objects.

     -- Include their signerInfo object(s).

4.2.  EncapsulatedContentInfo Type

   The procedures for generating EncapsulatedContentInfo are as
   specified in Section 5.2 of [CMS].

4.3.  SignerInfo Type

   The procedures for generating SignerInfo are as specified in Section
   4.4.1 of [CMS] with the following addition:

   The signer MUST include the multiple-signatures attribute in
   signedAttrs.

4.4.  Message Digest Calculation Process

4.4.1.  multiple-signatures Signed Attribute Generation

   The procedure for generating the multiple-signatures signed attribute
   is as follows:

   1) All other signed attributes are placed in the respective
      SignerInfo structures, but the signatures are not yet computed for
      the SignerInfo.

   2) The multiple-signatures attributes are added to each of the
      SignerInfo structures with the SignAttrsHash.hash field containing
      a zero-length octet string.

   3) The correct SignAttrsHash.hash value is computed for each of the
      SignerInfo structures.

   4) After all hash values have been computed, the correct hash values
      are placed into their respective SignAttrsHash.hash fields.

4.4.2.  Message Digest Calculation Process

   The remaining procedures for generating the message-digest attribute
   are as specified in Section 5.4 of [CMS].



Turner & Schaad              Standards Track                    [Page 7]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


4.5.  Signature Generation Process

   The procedures for signature generation are as specified in Section
   5.5 of [CMS].

4.6.  Signature Verification Process

   The procedures for signature verification are as specified in Section
   5.6 of [CMS] with the following addition:

   If the SignedData signerInfo includes the multiple-signatures
   attribute, the attribute's values must be calculated as described in
   Section 4.4.1.

   For every SignerInfo to be considered present for a given signer, the
   number of MultipleSignatures AttributeValue(s) present in a given
   SignerInfo MUST equal the number of SignerInfo objects for that
   signer less one and the hash value present in each of the
   MultipleSignatures AttributeValue(s) MUST match the output of the
   message digest calculation from Section 4.4.1 for each SignerInfo.

   The hash corresponding to the n-th SignerInfo must match the value in
   the multiple-signatures attribute that points to the n-th SignerInfo
   present in all other SignerInfo objects.

5.  Signature Evaluation Processing

   This section describes recommended processing of signatures when
   there are more than one SignerInfo present in a message.  This may be
   due to either multiple SignerInfo objects being present in a single
   SignedData object or multiple SignerData objects embedded in each
   other.

   The text in this section is non-normative.  The processing described
   is highly recommended, but is not forced.  Changes in the processing
   that have the same results with somewhat different orders of
   processing is sufficient.

   Order of operations:

   1) Evaluate each SignerInfo object independently.

   2) Combine the results of all SignerInfo objects at the same level
      (i.e., attached to the same SignerData object).

   3) Combine the results of the nested SignerData objects.  Note that
      this should ignore the presence of other CMS objects between the
      SignedData objects.



Turner & Schaad              Standards Track                    [Page 8]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


5.1.  Evaluation of a SignerInfo Object

   When evaluating a SignerInfo object, there are three different pieces
   that need to be examined.

   The first piece is the mathematics of the signature itself (i.e., can
   one actually successfully do the computations and get the correct
   answer?).  This result is one of three results.  The mathematics
   succeeds, the mathematics fails, or the mathematics cannot be
   evaluated.  The type of things that lead to the last state are non-
   implementation of an algorithm or required inputs, such as the public
   key, are missing.

   The second piece is the validation of the source of the public key.
   For CMS, this is generally determined by extracting the public key
   from a certificate.  The certificate needs to be evaluated.  This is
   done by the procedures outlined in [PROFILE].  In addition to the
   processing described in that document, there may be additional
   requirements on certification path processing that are required by
   the application in question.  One such set of additional processing
   is described in [SMIME-CERT].  One piece of information that is part
   of this additional certificate path processing is local and
   application policy.  The output of this processing can actually be
   one of four different states:  Success, Failure, Indeterminate, and
   Warning.  The first three states are described in [PROFILE]; Warning
   would be generated when it is possible that some information is
   currently acceptable, but may not be acceptable either in the near
   future or under some circumstances.

   The third piece of the validation is local and application policy as
   applied to the contents of the SignerInfo object.  This would cover
   such issues as the requirements on mandatory signed attributes or
   requirements on signature algorithms.

5.2.  Evaluation of a SignerInfo Set

   Combining the results of the individual SignerInfo objects into a
   result for a SignedData object requires knowledge of the results for
   the individual SignerInfo objects, the required application policy,
   and any local policies.  The default processing if no other rules are
   applied should be:

   1) Group the SignerInfo objects by the signer.

   2) Take the best result from each signer.

   3) Take the worst result from all of the different signers; this is
      the result for the SignedData object.



Turner & Schaad              Standards Track                    [Page 9]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


   Application and local policy can affect each of the steps outlined
   above.

   In Step 1:

   - If the subject name or subject alternative name(s) cannot be used
     to determine if two SignerInfo objects were created by the same
     identity, then applications need to specify how such matching is to
     be done.  As an example, the S/MIME message specification [SMIME-
     MSG] could say that as long as the same rfc822Name exists in either
     the subject name or the subject alt name they are the same
     identity.  This would be true even if other information that did
     not match existed in these fields.

   - Some applications may specify that this step should be skipped;
     this has the effect of making each SignerInfo object independent of
     all other SignerInfo objects even if the signing identity is the
     same.  Applications that specify this need to be aware that
     algorithm rollover will not work correctly in this case.

   In Step 2:

   - The major policy implication at this step is the treatment of and
     order for the indeterminate states.  In most cases, this state
     would be placed between the failure and warning states.  Part of
     the issue is the question of having a multi-state or a binary
     answer as to success or failure of an evaluation.  Not every
     application can deal with the statement "try again later".  It may
     also be dependent on what the reason for the indeterminate state
     is.  It makes more sense to try again later if the problem is that
     a CRL cannot be found than if you are not able to evaluate the
     algorithm for the signature.

   In Step 3:

   - The same policy implications from Step 2 apply here.

5.3.  Evaluation of a SignedData Set

   Simple applications will generally use the worst single outcome
   (success, unknown, failure) as the outcome for a set of SignedData
   objects (i.e., one failure means the entire item fails).  However,
   not all applications will want to have this behavior.








Turner & Schaad              Standards Track                   [Page 10]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


   A work flow application could work as follows:

   The second signer will modify the original content, keep the original
   signature, and then sign the message.  This means that only the
   outermost signature is of significance during evaluation.  The second
   signer is asserting that they successfully validated the inner
   signature as part of its processing.

   A Signed Mail application could work as follows:

   If signatures are added for the support of [ESS] features, then the
   fact that an outer layer signature cannot be validated can be treated
   as a non-significant failure.  The only thing that matters is that
   the originator signature is valid.  This means that all outer layer
   signatures that fail can be stripped from the message prior to
   display leaving only the inner-most valid signature to be displayed.

6.  Security Considerations

   Security considerations from the hash and signature algorithms used
   to produce the SignerInfo apply.

   If the hashing and signing operations are performed by different
   entities, the entity creating the signature must ensure that the hash
   comes from a "trustworthy" source.  This can be partially mitigated
   by requiring that multiple hashes using different algorithms are
   provided.

   This attribute cannot be relied upon in the event that all of the
   algorithms used in the signer attribute are 'cracked'.  It is not
   possible for a verifier to determine that a collision could not be
   found that satisfies all of the algorithms.

   Local policy and applications greatly affect signature processing.
   The application of local policy and the requirements specific to an
   application can both affect signature processing.  This means that a
   signature valid in one context or location can fail validation in a
   different context or location.

7.  References

7.1.  Normative References

   [RFC2119]     Bradner, S., "Key words for use in RFCs to Indicate
                 Requirement Levels", BCP 14, RFC 2119, March 1997.

   [CMS]         Housley, R., "Cryptographic Message Syntax (CMS)", RFC
                 5652, September 2009.



Turner & Schaad              Standards Track                   [Page 11]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


   [PROFILE]     Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
                 Housley, R., and W. Polk, "Internet X.509 Public Key
                 Infrastructure Certificate and Certificate Revocation
                 List (CRL) Profile", RFC 5280, May 2008.

   [SMIME-CERT]  Ramsdell, B. and S. Turner, "Secure/Multipurpose
                 Internet Mail Extensions (S/MIME) Version 3.2
                 Certificate Handling", RFC 5750, January 2010.

   [SMIME-MSG]   Ramsdell, B. and S. Turner, "Secure/Multipurpose
                 Internet Mail Extensions (S/MIME) Version 3.2 Message
                 Specification", RFC 5751, January 2010.

   [ESS]         Hoffman, P., Ed., "Enhanced Security Services for
                 S/MIME", RFC 2634, June 1999.

   [ESSCertID]   Schaad, J., "Enhanced Security Services (ESS) Update:
                 Adding CertID Algorithm Agility", RFC 5035, August
                 2007.

7.2.  Informative References

   [ATTACK]      Hoffman, P. and B. Schneier, "Attacks on Cryptographic
                 Hashes in Internet Protocols", RFC 4270, November 2005.



























Turner & Schaad              Standards Track                   [Page 12]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


Appendix A.  ASN.1 Module

MultipleSignatures-2008

  { iso(1) member-body(2) us(840) rsadsi(113549)
    pkcs(1) pkcs9(9) smime(16) modules(0)
    id-mod-multipleSig-2008(34) }

   DEFINITIONS IMPLICIT TAGS ::=

   BEGIN

-- EXPORTS All

-- The types and values defined in this module are exported for use
-- in the other ASN.1 modules.  Other applications may use them for
-- their own purposes.

IMPORTS

-- Imports from RFC 5652 [CMS], 12.1

     DigestAlgorithmIdentifier, SignatureAlgorithmIdentifier
     FROM CryptographicMessageSyntax2004
       { iso(1) member-body(2) us(840) rsadsi(113549)
         pkcs(1) pkcs9(9) smime(16) modules(0) cms-2004(24) }

-- Imports from RFC 5035 [ESSCertID], Appendix A

     ESSCertIDv2
     FROM ExtendedSecurityServices-2006
       { iso(1) member-body(2) us(840) rsadsi(113549)
         pkcs(1) pkcs9(9) smime(16) modules(0) id-mod-ess-2006(30) }

;

-- Section 3.0

id-aa-multipleSignatures OBJECT IDENTIFIER ::= { iso(1) member-body(2)
us(840) rsadsi(113549) pkcs(1) pkcs9(9) id-aa(2) 51 }

MultipleSignatures ::= SEQUENCE {
  bodyHashAlg     DigestAlgorithmIdentifier,
  signAlg         SignatureAlgorithmIdentifier,
  signAttrsHash   SignAttrsHash,
  cert            ESSCertIDv2 OPTIONAL }





Turner & Schaad              Standards Track                   [Page 13]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


SignAttrsHash ::= SEQUENCE {
  algID            DigestAlgorithmIdentifier,
  hash             OCTET STRING }

END -- of MultipleSignatures-2008














































Turner & Schaad              Standards Track                   [Page 14]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


Appendix B.  Background

   This is an informational appendix.  This appendix enumerates all
   locations in CMS where hashes are used and the possible attacks on
   those hash locations.

B.1.  Attacks

   As noted in [ATTACK], the following types of resistance are needed
   against known attacks:

   1) Collision Resistance: Find x and y where x != y and H(x) = H(y)

   2) Preimage Resistance: Given y, find x where H(x) = y

   3) Second Preimage Resistance: Given y, find x where H(x) = H(y)

   Note:  It is known that a collision resistance attack is simpler than
   a second preimage resistance attack, and it is presumed that a second
   preimage resistance attack is simpler than a preimage attack.

B.2.  Hashes in CMS

   Within a SignerInfo there are two places where hashes are applied and
   hence can be attacked: the body and the signed attributes.  The
   following outlines the entity that creates the hash, the entity that
   attacks the hash, and the type of resistance required:

   1) Hash of the Body (i.e., the octets comprising the value of the
      encapContentInfo.eContent OCTET STRING omitting the tag and length
      octets, as per 5.4 of [CMS]).

      a) If Alice creates the body to be hashed, then:

         i) Alice can attack the hash.  This attack requires a
            successful collision resistance attack.

        ii) Mallory can attack the hash.  This attack requires a
            successful second preimage resistance attack.

      b) If Alice hashes a body provided by Bob, then:

         i) Alice can attack the hash.  This attack requires a
            successful second preimage attack.







Turner & Schaad              Standards Track                   [Page 15]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


        ii) Bob can attack the hash.  This attack requires a successful
            Collision Resistance attack.  If Alice has the ability to
            "change" the content of the body in some fashion, then this
            attack requires a successful second preimage attack.  (One
            example would be to use a keyed hash function.)

       iii) Mallory can attack the hash.  This attack requires a
            successful second preimage attack.

      c) If Alice signs using a hash value provided by Bob (in this
         case, Alice is presumed to never see the body in question),
         then:

         i) Alice can attack the hash.  This attack requires a
            successful preimage attack.

        ii) Bob can attack the hash.  This attack requires a successful
            collision resistance attack.  Unlike case (b), there is
            nothing that Alice can do to upgrade the attack.

       iii) Mallory can attack the hash.  This requires a successful
            preimage attack if the content is unavailable to Mallory and
            a successful second preimage attack if the content is
            available to Mallory.

   2) Hash of signed attributes (i.e., the complete Distinguished
      Encoding Rules (DER) encoding of the SignedAttrs value contained
      in the signedAttrs field, as per 5.4 of [CMS]).

      There is a difference between hashing the body and hashing the
      SignedAttrs value in that one should not accept a sequence of
      attributes to be signed from a third party.  In fact, one should
      not accept attributes to be included in the signed attributes list
      from a third party.  The attributes are about the signature you
      are applying and not about the body.  If there is meta-information
      that needs to be attached to the body by a third party, then they
      need to provide their own signature and you need to add a
      countersignature.  (Note: The fact that the signature is to be
      used as a countersignature is a piece of information that should
      be accepted, but it does not directly provide an attribute that is
      inserted in the signed attribute list.)

      a) Alice can attack the hash.  This requires a successful
         collision resistance attack.

      b) Mallory can attack the hash.  This requires a successful second
         preimage resistance attack.




Turner & Schaad              Standards Track                   [Page 16]
^L
RFC 5752              Multiple Signatures in S/MIME         January 2010


      c) Bob can attack the hash and Bob controls the value of the
         message digest attribute used.  This case is analogous to the
         current attacks [ATTACK].  Bob can attack the hash value
         generated by Alice based on a prediction of the signed
         attributes and the hash algorithm Alice will be using to create
         the signature.  If Bob successfully predicts these items, the
         attack requires a successful collision resistance attack.  (It
         is expected that if Alice uses a keyed hashing function as part
         of the signature, this attack will be more difficult as Bob
         would have a harder time prediction the key value.)

   It should be noted that both of these attacks are considered to be
   more difficult than the attack on the body since more structure is
   designed into the data to be hashed than is frequently found in the
   body and the data is shorter in length than that of the body.

   The successful prediction of the signing-time attribute is expected
   to be more difficult than with certificates as the time would not
   generally be rounded.  Time stamp services can make this more
   unpredictable by using a random delay before issuing the signature.

   Allowing a third party to provide a hash value could potentially make
   an attack simpler when keyed hash functions are used since there is
   more data than can be modified without changing the overall structure
   of the signed attribute structure.

Authors' Addresses

   Sean Turner
   IECA, Inc.
   3057 Nutley Street, Suite 106
   Fairfax, VA 22031
   USA

   EMail: turners@ieca.com


   Jim Schaad
   Soaring Hawk Consulting

   EMail: jimsch@exmsft.com










Turner & Schaad              Standards Track                   [Page 17]
^L