-
Notifications
You must be signed in to change notification settings - Fork 17
/
draft-ietf-jose-json-web-signature-14.ja.html
3485 lines (2917 loc) · 180 KB
/
draft-ietf-jose-json-web-signature-14.ja.html
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
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en"><head><title>JSON Web Signature (JWS)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="JSON Web Signature (JWS)">
<meta name="keywords" content="RFC, Request for Comments, I-D, Internet-Draft, JavaScript Object Notation, JSON, JSON Object Signing and Encryption, JOSE, JSON Web Signature, JWS, JSON Web Encryption, JWE, JSON Web Key, JWK, JSON Web Algorithms, JWA">
<meta name="generator" content="xml2rfc v1.36 (http://xml.resource.org/)">
<style type='text/css'><!--
body {
font-family: verdana, charcoal, helvetica, arial, sans-serif;
font-size: small; color: #000; background-color: #FFF;
margin: 2em;
}
h1, h2, h3, h4, h5, h6 {
font-family: helvetica, monaco, "MS Sans Serif", arial, sans-serif;
font-weight: bold; font-style: normal;
}
h1 { color: #900; background-color: transparent; text-align: right; }
h3 { color: #333; background-color: transparent; }
td.RFCbug {
font-size: x-small; text-decoration: none;
width: 30px; height: 30px; padding-top: 2px;
text-align: justify; vertical-align: middle;
background-color: #000;
}
td.RFCbug span.RFC {
font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, verdana, sans-serif;
font-weight: bold; color: #666;
}
td.RFCbug span.hotText {
font-family: charcoal, monaco, geneva, "MS Sans Serif", helvetica, verdana, sans-serif;
font-weight: normal; text-align: center; color: #FFF;
}
table.TOCbug { width: 30px; height: 15px; }
td.TOCbug {
text-align: center; width: 30px; height: 15px;
color: #FFF; background-color: #900;
}
td.TOCbug a {
font-family: monaco, charcoal, geneva, "MS Sans Serif", helvetica, sans-serif;
font-weight: bold; font-size: x-small; text-decoration: none;
color: #FFF; background-color: transparent;
}
td.header {
font-family: arial, helvetica, sans-serif; font-size: x-small;
vertical-align: top; width: 33%;
color: #FFF; background-color: #666;
}
td.author { font-weight: bold; font-size: x-small; margin-left: 4em; }
td.author-text { font-size: x-small; }
/* info code from SantaKlauss at http://www.madaboutstyle.com/tooltip2.html */
a.info {
/* This is the key. */
position: relative;
z-index: 24;
text-decoration: none;
}
a.info:hover {
z-index: 25;
color: #FFF; background-color: #900;
}
a.info span { display: none; }
a.info:hover span.info {
/* The span will display just on :hover state. */
display: block;
position: absolute;
font-size: smaller;
top: 2em; left: -5em; width: 15em;
padding: 2px; border: 1px solid #333;
color: #900; background-color: #EEE;
text-align: left;
}
a { font-weight: bold; }
a:link { color: #900; background-color: transparent; }
a:visited { color: #633; background-color: transparent; }
a:active { color: #633; background-color: transparent; }
p { margin-left: 2em; margin-right: 2em; }
p.copyright { font-size: x-small; }
p.toc { font-size: small; font-weight: bold; margin-left: 3em; }
table.toc { margin: 0 0 0 3em; padding: 0; border: 0; vertical-align: text-top; }
td.toc { font-size: small; font-weight: bold; vertical-align: text-top; }
ol.text { margin-left: 2em; margin-right: 2em; }
ul.text { margin-left: 2em; margin-right: 2em; }
li { margin-left: 3em; }
/* RFC-2629 <spanx>s and <artwork>s. */
em { font-style: italic; }
strong { font-weight: bold; }
dfn { font-weight: bold; font-style: normal; }
cite { font-weight: normal; font-style: normal; }
tt { color: #036; }
tt, pre, pre dfn, pre em, pre cite, pre span {
font-family: "Courier New", Courier, monospace; font-size: small;
}
pre {
text-align: left; padding: 4px;
color: #000; background-color: #CCC;
}
pre dfn { color: #900; }
pre em { color: #66F; background-color: #FFC; font-weight: normal; }
pre .key { color: #33C; font-weight: bold; }
pre .id { color: #900; }
pre .str { color: #000; background-color: #CFF; }
pre .val { color: #066; }
pre .rep { color: #909; }
pre .oth { color: #000; background-color: #FCF; }
pre .err { background-color: #FCC; }
/* RFC-2629 <texttable>s. */
table.all, table.full, table.headers, table.none {
font-size: small; text-align: center; border-width: 2px;
vertical-align: top; border-collapse: collapse;
}
table.all, table.full { border-style: solid; border-color: black; }
table.headers, table.none { border-style: none; }
th {
font-weight: bold; border-color: black;
border-width: 2px 2px 3px 2px;
}
table.all th, table.full th { border-style: solid; }
table.headers th { border-style: none none solid none; }
table.none th { border-style: none; }
table.all td {
border-style: solid; border-color: #333;
border-width: 1px 2px;
}
table.full td, table.headers td, table.none td { border-style: none; }
hr { height: 1px; }
hr.insert {
width: 80%; border-style: none; border-width: 0;
color: #CCC; background-color: #CCC;
}
--></style>
</head>
<body>
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<table summary="layout" width="66%" border="0" cellpadding="0" cellspacing="0"><tr><td><table summary="layout" width="100%" border="0" cellpadding="2" cellspacing="1">
<tr><td class="header">JOSE Working Group</td><td class="header">M. Jones</td></tr>
<tr><td class="header">Internet-Draft</td><td class="header">Microsoft</td></tr>
<tr><td class="header">Intended status: Standards Track</td><td class="header">J. Bradley</td></tr>
<tr><td class="header">Expires: January 30, 2014</td><td class="header">Ping Identity</td></tr>
<tr><td class="header"> </td><td class="header">N. Sakimura</td></tr>
<tr><td class="header"> </td><td class="header">NRI</td></tr>
<tr><td class="header"> </td><td class="header">July 29, 2013</td></tr>
</table></td></tr></table>
<h1><br />JSON Web Signature (JWS)<br />draft-ietf-jose-json-web-signature-14</h1>
<h3>Abstract</h3>
<p>
JSON Web Signature (JWS)は, JavaScript Object Notation (JSON)をベースとしたデータ構造を用いて, デジタル署名やMessage Authentication Codes (MACs)により保護されたコンテンツを表現するための手段である.
本仕様で使用する暗号アルゴリズムと識別子はJSON Web Algorithms (JWA) で述べられている.
関連する暗号化の機能は, JSON Web Encryption (JWE) で述べられている.
</p>
<h3>Status of this Memo</h3>
<p>
This Internet-Draft is submitted in full
conformance with the provisions of BCP 78 and BCP 79.</p>
<p>
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current
Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.</p>
<p>
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any time.
It is inappropriate to use Internet-Drafts as reference material or to cite
them other than as “work in progress.”</p>
<p>
This Internet-Draft will expire on January 30, 2014.</p>
<h3>Copyright Notice</h3>
<p>
Copyright (c) 2013 IETF Trust and the persons identified as the
document authors. All rights reserved.</p>
<p>
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
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.</p>
<a name="toc"></a><br /><hr />
<h3>Table of Contents</h3>
<p class="toc">
<a href="#Introduction">1.</a>
Introduction<br />
<a href="#NotationalConventions">1.1.</a>
Notational Conventions<br />
<a href="#Terminology">2.</a>
Terminology<br />
<a href="#Overview">3.</a>
JSON Web Signature (JWS) Overview<br />
<a href="#ExampleJWS">3.1.</a>
Example JWS<br />
<a href="#Header">4.</a>
JWS Header<br />
<a href="#ReservedHeaderParameterName">4.1.</a>
Reserved Header Parameter Names<br />
<a href="#algDef">4.1.1.</a>
"alg" (Algorithm) Header Parameter<br />
<a href="#jkuDef">4.1.2.</a>
"jku" (JWK Set URL) Header Parameter<br />
<a href="#jwkDef">4.1.3.</a>
"jwk" (JSON Web Key) Header Parameter<br />
<a href="#x5uDef">4.1.4.</a>
"x5u" (X.509 URL) Header Parameter<br />
<a href="#x5tDef">4.1.5.</a>
"x5t" (X.509 Certificate Thumbprint) Header Parameter<br />
<a href="#x5cDef">4.1.6.</a>
"x5c" (X.509 Certificate Chain) Header Parameter<br />
<a href="#kidDef">4.1.7.</a>
"kid" (Key ID) Header Parameter<br />
<a href="#typDef">4.1.8.</a>
"typ" (Type) Header Parameter<br />
<a href="#ctyDef">4.1.9.</a>
"cty" (Content Type) Header Parameter<br />
<a href="#critDef">4.1.10.</a>
"crit" (Critical) Header Parameter<br />
<a href="#PublicHeaderParameterName">4.2.</a>
Public Header Parameter Names<br />
<a href="#PrivateHeaderParameterName">4.3.</a>
Private Header Parameter Names<br />
<a href="#JWSRules">5.</a>
Producing and Consuming JWSs<br />
<a href="#MessageSigning">5.1.</a>
Message Signing or MACing<br />
<a href="#MessageValidation">5.2.</a>
Message Signature or MAC Validation<br />
<a href="#StringComparison">5.3.</a>
String Comparison Rules<br />
<a href="#IDingKeys">6.</a>
Key Identification<br />
<a href="#Serializations">7.</a>
Serializations<br />
<a href="#CompactSerialization">7.1.</a>
JWS Compact Serialization<br />
<a href="#JSONSerialization">7.2.</a>
JWS JSON Serialization<br />
<a href="#IANA">8.</a>
IANA Considerations<br />
<a href="#HdrReg">8.1.</a>
JSON Web Signature and Encryption Header Parameters Registry<br />
<a href="#HdrTemplate">8.1.1.</a>
Registration Template<br />
<a href="#HdrContents">8.1.2.</a>
Initial Registry Contents<br />
<a href="#TypReg">8.2.</a>
JSON Web Signature and Encryption Type Values Registry<br />
<a href="#TypTemplate">8.2.1.</a>
Registration Template<br />
<a href="#TypContents">8.2.2.</a>
Initial Registry Contents<br />
<a href="#MediaReg">8.3.</a>
Media Type Registration<br />
<a href="#MediaContents">8.3.1.</a>
Registry Contents<br />
<a href="#Security">9.</a>
Security Considerations<br />
<a href="#CryptoSecCon">9.1.</a>
Cryptographic Security Considerations<br />
<a href="#JSONSecCon">9.2.</a>
JSON Security Considerations<br />
<a href="#UnicodeSecCon">9.3.</a>
Unicode Comparison Security Considerations<br />
<a href="#TLS_requirements">9.4.</a>
TLS Requirements<br />
<a href="#rfc.references1">10.</a>
References<br />
<a href="#rfc.references1">10.1.</a>
Normative References<br />
<a href="#rfc.references2">10.2.</a>
Informative References<br />
<a href="#rfc.references3">10.3.</a>
翻訳プロジェクト<br />
<a href="#JWSExamples">Appendix A.</a>
JWS Examples<br />
<a href="#HS256Example">A.1.</a>
Example JWS using HMAC SHA-256<br />
<a href="#HS256Encoding">A.1.1.</a>
Encoding<br />
<a href="#HS256Decoding">A.1.2.</a>
Decoding<br />
<a href="#HS256Validating">A.1.3.</a>
Validating<br />
<a href="#RS256Example">A.2.</a>
Example JWS using RSASSA-PKCS-v1_5 SHA-256<br />
<a href="#RS256Encoding">A.2.1.</a>
Encoding<br />
<a href="#RS256Decoding">A.2.2.</a>
Decoding<br />
<a href="#RS256Validating">A.2.3.</a>
Validating<br />
<a href="#ES256Example">A.3.</a>
Example JWS using ECDSA P-256 SHA-256<br />
<a href="#ES256Encoding">A.3.1.</a>
Encoding<br />
<a href="#ES256Decoding">A.3.2.</a>
Decoding<br />
<a href="#ES256Validating">A.3.3.</a>
Validating<br />
<a href="#ES512Example">A.4.</a>
Example JWS using ECDSA P-521 SHA-512<br />
<a href="#ES512Encoding">A.4.1.</a>
Encoding<br />
<a href="#ES512Decoding">A.4.2.</a>
Decoding<br />
<a href="#ES512Validating">A.4.3.</a>
Validating<br />
<a href="#ExamplePlaintextJWS">A.5.</a>
Example Plaintext JWS<br />
<a href="#JSONSerializationExample">A.6.</a>
Example JWS Using JWS JSON Serialization<br />
<a href="#JSProtectedHeader">A.6.1.</a>
JWS Per-Signature Protected Headers<br />
<a href="#JSRecipientHeaders">A.6.2.</a>
JWS Per-Signature Unprotected Headers<br />
<a href="#JSHeader">A.6.3.</a>
Complete JWS Header Values<br />
<a href="#JSComplete">A.6.4.</a>
Complete JWS JSON Serialization Representation<br />
<a href="#x5cExample">Appendix B.</a>
"x5c" (X.509 Certificate Chain) Example<br />
<a href="#base64urlnotes">Appendix C.</a>
Notes on implementing base64url encoding without padding<br />
<a href="#critTest">Appendix D.</a>
Negative Test Case for "crit" Header Parameter<br />
<a href="#Acknowledgements">Appendix E.</a>
Acknowledgements<br />
<a href="#History">Appendix F.</a>
Document History<br />
<a href="#Translator">Appendix G.</a>
翻訳者<br />
<a href="#rfc.authors">§</a>
Authors' Addresses<br />
</p>
<br clear="all" />
<a name="Introduction"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.1"></a><h3>1.
Introduction</h3>
<p>
JSON Web Signature (JWS)は, JavaScript Object Notation (JSON) <a class='info' href='#RFC4627'>[RFC4627]<span> (</span><span class='info'>Crockford, D., “The application/json Media Type for JavaScript Object Notation (JSON),” July 2006.</span><span>)</span></a> をベースとしたデータ構造を用いて, デジタル署名やMessage Authentication Codes (MACs)により保護されたコンテンツを表現するための手段である.
JWSの暗号化メカニズムは任意のオクテット列に対して完全性保護を提供する.
</p>
<p>
JWSオブジェクトのために2つの密接に関連する表現が定義されている.
JWS Compact Serializationはコンパクトであり, HTTP Authorization ヘッダやURIクエリパラメータのようなスペースが制約された環境を意図したURL-safeな表現である.
JWS JSON SerializationはJSONオブジェクトとしてJWSオブジェクトを表現し, 同じコンテンツに対して複数の署名とMACsの両方, またはいずれかを適用することができる.
両方とも, 同じ暗号基盤を共有する.
</p>
<p>
本仕様で使用する暗号アルゴリズムと識別子はJSON Web Algorithms (JWA) <a class='info' href='#JWA'>[JWA]<span> (</span><span class='info'>Jones, M., “JSON Web Algorithms (JWA),” July 2013.</span><span>)</span></a>で述べられている.
関連する暗号化の機能は, JSON Web Encryption (JWE) <a class='info' href='#JWE'>[JWE]<span> (</span><span class='info'>Jones, M., Rescorla, E., and J. Hildebrand, “JSON Web Encryption (JWE),” July 2013.</span><span>)</span></a>で述べられている.
</p>
<a name="NotationalConventions"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.1.1"></a><h3>1.1.
Notational Conventions</h3>
<p>
本仕様で用いられる各キーワード「MUST (しなければならない)」, 「MUST NOT (してはならない)」, 「REQUIRED (必須である)」, 「SHALL (するものとする)」, 「SHALL NOT (しないものとする)」, 「SHOULD (すべきである)」, 「SHOULD NOT (すべきではない)」, 「RECOMMENDED (推奨される)」, 「MAY (してもよい)」, 「OPTIONAL (任意である)」は <a class='info' href='#RFC2119'>[RFC2119]<span> (</span><span class='info'>Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” March 1997.</span><span>)</span></a> で述べられている通りに解釈されるべきものである.
</p>
<a name="Terminology"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.2"></a><h3>2.
Terminology</h3>
<p>
</p>
<blockquote class="text"><dl>
<dt>JSON Web Signature (JWS)</dt>
<dd>
デジタル署名もしくはMAC化されたメッセージを表現するデータ構造.
JWSは以下の3つの値より構成される:
JWS ヘッダ,
JWS ペイロード,
JWS 署名
</dd>
<dt>JSON Text Object (JSON テキストオブジェクト)</dt>
<dd>
JSONオブジェクトを表現するUTF-8 <a class='info' href='#RFC3629'>[RFC3629]<span> (</span><span class='info'>Yergeau, F., “UTF-8, a transformation format of ISO 10646,” November 2003.</span><span>)</span></a>でエンコードされた文字列.
JSONオブジェクトの構文は<a class='info' href='#RFC4627'>[RFC4627]<span> (</span><span class='info'>Crockford, D., “The application/json Media Type for JavaScript Object Notation (JSON),” July 2006.</span><span>)</span></a>のSection 2.2で定義されている.
</dd>
<dt>JWS Header (JWS ヘッダ)</dt>
<dd>
JWS 署名値を作成するために使用したデジタル署名やMACの操作を説明するJSONテキストオブジェクト(もしくはJWS JSON Serializationを用いたJSONテキストオブジェクト).
JWS ヘッダオブジェクトのメンバは後述の "ヘッダパラメータ" である.
</dd>
<dt>JWS Payload (JWS ペイロード)</dt>
<dd>
保護対象となるオクテット列であり, メッセージとも呼ばれる.
ペイロードは任意のオクテット列を含むことが出来る.
</dd>
<dt>JWS Signature (JWS 署名)</dt>
<dd>
JWS プロテクトヘッダとJWS ペイロードの完全性を保証する暗号論的情報からなるオクテット列.
JWS 署名値はJWS ヘッダで指定されたパラメータを使いJWS署名入力から計算されたデジタル署名やMACの値である.
</dd>
<dt>JWS Protected Header (JWS プロテクトヘッダ)</dt>
<dd>
JWS ヘッダのうち完全性が保護された部分にあたる JSON テキストオブジェクト.
JWS Compact Serialization では, JWS ヘッダ全体が JWS プロテクトヘッダとなる.
JWS JSON Serialization では, JWS プロテクトヘッダは JWS ヘッダ全体のうちの一部である.
</dd>
<dt>Header Parameter (ヘッダパラメータ)</dt>
<dd>
JWSヘッダのメンバである名前と値のペア.
</dd>
<dt>Header Parameter Name (ヘッダパラメータ名)</dt>
<dd>
JWSヘッダのメンバの名前.
</dd>
<dt>Header Parameter Value (ヘッダパラメータ値)</dt>
<dd>
JWSヘッダのメンバの値.
</dd>
<dt>Base64url Encoding</dt>
<dd>
<a class='info' href='#RFC4648'>RFC 4648<span> (</span><span class='info'>Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” October 2006.</span><span>)</span></a> [RFC4648]のSection 3.2で許可されているように, Section 5で述べられているURL-safeでない穴埋め文字'='を除いた, URL-safeかつfilename-safeであるBase64エンコーディング. (穴埋めなしのbase64urlエンコーディングの実装に関する注意事項については<a class='info' href='#base64urlnotes'>Appendix C<span> (</span><span class='info'>Notes on implementing base64url encoding without padding</span><span>)</span></a>を参照.)
</dd>
<dt>Encoded JWS Header (エンコード済 JWS ヘッダ)</dt>
<dd>
Base64urlでエンコードされたJWS プロテクトヘッダ.
</dd>
<dt>Encoded JWS Payload (エンコード済 JWS ペイロード)</dt>
<dd>
Base64urlでエンコードされたJWS ペイロード.
</dd>
<dt>Encoded JWS Signature (エンコード済 JWS 署名)</dt>
<dd>
Base64urlでエンコードされたJWS 署名.
</dd>
<dt>JWS Signing Input (JWS署名入力)</dt>
<dd>
エンコード済JWSヘッダ, ピリオド('.'), およびエンコード済JWSペイロードを連結したもの.
</dd>
<dt>JWS Compact Serialization</dt>
<dd>
エンコード済JWS ヘッダ, エンコード済JWS ペイロード, エンコード済JWS 署名を順番通りに, 3つの文字列を2つのピリオド('.')で区切り連結したJWSの表現.
この表現はコンパクトでありURL-safeである.
</dd>
<dt>JWS JSON Serialization</dt>
<dd>
JWS ヘッダ, エンコード済 JWS ペイロード, エンコード済 JWS 署名値で構成される JSON 構造による JWS の表現.
JWS Compact Serializationと異なり, JWS JSON Serializationは同じコンテンツに対して複数の署名とMACsの両方, またはいずれかを適用することができる.
この表現はコンパクトでもなくURL-safeでもない.
</dd>
<dt>Collision Resistant Namespace</dt>
<dd>
他の名前と衝突することが極めて低くなるように名前を割り当てることを可能にする名前空間.
例えば, 衝突耐性は名前空間の部分の管理を委譲することで, または衝突耐性のある名前割り当て関数を利用することで実現できる.
Collision Resistant Namespaceの例:
ドメイン名,
ITU-T X.660とX.670 Recommendation seriesで定義されたObject Identifiers (OIDs),
Universally Unique IDentifiers (UUIDs)
<a class='info' href='#RFC4122'>[RFC4122]<span> (</span><span class='info'>Leach, P., Mealling, M., and R. Salz, “A Universally Unique IDentifier (UUID) URN Namespace,” July 2005.</span><span>)</span></a>.
管理上委譲された名前空間を使用する場合, 名前を定義する際に, 名前を定義するために使用する名前空間の一部を制限していることを保証するために適切な注意を払う必要がある.
</dd>
<dt>StringOrURI</dt>
<dd>
以下の制約を設けたJSON文字列. 任意の文字列値を使用してよい(MAY)が, ":"を含む文字列はURI<a class='info' href='#RFC3986'>[RFC3986]<span> (</span><span class='info'>Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.</span><span>)</span></a>でなければならない(MUST).
StringOrURIの値は変換や正規化は適用されず, 比較時には大文字・小文字を区別する.
</dd>
</dl></blockquote><p>
</p>
<a name="Overview"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.3"></a><h3>3.
JSON Web Signature (JWS) Overview</h3>
<p>
JWSはJSONデータ構造とbase64urlエンコーディングを用いてデジタル署名, もしくはMACを行ったコンテンツを表現する.
JWSでは次の3つの値が表現される:
JWSヘッダ,
JWSペイロード,
JWS署名.
Compact Serializationでは3つの値はデータ転送のためにBase64urlでエンコードされ, またエンコードされた文字列を順番通りに, 3つの文字列を2つのピリオド('.')で区切って連結したものとして表現される.
JSON Serializationの情報は<a class='info' href='#JSONSerialization'>Section 7.2<span> (</span><span class='info'>JWS JSON Serialization</span><span>)</span></a>で定義されている.
</p>
<p>
JWSヘッダは採用した署名もしくはMACの手法とパラメータを記述する.
JWSペイロードは保護対象となるメッセージコンテンツである.
JWS署名はJWSプロテクトヘッダとJWSヘッダ両方の完全性を保証する.
</p>
<a name="ExampleJWS"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.3.1"></a><h3>3.1.
Example JWS</h3>
<p>
以下に示す例では, JWSヘッダはエンコードされたオブジェクトがJSON Web Token (JWT) <a class='info' href='#JWT'>[JWT]<span> (</span><span class='info'>Jones, M., Bradley, J., and N. Sakimura, “JSON Web Token (JWT),” July 2013.</span><span>)</span></a>であり, JWSヘッダとJWSペイロードがHMAC SHA-256アルゴリズムで保護されていることを示している:
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
{"typ":"JWT",
"alg":"HS256"}
</pre></div>
<p>
JWSヘッダのUTF-8で表現されたオクテットをBase64urlエンコーディングすることで, 以下のエンコード済JWSヘッダの値が得られる:
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
</pre></div>
<p>
以下はJWSペイロードとして用いることの出来るJSONオブジェクトの例である.
(ペイロードは任意のコンテンツになり得るため, JSONオブジェクト表現である必要はないことに注意する.)
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
{"iss":"joe",
"exp":1300819380,
"http://example.com/is_root":true}
</pre></div>
<p>
上記のJSONオブジェクトのUTF-8表現である以下のオクテット列が, JWSペイロードである:
</p>
<p>
[123, 34, 105, 115, 115, 34, 58, 34, 106, 111, 101, 34, 44, 13, 10, 32, 34, 101, 120, 112, 34, 58, 49, 51, 48, 48, 56, 49, 57, 51, 56, 48, 44, 13, 10, 32, 34, 104, 116, 116, 112, 58, 47, 47, 101, 120, 97, 109, 112, 108, 101, 46, 99, 111, 109, 47, 105, 115, 95, 114, 111, 111, 116, 34, 58, 116, 114, 117, 101, 125]
</p>
<p>
JWSペイロードをBase64urlエンコーディングすることで, 以下のエンコード済JWSペイロードが得られる
(改行は掲載上の都合による):
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
</pre></div>
<p>
JWS署名入力 (エンコード済JWSヘッダ, ピリオド('.'), エンコード済JWSペイロードを連結したもの) の ASCII <a class='info' href='#USASCII'>[USASCII]<span> (</span><span class='info'>American National Standards Institute, “Coded Character Set -- 7-bit American Standard Code for Information Interchange,” 1986.</span><span>)</span></a> オクテットの HMAC を, <a class='info' href='#HS256Example'>Appendix A.1<span> (</span><span class='info'>Example JWS using HMAC SHA-256</span><span>)</span></a>で指定されたキーを用いてHMAC SHA-256アルゴリズムで計算し, 結果をbase64urlエンコードすることで, 以下のエンコード済JWS署名値が得られる:
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
</pre></div>
<p>
これらの値を "ヘッダ.ペイロード.署名" の順番で, パーツの間をピリオド('.')で連結することで, JWS Compact Serializationを用いたこの完全なJWS表現が得られる
(改行は掲載上の都合による):
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
</pre></div>
<p>
この計算は<a class='info' href='#HS256Example'>Appendix A.1<span> (</span><span class='info'>Example JWS using HMAC SHA-256</span><span>)</span></a>で更に詳細に示されている.
その他の例については<a class='info' href='#JWSExamples'>Appendix A<span> (</span><span class='info'>JWS Examples</span><span>)</span></a>を参照すること.
</p>
<a name="Header"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4"></a><h3>4.
JWS Header</h3>
<p>
JWSヘッダを構成するJSONオブジェクトのメンバは, エンコードJWSヘッダおよびエンコード済JWSペイロード適用されたデジタル署名ないしMACについて記述する.
また, それ以外のJWSプロパティーについて記述することもある.
JWSヘッダ内のヘッダパラメータ名はユニークでなければならない (MUST).
受信者は重複したヘッダパラメータ名を持つJWSを, 拒否するか, または以下の動作をするJSONパーサーを使用しなければならない (MUST).
すなわち, 重複したメンバ名に対して字面上で最後の(lexically last)もののみを返すようなJSONパーサーである(この動作はECMAScript 5.1 <a class='info' href='#ECMAScript'>[ECMAScript]<span> (</span><span class='info'>Ecma International, “ECMAScript Language Specification, 5.1 Edition,” June 2011.</span><span>)</span></a> Section 15.12 (The JSON Object)で定義されている).
</p>
<p>
実装は本仕様において「理解しなければならない (MUST)」と定義されているヘッダパラメータを理解し, 本仕様に定義されている方法で処理することが要求される.
本仕様で定義されており, かつMUSTでないヘッダパラメータは, 理解できなかった場合にはすべて無視しなければならない (MUST).
<a class='info' href='#critDef'>Section 4.1.10<span> (</span><span class='info'>"crit" (Critical) Header Parameter</span><span>)</span></a>によってクリティカルヘッダパラメータとして列挙されている場合を除き, 本仕様で定義されていないヘッダパラメータは, 理解できなかった場合にはすべて無視しなければならない (MUST).
</p>
<p>
ヘッダパラメータ名には3つのクラスがある. すなわち, 予約済ヘッダパラメータ名, パブリックヘッダパラメータ名, およびプライベートヘッダパラメータ名である.
</p>
<a name="ReservedHeaderParameterName"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1"></a><h3>4.1.
Reserved Header Parameter Names</h3>
<p>
以下に示すヘッダパラメータ名は予約済とし, その意味を以下で定義する.
これらのパラメータ名は短いが, それは本仕様の主目的として, JWS Compact Serialization方式による生成結果を小さくするためである.
</p>
<p>
追加の予約済ヘッダパラメータ名が定義される場合は, IANAによって JSON Web Signature and Encryption Header Parameters レジストリ <a class='info' href='#HdrReg'>Section 8.1<span> (</span><span class='info'>JSON Web Signature and Encryption Header Parameters Registry</span><span>)</span></a>に追加される.
レジストリが共通であることから示されるとおり, JWSとJWEはヘッダパラメータ空間を共有する. あるパラメータが両方の仕様で使われる場合, その使い方は2つの仕様の間で互換でなればならない.
</p>
<a name="algDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.1"></a><h3>4.1.1.
"alg" (Algorithm) Header Parameter</h3>
<p>
<tt>alg</tt> (algorithm) ヘッダパラメータはJWSの署名に使われる暗号アルゴリズムを識別する.
受信者は以下の場合にはJWSを拒否しなければならない (MUST): <tt>alg</tt>で示されるアルゴリズムをサポートしていない場合, またはデジタル署名ないしMACを行ったパーティーの有効な鍵がない場合.
<tt>alg</tt>の値はIANA
JSON Web Signature and Encryption Algorithms レジストリ
<a class='info' href='#JWA'>[JWA]<span> (</span><span class='info'>Jones, M., “JSON Web Algorithms (JWA),” July 2013.</span><span>)</span></a> に登録されているか, またはCollision Resistant Namespaceを含んでいるべきである (SHOULD).
<tt>alg</tt>の値はStringOrURIを表現する文字列であり, 大文字・小文字は区別される.
このヘッダパラメータの利用は必須である (REQUIRED).
実装はこのヘッダパラメータを理解しなければならない (MUST).
</p>
<p>
定義済の<tt>alg</tt>値は IANA JSON Web Signature and Encryption Algorithms レジストリ <a class='info' href='#JWA'>[JWA]<span> (</span><span class='info'>Jones, M., “JSON Web Algorithms (JWA),” July 2013.</span><span>)</span></a>に一覧されている.
このレジストリの初期の内容はJSON Web Algorithms (JWA) <a class='info' href='#JWA'>[JWA]<span> (</span><span class='info'>Jones, M., “JSON Web Algorithms (JWA),” July 2013.</span><span>)</span></a>仕様のSection 3.1で定義されている.
</p>
<a name="jkuDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.2"></a><h3>4.1.2.
"jku" (JWK Set URL) Header Parameter</h3>
<p>
<tt>jku</tt> (JWK Set URL)ヘッダパラメータはURI<a class='info' href='#RFC3986'>[RFC3986]<span> (</span><span class='info'>Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.</span><span>)</span></a>であり, JSONでエンコードされた公開鍵セットのリソースを参照する. そのうちのひとつがJWSにデジタル署名をするときに用いる秘密鍵と対応する.
鍵は JSON Web Key Set (JWK Set) <a class='info' href='#JWK'>[JWK]<span> (</span><span class='info'>Jones, M., “JSON Web Key (JWK),” July 2013.</span><span>)</span></a>にしたがってエンコードされていなければならない (MUST).
リソースを取得するために使用するプロトコルは完全性を保証しなければならない (MUST).
HTTP GETリクエストによってJWK Setを取得する場合にはTLS<a class='info' href='#RFC2818'>[RFC2818]<span> (</span><span class='info'>Rescorla, E., “HTTP Over TLS,” May 2000.</span><span>)</span></a> <a class='info' href='#RFC5246'>[RFC5246]<span> (</span><span class='info'>Dierks, T. and E. Rescorla, “The Transport Layer Security (TLS) Protocol Version 1.2,” August 2008.</span><span>)</span></a>を使用しなければならない (MUST).
サーバーのアイデンティティーはHTTP Over TLS <a class='info' href='#RFC2818'>[RFC2818]<span> (</span><span class='info'>Rescorla, E., “HTTP Over TLS,” May 2000.</span><span>)</span></a>のSection 3.1で定義されるとおりに検証されなければならない (MUST)
このヘッダパラメータの利用は任意 (OPTIONAL) である.
</p>
<a name="jwkDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.3"></a><h3>4.1.3.
"jwk" (JSON Web Key) Header Parameter</h3>
<p>
<tt>jwk</tt> (JSON Web Key)ヘッダパラメータはJWSにデジタル署名をするときに用いる秘密鍵と対応する公開鍵である.
鍵は JSON Web Key <a class='info' href='#JWK'>[JWK]<span> (</span><span class='info'>Jones, M., “JSON Web Key (JWK),” July 2013.</span><span>)</span></a>形式で表現される.
このヘッダパラメータの利用は任意 (OPTIONAL) である.
</p>
<a name="x5uDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.4"></a><h3>4.1.4.
"x5u" (X.509 URL) Header Parameter</h3>
<p>
<tt>x5u</tt> (X.509 URL)ヘッダパラメータはURIであり, JWSにデジタル署名するために用いる鍵に対応するX.509公開鍵証明書もしくは証明書チェーン <a class='info' href='#RFC5280'>[RFC5280]<span> (</span><span class='info'>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,” May 2008.</span><span>)</span></a> リソースを参照する.
リソースは証明書または証明書チェーンを表現し, <a class='info' href='#RFC5280'>RFC 5280<span> (</span><span class='info'>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,” May 2008.</span><span>)</span></a> [RFC5280]仕様を満たすPEMフォーマット<a class='info' href='#RFC1421'>[RFC1421]<span> (</span><span class='info'>Linn, J., “Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures,” February 1993.</span><span>)</span></a>でなければならない (MUST).
JWSのデジタル署名に使用する鍵に対応する公開鍵の証明書は先頭の証明書でなければならない (MUST).
これの後にさらなる証明書が続いても良く(MAY), それぞれの証明書は直前のものを証明する.
リソースを取得するために使用するプロトコルは完全性を保証しなければならない (MUST).
HTTP GETリクエストによってJWK Setを取得する場合にはTLS<a class='info' href='#RFC2818'>[RFC2818]<span> (</span><span class='info'>Rescorla, E., “HTTP Over TLS,” May 2000.</span><span>)</span></a> <a class='info' href='#RFC5246'>[RFC5246]<span> (</span><span class='info'>Dierks, T. and E. Rescorla, “The Transport Layer Security (TLS) Protocol Version 1.2,” August 2008.</span><span>)</span></a>を使用しなければならない (MUST).
サーバーのアイデンティティーはHTTP Over TLS <a class='info' href='#RFC2818'>[RFC2818]<span> (</span><span class='info'>Rescorla, E., “HTTP Over TLS,” May 2000.</span><span>)</span></a>のSection 3.1で定義されるとおりに検証されなければならない (MUST)
このヘッダパラメータの利用は任意 (OPTIONAL) である.
</p>
<a name="x5tDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.5"></a><h3>4.1.5.
"x5t" (X.509 Certificate Thumbprint) Header Parameter</h3>
<p>
<tt>x5t</tt> (X.509証明書フィンガープリント)ヘッダパラメータは, JWSにデジタル署名するために用いる鍵に対応するX.509証明書<a class='info' href='#RFC5280'>[RFC5280]<span> (</span><span class='info'>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,” May 2008.</span><span>)</span></a>をDER形式で表現し, そのSHA-1フィンガープリント(ダイジェスト)をBase64 URLエンコードしたものである.
このヘッダパラメータの利用は任意 (OPTIONAL) である.
</p>
<p>
将来, 証明書フィンガープリントをSHA-1以外のハッシュ関数によって計算する必要が発生した場合, その目的のために追加のヘッダパラメータを定義することが推奨される.
例えば, 新しい<tt>x5t#S256</tt> (SHA-256によるX.509証明書フィンガープリント)というヘッダパラメータをIANA JSON Web Signature and Encryption Header Parameters レジストリに <a class='info' href='#HdrReg'>Section 8.1<span> (</span><span class='info'>JSON Web Signature and Encryption Header Parameters Registry</span><span>)</span></a>登録することが推奨される.
</p>
<a name="x5cDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.6"></a><h3>4.1.6.
"x5c" (X.509 Certificate Chain) Header Parameter</h3>
<p>
<tt>x5c</tt> (X.509証明書チェーン) ヘッダパラメータは, JWSにデジタル署名するために用いる鍵に対応するX.509公開鍵証明書もしくは証明書チェーン <a class='info' href='#RFC5280'>[RFC5280]<span> (</span><span class='info'>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,” May 2008.</span><span>)</span></a> を含む.
証明書や証明書チェーンは, 証明書の文字列のJSON配列として表される.
配列中のそれぞれの文字列はBase64エンコード(<a class='info' href='#RFC4648'>[RFC4648]<span> (</span><span class='info'>Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” October 2006.</span><span>)</span></a> 4節 -- Base64 URLエンコードではない)されているDER <a class='info' href='#ITU.X690.1994'>[ITU.X690.1994]<span> (</span><span class='info'>International Telecommunications Union, “Information Technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER),” 1994.</span><span>)</span></a> PKIX証明書の値である.
JWSにデジタル署名するために用いる鍵に対応する公開鍵の証明書は先頭の証明書でなければならない (MUST).
これの後にさらなる証明書が続いても良く(MAY), それぞれの証明書は直前のものを証明する.
受信者は証明書チェーンを <a class='info' href='#RFC5280'>[RFC5280]<span> (</span><span class='info'>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,” May 2008.</span><span>)</span></a> に従って確認する. 検証エラーが発生した場合には, そのJWSを拒否しなければならない (MUST).
このヘッダパラメータの利用は任意 (OPTIONAL) である.
</p>
<p>
<tt>x5c</tt> の例については <a class='info' href='#x5cExample'>Appendix B<span> (</span><span class='info'>"x5c" (X.509 Certificate Chain) Example</span><span>)</span></a> を参照.
</p>
<a name="kidDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.7"></a><h3>4.1.7.
"kid" (Key ID) Header Parameter</h3>
<p>
<tt>kid</tt> (key ID)ヘッダパラメータはJWSを保護するためにどの鍵が使用されたかを示しているヒントである.
このパラメータは発信者が鍵の変更を受信者に明確に示すことを許す.
受信者が <tt>kid</tt> の値に一致する鍵を見つけることができないならば, その状態をエラーとして扱うべきである (SHOULD).
<tt>kid</tt> の値の説明は記載しない.
その値は文字列でなければならない (MUST).
このヘッダパラメータの利用は任意 (OPTIONAL) である.
</p>
<p>
JWKを利用する場合, <tt>kid</tt> の値はJWK <tt>kid</tt> パラメータの値と一致するように利用できる.
</p>
<a name="typDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.8"></a><h3>4.1.8.
"typ" (Type) Header Parameter</h3>
<p>
<tt>typ</tt> (type) ヘッダパラメータは, これがアプリケーションにとって有用な文脈の中で, アプリケーションに特化した方法で, この完全なJWSオブジェクトの種類を表すために用いられてもよい (MAY).
このパラメータはJWSの処理に影響を及ぼさない.
<tt>JOSE</tt> という値はアプリケーションによりこのオブジェクトがJWS Compact Serializationを用いたJWSもしくはJWE Compact Serializationを用いたJWEであることを示すために用いられてもよい (MAY).
<tt>JOSE+JSON</tt> という値はアプリケーションによりこのオブジェクトがJWS JSON Serialiationを用いたJWSもしくはJWE JSON Serializationを用いたJWEであることを示すために用いられてもよい (MAY).
その他の値も用いられても良く(MAY), もし理解されなかった場合は無視されるべきである (SHOULD).
<tt>typ</tt> の値は文字列であり, 大文字・小文字を区別する.
このヘッダパラメータの利用は任意 (OPTIONAL) である.
</p>
<p>
MIME Media Type <a class='info' href='#RFC2046'>[RFC2046]<span> (</span><span class='info'>Freed, N. and N. Borenstein, “Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types,” November 1996.</span><span>)</span></a> の値は <tt>typ</tt> の値として用いられてもよい (MAY).
</p>
<p>
<tt>typ</tt> の値は IANA JSON Web Signature and Encryption Type Values レジストリ <a class='info' href='#TypReg'>Section 8.2<span> (</span><span class='info'>JSON Web Signature and Encryption Type Values Registry</span><span>)</span></a> に登録されるか衝突耐性を持つ名前空間を含む値であるべきである (SHOULD).
</p>
<a name="ctyDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.9"></a><h3>4.1.9.
"cty" (Content Type) Header Parameter</h3>
<p>
<tt>cty</tt> (content type) ヘッダパラメータは, これがアプリケーションにとって有用な文脈の中で, アプリケーションに特化した方法で, 保護されているコンテント(ペイロード)の種類を表すために用いられてもよい (MAY).
このパラメータはJWSの処理に影響を及ぼさない.
コンテントタイプの値が理解されなかった場合は無視されるべきである (SHOULD).
<tt>cty</tt> の値は文字列であり, 大文字・小文字を区別する.
このヘッダパラメータの利用は任意 (OPTIONAL) である.
</p>
<p>
<tt>cty</tt> ヘッダパラメータに用いられる値は <tt>typ</tt> ヘッダパラメータと同じ値空間となり, 同じ規則が適用される.
</p>
<a name="critDef"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.1.10"></a><h3>4.1.10.
"crit" (Critical) Header Parameter</h3>
<p>
<tt>crit</tt> (critical) ヘッダパラメータは, 本仕様の拡張が利用されていること, およびその拡張仕様が必ず理解されなければならない (MUST) ことを示す.
その値はJWSヘッダ内で用いられるこれらの拡張仕様によって定義されたヘッダパラメータ名が記載された配列である.
もし記載された拡張ヘッダパラメータが受信者により理解されずサポートされない場合, そのJWSは拒否されなければならない (MUST).
送信者はこの仕様もしくはJWS利用のために <a class='info' href='#JWA'>[JWA]<span> (</span><span class='info'>Jones, M., “JSON Web Algorithms (JWA),” July 2013.</span><span>)</span></a> により定義されているヘッダパラメータ, 重複した名前, JWSヘッダに現れないヘッダパラメータ名を <tt>crit</tt> リストに含めてはならない (MUST NOT).
送信者は <tt>crit</tt> の値に空のリスト <tt>[]</tt> を用いてはならない (MUST NOT).
もしcriticalリストがこの仕様もしくはJWS利用のために <a class='info' href='#JWA'>[JWA]<span> (</span><span class='info'>Jones, M., “JSON Web Algorithms (JWA),” July 2013.</span><span>)</span></a> で定義されているヘッダパラメータを含む場合, 受信者はそのJWSを拒否してもよい (MAY).
同様に, critヘッダを利用する上でのなんらかの制約条件に違反する場合にも, 受信者はそのJWSを拒否してもよい (MAY).
このヘッダパラメータは完全に保護されなければならず (MUST), 従って利用されるときは必ずJWSプロテクトヘッダのみに現れなければならない (MUST).
このヘッダパラメータの利用は任意 (OPTIONAL) である.
実装はこのヘッダパラメータを理解しなければならない (MUST).
</p>
<p>
<p>
<tt>exp</tt> (expiration-time)フィールドを加えたと仮定した使用例 :
</p><div style='display: table; width: 0; margin-left: 3em; margin-right: auto'><pre>
{"alg":"ES256",
"crit":["exp"],
"exp":1363284000
}
</pre></div>
<a name="PublicHeaderParameterName"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.2"></a><h3>4.2.
Public Header Parameter Names</h3>
<p>
JWS利用者により, 追加のヘッダパラメータ名を定義することができる.
しかしながら, 衝突を防ぐために, 新しいヘッダパラメータ名は IANA JSON Web Signature and Encryption Header Parameters レジストリ <a class='info' href='#HdrReg'>Section 8.1<span> (</span><span class='info'>JSON Web Signature and Encryption Header Parameters Registry</span><span>)</span></a> に登録されるか, またはパブリックな名前(衝突耐性を持つ名前空間を含む)となるべきである (SHOULD).
それぞれのケースにおいて, 名前もしくは値の定義者は, ヘッダパラメータ名定義に用いる名前空間の一部を制御可能なことを保証するために, 適切な注意を払う必要がある.
</p>
<p>
新しいヘッダパラメータは非互換なJWSの発生原因となりうるため, 慎重に導入されるべきである.
</p>
<a name="PrivateHeaderParameterName"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.4.3"></a><h3>4.3.
Private Header Parameter Names</h3>
<p>
JWSの生成者と消費者は, 予約済パラメータ名 <a class='info' href='#ReservedHeaderParameterName'>Section 4.1<span> (</span><span class='info'>Reserved Header Parameter Names</span><span>)</span></a> やパブリックパラメータ名 <a class='info' href='#PublicHeaderParameterName'>Section 4.2<span> (</span><span class='info'>Public Header Parameter Names</span><span>)</span></a> ではないプライベートパラメータ名であるヘッダパラメータを用いることに同意してもよい.
パブリックな名前とは異なり, プライベートな名前は衝突しやすく注意して利用すべきである.
</p>
<a name="JWSRules"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.5"></a><h3>5.
Producing and Consuming JWSs</h3>
<a name="MessageSigning"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.5.1"></a><h3>5.1.
Message Signing or MACing</h3>
<p>
JWSを作成するためには, 以下の手順を踏まなければならない (MUST).
手順の順序は, それぞれの手順の入力と出力の間に依存関係がない場合には重要ではない.
</p>
<ol class="text">
<li>
JWSペイロードとして利用されるコンテンツを作成する.
</li>
<li>
JWSペイロードのオクテット列をbase64urlエンコードする. このエンコード結果がエンコード済みJWSペイロードとなる.
</li>
<li>
希望のヘッダパラメータのセットを含んだJWSヘッダを作成する. 空白がその表現の中に存在することが明示的に許可されること, そしてエンコード前に正規化が必要ないことに注意する.
</li>
<li>
JWSプロテクトヘッダのUTF-8表現のオクテット列をbase64urlエンコードし, エンコード済みJWSヘッダを作成する.
JWSプロテクトヘッダが存在しない場合(JWS JSON Serializationを利用していて, <tt>protected</tt> 要素が存在しない場合のみに発生する),
エンコード済みJWSヘッダは空文字列にする.
</li>
<li>
JWS署名入力(エンコード済みJWSヘッダ, ピリオド ('.'), そしてエンコード済みJWSペイロードの連結文字列)に対して適用される特定のアルゴリズムで定義されている方法でJWS署名を算出する.
<tt>alg</tt> (アルゴリズム)ヘッダパラメータは, JWSヘッダに存在し, JWS署名を生成するために利用されるアルゴリズムを正確に表すアルゴリズム名を値としなければならない (MUST).
</li>
<li>
JWS署名をbase64urlエンコードし, エンコード済みJWS署名を作成する.
</li>
<li>
これらの3つのエンコード部分がJWS Compact Serialization表現とJWS JSON Serialization表現の双方で利用される結果値となる.
</li>
<li>
JWS JSON Serializationが利用される場合には, 適用対象となる各デジタル署名, もしくはMAC値毎にこのプロセスを繰り返す.
</li>
<li>
希望の形式のシリアライズ結果を作成する.
結果のJWS Compact Serializationは, エンコード済みJWSヘッダとエンコード済みJWSペイロード, そしてエンコード済みJWS署名をこの順で連結したもので,
この3つの文字列は2つのピリオド('.')で分けられる.
JWS JSON Serializationについては <a class='info' href='#JSONSerialization'>Section 7.2<span> (</span><span class='info'>JWS JSON Serialization</span><span>)</span></a>で述べられる.
</li>
</ol><p>
</p>
<a name="MessageValidation"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.5.2"></a><h3>5.2.
Message Signature or MAC Validation</h3>
<p>
JWSの正当性を評価する時には, 以下の手順を踏まなければならない (MUST).
手順の順序は, それぞれの手順の入力と出力に依存関係がない場合には重要ではない.
列挙されている手順のいずれかで異常が発生した場合には, JWSは拒否されなければならない (MUST).
</p>
<p>
</p>
<ol class="text">
<li>
シリアライズされた入力をパーズしJWSヘッダ, エンコード済みJWSペイロード, そしてエンコード済みJWS署名の値を確定する.
JWS Compact Serializationを利用している場合には, エンコード済みJWSヘッダ, エンコード済みJWSペイロード, そしてエンコード済みJWS署名が, この順で二つのピリオド('.')によって分けられた文字列として表される.
JWS JSON Serializationについては <a class='info' href='#JSONSerialization'>Section 7.2<span> (</span><span class='info'>JWS JSON Serialization</span><span>)</span></a>で述べられる.
</li>
<li>
エンコード済みJWSヘッダは, 穴埋め文字は利用されないというこの仕様の制約に従ってbase64urlデコードされなければならない (MUST).
</li>
<li>
エンコード済みJWSヘッダをbase64urlでデコードした結果を, JWSプロテクトヘッダ値とする.
</li>
<li>
結果として得られたJWSプロテクトヘッダは, <a class='info' href='#RFC4627'>RFC 4627<span> (</span><span class='info'>Crockford, D., “The application/json Media Type for JavaScript Object Notation (JSON),” July 2006.</span><span>)</span></a> [RFC4627]に従った完全に有効なJSONオブジェクトでなければならない (MUST).
</li>
<li>
JWS Compact Serializationを利用している場合, JWSプロテクトヘッダをJWSヘッダとする;
さもなければ, JWS JSON Serializationを利用して,
JWSヘッダを, 対応する <tt>protected</tt>ヘッダパラメータの値と <tt>header</tt>ヘッダパラメータの値の和集合とし,
すべてを完全に有効なJSONオブジェクトとしなければならない.
</li>
<li>
結果のJWSヘッダは重複したヘッダパラメータ名を含んではならない (MUST NOT).
JWS JSON Serializationを利用する場合は, この制約は, 共にJWSヘッダを含んだ, それぞれ別個のJSON Textオブジェクトの中に同じヘッダパラメータ名は存在してはならないことも含む (MUST NOT).
</li>
<li>
結果のJWSヘッダは, シンタックスやセマンティックスが理解され, かつサポートされている, もしくは理解されない場合には無視するよう指定されたパラメータやその値のみ含んでいることを確認されなければならない (MUST).
</li>
<li>
エンコード済みJWSペイロードは穴埋め文字は利用されないというこの仕様の制約に従ってbase64urlデコードされなければならない (MUST).
</li>
<li>
エンコード済みJWS署名は穴埋め文字は利用されないというこの仕様の制約に従ってbase64urlデコードされなければならない (MUST).
</li>
<li>
JWS署名は, JWS署名入力(エンコード済みJWSヘッダ, ピリオド ('.'), そしてエンコード済みJWSペイロードの連結文字列)に対して適用されているアルゴリズムで定義された方法で検証されなければならない (MUST).
アルゴリズムは <tt>alg</tt>(アルゴリズム)ヘッダパラメータの値として正確に示されなければならない (MUST).
このヘッダパラメータは存在していなければならない (MUST).
</li>
<li>
JWS JSON Serializationが利用されている場合には, 含まれている各デジタル署名, もしくはMAC値毎にこのプロセスを繰り返す.
</li>
</ol><p>
</p>
<a name="StringComparison"></a><br /><hr />
<table summary="layout" cellpadding="0" cellspacing="2" class="TOCbug" align="right"><tr><td class="TOCbug"><a href="#toc"> TOC </a></td></tr></table>
<a name="rfc.section.5.3"></a><h3>5.3.
String Comparison Rules</h3>
<p>
JWSの処理は必然的に既知の文字列とJSONオブジェクトの値を比較することを要求する. 例えばアルゴリズムが何であるかをチェックする場合, <tt>alg</tt>をエンコードしたUnicode文字列がJWSヘッダの要素名と照合され,
マッチするヘッダパラメータ名があるかどうかを確かめる.
同様のプロセスが <tt>alg</tt>ヘッダパラメータの値がサポートされているアルゴリズムであるかどうか判定するときにも発生する.
</p>
<p>
JSON文字列とその他のUnicode文字列の比較は以下の手順で実施されなければならない (MUST):
</p>
<ol class="text">
<li>
JSONのエスケープを入力JSON文字列から取り除き, その文字列をUnicodeのコードポイント列に変換する.
</li>
<li>
同様に比較対象文字列をUnicodeのコードポイント列に変換する.
</li>
<li>
Unicode正規化 <a class='info' href='#USA15'>[USA15]<span> (</span><span class='info'>Davis, M., Whistler, K., and M. Deurst, “Unicode Normalization Forms,” 09 2009.</span><span>)</span></a>はJSON文字列, もしくはそれと比較される文字列について, いかなる時点においても適用されるべきではない (MUST NOT).
</li>
<li>
二つの文字列の比較はUnicodeのコードポイントどうしの等価比較として実行されなければならない (MUST).
(もともと異なるUnicodeのエンコード方式(UTF-8, UTF-16, など.)を利用していた値どうしはそれぞれ同じコードポイントになる可能性があることに注意する.)