¼«ÂÄÍî¤Êµ»½Ñ¼Ô¤ÎÆüµ­

´ðËܤ϶ô¤Ã¤Æ¤ë¤«°û¤ó¤Ç¤ë¤«¤Ç¤¹¤¬¡¢¤è¤¯¼ñÌ£¤Ç¥«¥é¥ª¥±¡¦PKI¡¦½ð̾¡¦Ç§¾Ú¡¦¥×¥í¥°¥é¥ß¥ó¥°¡¦¾ðÊ󥻥­¥å¥ê¥Æ¥£¤ò¤ä¤Ã¤Æ¤¤¤Þ¤¹¡£Î¹¹¥¤­¡£¥Æ¥ì¥Ó¹¥¤­¤Ç·ÝǽÄÌ

OpenSSL

HPKP(HTTP Public Key Pinning)¸ø³«¸°¥Ô¥Ë¥ó¥°¤Ë¤Ä¤¤¤Æ¹Í¤¨¤ë

¤â¤¯¤¸
1. ¤Ï¤¸¤á¤Ë
2. HPKP¤¬À¸¤Þ¤ì¤¿ÇØ·Ê
3. HPKP¤Î»ÅÁȤß
4. ¥Ô¥ó¤ÎÀßÄê¤Î¹Í»¡
¡¡4.1. ¥Ô¥ó¤ÎÃͤμèÆÀÊýË¡
¡¡4.2. ¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Ë°ìÃפ¹¤ë¥Ô¥ó¤ÎÁªÂò
¡¡4.3. ¾ÚÌÀ½ñ¹¹¿·¤ÈHPKP¥Ø¥Ã¥À¤ÎÀßÄêÊѹ¹¤Î±¿ÍÑÊýË¡
¡¡4.4. ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ô¥ó¤È¤¤¤¦Ì¾Á°¤Î¥¤¥±¤Æ¤Ê¤µ
¡¡4.5. CA¸°¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ô¥ó¤Î¥ª¥¹¥¹¥á¤ÎÃÍ
¡¡4.6. ¾ÚÌÀ½ñ¥Á¥§¡¼¥óÃæ¤ÇÊ£¿ô¥Ô¥ó¤ò¤Ä¤±¤Æ¤â°ÕÌ£¤Ï¤Ê¤¤
¡¡4.7. Ʊ¤¸CA¾ÚÌÀ½ñ¤ËPin¤·Â³¤±¤ë¾ì¹ç¤Î²ÝÂê
¡¡4.8. 2¤Ä¤ÎCA¾ÚÌÀ½ñ¤ËPin¤¹¤ë¾ì¹ç¤Î²ÝÂê
¡¡4.9. max-age¤Î¥ª¥¹¥¹¥áÃͤò¹Í¤¨¤ë
5. HPKP¤Ï¤É¤ÎÄøÅٻȤï¤ì¤Æ¤¤¤ë¤Î¤«
6. º£¤ÎHPKP¤Î²¿¤¬¤¤¤±¤Ê¤«¤Ã¤¿¤Î¤«
7. ¤ª¤ï¤ê¤Ë
8. (»²¹Í) HPKP´ØÏ¢¤ÎÊÙ¶¯¤Ë¤Ê¤ë¥ê¥ó¥¯
9. Äɵ­
¡¡9.1. Äɵ­(2017.02.26) HPKP¤Î¥Ö¥é¥¦¥¶¥µ¥Ý¡¼¥È¾õ¶·
¡¡9.2. Äɵ­(2017.02.26) smashingmagazine.com¤ÇȯÀ¸¤·¤¿HPKP¾ã³²

1. ¤Ï¤¸¤á¤Ë

HPKP¤È¤ÏHTTP Public Key Pinning¤Îά¤Ç¡¢RFC 7469 Public Key Pinning Extension for HTTP¤Çµ¬Äꤵ¤ì¤Æ¤ª¤ê¡¢ ¥¦¥§¥Ö¥µ¥¤¥È¤Î¥ª¡¼¥Ê¡¼¤¬¡¢¥Ë¥»¤Î¥µ¥¤¥È¤Ç°Õ¿Þ¤·¤Ê¤¤¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤¬»È¤ï¤ì¤Ê¤¤¤è¤¦¤ËÊݸ¤ë¤¿¤á¤Î»ÅÁȤߤǤ¹¡£

ÆüËܸì²òÀâ¤Ï¾¯¤Ê¤¤¤Ç¤¹¤¬¡¢·É°¦¤¹¤ë jovi0608¤µ¤ó¤Îµ­»ö¤äJxck¤µ¤ó¤Îµ­»ö¤Ê¤É¤Ç¤â²òÀ⤵¤ì¤Æ¤¤¤Þ¤¹¡£

»ä¤â3ǯ¤Á¤ç¤¤Á°¡¢IPA¤Î¥¬¥¤¥É¤ò½ñ¤¤¤Æ¤¤¤¿Á°¤¢¤¿¤ê¤«¤é¡¢HPKP¤Î±¿ÍѾå¤Î²ÝÂê¤Ë¤Ä¤¤¤Æ¡¢²¿¤«¥Ö¥í¥°Åù¤Ç½ñ¤­¤¿¤¤¤È»×¤Ã¤Æ¤¤¤¿¤Î¤Ç¤¹¤¬¡¢¤Ê¤ó¤«Æüº¢¤Î¥Ø¥ó¤Ê¤³¤È¤ËË»»¦¤µ¤ì¤Æ¡¢¤³¤ì¤Þ¤Ç¤Þ¤È¤á¤Æ½ñ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£(¤Ê¤ó¤«½ñ¤³¤¦¤È»×¤Ã¤Æ¤¿¤éjovi¤µ¤ó¤Î¤¬½Ð¤Á¤ã¤Ã¤Æ¡¢¤Þ¤¡¤¤¤¤¤«¤È»×¤Ã¤Á¤ã¤Ã¤¿¤Ã¤Æ¤¤¤¦¤Î¤â¤¢¤ê¤Þ¤¹w) IPA¤Î¥¬¥¤¥É¤Î»þ¤â½ñ¤«¤»¤Æ¤â¤é¤ª¤¦¤È¤·¤¿¤ó¤Ç¤¹¤¬¡¢¤Ê¤ó¤À¤«Âç¿Í¤Î»ö¾ð¤ÇÄɲ䵤»¤Æ¤â¤é¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£¤È¤Û¤Û¡£

º£²ó¤Ï¡¢HPKP¤È¤Ï²¿¤«¤È¤¤¤Ã¤¿´ðËÜŪ¤Ê¤³¤È¤Ï¡¢Â¾¤ÎÊý¤Î¥Ö¥í¥°¤Ë¾ù¤ë¤È¤·¤Æ¡¢HPKP¤Î¸½¾õ¤äHPKP¤Î±¿ÍѾå¤Î²ÝÂê¤Ë¤Ä¤¤¤Æ¥Õ¥©¡¼¥«¥¹¤·¤Æ½ñ¤­¤¿¤¤¤È»×¤Ã¤Æ¤¤¤Þ¤¹¡£Ä¹¤¯¤Ê¤ê¤½¤¦¤Ç¤¹¤¬¡¢¤´¤á¤ó¤Ê¤µ¤¤¤Í¡£

·ëÏÀ¤«¤é¸À¤¨¤Ð¡¢ËÜÈÖ¥µ¥¤¥È¤Ç°Â°×¤ËHPKP¤ò»È¤¦¤Î¤Ï¤ä¤á¤¿Êý¤¬¤¤¤¤¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤Ï¡¢HPKP¤Î»ÅÍͼ«ÂΤ¬±¿ÍѤò¤·¤Ã¤«¤ê¹Í¤¨¤ÆÀ߷פµ¤ì¤Æ¤ª¤é¤º¡¢°ìÈÌŪ¤Ê¥µ¥¤¥È¤Ç¤ÏÂ礷¤¿¥»¥­¥å¥ê¥Æ¥£¾å¤Î¸ú²Ì¤¬Ìµ¤¤³ä¤Ë¡¢Ä¹´ü¤Î±¿ÍѤǥµ¡¼¥Ó¥¹¤òÄ󶡤Ǥ­¤Ê¤¯¤Ê¤ë´ü´Ö¤¬È¯À¸¤¹¤ë¥ê¥¹¥¯¤¬¹â¤¹¤®¤ë¤·¡¢¾ÚÌÀ½ñ¤Î¥³¥¹¥È¤â;·×¤Ë¤«¤«¤ë¤«¤é¤Ç¤¹¡£

¤ª¤½¤é¤¯¡¢HPKP¤Î±¿ÍѤˤĤ¤¤Æ¿¼¤¯ÆÍ¤Ã¹þ¤ó¤Ç¤«¤¤¤¿¡¢À¤³¦¤Ç¤Ï½é¤á¤Æ¤Î²òÀâ»ñÎÁ¤«¤Ê¤È»×¤¤¤Þ¤¹¡£¤´¾ÐǼ¤¯¤À¤µ¤¤w

2. HPKP¤¬À¸¤Þ¤ì¤¿ÇØ·Ê

2011ǯº¢¤«¤é¡¢Ç§¾Ú¶É¤òÂоݤˤ·¤¿¥µ¥¤¥Ð¡¼¹¶·â¤ä¡¢Ç§¾Ú¶É¤Î±¿ÍѾå¤ÎÉÔÈ÷¤Ê¤É¤Ç¡¢¹¶·â¤ËÍøÍѤ·¤ä¤¹¤¤Google¤äFacebook¤È¤¤¤Ã¤¿Í­Ì¾¥µ¥¤¥È¸þ¤±¤Î¥ï¥¤¥ë¥É¥«¡¼¥É¾ÚÌÀ½ñ(*.google.comÅù)¤ò¼èÆÀ¤µ¤ì¤Æ¤·¤Þ¤¦¤È¤¤¤¦»ö·ï¤¬Áý¤¨¤Æ¤­¤Þ¤·¤¿¡£Google¤òÅܤ餻¤Á¤ã¤Ã¤¿¤Î¤Ï2011ǯ¤Î¥ª¥é¥ó¥À¤Îǧ¾Ú¶ÉDigiNotar¤¬ÉÔÀµ¿¯Æþ¤ò¼õ¤±¡¢*.google.com¤Î¥ï¥¤¥ë¥É¥«¡¼¥É¾ÚÌÀ½ñ¤òȯ¹Ô¤µ¤ì¡¢¥¤¥é¥ó¤Î¥×¥í¥Ð¥¤¥À¤ÎÅðݤ乶·â¤Ë»È¤ï¤ì¤¿¤È¤¤¤¦»ö·ï¤¬¤¢¤ê¤Þ¤·¤¿¡£
hpkp-digi
¤³¤Î¤è¤¦¤Ê»ö·ï¤òËɤ°¤¿¤á¤Ë¤Ï¡¢¥¦¥§¥Ö¥µ¥¤¥È¤ËÂФ·¤Æ¡¢¥µ¥¤¥È¥ª¡¼¥Ê¡¼¤Î°Õ¿Þ¤·¤Ê¤¤¾ÚÌÀ½ñ¤¬»È¤ï¤ì¤¿¾ì¹ç¤Ë¡¢·Ù¹ð¤òȯ¤¹¤ë»ÅÁȤߤ¬É¬ÍפǤ¹¡£¤½¤³¤Ç³«È¯¤µ¤ì¤¿¤Î¤¬¡¢HPKP¤Ç¤¹¡£HPKP¤Ç¤Ï¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Î¾ÚÌÀ½ñ¸ø³«¸°¤Î¥Ï¥Ã¥·¥å¤Î°ìÃפò³Îǧ¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥¦¥§¥Ö¥µ¥¤¥È¥ª¡¼¥Ê¡¼¤Î°Õ¿Þ¤·¤¿¾ÚÌÀ½ñ¤«¤É¤¦¤«¸¡¾Ú¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
hpkp-hpkp1
jovi¤µ¤ó¤Î¥Ö¥í¥°¤Î1¾Ï¤ÇÇØ·Ê¤È»ÅÁȤߤò¤ï¤«¤ê¤ä¤¹¤¯²òÀ⤵¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¤½¤Á¤é¤â¤´Í÷失¤ì¤Ð¤È»×¤¤¤Þ¤¹¡£

3. HPKP¤Î»ÅÁȤß

HPKP¤Î¼ÂÁõÊýË¡¤Ë¤Ï2¤Ä¤ÎÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£

  • 1) Google¡¢Facebook¡¢Twitter¤Ê¤É¤Îͭ̾¥µ¥¤¥È¸þ¤±¤Î¡¢Chrome¡¢Firefox¤Ê¤É¥Ö¥é¥¦¥¶¤ËÁȤ߹þ¤Þ¤ì¤¿¥Ô¥ó¤Î¥ê¥¹¥È(Preloaded Known Pinned Host List)¤È¾È¹ç¤¹¤ëÊýË¡
  • 2) HTTPS¤ÇÄÌ¿®¤¹¤ëºÝ¤Ë¡¢¥µ¡¼¥Ð¡¼¤«¤é¥Ô¥ó¾ðÊó¤ÎHTTP¥Ø¥Ã¥À¤ò¼èÆÀ¤·¡¢¤½¤ì¤ò¥Ö¥é¥¦¥¶¤ËÊݴɤ·¤Æ¤ª¤­¡¢°Ê¹ß¤ÎÄÌ¿®¤Ç¾È¹ç¤Ë»È¤¦ÊýË¡
1) ¤ÎÊýË¡¤Ï¡¢¥Ö¥é¥¦¥¶¤òºÇ¿·¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ê¤é¤Ð²¿¤âÀßÄꤷ¤Ê¤¯¤Æ¤â¡¢Í­Ì¾¤Ê¥µ¥¤¥È¤Ë¤Ä¤¤¤Æ¤ÏHPKP¤ò»È¤Ã¤Æ°ÂÁ´¤ËÀܳ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£º£²ó¤Îµ­»ö¤ÇµÄÏÀ¤·¤¿¤¤¤Î¤Ï2)¤Î¥µ¥¤¥È¥ª¡¼¥Ê¡¼¤¬ÀßÄꤹ¤ë¾ì¹ç¤Ë¤Ä¤¤¤Æ¤Ê¤Î¤Ç¡¢2)¤Î»ÅÁȤߤˤĤ¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£
hpkp-sethead
¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤ËÉÔÀµ¤Ê¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤ËÀܳ¤µ¤»¤Ê¤¤¤¿¤á¤ÎHPKP HTTP¥Ø¥Ã¥À¤òÀßÄꤹ¤ë¤Î¤Ç¤¹¤¬¡¢¤³¤ì¤Ï¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤ÎHTTPSÀßÄê¤Ç»ÈÍѤ¹¤ë¥ë¡¼¥È¾ÚÌÀ½ñ¤«¤éSSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Þ¤Ç¤Î¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤ò¸µ¤ËÀßÄꤷ¤Þ¤¹¡£HTTP¥Ø¥Ã¥À¤È¤½¤ÎÃͤνñ¼°¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
Public-Key-Pins: \ ¡¡¡¡pin-sha256="¥Á¥§¡¼¥óÃæ¤Î¸ø³«¸°¤Î¤É¤ì¤«¤ÎSHA256¥Ï¥Ã¥·¥åÃͤÎBase64"; \ ¡¡¡¡pin-sha256="¥Á¥§¡¼¥óÃæ¤Î¸ø³«¸°¤Î¤É¤ì¤Ë¤â°ìÃפ·¤Ê¤¤SHA256¥Ï¥Ã¥·¥åÃͤÎBase64"; \ ¡¡¡¡[pin-sha256="¤½¤Î¾¥Ï¥Ã¥·¥åÃÍ1"; ...; ] \ ¡¡¡¡max-age=¥Ö¥é¥¦¥¶¤Ë¤³¤ÎHPKP¥Ø¥Ã¥À¤¬Êݴɤµ¤ì¤ëÉÿô; \ ¡¡¡¡[includeSubDomain;] \¡¡¡¡¡¡¡¡¥µ¥Ö¥É¥á¥¤¥ó(example.com¤Ê¤ésub.example.com)¤âHPKP¤ÎÂоݤˤ¹¤ë¤« ¡¡¡¡[report-uri="JSON·Á¼°¤Î¥¨¥é¡¼¥ì¥Ý¡¼¥È¤¬POST¤µ¤ì¤ëURL"; ] [...]¤Ï¥ª¥×¥·¥ç¥ó
  • pin-sha256¤Ï¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤ò¸µ¤ËÀßÄꤷ¤Þ¤¹¤¬¡¢¤½¤ÎÀßÄêÊýË¡¤ä¹Í»¡¤Ë¤Ä¤¤¤Æ¤Ï¸å¤Ç½Ò¤Ù¤Þ¤¹¡£
  • max-age¤ÎÊݸ´ü´Ö¤ÏRFC¤Î4.1Àá¤Ç¹Í»¡¤·¤Æ¤ª¤ê60Æü(=5184000ÉÃ)¤¬Îɤ¤¤Î¤Ç¤Ï¡©¤È¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¤½¤Î¹Í»¡¤â¸å¤Ç½Ò¤Ù¤µ¤»¤Æ²¼¤µ¤¤¡£
  • includeSubDmain¤Ï¡¢¥µ¥Ö¥É¥á¥¤¥ó¤Þ¤Ç´Þ¤á¤ë¤«¡¢Î㤨¤Ð example.com ¤ËHPKP¤òÀßÄꤷ¤¿¤é¡¢sub1.example.com¤â¡¢www1.sub2.example.com¤âHPKP¤ÎÂоݤˤ¹¤ë¤È¤¤¤¦¥Õ¥é¥°¤Ç¤¹¡£¸½»þÅÀ¤Ç»ý¤Ã¤Æ¤¤¤Ê¤¤¤Ê¤é°Â°×¤ËÀßÄꤷ¤Ê¤¤Êý¤¬Îɤ¤¤è¤¦¤Ë»×¤¤¤Þ¤¹¡£
  • HPKP¤Ï¡¢CSP¤Ê¤É¤ÈƱÍͤˤ˥֥饦¥¶Â¦¤Ç¸¡¾Ú¤¹¤ë¤Î¤Ç¡¢¥µ¡¼¥Ð¡¼Â¦¤Ë¤Ï¥¨¥é¡¼¸¶°ø¤¬Çİ®¤Ç¤­¤ºº¤¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£report-uri¤ò»È¤¨¤Ð¡¢¥Ö¥é¥¦¥¶¤ÇHPKP¤Î¥¨¥é¡¼¤¬È¯À¸¤·¤¿ºÝ¤Ë¡¢»ØÄꤷ¤¿URL¤Î¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤ËJSON·Á¼°¤Î¥¨¥é¡¼¥ì¥Ý¡¼¥È¤òPOST¤¹¤ë¤³¤È¤ÇÁ÷¿®¤·¤Þ¤¹¤Î¤Ç¡¢ÀßÄê¾å¤ÎÌäÂê¤òÃΤë¤Î¤ËÌòΩ¤Ä¤«¤â¤·¤ì¤Þ¤»¤ó¡£Jxck¤µ¤ó¤Î¥Ö¥í¥°¤ÇÀßÄê¤ò»î¤·¤Æ¤ß¤¿¤È¤¤¤¦¾Ü¤·¤¤Êó¹ð¤¬¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¤´Í÷¤Ë¤Ê¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£¥Ö¥í¥°¤Ç¤â½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¥ì¥Ý¡¼¥È¤¬½ÐÎϤµ¤ì¤ë¾ò·ï¤¬¤è¤¯¤ï¤«¤é¤º¡¢¥Ö¥é¥¦¥¶¤ä¥Ð¡¼¥¸¥ç¥ó¤Ë¤â°Í¸¤¹¤ë¤è¤¦¤Ç¡¢»ä¤â¥ì¥Ý¡¼¥ÈÀ¸À®¤¬¤¦¤Þ¤¯¤Ç¤­¤Æ¤¤¤Þ¤»¤ó¡£
¤Þ¤¿¡¢HTTP¥Ø¥Ã¥À¤Ë¤Ä¤¤¤Æ "Public-Key-Pins" ¤Ç¤Ï¤Ê¤¯¡¢"Public-Key-Pins-Report-Only" ¤ÈÀßÄꤹ¤ì¤Ð¡¢¥Ö¥é¥¦¥¶¤Ç¤Ï¥¨¥é¡¼¤òȯÀ¸¤µ¤»¤ë¤³¤È¤Ê¤¯¡¢¥¨¥é¡¼¥ì¥Ý¡¼¥È¤Î¼ý½¸¤Ï¤Ç¤­¤Þ¤¹¤Î¤Ç¡¢¥Æ¥¹¥È¤ÎºÝ¤Ë¤³¤ì¤ò»È¤¦¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£

4. ¥Ô¥ó¤ÎÀßÄê¤Î¹Í»¡

pin-sha256°À­¤ò»È¤Ã¤Æ¥Ô¥ó¤òÀßÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢¥µ¡¼¥Ð¡¼¥ª¡¼¥Ê¡¼¤¬°Õ¿Þ¤·¤Ê¤¤¾ÚÌÀ½ñ¤¬»È¤ï¤ì¤ë¤³¤È¤òËɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥Ô¥ó¤ÎÃͤϡ¢¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Î¾ÚÌÀ½ñ¤Î²¿¤ì¤«¤Î¾ÚÌÀ½ñ¤Ë°ìÃפ¹¤ë¤â¤Î¤òºÇÄã°ì¤Ä¡¢ ¤É¤ì¤Ë¤â°ìÃפ·¤Ê¤¤¤â¤Î¤òºÇÄã°ì¤Ä¤Î·×2¤Ä°Ê¾å¤Ë¤è¤ê¹½À®¤µ¤ì¤Þ¤¹¡£
hpkp-intersect

4.1. ¥Ô¥ó¤ÎÃͤμèÆÀÊýË¡

¤µ¤Æ¡¢°ìÈÖ´Êñ¤Ê¥Ï¥Ã¥·¥åÃͤμèÆÀÊýË¡¤Ç¤¹¤¬¡¢¤¹¤Ç¤Ë¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤ÎHTTPSÀßÄ꤬´°Î»¤·¤Æ¤¤¤ë¤Ê¤é¤Ð¡¢Scott Helme»á¤ÎHPKP¥Ï¥Ã¥·¥å¤Î½êÆÀ¥Ú¡¼¥¸¤òÍøÍѤ¹¤ë¤Î¤¬Îɤ¤¤Ç¤¹¡£¼«Ê¬¤Î¤Ç¤â¾¿Í¤Î¤Ç¤âHTTPS¥µ¥¤¥È¤ÎURL¤òÆþÎϤ¹¤ì¤Ð¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Î³Æ¾ÚÌÀ½ñ¤Î¥Ô¥ó¤Î¥Ï¥Ã¥·¥åÃͤò·×»»¤·¤Æ¤¯¤ì¤Þ¤¹¡£
index
SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤«¤é½ç¤Ë¥ë¡¼¥È¾ÚÌÀ½ñ¤Þ¤Ç¡¢¥Ô¥ó¤Î¥Ï¥Ã¥·¥åÃͤ¬

pin-sha256="hUIG87ch71EZQYhZBEkq2VKBLjhussUw7nR8wyuY7rY="
¤Î¤è¤¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢¤É¤Î¥Ô¥ó¤ò»È¤¦¤Î¤«¤ò·è¤á¤ÆHTTP¥Ø¥Ã¥À¤ËÀßÄꤹ¤ë¤À¤±¤Ç¤¹¡£

°ì¤Ä¤Î¥Ô¥ó¤Î¥Ï¥Ã¥·¥åÃͤη׻»¤Ç¤¹¤¬¡¢¾ÚÌÀ½ñ¤«¤é¤Ç¤â¡¢¾ÚÌÀ½ñȯ¹ÔÍ×µá(CSR/PKCS#10)¤Ç¤â¡¢ ÈëÌ©¸°¤È¸°¥¢¥ë¥´¥ê¥º¥à¤Ë¤è¤Ã¤Æ¤Ï¸°¥Ñ¥é¥á¡¼¥¿¡¼¤«¤éÃê½Ð¤µ¤ì¤¿PKCS#8¸ø³«¸°¤«¤é¤Ç¤â¥Ï¥Ã¥·¥åÃͤò·×»»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤¿¤À¡¢¤¤¤í¤ó¤Ê¿Í¤Î¥Ö¥í¥°¤Ç¤Ï¡¢¤ï¤¶¤ï¤¶CSR¤òºî¤Ã¤Æ¤«¤é¥Ï¥Ã¥·¥åÃͤò·×»»¤·¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¤¬¡¢ÆÃ¤Ë¾ÚÌÀ½ñ¤Î¤Þ¤À̵¤¤¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ô¥ó¤Î¾ì¹ç¤Ë¤Ï¡¢ ¤½¤ó¤Ê¤³¤È¤ò¤·¤Ê¤¯¤È¤â¡¢¸ø³«¸°¤«¤é¥Ï¥Ã¥·¥å·×»»¤¹¤ë¤Î¤¬Îɤ¤¤è¤¦¤Ë»×¤¤¤Þ¤¹¡£ Àè¤Û¤É¤ÈƱÍͤˡ¢Scott Helme»á¤Î¥Ä¡¼¥ë¤ÇPEM·Á¼°¤ÎPKCS#8¸ø³«¸°¡¢CSR¡¢X.509¾ÚÌÀ½ñ¤òÆþÎϤ¹¤ì¤Ð¡¢¥Ô¥ó¤Î¥Ï¥Ã¥·¥åÃͤò·×»»¤·¤Æ¤¯¤ì¤ë¥Ú¡¼¥¸¤¬¤¢¤ë¤Î¤Ç¡¢¤³¤ì¤ò»È¤¦¤Î¤¬´Êñ¤Ç¤¹¡£

¼êºî¶È¤Ç¥Ô¥ó¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢°Ê²¼¤ò¼Â»Ü¤¹¤ì¤Ð¸ø³«¸°¤ÎSHA256¥Ï¥Ã¥·¥å¤Ç¤¢¤ë¥Ô¥ó¤ÎÃͤ¬¼èÆÀ¤Ç¤­¤Þ¤¹¡£Â¾¤Î²òÀâµ­»ö¤Ç¤Ï¡¢base64¥³¥Þ¥ó¥É¤ò»È¤Ã¤¿¤ê¡¢CSR¤ò¤¤¤Á¤¤¤ÁÀ¸À®¤¹¤ë¤Î¤ò¶¯À©¤µ¤»¤¿¤ê¤·¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¤¬¡¢¤³¤³¤Ç¾Ò²ð¤¹¤ëÊýË¡¤ÏOpenSSL¥³¥Þ¥ó¥É¤·¤«»È¤ï¤º¡¢¤¤¤í¤¤¤í¤Ê¥±¡¼¥¹¤ËÂбþ¤·¤Æ¡¢¥Ô¥ó¤Î¼èÆÀ¤¬¤Ç¤­¤ë¤è¤¦¤Ë¡¢Îã¤ò¼¨¤·¤Æ¤ª¤­¤Þ¤·¤¿¡£

X.509¾ÚÌÀ½ñ¤«¤ésubjectPublicKeyInfo¥Õ¥£¡¼¥ë¥É¤Ë¤¢¤ëPKCS#8¸ø³«¸°¤Î¥Ô¥ó¤ÎÆþ¼ê % openssl x509 -in PEM¾ÚÌÀ½ñ -pubkey -noout | openssl rsa -pubin -outform DER | \ openssl dgst -sha256 -binary | openssl enc -base64 te4kc4F/5BhtIosKLOS9sy049x7a/LQHNRRG1WHfvyU= CSR¤«¤ésubjectPKInfo¥Õ¥£¡¼¥ë¥É¤Ë¤¢¤ëPKCS#8¸ø³«¸°¤Î¥Ô¥ó¤ÎÆþ¼ê % openssl req -in PEMCSR¥Õ¥¡¥¤¥ë -pubkey -noout | openssl rsa -pubin -outform DER | \ openssl dgst -sha256 -binary | openssl enc -base64 te4kc4F/5BhtIosKLOS9sy049x7a/LQHNRRG1WHfvyU= PKCS#8ÈëÌ©¸°¤«¤é¥Ô¥ó¤ÎÆþ¼ê % openssl rsa -in PKCS#8ÈëÌ©¸° -pubout -outform DER | \ openssl dgst -sha256 -binary | openssl enc -base64 te4kc4F/5BhtIosKLOS9sy049x7a/LQHNRRG1WHfvyU= PKCS#8¸ø³«¸°¤«¤é¥Ô¥ó¤ÎÆþ¼ê % openssl rsa -pubin -in PKCS#8¸ø³«¸° -pubout -outform DER | \ openssl dgst -sha256 -binary | openssl enc -base64 te4kc4F/5BhtIosKLOS9sy049x7a/LQHNRRG1WHfvyU= ÆÀ¤é¤ì¤¿Ãͤò pin-sha256="te4kc4F/5BhtIosKLOS9sy049x7a/LQHNRRG1WHfvyU=" ¤Î¤è¤¦¤Ë¥Ø¥Ã¥À¤ËÀßÄꤹ¤ë¡£
Ãͤò¼èÆÀ¤·¤¿¤é¡¢¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤ÎHTTP¥Ø¥Ã¥À¤ËÀßÄꤷ¤Þ¤¹¡£Î㤨¤Ð¡¢Apache HTTP Server¤Î¾ì¹ç¤Ë¤Ï¡¢°Ê²¼¤Î¤è¤¦¤ËÀßÄꤷ¤Þ¤¹¡£
<VirtualHost _default_:443> ... Header set Public-Key-Pins \ "pin-sha256=\"MRnxhYBVCMAxZHwalTJ7ZVl6P2005lll4ttWr+RN1Ro=\"; \ pin-sha256=\"633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q=\"; \ max-age=2592000; \ report-uri=\"https://report.example.com\"" ... ÆÉ¤ß¤ä¤¹¤µ¤Î¤¿¤á¤Ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤È²þ¹Ô¤òÆþ¤ì¤Æ¤¤¤Þ¤¹¡£2592000ÉäÏ30Æü¤Ç¤¹¡£

4.2. ¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Ë°ìÃפ¹¤ë¥Ô¥ó¤ÎÁªÂò

HPKP¤Ç¤Ï¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Ë°ìÃפ¹¤ë¥Ô¥ó¤ò1¤Ä°Ê¾åÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ËÜÀá¤Ç¤Ï¡¢¼¡¤Î2¤Ä¤Ëʬ¤±¤Æ¹Í»¡¤·¤Æ¤ß¤¿¤¤¤È»×¤¤¤Þ¤¹¡£

  • 1) ¾ÚÌÀ½ñ¥Á¥§¡¼¥óÃæ¤Î¤É¤ì¤«°ì¤Ä¤Î¤ß¤òÁªÂò¤¹¤ë¾ì¹ç¤ÎÈæ³Ó¸¡Æ¤
  • 2) ¾ÚÌÀ½ñ¥Á¥§¡¼¥óÃæ¤Î2¤Ä°Ê¾å¡¢¤Þ¤¿¤ÏÁ´Éô¤òÁªÂò¤¹¤ë¾ì¹ç¤Î¹Í»¡

4.2. ¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Ë°ìÃפ¹¤ë¥Ô¥ó¤ÎÁªÂò

¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Ç¡¢SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¡¢Ãæ´ÖCA¾ÚÌÀ½ñ¡¢¥ë¡¼¥È¾ÚÌÀ½ñ¤Î¤è¤¦¤Ê3ÃʤξÚÌÀ½ñ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢ ÉÔÀµ¤Ê°Õ¿Þ¤·¤Ê¤¤¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤¤¤«¤É¤¦¤«¸¡¾Ú¤¹¤ë¤¿¤á¤Ë¡¢ ¤É¤ì¤«°ì¤Ä¤Î¥Ô¥ó¤òÁª¤Ö¤È¤¹¤ì¤Ð¡¢¤É¤ì¤òÁª¤Ù¤ÐÎɤ¤¤Ç¤·¤ç¤¦¤«¡£ ¤³¤ì¤é3¤Ä¤Î¥±¡¼¥¹¤Ç¡¢¤½¤ì¤¾¤ìĹ½ê¡¢Ã»½ê¤¬¤¢¤ë¤Î¤Ç¡¢¹Í»¡¤·¤Æ¤ß¤¿¤¤¤È»×¤¤¤Þ¤¹¡£ SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Ë¤Ä¤¤¤Æ¤Ï¡¢¿ôǯ¸å¾ÚÌÀ½ñ¹¹¿·¤ÎºÝ¤Ë»ÈÍѤ¹¤ë¸°¥Ú¥¢¤¬¤¢¤é¤«¤¸¤á·è¤Þ¤Ã¤Æ¤¤¤ë¾ì¹ç(=¸°»öÁ°À¸À®)¡¢·è¤Þ¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç(=¸°»öÁ°À¸À®¤Ê¤·)¤Î¥±¡¼¥¹¤Ëʬ¤±¤Æ¹Í»¡¤·¤Þ¤¹¡£

¾ÚÌÀ½ñĹ½êû½ê°ÂÁ´À­±¿ÍÑÉéô
­¡¥ë¡¼¥ÈCA¾ÚÌÀ½ñ
  • Í­¸ú´ü´Ö¤¬Ä¹¤¤¤¿¤á¥Ô¥óÊѹ¹¤ÎÉÑÅÙ¤¬¾¯¤Ê¤¯¤ÆºÑ¤à¡£¤ª¤½¤é¤¯10Ç¯ÄøÅÙ¤ÏÊѹ¹ÉÔÍ×
  • ¥Ö¥é¥¦¥¶ÁȤ߹þ¤ß¤Î¥×¥ê¥í¡¼¥É¥Ô¥ó¤Ç¤Ï¥ë¡¼¥È¾ÚÌÀ½ñ¤ò»ÈÍÑ
  • ¸°¹¹¿·¸å¤Î¸ø³«¸°¤Ï»öÁ°¤Ë¤Ï¤ï¤«¤é¤º¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ô¥ó¤Ï»È¤¨¤Ê¤¤
  • ¿·¤·¤¤SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤ò¹ØÆþ¤·¤¿¾ì¹ç¤Ë¡¢Æ±¤¸¥ë¡¼¥Èǧ¾Ú¶É¤È¤Ï¸Â¤é¤º¡¢¤½¤ÎºÝ¤Ï¥Ô¥ó¤Î°Ü¹Ô¤¬É¬Í×
  • ¥ë¡¼¥È¾ÚÌÀ½ñÇÛ²¼¤Î¾ÚÌÀ½ñ¤Î¿ô¤ÏÈó¾ï¤Ë¿¤¯¡¢¤½¤Îǧ¾Ú¶É¤¬ÉÔÀµ¤Ê¾ÚÌÀ½ñ¤òȯ¹Ô¤µ¤ì¤¿¾ì¹ç¤Ë¡¢¹¶·â¤òËɤ²¤Ê¤¤¥ê¥¹¥¯¤Ï¹â¤¤¡£Î㤨¤Ð¡¢¥·¥Þ¥ó¥Æ¥Ã¥¯¼Ò¤¬Google¤Ëµö²Ä¤Ê¤¯Google¤Î¾ÚÌÀ½ñ¤òȯ¹Ô¤¹¤ë»ö·ï¤¬¤¢¤Ã¤¿¡£
  • ¾ÚÌÀ½ñ¹¹¿·¤Ç¥ë¡¼¥ÈCA¤¬Êѹ¹¤Ë¤Ê¤ë²ÄǽÀ­¤ÏÄ㤤¤¬¡¢Êѹ¹¤Ë¤Ê¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢max-age¤ËÇÛθ¤·¤¿ÌÌÅݤʰܹԤ¬É¬ÍפDZ¿ÍÑÉé²Ù¤¬¹â¤¤
Äã¹â
­¢Ãæ´ÖCA¾ÚÌÀ½ñ
  • Í­¸ú´ü´Ö¤¬¤ä¤äŤ¤¤¿¤á¥Ô¥óÊѹ¹¤ÎÉÑÅÙ¤¬¼ã´³¾¯¤Ê¤¯¤ÆºÑ¤à¡£¤ª¤½¤é¤¯5Ç¯ÄøÅÙ¤ÏÊѹ¹ÉÔÍ×
  • °ÂÁ´À­¤È±¿ÍÑÉéô¤ÎÌ̤ǥХé¥ó¥¹¤¬¼è¤ì¤Æ¤¤¤ë¤«¡©
  • ¥Ô¥ó¤¹¤ëÃæ´ÖCA¤Î¸ø³«¸°¤ËÊѹ¹¤¬¤Ê¤«¤Ã¤¿¾ì¹ç¤ÎSSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Î¹¹¿·¤ÏÈæ³ÓŪ³Ú
  • ¥Ô¥ó¤·¤Æ¤¤¤ëÃæ´ÖCA¤Î¸ø³«¸°¤¬¡¢¼¡²ó¤ÎSSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¹¹¿·»þ¤ËƱ¤¸¤Ç¤¢¤ë¤È¤¤¤¦ÊݾڤϤʤ¤¡£
  • SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Î¹¹¿·»þ¤Ë¡¢Ãæ´ÖCA¾ÚÌÀ½ñ¤¬Êѹ¹¤Ë¤Ê¤ë¥ê¥¹¥¯¤¬¤¢¤ë¤¬¡¢¤½¤ì¤¬»öÁ° ¼þÃΤµ¤ì¤Ê¤¤¤¿¤á¤Ë¡¢SSLÀܳÉÔ¶ñ¹ç¤Ë¤è¤ë¥µ¡¼¥Ó¥¹Ää»ß¥ê¥¹¥¯¤¬¹â¤¤
  • Ãæ´ÖCA¾ÚÌÀ½ñ¤¬Êѹ¹¤Ë¤Ê¤Ã¤¿¾ì¹ç¤Î°Ü¹Ô¤Ë·¸¤ë±¿ÍÑÉéô¤Ï¡¢²ó¿ô¤â¡¢ºî¶ÈÉé²Ù¤â Èó¾ï¤Ë¹â¤¤
  • Ʊ¤¸Ãæ´ÖCA¤«¤é¡¢ÉÔÀµ¤ËƱ¤¸¥É¥á¥¤¥ó¤ËÂФ¹¤ë¾ÚÌÀ½ñ¤¬È¯¹Ô¤µ¤ì¤¿¾ì¹ç¤Ë¤â¸¡¾ÚÍ­¸ú¤È¤Ê¤Ã¤Æ¤·¤Þ¤¦¥ê¥¹¥¯¤¬¤¢¤ë¡£­¡¤è¤ê¤Ï¥ê¥¹¥¯¤ÏÄ㤤¤¬¡¢­£­¤¤è¤ê¤Ï¹â¤¤
  • ¾ÚÌÀ½ñ¹¹¿·¤ÇÃæ´ÖCA¤¬Êѹ¹¤Ë¤Ê¤ë²ÄǽÀ­¤Ï¤¢¤ëÄøÅÙ¤¢¤ê¡¢­¡¤è¤ê¤Ï³ÎΨ¤¬¹â¤¤¡£Êѹ¹¤Ë¤Ê¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢max-age¤ËÇÛθ¤·¤¿ÌÌÅݤʰܹԤ¬É¬ÍפDZ¿ÍÑÉé²Ù¤¬¹â¤¤
̾̾
­£SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ(¸°»öÁ°À¸À®)
  • SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Î¹¹¿·»þ¤Ë¡¢¥Ô¥ó¤·¤¿¸ø³«¸°¤Î¥Þ¥Ã¥Á¥ó¥°ÀßÄê¤Ë¼ºÇÔ¤¹¤ë²ÄǽÀ­¤¬Ä㤯¡¢HPKPÀßÄêÉÔÈ÷¤Ë¤è¤ë¥µ¡¼¥Ó¥¹Ää»ß¤Î¥ê¥¹¥¯¤ÏºÇ¤âÄ㤤
  • HPKP¤ÎRFC¤Ç¤Ï¡¢(¤µ¤é¤Ã¤È´Êñ¤Ë¤Ç¤­¤ë¤È¼è¤ì¤ë¤è¤¦¤Êµ­½Ò¤¬¤µ¤ì¤Æ¤ª¤ê)¿ä¾©¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¼è¤ì¤ëÊýË¡
  • ÉÔÀµ¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤¬»È¤ï¤ì¤ë¥ê¥¹¥¯¤Ï¡¢(ÈëÌ©¸°Ï³±Ì¤Î¥ê¥¹¥¯¤ò½ü¤±¤Ð)­¤¤ÈÆ±ÄøÅ٤ˡ¢­¡­¢¤è¤ê¹â¤¤
  • ¾ÚÌÀ½ñ¹¹¿·¤ÎÁ°¸å¤Ç¡¢Êѹ¹¤µ¤ì¤ë¥Ô¥ó¤¬¤¢¤é¤«¤¸¤á¤ï¤«¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢(max-ageÆâ¤ËºÆÅÙ¾ÚÌÀ½ñ¹¹¿·¤ò¤¹¤ë¤³¤È¤ò¤·¤Ê¤±¤ì¤Ð)max-age¤ò¤¢¤Þ¤êµ¤¤Ë¤»¤º¤Ë¾ÚÌÀ½ñ¤Î¹¹¿·¤¬¤Ç¤­¤ë
  • SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Î¹¹¿·»þ¤Ë¡¢¸°¥Ú¥¢¤Î»öÁ°À¸À®¤¬²Äǽ¤Ê¤Î¤Ï¡¢OpenSSLÅù¤Ë¤è¤ê¼êºî¶È¤Ç¸°¥Ú¥¢À¸À®¤·¤¿¾ì¹ç¤Î¤ß¤Ç¤¢¤ê¡¢¾ÚÌÀ½ñ¤Îȯ¹Ô»þ¤Ë¡¢CSR¤ò¼«Á°¤ÇÀ¸À®¤¹¤ëɬÍפ¬¤Ê¤¯¡¢¥Ö¥é¥¦¥¶¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ç¼«Æ°Åª¤Ë¸°¥Ú¥¢À¸À®¤¹¤ë¤è¤¦¤Ê¾ÚÌÀ½ñȯ¹Ô¥µ¡¼¥Ó¥¹¤Î¾ì¹ç¤Ë¤Ï¡¢ËÜÊý¼°¤Ï»È¤¨¤Ê¤¤
  • Let's Encrypt¤Ï»È¤¨¤º¡¢SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¼«Æ°¹¹¿·¤Ë·¸¤ë±¿ÍÑÉéô¤Î·Ú¸º¤Ï¸«¹þ¤á¤Ê¤¤
  • ¸°¥Ú¥¢¤Ï°ìÈ̤ˡ¢¾ÚÌÀ½ñ¤Î¹¹¿·»þ¤Ë¹Ô¤ï¤ì¤ë¤â¤Î¤À¤¬¡¢¤½¤ì¤ò2Ç¯ÄøÅÙÁ°¤Ë¼Â»Ü¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡£»öÁ°À¸À®¤·¤Æ¤ª¤¯¤È¡¢¤½¤Îʬ¡¢SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤ÎÈëÌ©¸°¤¬Ï³±Ì¤¹¤ë¥ê¥¹¥¯¤Ï¹â¤¯¡¢µ¡Ì©Êݴɤα¿ÍÑÉéô¤ÏÂ礭¤¤
  • ¾ÚÌÀ½ñ¤Î¹¹¿·»þ¤Ë¤Ï¡¢¤½¤ì¤Ê¤ê¤ËÀßÄêÊѹ¹¤Ëµ¤¤ò»È¤¦É¬Íפ¬¤¢¤ë¡£¤Þ¤¿¡¢¤½¤Î²ó¿ô¤â2ǯ¼åÄøÅÙ¤ª¤­¤Ç¤¢¤ê¡¢±¿ÍÑÉéô¤ÏÈæ³ÓŪ¹â¤¤
̾̾
­¤SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ(¸°»öÁ°À¸À®¤Ê¤·)
  • Á´¤Æ¤ò¼«¸ÊÀ©¸æ¤Ç¤­¡¢ÀßÄêÉÔÈ÷¤Ë¤è¤ë¥µ¡¼¥Ó¥¹Ää»ß¥ê¥¹¥¯¤Ï­£¤ÈÆ±ÄøÅ٤˹⤤
  • ­£¤ËÈæ¤Ù¤ÆSSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤ÎÈëÌ©¸°¤¬Ï³±Ì¤¹¤ë¥ê¥¹¥¯¤âÄ㤤
  • ÉÔÀµ¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤¬»È¤ï¤ì¤ë¥ê¥¹¥¯¤Ï¡¢(ÈëÌ©¸°Ï³±Ì¤Î¥ê¥¹¥¯¤ò½ü¤±¤Ð)­¤¤ÈÆ±ÄøÅ٤ˡ¢­¡­¢¤è¤ê¹â¤¤
  • SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤ò»È¤¨¤ë´ü´Ö¤¬¡¢É¬¤º (max-age + ¦Á)¡ß2 ʬ¤À¤±¸º¤ë¡£2ǯʪ¾ÚÌÀ½ñ¤Î¾ì¹ç¡¢max-age¤ò2¥ö·î¤È¤·¤¿¾ì¹ç¡¢¥Æ¥¹¥È¤ä;͵¤â´Þ¤á4¡Á5¥ö·îÄøÅÙ¤Ïû¤¯¤Ê¤ë¤³¤È¤Ë¤Ê¤ê¡¢¾ÚÌÀ½ñ¤ÎÈñÍÑÉéô¤¬Áý¤¨¤ë
  • ¾ÚÌÀ½ñ¹¹¿·¤ÎÁ°¸å¤Ç¾ÚÌÀ½ñ¤ÎÍ­¸ú´ü´Ö¤òmax-age+¦Á¤Ç¥ª¡¼¥Ð¡¼¥é¥Ã¥×¤µ¤»¤ì¤Ð¡¢É¬¤ºmax-age¤ËÇÛθ¤·¤Ê¤¬¤é¥Ô¥ó¤ÎÊѹ¹¤ò¹Ô¤¦¤³¤È¤Ë¤Ê¤ë¡£±¿ÍѤÎÉéô¤Ï¤¢¤ë¤¬¡¢¥Ô¥ó¤¬Êѹ¹¤Ë¤Ê¤ë¤«Ç§¾Ú¶É¼¡Âè¤Ç¤É¤¦¤Ê¤ë¤«¤ï¤«¤é¤Ê¤¤­¡­¢¤ËÈæ¤Ù¤Æ¡¢É¬¤ºmax-age¤ËÇÛθ¤·¤¿¡¢¾ÚÌÀ½ñ¹¹¿·¡¢HPKPÀßÄêÊѹ¹¤Î¥¹¥±¥¸¥å¡¼¥ë¤¬ÁȤá¤ë¤Î¤Ç¡¢Äê·¿±¿ÍѤˤǤ­¤ë¤¿¤á±¿ÍѤο´ÍýŪÉéô¤Ï­¡­¢¤è¤ê¤Ï¼ã´³¾¯¤Ê¤¤
  • ¹âÃæ
    ¤Ç¤Ï¡¢­¡¡Á­¤¤Ç¤Ï¡¢²¿¤òÁªÂò¤¹¤ë¤«¤Ç¤¹¤¬¡¢¥Ö¥é¥¦¥¶ÁȤ߹þ¤ß¤Î¥Ô¥ó¤¬»È¤¨¤Ê¤¤°ìÈÌ¥µ¥¤¥È¤Î¾ì¹ç¤Ï¡¢ ­¢¡Á­£¤Î¤¤¤º¤ì¤«¤¬ÂÅÅö¤À¤È»×¤¤¤Þ¤¹¤¬¡¢¤É¤ì¤â±¿ÍѤÎÉéô¤ä¡¢¥µ¡¼¥Ó¥¹Äó¶¡ÉÔǽ¤Ë¤Ê¤ë¥ê¥¹¥¯¤¬¤¢¤ê¡¢ ¸Ä¿Í¤¬¥Æ¥¹¥ÈÌÜŪ¤ÇÀßÄꤹ¤ë¾ì¹ç¤Ï²¿¤Ç¤âÎɤ¤¤È¤·¤Æ¡¢ ¼«Ê¬¤¬¾¦ÍÑ¥µ¥¤¥È¤Î±¿ÍѤòǤ¤µ¤ì¤Æ¤¤¤ë¤Ê¤é¤Ð¡¢¤â¤Ã¤È¤â·üǰ¤¹¤Ù¤­¤Ï Ĺ´ü´Ö¥µ¡¼¥Ó¥¹Äó¶¡ÉÔǽ¤Ë¤Ê¤ê¥¯¥ì¡¼¥à¤¬µ¯¤­¤ë¤³¤È¤Ê¤Î¤Ç¡¢ HPKP¤Ï»È¤ï¤Ê¤¤¤È¤¤¤¦È½ÃǤò¤¹¤ë¤È»×¤¤¤Þ¤¹¡£

    4.3. ¾ÚÌÀ½ñ¹¹¿·¤ÈHPKP¥Ø¥Ã¥À¤ÎÀßÄêÊѹ¹¤Î±¿ÍÑÊýË¡

    4.2Àá¤Ç¤Ï¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Î¤É¤³¤Ë¥Ô¥ó¤òÀßÄꤹ¤ë¤«¤Ç¡¢ ¤É¤Î¤è¤¦¤Ê°ã¤¤¤¬¤¢¤ë¤Î¤«¤Ë¤Ä¤¤¤Æ¹Í»¡¤·¤Þ¤·¤¿¡£

    ËÜÀá¤Ç¤Ï¡¢4.2Àá¤Î¹Í»¡¤ò¼õ¤±¤Æ¡¢ÀßÄêÉÔ¶ñ¹ç¤Ë¤è¤ë¥µ¡¼¥Ó¥¹ÍøÍÑÉÔǽ¤ò Ëɤ®¤Ê¤¬¤é¡¢HPKP¤ò»È¤Ã¤¿¥µ¥¤¥È¤Î¾ÚÌÀ½ñ¹¹¿·¡¢HPKP¥Ø¥Ã¥À¤ÎÊѹ¹¤ò¡¢¤É¤Î¤è¤¦¤Ë±¿ÍѤ¹¤ì¤Ð¤è¤¤¤Î¤«¤Ë¤Ä¤¤¤Æ ¹Í»¡¤·¤Þ¤¹¡£

    HPKP¤ò»È¤Ã¤¿¾ì¹ç¤Î¾ÚÌÀ½ñ¹¹¿·¤Î±¿ÍѤλÅÊý¤Ï4¤Ä¤Î¥±¡¼¥¹¤Ë¤ï¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

    • a)¾ÚÌÀ½ñ¹¹¿·¤Îmax-age¤è¤êÁ°¤Ë³Îǧ¤·¡¢¥Ô¥ó¤ò¹Ô¤Ã¤Æ¤¤¤ë¸°¤ËÊѹ¹¤¬¤Ê¤¤¾ì¹ç
    • b)¾ÚÌÀ½ñ¹¹¿·¤Îmax-age¤è¤êÁ°¤Ë¾ÚÌÀ½ñ¹¹¿·¤ÎÁ°¸å¤Ç¥Ô¥ó¤ò¹Ô¤¦¸ø³«¸°¤¬²¿¤ËÊѹ¹¤µ¤ì¤ë¤«¤ï¤«¤Ã¤Æ¤¤¤ë¾ì¹ç
    • c)¾ÚÌÀ½ñ¹¹¿·¤Îmax-age¤è¤êÁ°¤Ë¾ÚÌÀ½ñ¹¹¿·¤ÎÁ°¸å¤Ç¥Ô¥ó¤ò¹Ô¤¦¸ø³«¸°¤¬²¿¤ËÊѹ¹¤µ¤ì¤ë¤«¤ï¤«¤é¤Ê¤¤¡¢¤â¤·¤¯¤ÏÊѹ¹¤¬ÌÀ¤é¤«¤À¤¬¡¢¹¹¿·¤ÎÁ°¸å¤Î¾ÚÌÀ½ñ¤ÎÍ­¸ú´ü´Ö¤òmax-age + ¦Á¥ª¡¼¥Ð¡¼¥é¥Ã¥×¤Ç¤­¤ë¾ì¹ç
    • d)¾ÚÌÀ½ñ¹¹¿·¤Îmax-age¤è¤êÁ°¤Ë¾ÚÌÀ½ñ¹¹¿·¤ÎÁ°¸å¤Ç¥Ô¥ó¤ò¹Ô¤¦¸ø³«¸°¤¬²¿¤ËÊѹ¹¤µ¤ì¤ë¤«¤ï¤«¤é¤Ê¤¤¡¢¤â¤·¤¯¤ÏÊѹ¹¤¬ÌÀ¤é¤«¤À¤¬¡¢¹¹¿·¤ÎÁ°¸å¤Î¾ÚÌÀ½ñ¤ÎÍ­¸ú´ü´Ö¤òmax-age + ¦Á¥ª¡¼¥Ð¡¼¥é¥Ã¥×¤Ç¤­¤Ê¤¤¾ì¹ç
    ¤³¤Î¤è¤¦¤ÊÀâÌÀ¤Ç¤Ï¡¢¶ñÂÎŪ¤Ê¥¤¥á¡¼¥¸¤¬¤ï¤«¤Ê¤¤¤È»×¤¤¤Þ¤¹¤Î¤Ç¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥óÃæ¤Î¾ÚÌÀ½ñ¤Ëʬ¤±¤Æ¶ñÂÎÎã¤ò¼¨¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
    • a-1) ¥ë¡¼¥È¾ÚÌÀ½ñ¤äÃæ´ÖCA¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÀßÄꤷ¤Æ¤ª¤ê¡¢¸ÜµÒ¥µ¥Ý¡¼¥È¤ËÌä¹ç¤»¤¿¤é¡¢¼¡²ó¡¢max-age¸å¤Î¾ÚÌÀ½ñ¹¹¿·¤Ç¤Ï¡¢»ÈÍѤ¹¤ë¥ë¡¼¥È¾ÚÌÀ½ñ¡¢Ãæ´ÖCA¾ÚÌÀ½ñ¤Ë¤ÏÊѹ¹¤¬¤Ê¤¤¤³¤È¤¬¤ï¤«¤Ã¤¿¾ì¹ç¡£(¸ÜµÒ¥µ¥Ý¡¼¥È¤Ë±³¤ò¤Ä¤«¤ì¤¿¤é¡¢°ìÉô¥æ¡¼¥¶¤Ë2¥ö·î(=max-age)¥µ¡¼¥Ó¥¹¾ã³²¤Ë¤Ê¤ë¥ê¥¹¥¯¤¢¤ê¡£)
      hpkp-move1
    • b-1) ¥ë¡¼¥È¾ÚÌÀ½ñ¤äÃæ´ÖCA¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÀßÄꤷ¤Æ¤ª¤ê¡¢¸ÜµÒ¥µ¥Ý¡¼¥È¤ËÌä¹ç¤»¤¿¤é¡¢¼¡²ó¡¢max-age¸å¤Î¾ÚÌÀ½ñ¹¹¿·¤Ç¤Ï¡¢»ÈÍѤ¹¤ë¥ë¡¼¥È¾ÚÌÀ½ñ¡¢Ãæ´ÖCA¾ÚÌÀ½ñ¤¬¤É¤ì¤ËÊѹ¹¤µ¤ì¤ë¤«¶µ¤¨¤Æ¤â¤é¤¨¤¿¾ì¹ç¡£¤â¤·¤¯¤Ï¥µ¥Ý¡¼¥È¥Ú¡¼¥¸¤Ê¤É¤Ç¹ðÃΤµ¤ì¤Æ¤¤¤ë¾ì¹ç¡£¾ÚÌÀ½ñȯ¹Ô¥µ¡¼¥Ó¥¹¤ÎÊѹ¹¡¢EV¤Ø¤ÎÊѹ¹¤Ê¤É¤âƱÍÍ¡£
      hpkp-move-b1
    • b-2) SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÀßÄꤷ¤Æ¤ª¤ê¡¢OpenSSLÅù¤Ç¼¡²ó¤Î¾ÚÌÀ½ñ¹¹¿·¤Ç»ÈÍѤ¹¤ë¸°¥Ú¥¢¤¬¤¹¤Ç¤Ë»öÁ°À¸À®¤µ¤ì¡¢Êݴɤµ¤ì¤Æ¤¤¤ë¾ì¹ç
      hpkp-move-b2
    • c-1) ¥ë¡¼¥È¾ÚÌÀ½ñ¤äÃæ´ÖCA¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÀßÄꤷ¤Æ¤¤¤ë¤¬¡¢¼¡²ó¾ÚÌÀ½ñ¹¹¿·¸å¤Î¥ë¡¼¥È¾ÚÌÀ½ñ¡¢Ãæ´ÖCA¾ÚÌÀ½ñ¤ÎÊѹ¹¤Ë¤Ä¤¤¤Æ¡¢¸ÜµÒ¥µ¥Ý¡¼¥È¤«¤é¤Î²óÅú¤¬ÆÀ¤é¤ì¤º¡¢Êѹ¹¤µ¤ì¤ë¤«¤É¤¦¤«È½ÃǤ¬¤Ä¤«¤Ê¤¤¤¿¤á¡¢»ÅÊý¤Ê¤¯¡¢¾ÚÌÀ½ñ¹¹¿·¤òmax-age + ¦ÁÁ°¤Ë¼Â»Ü¤·¤ÆÍ­¸ú´ü´Ö¤ò½Å¤Í¤ë¤è¤¦»öÁ°¾ÚÌÀ½ñȯ¹Ô¤·¤¿¤é¡¢¤ä¤Ï¤ê¥ë¡¼¥È¾ÚÌÀ½ñ¡¢Ãæ´ÖCA¾ÚÌÀ½ñ¤ÏÊѹ¹¤Ë¤Ê¤Ã¤Æ¤¤¤¿¾ì¹ç(Êѹ¹¤¬¤Ê¤±¤ì¤Ða-1¤Î¥±¡¼¥¹¤È¤Ê¤ë¡£)
      hpkp-move-c1
    • c-2) SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÀßÄꤷ¤Æ¤¤¤ë¤¬¡¢OpenSSL¤ò»È¤ï¤º¡¢¥Ö¥é¥¦¥¶¤Îµ¡Ç½¤Ç¸°¥Ú¥¢À¸À®¤¹¤ë¥¿¥¤¥×¤Îǧ¾Ú¶É¤Ç¤¢¤ë¤¿¤á¡¢»öÁ°¤Ë¹¹¿·¸å¤Î¸ø³«¸°¤Ï¤ï¤«¤é¤º¡¢¾ÚÌÀ½ñ¹¹¿·¤òmax-age + ¦ÁÁ°¤Ë¼Â»Ü¤·¤ÆÍ­¸ú´ü´Ö¤ò½Å¤Í¤ë¤è¤¦»öÁ°¾ÚÌÀ½ñȯ¹Ô¤Ç¤­¤ë¾ì¹ç
      hpkp-move-c2
    • c-3) SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÀßÄꤷ¤Æ¤¤¤ë¤¬¡¢HSMµ¡Ç½¤ò»È¤¦SSL¥¢¥¯¥»¥é¥ì¡¼¥¿¡¼¤ò»È¤Ã¤Æ¤ª¤ê¡¢»öÁ°¤Ë¹¹¿·¸å¤Î¸ø³«¸°¤Ï¤ï¤«¤é¤º¡¢¾ÚÌÀ½ñ¹¹¿·¤òmax-age + ¦ÁÁ°¤Ë¼Â»Ü¤·¤ÆÍ­¸ú´ü´Ö¤ò½Å¤Í¤ë¤è¤¦»öÁ°¾ÚÌÀ½ñȯ¹Ô¤Ç¤­¤ë¾ì¹ç¡£°Ü¹Ô¤Î¿Þ¤Ïc-2¤ÈƱ¤¸¤Ë¤Ê¤ê¤Þ¤¹
    • d-1) SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÀßÄꤷ¤Æ¤¤¤ë¤¬¡¢Let's Encrypt¤ä°ìÉô¤Îǧ¾Ú¶É¤Î¤è¤¦¤Ë¡¢¾ÚÌÀ½ñ¹¹¿·¸å¡¢Á°¤Î¾ÚÌÀ½ñ¤Ï¨»þ¤Ë¼º¸ú½èÍý¤¬¤µ¤ì¡¢max-age + ¦Á¤Î´ü´Ö¤ÎÍ­¸ú´ü´Ö¤Î¥ª¡¼¥Ð¡¼¥é¥Ã¥×¤¬¤Ç¤­¤Ê¤¤¾ì¹ç
      hpkp-move-d1
    ¼«Ê¬¤Î±¿ÍѤ¬¤É¤Î¥±¡¼¥¹¤Ë¤¢¤Æ¤Ï¤Þ¤ë¤«¡¢¾åµ­¤ÎÀâÌÀ¤Ç¤ï¤«¤Ã¤¿¤Ç¤·¤ç¤¦¤«¡£¤µ¤Æ¡¢a¡Ád¤Î¥±¡¼¥¹¤Ç¡¢¤É¤Î¤è¤¦¤ËÂбþ¤¹¤ë¤«¤ò°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£
    • a¤ÎÂбþ) ¾ÚÌÀ½ñ¹¹¿·¤ËºÝ¤·¡¢¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤ÎHPKP¥Ø¥Ã¥À¤ÎÀßÄê¤ÏÊѹ¹¤·¤Ê¤¯¤Æ¤è¤¤
    • b¤ÎÂбþ) max-age¤ò¤Ï¤¢¤Þ¤êµ¤¤Ë¤»¤º¡¢¾ÚÌÀ½ñ¹¹¿·¸å¤Î¡¢¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤Î¾ÚÌÀ½ñÀßÄê¡¢HPKP¥Ø¥Ã¥À¤òÀßÄêÊѹ¹¤·¤Æ¤è¤¤
    • c¤ÎÂбþ) ¤â¤Ã¤È¤â¿À·Ð¤ò¸¯¤¦¡¢max-age¤ËÇÛθ¤·¤¿¡¢¾ÚÌÀ½ñ¹¹¿·¡¢HPKP¥Ø¥Ã¥ÀÀßÄ꤬ɬÍס£¾ÚÌÀ½ñ¤Î¹¹¿·¤ÎÁ°¸å¤Ç¡¢Í­¸ú´ü´Ö¤Î¥ª¡¼¥Ð¡¼¥é¥Ã¥×¤¬É¬Í×
    • d¤ÎÂбþ) ¤³¤Î¥±¡¼¥¹¤Ç¤ÏHPKP¤Ï»È¤¨¤Ê¤¤¡£Â¾¤Î¾ÚÌÀ½ñ¡¢¾ÚÌÀ½ñȯ¹Ô¥µ¡¼¥Ó¥¹¤Ø¤Î¥Ô¥óÀßÄê¤ÎÊѹ¹¤ò¸¡Æ¤¤¹¤ëɬÍפ¬¤¢¤ë¡£»È¤Ã¤Æ¤â¡¢°ìÉô¥æ¡¼¥¶¤Ë¥µ¡¼¥Ó¥¹ÀܳÉÔǽ¾ã³²¤¬max-ageÄøÅÙȯÀ¸¤¹¤ë¡£
    ¤É¤ó¤Ê¾ÚÌÀ½ñ¹¹¿·¡¢HPKP¥Ø¥Ã¥ÀÀßÄê¤Î°Ü¹Ô¤ò¹Ô¤¦¤Ë¤·¤Æ¤â¡¢¾ÚÌÀ½ñ¤ÎÍ­¸ú´ü¸Â¡¢max-age¡¢ÈëÌ©¸°¤ÎÊݴɤʤɡ¢ÍÍ¡¹¤Ê¤³¤È¤Ëµ¤¤ò¸¯¤¤¤Ê¤¬¤é¡¢°Ü¹Ô·×²è¤òΩ¤Æ¡¢°Ü¹Ô¤·¤Ê¤¤¤È¤Ê¤é¤º¡¢¤­¤Á¤ó¤È¹Í¤¨¤Ê¤¤¤ÈĹ´ü¤Î¥µ¡¼¥Ó¥¹¾ã³²È¯À¸¤¹¤ë¤È¤¤¤¦±¿ÍѾå¤ÎÉéô¤ä¥ê¥¹¥¯¤ÏÂ礭¤¤¤È»×¤¤¤Þ¤¹¡£

    4.4. ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ô¥ó¤È¤¤¤¦Ì¿Ì¾¤Î¤¤¤±¤Æ¤Ê¤µ

    Àè¤Ë½Ò¤Ù¤¿¤è¤¦¤Ë¡¢²¿¤«°ì¤Ä¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤È¤Ï¥Þ¥Ã¥Á¤·¤Ê¤¤¥Ô¥ó¤òɬ¤º´Þ¤á¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤ò¤¹¤ë¾ì¹ç¤Ï¡¢¸½ºß»È¤Ã¤Æ¤¤¤ëSSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤ÎÈëÌ©¸°¤ËÂФ·¤Æ¡¢¾­Íè¡¢¾ÚÌÀ½ñ¹¹¿·¤Ç»È¤¦Í½Äê¤ÎÈëÌ©¸°¤â»öÁ°¤ËÀ¸À®¤·¤Æ¤ª¤±¤ë¤Ê¤é¡¢¤½¤Î¸ø³«¸°¤ò¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ô¥ó¤È¤·¤ÆÀßÄꤷ¤Æ¤ª¤±¤Ð¡¢¤Þ¤µ¤·¤¯¥Ð¥Ã¥¯¥¢¥Ã¥×¤È¤·¤Æ»ÈÍѤǤ­¡¢(¸å½Ò¤ÎÌäÂꤢ¤ê¤¢¤ê¤Ç¤¹¤¬)¥¹¥à¡¼¥¹¤Ê¾ÚÌÀ½ñ¤È¥Ô¥ó¤Î°Ü¹Ô¤¬²Äǽ¤Ç¤¹¡£

    ¤·¤«¤·¤Ê¤¬¤é¡¢ÈëÌ©¸°¤ò°Ü¹ÔÀè¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¤È¤·¤Æ»öÁ°À¸À®¤·¤Æ¤ª¤­¡¢¤³¤ì¤¬ÍøÍѤǤ­¤ë¤È¤¤¤¦¥±¡¼¥¹¤Ï¥ì¥¢¥±¡¼¥¹¤Ç¤¹¡£Î㤨¤Ð°Ê²¼¤Î°ìÈ̤˵¯¤³¤ê¤¦¤ë¥±¡¼¥¹¤Ç¤Ï¡¢¾ÚÌÀ½ñ¹¹¿·¤ÎºÝ¤Ë¡¢¤½¤Î»öÁ°À¸À®¤·¤¿ÈëÌ©¸°¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£

    CA¾ÚÌÀ½ñ¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×Pin
    ǧ¾Ú¶É¤¬¹Ô¤¦¾ÚÌÀ½ñ¹¹¿·¤â¤·¤¯¤Ï¸°¹¹¿·¤Ë¤ª¤¤¤Æ¡¢»öÁ°¤Ë°Ü¹ÔÀè¤ÎÈëÌ©¸°¤¬Â¸ºß¤¹¤ë¤È¤¤¤¦¤³¤È¤â¤¢¤ê¤Þ¤»¤ó¤·¡¢°Ü¹ÔÀè¤Î¸ø³«¸°¤ÎPin¤ò¥æ¡¼¥¶¤Ë¸ø³«¤·¤Æ¤¯¤ì¤ëǧ¾Ú¶É¤â¤¢¤ê¤Þ¤»¤ó¡£
    HSM¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×
    ǧ¾Ú¶É¤äSSL¥¢¥¯¥»¥é¥ì¡¼¥¿¡¼¤ò»È¤Ã¤Æ¤¤¤ë¥±¡¼¥¹¤Ç¤Ï¡¢ÈëÌ©¸°¤ò¼è¤ê½Ð¤·ÉÔ²Äǽ¤Ê¥Ï¡¼¥É¥¦¥§¥¢¥»¥­¥å¥ê¥Æ¥£¥â¥¸¥å¡¼¥ë(HSM)¤Ç´ÉÍý¤¹¤ë¤Î¤¬°ìÈÌŪ¤Ç¤¹¡£HSM¤ò»ÈÍѤ·¤¿¸°¹¹¿·¡¢¾ÚÌÀ½ñ¹¹¿·¤Ç¤Ï¡¢»öÁ°¤ËÈëÌ©¸°¤ò´ö¤Ä¤«À¸À®¤·¤Æ¤ª¤­¡¢¹¹¿·»þ¤Ë¤½¤ì¤ò»ØÄꤷ¤Æ¹¹¿·¤Ë»ÈÍѤ¹¤ë¤È¤¤¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£¹¹¿·»þ¤Ë¤Ï¡¢¿·¤¿¤Ë¸°¥Ú¥¢¤òÀ¸À®¤·¤Æ¡¢¤³¤ì¤ò»ÈÍѤ·¤Þ¤¹¡£¤³¤Î¤¿¤á¤Ë¡¢Ç§¾Ú¶É¤Ç¤Ï¥Ð¥Ã¥¯¥¢¥Ã¥×Pin¤ò¸ø³«¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¤Î¤Ç¤¹¡£
    ¥¦¥§¥Ö²èÌ̤Ǹ°¥Ú¥¢À¸À®¤·¤ÆSSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñȯ¹Ô¤¹¤ëǧ¾Ú¶É¤Î¾ì¹ç
    ǧ¾Ú¶É¤Ë¤è¤Ã¤Æ¤Ï¡¢¥¦¥§¥Ö¥Ö¥é¥¦¥¶¤Îµ¡Ç½¤ò»ÈÍѤ·¤Æ¡¢¥Ü¥¿¥ó¤ò²¡¤»¤Ð¼«Æ°¤Ç¸°¥Ú¥¢À¸À®¤ò¹Ô¤¤¡¢¤³¤ì¤òÍѤ¤¤Æ¾ÚÌÀ½ñ¤òȯ¹Ô¤·¡¢¿·¤·¤¤¾ÚÌÀ½ñ¤ò³ÊǼ¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¤½¤Î¤è¤¦¤Êǧ¾Ú¶É¤Ç¤Ï¡¢»öÁ°¤ËÀ¸À®¤·¤Æ¤ª¤¤¤¿¸°¤òȯ¹Ô»þ¤Ë»ÈÍѤ¹¤ë¤È¤¤¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£
    Let's Encrypt¤ò»È¤¦¾ì¹ç
    ̵ÎÁ¤ÇÀ¤³¦°ì¤Îȯ¹Ô¿ô¤ò¸Ø¤ë¾ÚÌÀ½ñȯ¹Ô¥µ¡¼¥Ó¥¹¤Ç¤¢¤ëLet's Encrypt¤Ç¤Ï¡¢¾ÚÌÀ½ñ¤Îȯ¹Ô¥×¥í¥»¥¹¤¬¥¹¥¯¥ê¥×¥È¤Ë¤è¤ê¼«Æ°²½¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¤³¤ì¤â¾ÚÌÀ½ñ¤Î¹¹¿·»þ¤Ë¤Ï¼«Æ°¤Ç¸°¥Ú¥¢À¸À®¤µ¤ì¤ë¤Î¤Ç¡¢»öÁ°¤ËÀ¸À®¤·¤Æ¤¤¤¿¸°¥Ú¥¢¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£
    ËÜÅö¤Î°ÕÌ£¤Ç¤Î¡Ö¥Ð¥Ã¥¯¥¢¥Ã¥×Pin¡×¤¬»È¤¨¤ë¤Î¤Ï¡¢°Ê²¼¤Î¾ì¹ç¤Ë¤Î¤ß²Äǽ¤Ç¤¢¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
    • SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤ËÂФ·¤ÆPin¤ò¤¹¤ë¾ì¹ç¤Ç¡¢¤«¤Ä¡¢
    • OpenSSL¤Ê¤É¤Î¥³¥Þ¥ó¥É¤Ç¸°¥Ú¥¢À¸À®¤·¡¢¥Þ¥Ë¥å¥¢¥ë¤Ç¾ÚÌÀ½ñȯ¹ÔÍ×µá¤òÀ¸À®¤·¤Æ¡¢¾ÚÌÀ½ñȯ¹Ô¤·¤Æ¤â¤é¤¨¤ëǧ¾Ú¶É¤ò»ÈÍѤ¹¤ë¾ì¹ç
    ½¾¤Ã¤Æ¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Ë¥Þ¥Ã¥Á¤·¤Ê¤¤¤â¤Î¤ò¡¢¡Ö¥Ð¥Ã¥¯¥¢¥Ã¥×Pin¡×¤È¸Æ¤Ö¤Î¤Ï¡¢¾å½Ò¤Î¤Û¤È¤ó¤É¤Î¥±¡¼¥¹¤ÇŬÀڤǤʤ¤¤Î¤Ç¡¢Ì¾¾Î¤Ë¤ÏÌäÂ꤬¤¢¤ë¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£

    4.5. CA¸°¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ô¥ó¤Î¥ª¥¹¥¹¥á¤ÎÃÍ

    ¥ë¡¼¥È¾ÚÌÀ½ñ¤äÃæ´ÖCA¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÀßÄꤹ¤ë¾ì¹ç¡¢ °ìÃפ·¤Ê¤¤¥Ô¥ó¤Ï¡¢¾­Íè¤Î¹¹¿·À褬¤ï¤«¤é¤Ê¤¤¾ì¹ç¤Ë¤Ï²¿¤Ç¤â¤è¤¯¡¢ ¤µ¤é¤Ë¤Ï¡¢ËÜʪ¤Î¸ø³«¸°¤Î¥Ï¥Ã¥·¥å¤Ç¤¢¤ëɬÍפ⤢¤ê¤Þ¤»¤ó¡£ SHA256¤Ê¤Î¤Ç¡¢Ã±¤Ë32¥Ð¥¤¥È¤ÎÃͤǤ¢¤ì¤Ð²¿¤Ç¤âÎɤ¤¤ï¤±¤Ç¤¹¡£

    ¤¿¤À¡¢HPKP¥Ø¥Ã¥À¤Ç°ì¸«¤·¤Æ°ìÃפ·¤Ê¤¤¥Ô¥ó¤À¤È¤ï¤«¤Ã¤¿¤Û¤¦¤¬¡¢ ¸í¤Ã¤Æºï½ü¤¹¤ë¤Ê¤É¤Î±¿Íѥߥ¹¤òËɤ°°ÕÌ£¤Ç¤âÎɤ¤¤È¹Í¤¨¤Æ¤ª¤ê¡¢ ¤½¤³¤Ç¡¢¥ª¥¹¥¹¥á¤·¤¿¤¤¤Î¤¬¡¢°Ê²¼¤ÎÃͤǤ¹¡£

    pin-sha256="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; ¤³¤ì¤Ï¡¢16¿Ê¿ô¤Ç 0000000000000000000000000000000000000000000000000000000000000000 (32¥Ð¥¤¥È)
    ¤È¤Ê¤ê¤Þ¤¹¡£Î®¹Ô¤ë¤È¤¤¤¤¤Ê¤È»×¤Ã¤Æ¤¤¤Þ¤¹w

    4.6. ¾ÚÌÀ½ñ¥Á¥§¡¼¥óÃæ¤ÇÊ£¿ô¥Ô¥ó¤ò¤Ä¤±¤Æ¤â°ÕÌ£¤Ï¤Ê¤¤

    ¤³¤ì¤Þ¤Ç¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤È°ìÃפ¹¤ë¥Ô¥ó¤Î¿ô¤Ï1¤Ä¤òÁ°Äó¤ËµÄÏÀ¤·¤Æ¤­¤Þ¤·¤¿¤¬¡¢ ¤³¤ì¤òÊ£¿ô¡¢Î㤨¤Ð¡¢¥ë¡¼¥È¾ÚÌÀ½ñ¤È¡¢Ãæ´ÖCA¾ÚÌÀ½ñ¤È¡¢SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Î¥Ô¥ó¤ò°ìÃפµ¤»¤¿¾ì¹ç¤Ë¤Ï¡¢ ¤É¤¦¤Ê¤ë¤Î¤«¤ò¹Í»¡¤·¤¿¤¤¤È»×¤¤¤Þ¤¹¡£

    ¤Þ¤º¡¢SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÂǤäơ¢¼¡¤ËÃæ´ÖCA¾ÚÌÀ½ñ¡¢¼¡¤Ë¥ë¡¼¥È¾ÚÌÀ½ñ¤Î¥Ô¥ó¤òÄɲ䷤Ƥ¤¤¯ ¤³¤È¤ò¹Í¤¨¤Æ¤Þ¤·¤ç¤¦¡£ Ʊ¤¸¸°¥Ú¥¢¤òÊ£¿ô¤Îǧ¾Ú¶É¤«¤é¤Î¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñȯ¹Ô¤Ç»ÈÍѤ·¤Ê¤¤¤È¤¤¤¦¡¢Åö¤¿¤êÁ°¤Î»ö¤òÁ°Äó¤È¤·¤Þ¤¹¡£ SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Ë¥Ô¥ó¤òÂǤĻö¤¬ºÇ¤â¡¢ÈϰϤ¬¸ÂÄêŪ¤Ç¥Ë¥»HTTPS¤ËÂФ¹¤ë ºÇ¤â¶¯¤¤Âкö¤Ç¤¢¤ë¤È¡¢4.2Àá­£­¤¤Ç½Ò¤Ù¤Þ¤·¤¿¡£

    ¤½¤³¤ËÃæ´ÖCA¾ÚÌÀ½ñ¤Î°ìÃפ¹¤ë¥Ô¥ó¤ò­¤·¤Æ¤ß¤¿¤é¤É¤¦¤Ç¤·¤ç¤¦¤«¡£¥Ô¥ó¤ÇÆÃÄꤹ¤ë¾ÚÌÀ½ñ¤ÎÈϰϤÏÁ´¤¯ÊѤï¤ê¤Þ¤»¤Î¤Ç¡¢Ãæ´ÖCA¾ÚÌÀ½ñ¤Î¥Ô¥ó¤ò­¤¹¤³¤È¤Ç¡¢¥Ë¥»HTTPS¥µ¥¤¥Èºî¤ê¤¬Æñ¤·¤¯¤Ê¤Ã¤¿¤ê¤Ï¤»¤º¡¢¥»¥­¥å¥ê¥Æ¥£¤Î¶¯ÅÙ¤â¾å¤¬¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢±¿ÍÑÌ̤Ǥϡ¢¥Ô¥ó¤Î°ìÃפÎÇÛ褬¥Ô¥ó°ì¤Ä¤ÈÈæ¤Ù¤ÆÆñ¤·¤¯¡¢¤Þ¤¿¡¢¥¦¥§¥Ö¥µ¥¤¥È¥ª¡¼¥Ê¡¼¤À¤±¤Ç´ÉÍý¤Ç¤­¤Ê¤¤ÈϰϤȤʤë¤Î¤Ç¾ÚÌÀ½ñ¤ä¥Ô¥ó¥Ø¥Ã¥ÀÊѹ¹¤Î±¿ÍѤϳÊÃʤËÊ£»¨¤ÇÌÌÅݤˤʤê¤Þ¤¹¡£¤³¤ì¤ËÂФ·¡¢¥ë¡¼¥È¾ÚÌÀ½ñ¤Î¥Ô¥ó¤ò²Ã¤¨¤¿¾ì¹ç¤Ç¤âÁ´¤¯Æ±¤¸¤³¤È¤Ç¤¹¡£¥»¥­¥å¥ê¥Æ¥£¶¯Å٤Ͼ夬¤é¤º¡¢°Ü¹Ô¤Î±¿ÍѤÏÊ£»¨¤Ë¤Ê¤ë¤Î¤Ç¤¹¡£
    hpkp-multipin

    ½¾¤Ã¤Æ¡¢¾ÚÌÀ½ñ¥Á¥§¡¼¥óÃæ¤ÇÊ£¿ô¤Î¥Ô¥ó¤ò¤Ä¤±¤Æ¤â°ÕÌ£¤¬¤Ê¤¯¡¢¤«¤¨¤Ã¤Æ±¿ÍѤ¬Ê£»¨¤Ë¤Ê¤ë¤À¤±¤Ê¤Î¤Ç¡¢»ß¤á¤¿¤Û¤¦¤¬¤è¤¤¤È¤¤¤¦¤³¤È¤¬¸À¤¨¤Þ¤¹¡£

    4.7. Ʊ¤¸CA¾ÚÌÀ½ñ¤ËPin¤·Â³¤±¤ë¾ì¹ç¤Î²ÝÂê

    º£¸åÅöÌ̤ϡ¢Æ±¤¸¥ë¡¼¥Èǧ¾Ú¶É¡¢Ãæ´Öǧ¾Ú¶É¤«¤éȯ¹Ô¤·¤Æ¤â¤é¤¦¾ì¹ç¤Ë¡¢¤½¤Îǧ¾Ú¶É¤Î¾ÚÌÀ½ñ¤Î¸ø³«¸°¤ËPin¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤Î¾ì¹ç¤Ë¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×Pin¤Ï¡¢Ç§¾Ú¶É¤«¤é°Ü¹ÔÀè¤ÎPin¤ò¶µ¤¨¤Æ¤â¤é¤¨¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢¤Ê¤ó¤Ç¤âŬÅö¤ÊÃͤÇÎɤ¤¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¸ø³«¸°¤Î¥Ï¥Ã¥·¥å¤Ç¤¢¤ëɬÍפâ¤Ê¤¯¡¢32¥Ð¥¤¥È¤ÎÃͤÎBase64ɽ¸½¤Ç¤¢¤ì¤Ð(¾×ÆÍ¤·¤Ê¤±¤ì¤Ð)²¿¤Ç¤âÎɤ¤¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

    ¤¿¤À¤·¡¢¡ÖÅöÌ̤ϡפȽñ¤­¤Þ¤·¤¿¤¬¡¢SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤òȯ¹Ô¤¹¤ë»ÈÍѤ·¤Æ¤¤¤¿Ãæ´Öǧ¾Ú¶É¤¬¡¢¼¡¤Î¾ÚÌÀ½ñȯ¹Ô»þ¤Ë¤âƱ¤¸Ãæ´Öǧ¾Ú¶É¡¢Æ±¤¸¸ø³«¸°¤Ç¤¢¤ë¤È¤¤¤¦Êݾڤ¬¤¢¤ê¤Þ¤»¤ó¡£°Ê²¼¤ÎÍýͳ¤Ë¤è¤ê¡¢Æ±¤¸Ãæ´ÖCA¾ÚÌÀ½ñ¤¬»È¤ï¤ì¤Ê¤¤²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£

    • Ãæ´ÖCA¾ÚÌÀ½ñ¤ÎÍ­¸ú´ü¸Â¤Ï¡¢5ǯ¤«¤é10Ç¯ÄøÅ٤Ǥ¹¡£¤½¤ÎÍ­¸ú´ü¸Â¤ÎÈ¾Ê¬ÄøÅÙ¤«¤é¡¢ºÇŤǤâ2¡¢3ǯ¤ò»Ä¤·¤Æ¡¢¤½¤ÎÃæ´Öǧ¾Ú¶É¤«¤é¤Ï¾ÚÌÀ½ñ¤¬È¯¹Ô¤µ¤ì¤Ê¤¯¤Ê¤ê¡¢ÍøÍѼԤÏÊ̤ÎCA¤«¤é¾ÚÌÀ½ñ¤òȯ¹Ô¤·¤Æ¤â¤é¤¦¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
    • ¾ÚÌÀ½ñ¤Îȯ¹Ô¿ôËç¿ô¤¬Â¿¤¯¤Ê¤ë¤È¡¢¤½¤ì¤À¤±¡¢¾ÚÌÀ½ñ¼º¸ú¥ê¥¹¥È(CRL)¤Î¥µ¥¤¥º¤âÂ礭¤¯¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢°ì¤Ä¤ÎÃæ´ÖCA¤«¤éȯ¹ÔËç¿ô¤òÀ©¸Â¤·¤Æ¡¢°Ê¹ß¤Î¾ÚÌÀ½ñȯ¹Ô¤Ï¡¢¿·¤·¤¤Ãæ´ÖCA¤«¤éȯ¹Ô¤µ¤»¤ë¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£
    • ¶áǯ¡¢Ç§¾Ú¶É¤Î±¿ÍѾå¤ÎÉÔÈ÷¡¢¥µ¥¤¥Ð¡¼¹¶·â¤Ê¤É¤«¤é¾ÚÌÀ½ñȯ¹Ô¥µ¡¼¥Ó¥¹Á´ÂΤ䡢ÆÃÄê¤ÎÃæ´ÖCA¤¬±¿ÍÑÄä»ß¡¢¥µ¡¼¥Ó¥¹½ªÎ»¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
    ¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¢Æ±¤¸Ãæ´ÖCA¤ÎPin¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£

    Í­¸ú¤ÊPin¤òÀßÄꤷ¤¿Æ±¤¸¥ë¡¼¥ÈCA¤â¤·¤¯¤ÏÃæ´ÖCA¤«¤é¡¢¿·¤·¤¤¾ÚÌÀ½ñ¤¬È¯¹Ô¤·¤Æ¤â¤é¤¨¤Ê¤¤¤È¤ï¤«¤Ã¤¿ºÝ¤Ë¡¢Ê̤ξÚÌÀ½ñ¤Î°Ü¹Ô¤Ï¡¢¤¹¤°¤Ë¤Ï¤Ç¤­¤º¡¢max-age¤Ç»ØÄꤷ¤¿´ü´Ö¡¢°ìÈ̤ˤÏ1¥ö·î¤«¤é1Ç¯ÄøÅ٤ϡ¢¾ÚÌÀ½ñ¤ÎÆþ¤ìÂØ¤¨¤¬¤Ç¤­¤Þ¤»¤ó¡£ºÇ°­¤Î¾ì¹ç¡¢¤½¤Î´ü´Ö¡¢Í­¸ú¤ÊHTTPSÄÌ¿®¤¬¤Ç¤­¤Ê¤¤¤È¤¤¤¦»ö¤â¤¢¤ê¤¨¤Þ¤¹¡£

    ¤³¤Î¤è¤¦¤Ê±Æ¶Á¤ò¡¢·Ú¸º¤¹¤ëÊýË¡¤¬Ìµ¤¤¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¾ÚÌÀ½ñ¤ò¹¹¿·¤¹¤ë¤ÈȽÃǤ·¡¢Æ±¤¸Ãæ´ÖCA¤«¤é¾ÚÌÀ½ñ¤¬È¯¹Ô¤Ç¤­¤Ê¤¤¤È¤ï¤«¤Ã¤¿»þÅÀA¤Ç¡¢¤½¤³¤«¤émax-age·Ð²á¤·¤¿»þÅÀB¤òµ­Ï¿¤·¤Æ¤ª¤­¡¢¿·¤·¤¤¾ÚÌÀ½ñ¤ò¼èÆÀ¤·¤Þ¤¹¡£(¤¬»È¤¤¤Þ¤»¤ó¡£)¡£¥Ð¥Ã¥¯¥¢¥Ã¥×Pin¤È¤·¤Æ¡¢¤½¤Î¿·¤·¤¤¾ÚÌÀ½ñ¤ÎÊ̤ÎÃæ´ÖCA¾ÚÌÀ½ñ¤Î¸ø³«¸°¤ÎPin¤ò¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤Î¥Ø¥Ã¥À¤ËÀßÄꤷ¤Þ¤¹¡£»þÅÀB¤Ë¤Ê¤Ã¤Æ¡¢½é¤á¤Æ¿·¤·¤¤¾ÚÌÀ½ñ¤Ø¤ÎÆþ¤ìÂØ¤¨¤ò¼Â»Ü¤·¤Þ¤¹¡£¤³¤Î»ö¤«¤é¡¢max-age¤ò1ǯÅù¡¢Ä¹¤¯¤È¤ì¤Ðµ¶¥µ¥¤¥È¤ÎËɻߤˤÏÌòΩ¤Á¤Þ¤¹¤¬¡¢º£½Ò¤Ù¤¿¤è¤¦¤Ê¾ÚÌÀ½ñ¹¹¿·¤Î¥ê¥¹¥¯¤â¤¢¤ê¡¢È¾·î¤«¤é1¥ö·îÄøÅÙ¤ËÀßÄꤹ¤ë¤Î¤¬ÂÅÅö¤Ê¤è¤¦¤Ë»×¤¤¤Þ¤¹¡£

    4.8. 2¤Ä¤ÎCA¾ÚÌÀ½ñ¤ËPin¤¹¤ë¾ì¹ç¤Î²ÝÂê

    SSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Î¹¹¿·¤ÎºÝ¤Ë¡¢2¤Ä¤Î¾ÚÌÀ½ñȯ¹Ô¥µ¡¼¥Ó¥¹¡¢Î㤨¤ÐSymantec¤ÈGlobalSign¤ò¸ò¸ß¤Ë¾è¤ê´¹¤¨¤ë¤È¤·¤Æ¡¢¤³¤ì¤é2¤Ä¤ÎÃæ´ÖCA¾ÚÌÀ½ñ¤ÎPin¤ò¥Ø¥Ã¥À¤ËÀßÄꤷ¡¢»ÈÍѤ·¤Æ¤Ê¤¤¤Ê¤¤Êý¤ò¥Ð¥Ã¥¯¥¢¥Ã¥×Pin¤È¤¹¤ë¤Î¤Ï¡¢¤Ê¤«¤Ê¤«¸­¤¤ÊýË¡¤À¤È»×¤¤¤Þ¤¹¡£
    hpkp-two

    ¤·¤«¤·¤Ê¤¬¤é¡¢Á°½Ò¤ÎÍýͳ¤Ë¤è¤ê¡¢Symantec¤Î¼¡¤Ëȯ¹Ô¤·¤Æ¤â¤é¤ª¤¦¤ÈͽÄꤷ¤Æ¤¤¤¿GlobalSign¤ÎÃæ´ÖCA¾ÚÌÀ½ñ¤ÎPin¤¬»È¤¨¤Ê¤¤¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£

    °Ê¾å¤Î¤è¤¦¤Ë¡¢CA¾ÚÌÀ½ñ¤ËPin¤òÂǤĥ±¡¼¥¹¤Ç¤Ï¡¢¾ÚÌÀ½ñȯ¹Ô¥µ¡¼¥Ó¥¹¤Îµ¤¤Þ¤°¤ì¤Ë¥Ó¥¯¥Ó¥¯¤·¤Ê¤¬¤é¡¢¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤ÎHPKP¤ò±¿ÍѤ¹¤ë¤Î¤Ï¤È¤Æ¤âÌÌÅݤÀ¤È»×¤¤¤Þ¤»¤ó¤«? ¤½¤ì¤Ê¤é¡¢¤Þ¤À¡¢¼«Ê¬¤Ç¥³¥ó¥È¥í¡¼¥ë¤Ç¤­¤ëSSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤ËPin¤òÂǤÄÊý¤¬¡¢ÌÌÅݤǤâÎɤ¤¤è¤¦¤Êµ¤¤â¤·¤Æ¤­¤Þ¤¹¡£

    4.9. max-age¤Î¥ª¥¹¥¹¥áÃͤò¹Í¤¨¤ë

    RFC 7469 4.1Àá¤Î ¥»¥­¥å¥ê¥Æ¥£¹Í»¡¤Ë¤ª¤¤¤Æ¡¢max-age¤ÎºÇÂçÃͤˤĤ¤¤Æ°Ê²¼¤Î¤è¤¦¤Ëµ­ºÜ¤µ¤ì¤Æ¤ª¤ê¡¢ ¡Ö60Æü¤¬¥Ð¥é¥ó¥¹¤Î¼è¤ì¤¿Ãͤ«¤â¤Í¡×¤È¸À¤Ã¤Æ¤¤¤Þ¤¹¡£

    RFC 7469 4.1. Maximum max-age ¤è¤ê
    However, a value on the order of 60 days (5,184,000 seconds) may be considered a balance between the two competing security concerns.
    ¤¿¤À¡¢5¾Ï¤ÎScott Helme»á¤ÎHPKPÂбþ¥É¥á¥¤¥ó¥ê¥¹¥È¤Ë´ð¤Å¤¤¤¿»ä¤ÎÄ´ºº¤Ç¤Ï¡¢ ¤Þ¤È¤â¤Ê±¿ÍѤò¤·¤Æ¤¤¤ëÀßÄê¤ÎÃæ¤Ç¤Ï¡¢ 30Æü¤¬26%¡¢¼¡¤¤¤Ç60Æü¤¬19%¤È¿¤¤¤Ç¤¹¡£

    max-age¤ÎÃͤ¬Ä¹¤¹¤®¤ë¤È¡¢

    • ÀßÄê¥ß¥¹¤Ë¤è¤ë¾ã³²È¯À¸»þ¤ËĹ´ü´ÖÀܳ¤Ç¤­¤Ê¤¤¥æ¡¼¥¶¤¬½Ð¤Æ¤·¤Þ¤¦
    • Í­¸ú´ü´Ö¤Î¥ª¡¼¥Ð¡¼¥é¥Ã¥×¤¬É¬Íפʾì¹ç¡¢¼Â¼ÁŪ¤Ê¾ÚÌÀ½ñÍ­¸ú´ü´Ö¤¬Ìܸº¤ê¤·¤Æ±¿ÍÑ¥³¥¹¥È¤Ë±Æ¶Á¤¹¤ë
    ¤È¤¤¤¦¥ê¥¹¥¯¤Ë¤Ä¤¤¤Æ¡¢4.2Àá¤ÇÀâÌÀ¤µ¤»¤ÆÄº¤­¤Þ¤·¤¿¤¬¡¢ µÕ¤Ë¡¢max-age¤¬Ã»¤¹¤®¤ë¤È¤É¤¦¤Ê¤ë¤Î¤Ç¤·¤ç¤¦¤«¡©

    ´Êñ¤Ë¤Ï¡¢¥Ë¥»¤ÎHTTPS¥µ¥¤¥È¤Ë¾è¤Ã¼è¤é¤ì¤ë²ÄǽÀ­¤¬¹â¤¯¤Ê¤ë¤È¤¤¤¦»ö¤«¤È»×¤¤¤Þ¤¹¡£ ËÜʪ¥µ¥¤¥È¤Îmax-age¤¬Ã»¤¯¤Æ¡¢Í­¸ú´ü¸Â¤¬Àڤ줿¥¿¥¤¥ß¥ó¥°¤Ç¡¢¥É¥á¥¤¥ó¾è¼è¤êÅù¤ÎÈï³²¤Ë¤¢¤Ã¤Æ µ¶¥µ¥¤¥È¤¬ºî¤é¤ì¡¢¤½¤³¤Ç1ǯÅùŤ¤max-age¤ÎHPKP¥Ø¥Ã¥ÀÂбþ¤Î¥Ë¥»¥µ¥¤¥È¤¬ºî¤é¤ì¤¿¤È¤¹¤ë¤È¡¢ °ìÅÙ¤½¤Î¤è¤¦¤Ë¤Ê¤ì¤Ð¡¢ÅöÌÌ1ǯ´Ö¤Ï¡¢¥Ë¥»¥µ¥¤¥È¤Ë¤·¤«·Ò¤²¤Ê¤¤¤è¤¦¤Ê¥æ¡¼¥¶¤¬È¯À¸¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
    hpkp-maxage
    max-age¤¬Ã»¤¤¤È¡¢¤½¤ì¤À¤±¹¶·â¤Î¥Á¥ã¥ó¥¹¤ÏÁý¤¨¤ë¤¿¤á¡¢max-age¤Ï¤¢¤ëÄøÅÙŤ¯¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£

    ÍÍ¡¹¤Ê¾ðÊ󥽡¼¥¹¤«¤é¡¢ ¥Ë¥»¥µ¥¤¥È¤òºî¤é¤ì¤Æ¤¤¤¿¤Èµ¤¤Å¤¯¤Þ¤Ç¤Ë¡¢¤½¤ì¤Û¤É»þ´Ö¤Ï¤«¤«¤é¤Ê¤¤¤È»×¤¤¤Þ¤¹¡£ ¿ôÆü¤«¤é1½µ´Ö¤â¤¢¤ì¤ÐÌäÂê¤Ëµ¤¤Å¤¯¤È»×¤¤¤Þ¤¹¡£ Ⱦ·î¤ä1¥ö·î¤âµ¤¤Å¤«¤Ê¤¤¤Þ¤Þ¤¤¤ë»ö¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£ ¡Ö¥Ë¥»HTTPS¥µ¥¤¥ÈÌäÂê¤Ëµ¤¤Å¤¯¤Þ¤Ç¤ËÃÙ¤¯¤È¤â¤É¤ì¤¯¤é¤¤¤«¤«¤ë¤«¡×¤Ë¤è¤Ã¤Æ max-age¤ÎºÇ¾®Ãͤò·è¤á¤ë¤Î¤¬¤è¤¤¤È»×¤¤¤Þ¤¹¡£

    ½¾¤Ã¤Æ¡¢¹¶·â¤È²ÄÍÑÀ­¤Î¥ê¥¹¥¯¤Î¥È¥ì¡¼¥É¥ª¥Õ¤Ç¡¢»ä¤Ïmax-age¤ò15Æü¤«30ÆüÄøÅÙ¤Ë ÀßÄꤹ¤ë¤Î¤¬Îɤ¤¤è¤¦¤Ë»×¤Ã¤Æ¤¤¤Þ¤¹¡£

    5. HPKP¤Ï¤É¤ÎÄøÅٻȤï¤ì¤Æ¤¤¤ë¤Î¤«

    2016ǯ3·î¤ÎNetcraft¼Ò¤ÎSSLÍøÍÑÄ´ºº¤Ë¤è¤ì¤Ð¡¢À¤³¦¤Ç¤ï¤º¤«0.09%¤Î4100¥µ¥¤¥È°Ê²¼¤°¤é¤¤¤·¤«¡¢HPKP¤òÀßÄꤷ¤Æ¤ª¤é¤º¡¢ÀßÄê¤Î¸í¤ê¤â¿¤¤¤½¤¦¤Ç¡¢Àµ¤·¤¯ÀßÄê¤Ç¤­¤Æ¤¤¤ë¤Î¤Ï¡¢¤½¤Î¤¦¤Á3000¥µ¥¤¥ÈÄøÅ٤ʤΤÀ¤½¤¦¤Ç¤¹¡£

    ¤Þ¤¿¡¢CSP(Content Security Policy)¤äHPKP¤Ë¾Ü¤·¤¯¡¢HPKP¤Î¸¡¾Ú¤ä¥ì¥Ý¡¼¥ÈÀ襵¥¤¥È¤ò±¿±Ä¤·¤Æ¤¤¤ëScott Helme»á¤Î¥Ö¥í¥°¤Ë¤è¤ì¤Ð¡¢Alexa¾å°Ì100Ëü¤Î¥µ¥¤¥È¤Î¤¦¤ÁHPKP¤òÀßÄꤷ¤Æ¤¤¤ë¤Î¤Ï¡¢¤ï¤º¤«375¥µ¥¤¥È¤Ç¤¢¤Ã¤¿¤È¤¤¤¦Êó¹ð¤â¤¢¤ê¤Þ¤¹¡£

    Scott Helme»á¤Ï¡¢Ä´ºº¤ÎºÝ¤Î¥Ç¡¼¥¿¤â¸ø³«¤·¤Æ¤ª¤ê¡¢2016ǯ8·î»þÅÀ¤Ç¤ÎHPKPÂбþ¥µ¥¤¥È¤Î¥É¥á¥¤¥ó̾¥ê¥¹¥È448·ï¤¬¤¢¤Ã¤¿¤Î¤Ç¡¢¤½¤ì¤ò¥Ù¡¼¥¹¤Ë2017ǯ2·î¸½ºß¤Ç¤âHPKP¥Ø¥Ã¥À¤òÊÖ¤¹¥µ¥¤¥È283·ï¤ËÂФ·¤Æ¾¯¤·Ä´ºº¤·¤Æ¤ß¤Þ¤·¤¿¡£

    hpkp-graph1
    ¤Þ¤º¡¢HPKP¥Ø¥Ã¥À¤È¤·¤ÆÀµ¤·¤¤¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¡¢¤Þ¤¿¡¢»ÅÍ;åPIN¤Î¥Ï¥Ã¥·¥åÃͤÏ2¤Ä°Ê¾åɬÍפǤ¹¤¬¡¢2¤Ä°Ê¾å¤¢¤ë¤«¤È¤¤¤¦´ÑÅÀ¤Ç¡¢¥Ø¥Ã¥À¤¬¤É¤ÎÄøÅÙÀµ¤·¤¤¤«¤òÄ´¤Ù¤Þ¤·¤¿¡£16%¤ÏÀßÄ꤬Àµ¤·¤¯¤Ê¤¤¤³¤È¤¬¤ï¤«¤ê¤Þ¤·¤¿¡£´Ö°ã¤Ã¤Æ¤¤¤ë¤â¤Î¤ÎÃæ¤Ë¤Ï¡¢pin-sha256°À­¤¬Ìµ¤¤¡¢pin-sha256¤ÎÃͤ¬ÉÔŬÀÚ¡¢pin-sha256°À­¤¬°ì¤Ä¤·¤«¤Ê¤¤¡¢¤Ê¤ÉÍÍ¡¹¤Ç¤¹¡£Î㤨¤Ð¤³¤ó¤Ê¤â¤Î¤¬¤¢¤ê¤Þ¤·¤¿¡£
    • ...
    • pin-sha256="base64+info1="; max-age=3
    hpkp-graph2
    ¼¡¤Ë¡¢HPKP¥Ø¥Ã¥À¤ÎPIN¤Î¥Ï¥Ã¥·¥åÃͤθĿô¤Ç¤¹¡£°ìÈ̤ˤÏPIN¤Î¥Ï¥Ã¥·¥åÃͤÏ2¤Ä¤Ç½½Ê¬¤Ç¡¢2¤Ä¤È¤Ê¤Ã¤Æ¤¤¤ë¥µ¥¤¥È¤¬Â¿¤¯Àê¤á¤Þ¤¹¤¬¡¢1¸Ä¤·¤«¤Ê¤¤¸í¤Ã¤¿¥µ¥¤¥È¤ä¡¢3¤Ä°Ê¾å¤òÀßÄꤷ¤Æ¤¤¤ë¥µ¥¤¥È¤âÁêÅö¿ô¤¢¤ê¤Þ¤¹¡£15¸ÄÀßÄꤷ¤Æ¤¤¤ë¤È¤¤¤¦ÌԼԤ⤢¤ê¤Þ¤·¤¿¡£
    hpkp-graph3
    HPKP¤ÇÍ­¸ú¤Ê¸ø³«¸°¥Ï¥Ã¥·¥å¤ÎÊݸ´ü´Ö¤òÄê¤á¤Æ¤¤¤ë¤Î¤¬¡¢max-age¤ÎÃͤǤ¹¡£RFC¤Ç¤Ï¡¢60Æü¤ò¿ä¾©¤·¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¤¬¡¢¼ÂºÝ¤Ë¤Ï30Æü¤òÀßÄꤹ¤ë¥µ¥¤¥È¤¬Â¿¤¤¤È¤ï¤«¤ê¤Þ¤¹¡£¤Þ¤¿¡¢¥Æ¥¹¥ÈÃæ¤Ê¤Î¤«1Æü°Ê²¼¤Ë¤·¤Æ¤¤¤ë¥µ¥¤¥È¤âÁêÅö¿ô¤¢¤ê¤Þ¤¹¡£Ã»¤¤¤È¥µ¥¤¥È¤ò¾è¤Ã¼è¤é¤ì¤ë²ÄǽÀ­¤¬¹â¤Þ¤ê¤Þ¤¹¤·¡¢Ä¹¤¹¤®¤ë¤ÈÀßÄê¤Ë¼ºÇÔ¤·¤¿¾ì¹ç¤½¤Î´ü´ÖÀܳÉÔǽ¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£1ǯ¤Ê¤É¤ÈÀßÄꤹ¤ë¤È¡¢ÀßÄ꼺ÇÔ¤·¤Æ¤¤¤¿¤é1ǯ´ÖÀܳ¤Ç¤­¤Ê¤¤¥æ¡¼¥¶¡¼¤¬½Ð¤Æ¥¯¥ì¡¼¥à³Î¼Â¤Ê¤Î¤Ë¶²¤í¤·¤¤¤Ç¤¹¤Í¡£
    hpkp-graph4
    report-uri¤òÀßÄꤹ¤ë¤È¡¢Âбþ¥Ö¥é¥¦¥¶¤Ê¤é¤Ð¡¢HPKP¤Î¥¨¥é¡¼¤ÎºÝ¤Ë»ØÄꤷ¤¿URL¤Ë¥ì¥Ý¡¼¥È¤òÁ÷¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Jxck¤µ¤ó¤Î¥µ¥¤¥È¤Ç¤ÏÀßÄꤵ¤ì¤Æ¤¤¤ë¤½¤¦¤Ç¤¹¤¬¡¢¤Þ¤À¤Þ¤ÀÀßÄꤷ¤Æ¤¤¤ë¥µ¥¤¥È¤Ï¾¯¤Ê¤½¤¦¤Ç¤¹¡£
    hpkp-graph5
    HPKP¥Ø¥Ã¥À¤ÎÃͤˤϡ¢includeSubDomain¤È¤¤¤¦¥×¥í¥Ñ¥Æ¥£¤ò¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤ò¤Ä¤±¤ë¤Èexample.com¤ËHPKP¤òÀßÄꤷ¤Æ¤ª¤±¤Ð¡¢sub1.example.com¥É¥á¥¤¥ó¤ËÂФ·¤Æ¤âŬÍѤµ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
    hpkp-graph6
    HPKP¥Ø¥Ã¥À¤È¤·¤Æ¡¢Ä̾ï¤Ï"Public-Key-Pins"¤ò»È¤¤¤Þ¤¹¤¬¡¢"Public-Key-Pins-Report-Only"¤ò»È¤¨¤Ð¡¢¥Ö¥é¥¦¥¶¤ÏHPKP¤ò¸¡¾Ú¤»¤º¤Ë¡¢¥¨¥é¡¼¤È¤Ê¤Ã¤Æ¤âHTTPSÀܳ¤Ï³¤±¤é¤ì¤ë¥Æ¥¹¥ÈÍѤε¡Ç½¤¬¤¢¤ê¤Þ¤¹¡£Ìó10%¤Î¥µ¥¤¥È¤¬¤³¤Î¥Æ¥¹¥ÈÍѤÎÀßÄê¤ò»È¤Ã¤Æ¤¤¤ë¤È¤ï¤«¤ê¤Þ¤¹¡£
    hpkp-graph7
    Scott Helme»á¤Î2017ǯ»þÅÀ¤ÇÀܳ²Äǽ¤ÊHPKPÂбþ¥µ¥¤¥È283·ï¤Î¤¦¤ÁgTLD(com¡¢orgÅù)¡¢ccTLD(de¡¢ru¡¢jpÅù)Ê̤˷ï¿ô¤òÄ´¤Ù¤Æ¤ß¤ë¤È¡¢com¤¬Â¿¤¤¤Î¤ÏÅöÁ³¤Ç¤È¤·¤Æ¡¢¼ÂºÝ¤Î³ÆTLD¤ÎÅÐÏ¿·ï¿ô¤ËÈæ³Ó¤·¤Æ¸²Ãø¤Ë¿¤¤TLD¤¬¸«¤é¤ì¤Þ¤·¤¿¡£com¤Ï1.3²¯¡¢net¤Ède¤Ï1600Ëü¡¢ru¤Ï540Ëü¥É¥á¥¤¥ó¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¥É¥á¥¤¥óÅÐÏ¿¿ô¤ËÈæ¤Ù¤Æ¡¢ÈæÎ¨Åª¤Ëru¡¢org¡¢de¤ÏÆÍ½Ð¤·¤ÆÂ¿¤¯¤Þ¤¿¡¢¥°¥é¥Õ¾å¤Ï¤½¤Î¾¤È¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¥Þ¥¤¥Ê¡¼¤ÊccTLD¤Î¹ñ¤Ë¤Ä¤¤¤Æ¤â¡¢Èæ³ÓŪHPKPÀßÄ꤬¿¤¤¹ñ¤¬¤¢¤ê¤Þ¤¹¡£¤Þ¤¿¡¢edu¤¬°Û¾ï¤Ë¾¯¤Ê¤¤¤Î¤âµ¤¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤½¤Î¾¤Ë¤Ï¡¢ar/br/cl/il/pt/nl/tn/sk¤Ê¤É¡¢¥Þ¥¤¥Ê¡¼¤Ê¤â¤Î¤¬ 50¶á¤¯¤¢¤ê¤Þ¤·¤¿¡£

    6. º£¤ÎHPKP¤Î²¿¤¬¤¤¤±¤Ê¤«¤Ã¤¿¤Î¤«

    hpkp¤ÎȯÁÛ¼«ÂΤϡ¢ÉÔÀµÈ¯¹Ô¤µ¤ì¤¿¾ÚÌÀ½ñ¤ò»È¤Ã¤¿µ¶¥µ¥¤¥È¤òËɤ°¤¿¤á¤Î»ÅÁȤߤȤ·¤ÆÍ­ÍѤǤ¢¤ê¡¢Chrome¤äFirefox¤Î¥Ö¥é¥¦¥¶ÁȤ߹þ¤ß¤Î¥×¥ê¥í¡¼¥È¥Ô¥ó¤Ï ¤¦¤Þ¤¯µ¡Ç½¤·¤Æ¤¤¤ë¤è¤¦¤Ë»×¤¨¤Þ¤¹¡£ ¤½¤Î°ìÊý¤ÇHPKP¥Ø¥Ã¥À¤ò»È¤Ã¤¿Êý¼°¤Ï¡¢ ¤«¤Ê¤ê±¿ÍѤ¬Ê£»¨¤ÇÆñ¤·¤¯¡¢¼ºÇÔ¤¹¤ë¤È 2¥ö·î¤È¤¤¤Ã¤¿¡¢Ä¹´ü´Ö¡¢°ìÉô¤Î¥æ¡¼¥¶¤ÏÀܳ¤Ç¤­¤Ê¤¤¤È¤¤¤¦¡¢¾ã³²¤¬È¯À¸¤¹¤ë¥ê¥¹¥¯¤â¹â¤¤¤³¤È¤¬¤ï¤«¤ê¤Þ¤·¤¿¡£

    ¸Ä¿Í¤äÃæ¾®¤Î¥µ¥¤¥È¤ÇÉÔÀµ¾ÚÌÀ½ñ¤ò»È¤Ã¤Æ¤Þ¤Çµ¶¥µ¥¤¥È¤òºî¤ë¥á¥ê¥Ã¥È¤Ï¸«Åö¤¿¤é¤º¡¢¹¶·â¤ò¼õ¤±¤ë²ÄǽÀ­¤â¶Ë¤á¤ÆÄ㤤¤¿¤á¡¢HPKP¤ò»È¤Ã¤Æ¥µ¡¼¥Ó¥¹¾ã³²¤Î¥ê¥¹¥¯¤ò¼è¤Ã¤Æ¤Þ¤ÇHPKP¤òƳÆþ¤¹¤ëɬÍפϤʤ¤¤È»×¤¤¤Þ¤¹¡£

    ¤Ç¤Ï¡¢°ìÈÌ¥µ¥¤¥È¸þ¤±¤ËHPKP¤ÎÉáµÚ¤¬¿Ê¤à¤¿¤á¤Ë¤Ï¡¢±¿ÍѤΤ·¤ä¤¹¤¤¥µ¡¼¥Ó¥¹¾ã³²¤¬µ¯¤­¤Ë¤¯¤¤»ÅÍͤÎÊѹ¹¤¬É¬ÍפÀ¤È»×¤¤¤Þ¤¹¤¬¡¢¤É¤¦¤¹¤ì¤Ð¤³¤ì¤¬²Äǽ¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¤«¡©

    max-age¤ò2¥ö·î¤È²¾Äꤷ¤Æ¡¢ HPKP¥Ø¥Ã¥À¤Ç±¿ÍѾå¤Î²ÝÂê¤Ê¤Î¤Ï¡¢¾ÚÌÀ½ñ¹¹¿·¤Î2¥ö·îÁ°¤Ë¡¢¥Ô¥ó¤¬Êѹ¹¤Ë¤Ê¤ë¤Ê¤éÀßÄê¤ò»öÁ°ÀßÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢´Ö°ã¤¨¤Ëµ¤¤Å¤¤¤Æ¥Ø¥Ã¥ÀÀßÄê¤òľ¤·¤Æ¤â¡¢2¥ö·î¤ÏÄÌ¿®¾ã³²¤¬È¯À¸¤¹¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£

    ¤½¤³¤Ç¡¢´Ö°ã¤¨¤Ëµ¤¤Å¤¤¤¿»þ¤Ë¤Ï¡¢¤¹¤°¤ËÀßÄêÊѹ¹¤¬È¿±Ç¤Ç¤­¤¿¤ê¡¢¥µ¡¼¥Ð¡¼Â¦¤Ç»ÃÄêŪ¤Ë¥Ö¥é¥¦¥¶¤ÎHPKP¸¡¾Ú¤ò̵¸ú²½¤Ç¤­¤ë¥­¥ë¥¹¥¤¥Ã¥Á¤¬¤¢¤ë¤È¤è¤¤¤È»×¤¦¤Î¤Ç¤¹¡£¿¼¤¯¹Í»¡¤·¤¿Ìõ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢Î㤨¤Ð¡¢HPKP¹¹¿·Æü¤ò¥Ø¥Ã¥À¤Ëµ­ºÜ¤¹¤ë¤Ê¤É¤·¤Æ¡¢ÀßÄê¤Ë¹¹¿·¤¬¤¢¤ì¤Ðmax-age¤Ë´Ø¤ï¤é¤º¹¹¿·¤·¡¢Ìµ¸ú²½¤¹¤ë¤Ê¤é¡¢Ìµ¸ú²½¤¹¤ë¤È¤¤¤Ã¤¿µ¡Ç½¤òÄ󶡤¹¤ì¤Ð¡¢±¿ÍѤÏmax-age¤äÀßÄê¥ß¥¹¤Î¼öÇû¤«¤é²òÊü¤µ¤ì¤ë¤è¤¦¤Ë»×¤¤¤Þ¤¹¡£

    ¾¤Ë¤â¤³¤ÎÌäÂê¤Î²ò·èÊýË¡¤Ï¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢²¿¤é¤«¤Î¼êÅö¤Æ¤ò¤·¤Ê¤¤¸Â¤ê¡¢HPKP¤ÏÉáµÚ¤·¤½¤¦¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó¡£

    7. ¤ª¤ï¤ê¤Ë

    °Ê¾å¡¢HPKP¤Ë¤Ä¤¤¤Æ¡¢¤É¤³¤Ë¥Ô¥ó¤òÂǤĤ«¡¢max-age¤Ï¤É¤¦¤¹¤ë¤«¤Ê¤É±¿ÍÑÌ̤«¤é¡¢ ¤¤¤í¤¤¤í¹Í»¡¤äÀ°Íý¤ò¤·¤Æ¤ß¤Þ¤·¤¿¡£ ¸½»þÅÀ¤Ç¤Ï¡¢HPKP¤òƳÆþ¤¹¤ë¤Î¤Ï»þ´ü¾°Áá¤Ç¡¢ ±¿ÍѤËÉéô¤ò¤«¤±¡¢¥µ¡¼¥Ó¥¹Ää»ß¤Î¥ê¥¹¥¯¤â¹â¤¤¤È¤¤¤¦¤³¤È¤â ¤´Íý²ò¤¤¤¿¤À¤±¤¿¤Î¤Ç¤Ï¤È»×¤¤¤Þ¤¹¡£

    ¤³¤ì¤Ç¡¢¼«Ê¬¤¬HPKP¤Ë¤Ä¤¤¤ÆÁ°¤«¤é½ñ¤­¤¿¤¤¤È»×¤Ã¤Æ¤¤¤¿¤³¤È¤ò¡¢ Íî¤ÁÃ夤¤ÆÀ°Íý¤Ç¤­¡¢3ǯ±Û¤·¤°¤é¤¤¤ËÅǤ­½Ð¤»¤Þ¤·¤¿¡£ ¤ï¤«¤ê¤Ë¤¯¤«¤Ã¤¿¤ê¡¢Íý²ò¤¬´Ö°ã¤Ã¤Æ¤¤¤¿¤é¤¹¤ß¤Þ¤»¤ó¡£ ¸Ä¿ÍŪ¤Ë¤Ï¡¢HPKP¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤³¤ì¤Ç¤ï¤À¤«¤Þ¤ê¤È¤«¥â¥ä¥â¥ä´¶¤È¤¤¤¦¤Ï³µ¤Í ʧ¿¡¤µ¤ì¤¿¤è¤¦¤Ë»×¤¤¤Þ¤¹¡£ ¤Þ¤¡¡¢¡Ö¥Ö¥í¥°¤Ê¤ó¤Æ¤½¤ó¤Ê¥â¥Î¤è¤Í¡×¤Ã¤Æ¤³¤È¤Ç¡¢¡¢¡¢£÷

    8. (»²¹Í) HPKP´ØÏ¢¤ÎÊÙ¶¯¤Ë¤Ê¤ë¥ê¥ó¥¯

    Netcraft: Secure websites shun HTTP Public Key Pinning
    HPKP¤¬Î®¹Ô¤Ã¤Æ¤¤¤Ê¤¤¤³¤È¤ÎÅý·×¡£¤Ê¤¼Î®¹Ô¤é¤Ê¤¤¤«¤Î²òÀâ¡£Îɵ­»ö¡£
    Netcraft: HTTP Public Key Pinning: You're doing it wrong!
    Netcraft¼Ò¤Î¡¢À¤¤ÎÃæ¤ÎHPKPÂбþ¥µ¥¤¥È¤ÎÀßÄê¸í¤ê¤Ë´Ø¤¹¤ë²òÀâ¡£Îɵ­»ö¡£
    Scott Helme¤µ¤ó¤ÎHPKP¥Ö¥í¥°µ­»ö
    CSP¤äHSTS¤äHPKP¤Ê¤ÉSSL´ØÏ¢µ»½Ñ¤ÎÀìÌç²È¤Ç¡¢HPKP¤Ê¤É¤Î¥ì¥Ý¡¼¥ÈÀ襵¥¤¥È report-uri.io ¤ò ±¿±Ä¤·¤Æ¤¤¤ëScott Helme¤µ¤ó¤Î¥Ö¥í¥°¡£HPKPÂбþ¥µ¥¤¥È¤Î¥É¥á¥¤¥ó¥ê¥¹¥È¤Ê¤É¤Î¥Ç¡¼¥¿¤â¤¢¤ê¤Þ¤¹¡£
    Qualys Blog: Is HTTP Public Key Pinning Dead?
    Ivan Ristic»á¤Î¡¢¡ÖHPKP¤¬½ª¤ï¤Ã¤Æ¤¤¤ë¤«¡©¡×¤Ë´Ø¤¹¤ëµÄÏÀ¡£
    Raymii.org: HTTP Public Key Pinning Extension HPKP for Apache, NGINX and Lighttpd
    ²òÀâ¤Ï½¼¼Â¡£³Æ¥µ¡¼¥Ð¡¼Ëè¤ÎHPKP¥Ø¥Ã¥À¤ÎÀßÄêÎã¡£
    MDN: Public Key Pinning
    Mozilla¤Ë¤è¤ëHPKP²òÀâ¡£Chrome¤äFirefox¤Ç¤ÎHPKPÂбþ¥Ð¡¼¥¸¥ç¥ó¤Îµ­½Ò¡£¥µ¡¼¥Ð¡¼ÀßÄêÎã ¥ì¥Ý¡¼¥Èµ¡Ç½¤Ï¿·¤·¤¤Chrome¤·¤«»È¤¨¤Ê¤¤»ö¤Î¸ÀµÚ¤Ê¤É¡¢»²¹Í¤Ë¤Ê¤ë¡£
    Public Key Pinning¤Ë¤Ä¤¤¤Æ - Chris Palmer (¸¶Ê¸)
    Chris Palmer¤Ë¤è¤ëHPKP²òÀâ¡£¸í²ò¤â¤¢¤ë¤¬¡¢½é¤á¤Æ¾ÚÌÀ½ñ¥Á¥§¡¼¥ó¤Î¤É¤³¤Ë¥Ô¥ó¤òÀßÄꤹ¤ë¤«¡¢¤½¤Î¥±¡¼¥¹Ê¬¤±¤Ë¤Ä¤¤¤Æ¹Í»¡¤·¤¿µ­»ö¡£
    ¤Ü¤Á¤Ü¤ÁÆüµ­¡§ÉÔÀµ¤ÊSSL¾ÚÌÀ½ñ¤ò¸«ÇˤëPublic Key Pinning¤ò»î¤¹
    jovi¤µ¤ó¤Ë¤è¤ëHPKP(¥É¥é¥Õ¥È)¤Ë´Ø¤¹¤ë¾ÜºÙ¤«¤Ä¹­ÈϤʲòÀâ¤Ç¤¹¡£
    Jxck¤µ¤ó¤Î¥Ö¥í¥°¡§Public Key Pinning for HTTP(HPKP) Âбþ¤È report-uri.io ¤Ç¤Î¥ì¥Ý¡¼¥È¼ý½¸
    Jxck¤µ¤ó¤Î²òÀâ¡£ÆÃ¤Ëreport-uri¤Îµ¡Ç½¤ò»î¤·¤Æ¤ß¤¿Êó¹ð¤¬µ®½Å¡£
    ¸ø³«¸°¥Ô¥ó¥Ë¥ó¥°¤Ë¤è¤ë¥æ¡¼¥¶ÄÉÀ× HPKP Supercookies
    º£²ó¤Îµ­»ö¤È¤Ï¤¢¤Þ¤ê´Ø·¸¤Ê¤¤¤Ç¤¹¤¬¡¢ ¤Ë¤·¤à¤Í¤¢¤µ¤ó¤ÎHPKP¤ò»È¤Ã¤¿¥¯¥Ã¥­¡¼¤ò»È¤ï¤Ê¤¤¥æ¡¼¥¶¡¼ÆÃÄê¤ÎÌÌÇò¤¤»î¤ß¤Ë´Ø¤¹¤ë¥¹¥é¥¤¥É»ñÎÁ¡£
    OWASP: Certificate and Public Key Pinning
    OWASP¤Î²òÀâµ­»ö¡£ÌµÂ̤ʾðÊó¤â¿¤¤¡£

    9. Äɵ­

    9.1. Äɵ­(2017.02.26) HPKP¤Î¥Ö¥é¥¦¥¶¥µ¥Ý¡¼¥È¾õ¶·

    caniuse.com¥µ¥¤¥È¤Ç¤ÏÍÍ¡¹¤Ê¥Ö¥é¥¦¥¶¤Îµ¡Ç½¤Î¥µ¥Ý¡¼¥È¾õ¶·¤ò¾ðÊóÄ󶡤·¤Æ¤¤¤Þ¤¹¤¬¡¢ 2017ǯ2·î»þÅÀ¤Ç¤Î HPKP¤Î¥Ö¥é¥¦¥¶¥µ¥Ý¡¼¥È¾õ¶·¤Ë¤Ä¤¤¤Æ¤â µ­ºÜ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¼¨¤·¤Æ¤ª¤­¤Þ¤¹¡£Firefox¡¢Chrome¡¢Opera¡¢AndroidÈÇChrome¤Ç¤Ï ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¤½¤ì°Ê³°¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
    hpkp-caniuse

    9.2. Äɵ­(2017.02.26) smashingmagazine.com¤ÇȯÀ¸¤·¤¿HPKP¾ã³²

    ¤½¤Î¸å¡¢HPKP¤Ë¤Ä¤¤¤Æ·Ñ³¤·¤ÆÄ´¤Ùʪ¤ò¤·¤Æ¤¤¤¿¤é¡¢ smashingmagazine.com¤Î¥Ö¥í¥°¤Ç¡¢ HPKP¤Ë¤è¤êȯÀ¸¤·¤¿Àܳ¾ã³²¤Ë¤Ä¤¤¤Æ¤Î¹Í»¡¤¬½ñ¤«¤ì¤Æ¤¤¤Þ¤·¤¿¡£ ¤³¤³¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë½ñ¤«¤ì¤Æ¤¤¤Þ¤·¤¿¡£

    • HPKP¤ÏÃæ´Ö¼Ô¹¶·â¤ËÂФ·¤ÆÍ­¸ú¤Êµ¡Ç½¤À¤¬
    • HPKP¤ÎÀßÄê¥ß¥¹¤Ç2016ǯ10·î21Æü¤«¤é25Æü¤Ë¤«¤±HTTPSÀܳ¾ã³²¤¬È¯À¸
    • ¾ÚÌÀ½ñ´ü¸ÂÀÚ¤ì¤ÇHPKP¥Ø¥Ã¥À¤ò¹¹¿·¤·¤¿¤é¥¨¥é¡¼¤Ë¤Ê¤Ã¤¿
    • ¤¹¤Ç¤Ë¾ÚÌÀ½ñ¤Ï´ü¸ÂÀÚ¤ì¤Ç¥í¡¼¥ë¥Ð¥Ã¥¯¤Ï¤Ç¤­¤Ê¤¤
    ¶µ·±¤È¤·¤Æ¡¢¥Ö¥í¥°¤Ç¤Ï¡¢
    • ¶âÍ»¥µ¥¤¥È¤Ê¤É¤Ê¤é¤Ð¡¢HPKP¤ò»È¤¦²ÁÃͤϤ¢¤ë¤¬¡¢Ã±¤Ê¤ë¾ðÊóÄó¶¡¥µ¥¤¥È ¤Ê¤é¡¢¤½¤ÎɬÍפâ¤Ê¤¤¡£HPKPÀßÄê¥ß¥¹¤Ë¤è¤ë¥µ¡¼¥Ó¥¹Ää»ß¤Ï¡¢Ãæ´Ö¼Ô¹¶·â¤è¤ê¤âÂ礭¤Ê¶¼°Ò¤À
    • max-age¤òû¤¯¤¹¤ë¤³¤È¤Ë¤è¤êÌäÂê¤ò´ËϤǤ­¤ë
    »ä¤â¥µ¡¼¥Ó¥¹Äó¶¡ÉÔǽ¤ÎÊý¤¬¡¢Â礭¤ÊÌäÂê¤À¤È¤¤¤¦¤Î¤ÏƱ°Õ¤Ç¤¹¤¬¡¢ Á°¤Ë¤â½Ò¤Ù¤¿Ä̤ꡢmax-age¤òû¤¹¤®¤ëÃͤËÀßÄꤹ¤ë¤Î¤Ï·üÌ¿¤Ç¤Ï¤Ê¤¯¡¢Ãí°Õ¤¬É¬ÍפǤ¹¡£ ¤³¤Î¥µ¥¤¥È¤Ç¤Ï¡¢max-age¤ò1ǯ¤È¤·¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¤¬¡¢³Î¤«¤Ë¤³¤ì¤ÏŤ¹¤®¤Þ¤¹¡£ ¿·¤·¤¯ÀßÄꤵ¤ì¤¿HPKP¥Ø¥Ã¥À¤ò¸«¤Æ¤ß¤Þ¤·¤¿¤¬¡¢¸½¹Ô¤ÎSSL¥µ¡¼¥Ð¡¼¾ÚÌÀ½ñ¤Î¾¤Ë 3¤Ä¥Ô¥ó¤¬ÀßÄꤵ¤ì¤Æ¤ª¤ê¡¢max-age¤Ï1Æü¤ËÀßÄꤵ¤ì¤Æ¤ª¤ê¡¢¤¤¤í¤¤¤í¤ÈÀßÄê¤Ë¤ÏÌäÂ꤬¤¢¤ê¤½¤¦¤Ç¤¹¡£

    X.509¾ÚÌÀ½ñ¤Î¼±ÊÌ̾¤Ê¤É¤Ç»È¤ï¤ì¤ëMulti-valued RDN¤Èjsrsasign¤Î¥µ¥Ý¡¼¥È¤Ë¤Ä¤¤¤Æ

    µ×¡¹¤Ë¤Á¤ç¤Ã¤ÈPKI´ØÏ¢¥Í¥¿¤Ç¤¹¡£¤¤¤ï¤æ¤ë¥Ç¥¸¥¿¥ë¾ÚÌÀ½ñ(X.509¾ÚÌÀ½ñ)¤Ë¤Ï¡¢¼çÂμÔ̾(Subject Name)¤äȯ¹Ô¼Ô̾(Issuer Name)¤Ë¼±ÊÌ̾(DN: Distinguished Name)¤ò»È¤¤¤Þ¤¹¡£Î㤨¤Ð¡¢

    CN=yourname@example.com,O=example,C=JP
    ¤Î¤è¤¦¤Ê¤â¤Î¤Ç¤¹¡£¥«¥ó¥Þ¤Ç¶èÀڤä¿°ì¤Ä°ì¤Ä¤òÁêÂм±ÊÌ̾(RDN: Relative Distinguished Name)¤È¸Æ¤ó¤Ç¤¤¤Þ¤¹¡£
    O=example
    °ìÈÌŪ¤Ë¤ÏÁêÂм±ÊÌ̾(RDN)¤Ï¡¢¡Ö°ì¤Ä¤Î¡×°À­¥¿¥¤¥×¤È°À­ÃͤΥڥ¢(AttributeTypeAndValue) ¤è¤ê¹½À®¤µ¤ì¤Þ¤¹¡£
    °À­¥¿¥¤¥×=°À­ÃÍ
    O=example
    ¤¿¤À¡¢¡Ö°ìÈÌŪ¤Ë¤Ï¡×¤È½ñ¤¤¤¿Ä̤ꡢRDN¤Ë¤Ä¤¤¤ÆÊ£¿ô¤ÎAttributeTypeAndValue¤ò»ý¤Ä¤³¤È¤â²Äǽ¤Ç¤¹¡£¤³¤ì¤òMulti-valued RDN¤È¸Æ¤ó¤Ç¤ª¤ê¡¢¥×¥é¥¹"+"µ­¹æ¤Ç¤Ä¤Ê¤¤¤Ç°Ê²¼¤Î¤è¤¦¤Ëɽ¸½¤·¤Þ¤¹¡£
    °À­¥¿¥¤¥×1=°À­ÃÍ1+°À­¥¿¥¤¥×2=°À­ÃÍ2...
    CN=User1+serialNumber=123
    Google¤È¤«¤Ç¡ÖMulti-valued RDN¡×¤Ç¸¡º÷¤¹¤ë¤È¤ï¤«¤ë¤È»×¤¦¤ó¤Ç¤¹¤¬¡¢±Ñ¸ì¤Ç¤Ï·ë¹½¤¢¤ë¤Î¤Ë¡¢ÆüËܸì¤Ç¿¨¤ì¤Æ¤¤¤ëµ­»ö¤Ã¤Æ¡¢¼«Ê¬¤Î¥Ö¥í¥°°Ê³°¤ß¤Ä¤«¤é¤Ê¤¤¤ß¤¿¤¤¤Ê¤ó¤Ç¤¹¤è¤Í¡£ º£Æü¤Ï¡¢ÀÛºî¤Î°Å¹æ¥é¥¤¥Ö¥é¥ê jsrsasign ¤ä OpenSSL ¤ò»È¤¤¤Ê¤¬¤é¡¢¾ÚÌÀ½ñ¼±ÊÌ̾¤ÎMulti-valued RDN¤ä¡¢¼±ÊÌ̾¤Ë¤Ä¤¤¤Æ·¡¤ê²¼¤²¤Æ¤ß¤¿¤¤¤Þ¤¹¡£

    ¥¨¥ó¥È¥ê¤È¼±ÊÌ̾

    LDAP¤ä¡¢¤½¤Î¸µ¤È¤Ê¤Ã¤Æ¤¤¤ëX.500¥Ç¥£¥ì¥¯¥È¥ê¥µ¡¼¥Ó¥¹¤Ç¤Ï¡Ö¥¨¥ó¥È¥ê¡×¤Î¥Ä¥ê¡¼¹½Â¤¤Ë¤è¤ê¾ðÊó¤ò´ÉÍý¤·¡¢Î㤨¤Ð²ñ¼Ò¡¢ÉôÌç¡¢¼Ò°÷¤Ï°Ê²¼¤Î¤è¤¦¤Ë´ÉÍý¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
    ¿Þ1
    LDAP¤Ç¤Ï¡¢¤¢¤ë¥¨¥ó¥È¥ê¤òÆÃÄꤹ¤ë¤¿¤á¤Ë¡Ö¡û¡ß¾¦»ö¡×¤Î¡ÖÁí̳Éô¡×¤Î¡Öº´Æ£Æóϯ¡×¤µ¤ó¤È¤¤¤¦ÆÃÄê¤Î»ÅÊý¤ò¤·¤Þ¤¹¡£¥¨¥ó¥È¥ê¤Î̾Á°¡¢¡ÖÁí̳Éô¡×¤ä¡Öº´Æ£Æóϯ¡×¤È¤¤¤¦Ãͤϡ¢Â°À­¥¿¥¤¥×¤È¤¤¤¦·¿¤ò¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¡¢ÁÈ¿¥Ì¾(O: Organization Name)¡¢Éô½ð̾(OU: Organizational Unit Name)¡¢°ìÈÌ̾(CN: Common Name)¤Ê¤É¤Î¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤¹¡£
    ¿Þ2
    Î㤨¤Ð¡¢±Ä¶È¤ÎÎëÌÚ¤µ¤ó¤òÆÃÄꤹ¤ë¤È¤­¤Ë°ìÈÖ¾å¤Þ¤Ç¤Î¥¨¥ó¥È¥ê¤òé¤Ã¤Æ¡¢°Ê²¼¤Î¤è¤¦¤Ëɽ¸½¤·¤Þ¤¹¡£¤³¤ì¤ò¡Ö¼±ÊÌ̾(DN: Distinguished Name)¡×¤È¸Æ¤Ó¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¾¤ÎÉô½ð¤ÎSuzuki¤µ¤ó¤È¤â¶èÊ̤Ǥ­¤Þ¤¹¡£

    CN=Suzuki,OU=Sales,O=MaruBatsu
    ¼±ÊÌ̾¤Î¤¦¤Á¡¢¡ÖOU=Sales¡×¤Î¤è¤¦¤Ë¥¨¥ó¥È¥ê¤Î´Ý¤ÎÃæ¤òÁêÂм±ÊÌ̾(RDN: Relative Distinguished Name)¤È¸Æ¤Ó¤Þ¤¹¡£

    ¤Þ¤¿¡¢¤³¤Î¥¨¥ó¥È¥ê¤Î¥Ä¥ê¡¼¹½Â¤¤òDIT(Directory Information Tree)¤È¸Æ¤Ó¤Þ¤¹¡£

    Muti-valued RDN¤È¤Ï¡©¤Ê¤¼É¬Íפ«¡©

    ¾åµ­¤ÇÀâÌÀ¤·¤¿¼±ÊÌ̾(DN)¤Ç¡¢Æ±¤¸±Ä¶ÈÉô¤ËÎëÌÚ²Ö»Ò¤µ¤ó¤¬Æó¿Í¤¤¤¿¤é¤É¤¦¤·¤Þ¤·¤ç¤¦¡£°ìÈÌ̾¤Ë¶èÊ̤¹¤ë¤¿¤á¤Î¿ô»ú¤òÄɲä·¤¿¤ê¡¢ÄɲäÎÃͤȤ·¤Æ¡¢¼Ò°÷ÈÖ¹æ¤ä¥á¡¼¥ë¥¢¥É¥ì¥¹¤Ç¶èÊ̤¹¤ë¤³¤È¤â¤Ç¤­¡¢¥¨¥ó¥È¥ê¤òÄɲ䷤ƤâÎɤ¤¤Î¤Ç¤¹¤¬¡¢¤É¤ì¤â¥¤¥Þ¥¤¥Á¡£
    ¿Þ3
    ¤½¤³¤Ç¡¢°ì¤Ä¤Î¥¨¥ó¥È¥ê¤ËÊ£¿ô¤ÎÃͤò¤Ä¤±¤Æ¼±Ê̤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤³¤ì¤ò Multi-valued RDN¤È¸Æ¤ó¤Ç¤¤¤Þ¤¹¡£
    ¿Þ4
    ƱÀ­Æ±Ì¾¤Î¿Í¤Ï¿ʬ¤¤¤ë¤Ç¤·¤ç¤¦¤«¤é¡¢¼Ò°÷ÈÖ¹æ¤ä¥á¡¼¥ë¥¢¥É¥ì¥¹¤Ê¤É¾¤Î°ì°Õ¤Ê¤â¤Î¤ÈÁȤ߹ç¤ï¤»¤Æ´ÉÍý¤¹¤ë¤Î¤Ï¥¹¥Þ¡¼¥È¤Ê´ÉÍýÊýË¡¤À¤È»×¤¤¤Þ¤¹¤·¡¢°ìÉô¤Î¾¦ÍѤΥǥ£¥ì¥¯¥È¥ê¥µ¡¼¥Ð¡¼À½ÉʤǤϡ¢ÍøÍѼԿô¥Ù¡¼¥¹¤Ç¥é¥¤¥»¥ó¥¹²Ý¶â¤¹¤ë¤¿¤á¤Ë¡¢¥¨¥ó¥È¥ê¿ô¤ò»È¤¦¤â¤Î¤â¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢Multi-valued RDN¤ò»È¤¦¤³¤È¤Ë¤è¤Ã¤Æ¥³¥¹¥Èºï¸º¤òÁÀ¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤¿¤À¡¢Multi-valued RDN¤Ï¡¢¤¹¤Ù¤Æ¤ÎÀ½ÉʤǻȤ¨¤ë¤È¤¤¤¦¤â¤Î¤Ç¤â¤Ê¤¤¤Î¤Ç(Î㤨¤Ð¡¢¤È¤¢¤ëÀ½ÉʤΥ¹¥Þ¡¼¥È¥«¡¼¥É¤È¤«802.1Xǧ¾Ú¤È¤«¤Ç¸å¤Ë¤Ê¤Ã¤ÆÌäÂê¤Ë¤Ê¤Ã¤¿¤³¤È¤¬¤¢¤ê¤Þ¤·¤¿¤è¤Í¡¢¡¢¡¢)ËÜÅö¤Ë»È¤Ã¤Æ¤·¤Þ¤Ã¤Æ¤è¤¤¤«¤É¤¦¤«¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÈÁêÃ̤·¤Æ·è¤á¤ëɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£

    ¼±ÊÌ̾¤Îʸ»úÎóɽ¸½

    ¼±ÊÌ̾¤Îʸ»úÎóɽ¸½¤Ë¤Ï¤¶¤Ã¤¯¤ê2¤Ä¤Îɽ¸½¤¬¤¢¤ê¤Þ¤¹¡£

    CN=Matsuda Kenji,OU=Sales,O=MaruBatsu
    /O=MaruBatsu/OU=Sales/CN=Matsuda Kenji
    DIT¤Î¥Ä¥ê¡¼¹½Â¤¤Î²¼¤«¤é½ç¤Ë¥«¥ó¥Þ","¤Ç¤Ä¤Ê¤¤¤ÀÊýË¡¤È¡¢¾å¤«¤é½ç¤Ë¥¹¥é¥Ã¥·¥å"/"¤Ç¤Ä¤Ê¤°ÊýË¡¤Ç¤¹¡£

    ¥«¥ó¥Þ¤ÇµÕ½ç¤Ë¤Ä¤Ê¤°ÊýË¡¤ÏRFC 2253 Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names¤ä¸å·Ñ¤Î4514¤Çµ¬Äꤵ¤ì¤Æ¤¤¤Þ¤¹¡£LDAP¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥½¥Õ¥È¥¦¥§¥¢¤Ç¤Ï°ìÈÌŪ¤Ë»È¤ï¤ì¤Æ¤¤¤ëÊýË¡¤Ç¤¹¡£

    ¤â¤¦°ìÊý¤Î¡¢ÀèÆ¬¤Ë¥¹¥é¥Ã¥·¥å¤òÉÕ¤±¡¢¥¹¥é¥Ã¥·¥å¤ÇÀµ½ç¤Ç¤Ä¤Ê¤°ÊýË¡¤ÏOpenSSL compat¥Õ¥©¡¼¥Þ¥Ã¥È¤È¸Æ¤Ð¤ì¡¢OpenSSL¤Çɸ½àŪ¤Ë»È¤ï¤ì¤ë¤È¤È¤â¤Ë¡¢OpenSSL·Ï¤Î¥¦¥§¥Ö¥µ¡¼¥Ð¡¼¤Ç¤¢¤ëApache HTTP Server¡¢nginx¡¢lighttpd¤Ê¤É¤ÎÀßÄê¤Ê¤É¤Ç»È¤ï¤ì¤ëÊýË¡¤Ç¤¹¡£

    Multi-valued RDN¤Î¾ì¹ç¤Ë¤Ï¡¢¤É¤Á¤é¤Î·Á¼°¤Ç¤âÃͤò¥×¥é¥¹"+"µ­¹æ¤Ç¤Ä¤Ê¤¤¤Çɽ¸½¤·¤Þ¤¹¡£

    CN=Matsuda Kenji+emailAddress=matsu@mb.com,OU=Sales,O=MaruBatsu
    /O=MaruBatsu/OU=Sales/CN=Matsuda Kenji+emailAddress=matsu@mb.com
    ¥×¥é¥¹¤Ç·Ò¤¬¤ì¤¿ÃͤÎɽ¼¨½ç½ø¤Ë¤Ä¤¤¤Æ¤Ï¡¢ÆÃ¤Ë·è¤Þ¤ê¤Ï̵¤¤¤Èǧ¼±¤·¤Æ¤ª¤ê¡¢°Ê²¼¤ÎMulti-valued RDN¤ÇCN¤ÈemailAddress¤Î¤É¤Á¤é¤òÀè¤Ë¤·¤Æ¤âÎɤ¤¤Ï¤º¤Ç¤¹¡£¤³¤ì¤¬¤É¤Î¤è¤¦¤ËASN.1¤Ç¥¨¥ó¥³¡¼¥É¤µ¤ì¤ë¤«¤Ï¸å¤Ç½Ò¤Ù¤Þ¤¹¡£
    CN=Matsuda Kenji+emailAddress=matsu@mb.com
    emailAddress=matsu@mb.com+CN=Matsuda Kenji

    ¼¡¤ËCN¤äOU¤Ê¤É¤Î°À­¥¿¥¤¥×¤Îʸ»úÎóɽ¸½¤Ç¤¹¤¬¡¢¤É¤Î¤è¤¦¤Ëɽµ­¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤¤¤È¤¤¤Ã¤¿¸·³Ê¤Êɸ½à¤Ï¤Ê¤¯¡¢¼ÂÁõ¤â¥Ð¥é¥Ð¥é¤Ç¤¢¤ë¤³¤È¤¬¤ï¤«¤Ã¤Æ¤¤¤Þ¤¹¡£8ǯÁ°¤ËXAdESĹ´ü½ð̾¤Ë´ØÏ¢¤·¤Æ¡¢¼±ÊÌ̾¤ÎÃæ¤Î°À­¥¿¥¤¥×¤Îɽµ­¤Î¼ÂÁõ¾õ¶·¤Ë¤Ä¤¤¤ÆÄ´ºº¤·¤Æ¤ª¤ê¡¢¤½¤Î»þ¤Ë¤Þ¤È¤á¤¿É½¤òºÆ·Ç¤·¤Þ¤¹¡£
    RFC2253¥Æ¥¹¥È1°À­¥¿¥¤¥×̾¤Î¥Æ¥¹¥È
    X.509¾ÚÌÀ½ñ¥×¥í¥Õ¥¡¥¤¥ë¤òÄê¤á¤¿RFC 5280¤Î4.1.2.4Àá ȯ¹Ô¼Ô̾(Issuer)¤Ç¤Ï¡¢¼±ÊÌ̾¤Î°À­¥¿¥¤¥×¤È¤·¤ÆÂбþ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤(MUST)¥ê¥¹¥È¤È¡¢Âбþ¤¹¤Ù¤­(SHOULD)°À­¥¿¥¤¥×¤Î¥ê¥¹¥È¤¬·ÇºÜ¤µ¤ì¤Æ¤ª¤ê¡¢É½Ãæ¤Ç¤ÏMUST¤ò²«ÎС¢SHOULD¤ò²«¿§¡¢¤½¤Î¾¡¢¾ÚÌÀ½ñ¤Ç¼ÂºÝ¤Ë»È¤ï¤ì¤ë¤³¤È¤Î¤¢¤ë°À­¥¿¥¤¥×¤Î¥ê¥¹¥È¤òÇò¤È¤·¡¢.NET¤ä³Æ¼ïJava¥Ù¡¼¥¹¤Î°Å¹æ¥é¥¤¥Ö¥é¥ê¤Ç¤É¤Î¤è¤¦¤Ë°À­¥¿¥¤¥×¤¬É½µ­¤µ¤ì¤ë¤«¤ò¥Æ¥¹¥È¤·¤Þ¤·¤¿¡£É½¤ò¸«¤ì¤Ð¤ï¤«¤ë¤È¤ª¤ê¡¢·ë²Ì¤Ï¤«¤Ê¤ê¥Ð¥é¥Ð¥é¤Ç¤¹¡£¤Þ¤¿¡¢S/MIME¤Î¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë»ö¤¬¤¢¤ê¡¢¼ÂºÝ¤Î¾ÚÌÀ½ñ¤Ç¤â¤«¤Ê¤ê´Þ¤Þ¤ì¤Æ¤¤¤ëemailAddress¤Î°À­¥¿¥¤¥×¤â¡¢É¸½à¤Ç¤Ï¼ÂÁõ¤òµá¤á¤Æ¤¤¤Ê¤¤¤¿¤á¤ËÂбþ¤Ë¤Ð¤é¤Ä¤­¤¬½Ð¤Æ¤¤¤ë¤è¤¦¤Ë»×¤¤¤Þ¤¹¡£

    º£¡¢¸«Ä¾¤·¤Æ¤ß¤ë¤ÈÅö»þ¤Ï¤Ê¤«¤Ã¤¿EV¾ÚÌÀ½ñÍѤΰʲ¼¤Î°À­¥¿¥¤¥×¤â¡¢º£¤Ê¤é¥Æ¥¹¥È¤¹¤Ù¤­¤À¤Ã¤¿¤«¤Ê¤¡¤È»×¤¤¤Þ¤¹¡£

    • jurisdictionOfIncorporationL - Ë¡¿ÍÅÐÏ¿´É³íÃÏ(»ÔĮ¼)
    • jurisdictionOfIncorporationSP - Ë¡¿ÍÅÐÏ¿´É³íÃÏ(ÅÔÆ»Éܸ©)
    • jurisdictionOfIncorporationC - Ë¡¿ÍÅÐÏ¿´É³íÃÏ(¹ñ)

    ¤Þ¤¿¡¢ ¥«¥ó¥Þ¤Ä¤Ê¤®¤Î¼±ÊÌ̾ɽµ­¤Ç¤¢¤ëRFC 2253¤È¤½¤Î¸å·Ñ¤ÎRFC 4584¤Î°ã¤¤¤Ë¤Ä¤¤¤Æ8ǯÁ°¤Îµ­»ö ¤Ç¤Þ¤È¤á¤Æ¤ª¤ê¡¢»ÅÍͤβþÄê¤Ë¤è¤Ã¤Æ¡¢¤è¤ê¼±ÊÌ̾ɽµ­¤¬°ì°Õ¤Ë¤Ê¤ëÊý¸þ¤Ë½¤Àµ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ »ÅÍͤÎÃæ¤Ç¡ÖRFC 4514¤Ï¼±ÊÌ̾ʸ»úÎó¤Ï°ì°Õ¤Ë¤Ê¤é¤Ê¤¤(=Àµµ¬²½¤·¤Ê¤¤)¡×¤È¤¤¤¦ »ö¤¬ÌÀµ­¤µ¤ì¤Æ¤ª¤ê¡¢¼±ÊÌ̾ʸ»úÎó¤Ï¡¢ÍÍ¡¹¤Êɽ¸½¤¬µö¤µ¤ì¤Æ¤ª¤ê¡¢ ñ½ã¤Êʸ»úÎóÈæ³Ó¤Ç¤ÏƱ¤¸¤Ç¤¢¤ë¤«¤É¤¦¤«¤òȽÃǤǤ­¤Ê¤¤»ö¤ËÃí°Õ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£

    ¼±ÊÌ̾¤ÎASN.1ÄêµÁ¤È¹½Â¤

    ¼¡¤Ë¡¢¼±ÊÌ̾¤¬¡¢ASN.1 DER¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ë¤è¤ê¡¢¤É¤Î¤è¤¦¤Ë¥Ð¥¤¥ÈÎó¤Ë¥¨¥ó¥³¡¼¥É¤µ¤ì¤ë¤Î¤«¤ò¡¢ ÀâÌÀ¤·¤¿¤¤¤È»×¤¤¤Þ¤¹¡£¤Þ¤ººÇ½é¤Ë¡¢¼±ÊÌ̾¤ÎASN.1ÄêµÁ¤ò¾Ò²ð¤·¤Þ¤·¤ç¤¦¡£ RFC 5280 4.1.2.4 Issuer¤è¤ê

    // X.500̾¡¢¼±ÊÌ̾(DN)¤ÏRDN¤ÎʤÓ(SEQUENCE) Name ::= CHOICE { rdnSequence RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName // RDN¤Ï¡¢AttributeTypeAndValue 1¤Ä°Ê¾å¤ÎSET // ¤Ä¤Þ¤ê¡¢Ê£¿ôAttributeTypeAndValue¤¬¤¢¤Ã¤Æ¤â¤è¤¤¡£ // ¤³¤ì¤¬Ê£¿ô¤¢¤ì¤Ð Multi-valued RDN RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue // °À­¥¿¥¤¥×¤È°À­ÃͤΥڥ¢ AttributeTypeAndValue ::= SEQUENCE { type AttributeType, value AttributeValue } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY // °À­ÃͤÏANY¤ÈÄêµÁ¤·¤Æ¤¤¤Ê¤¬¤é¤â¡¢DirectoryString¤Ç // ÄêµÁ¤µ¤ì¤¿¤¤¤º¤ì¤«¤Îʸ»ú¥¿¥¤¥×¤ò»ÈÍѤ¹¤ë DirectoryString ::= CHOICE { teletexString TeletexString (SIZE (1..MAX)), printableString PrintableString (SIZE (1..MAX)), universalString UniversalString (SIZE (1..MAX)), utf8String UTF8String (SIZE (1..MAX)), bmpString BMPString (SIZE (1..MAX)) }
    ¤Ä¤Þ¤ê¡¢
    • ¼±ÊÌ̾(DN)¤Ï¡¢ÁêÂм±ÊÌ̾(RDN)¤ÎʤÓ(SEQUENCE OF)¤Ç¤¢¤ê
    • ÁêÂм±ÊÌ̾(RDN)¤Ï¡¢Â°À­¥¿¥¤¥×¤ÈÃÍ(AttributeTypeAndValue)¤Î½¸¹ç(SET OF)¤Ç¤¢¤ê
    • °À­¥¿¥¤¥×¤ÈÃÍ(AttributeTypeAndValue)¤Ï¡¢Â°À­¥¿¥¤¥×¤ÈÃͤÎʤÓ(SEQUENCE)¤Ç¤¢¤ë
    ¤È¤¤¤¦»ö¤Ç¤¹¡£SEQUENCE¤ÈSET¤Ï¹½Â¤·¿¤È¸Æ¤Ð¤ì¤ëASN.1¥×¥ê¥ß¥Æ¥£¥Ö¤Ç¤¹¤¬¡¢
    • SEQUENCE¤ÏÇÛÎó¤Î¤è¤¦¤Ê¤â¤Î¤Ç¡¢½ç½ø´Ø·¸¤Î¤¢¤ëʤӤòɽ¤¹ºÝ¤Ë»È¤¤¤Þ¤¹¡£
    • SET¤Ï½¸¹ç¤Î¤è¤¦¤Ê¤â¤Î¤Ç¡¢¹½À®Í×ÁǤÎÃæ¤Ë¤ÏÆÃ¤Ë½ç½ø´Ø·¸¤Ï¤Ê¤¤¾ì¹ç¤Ë»È¤¤¤Þ¤¹¡£
    ¤Ä¤¤¤Ç¤Ë¡¢SEQUENCE¤äSET¤È¡¢SEQUENCE OF ¡Á¡¢SET OF ¡Á¤Î°ã¤¤¤Ç¤¹¤¬¡¢
    • ñ¤ËSEQUENCE¤äSET¤È¤Ê¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¹½À®Í×ÁǤÎASN.1¥¯¥é¥¹¤¬°Û¤Ê¤ë¾ì¹ç¤Ë »È¤¤¤Þ¤¹¡£¾å¤ÎÎã¤Ç¤ÏAttributeTypeAndValue¤¬¤½¤ì¤ËÅö¤¿¤ê¤Þ¤¹¡£
    • SEQUENCE OF¡¢SET OF¤È¤·¤¿¾ì¹ç¡¢¹½À®Í×ÁǤÎASN.1¥¯¥é¥¹¤¬Æ±¤¸·¿¤Î¾ì¹ç¤Ë »È¤¤¤Þ¤¹¡£¾å¤ÎÎã¤Ç¤Ï¡¢Name¤äRDN¤¬¤½¤ì¤ËÅö¤¿¤ê¤Þ¤¹¡£

    ¤½¤ì¤Ç¤Ï¡¢Îã¤È¤·¤Æ°Ê²¼¤Î¼±ÊÌ̾¤òASN.1 DER¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£

    CN=aaa,O=TEST,C=JP
    RFC 2253¤Î¾ì¹ç¤Ë¤Ï¡¢µÕ½ç¤ÇRDN¤¬Ê¤֤Τǡ¢°Ê²¼¤Î¤è¤¦¤Ë¥¨¥ó¥³¡¼¥É¤µ¤ì¤Þ¤¹¡£
    302A SEQUENCE(30) OF -- DN 310B SET(31) OF -- RDN[1] 3009 SEQUENCE(30) -- AttributeTypeAndValue 0603550406 ObjectIdentifier(06) countryName 13024A50 PrintableString(13) "JP" 310D SET(31) OF -- RDN[2] 300B SEQUENCE(30) -- AttributeTypeAndValue 060355040A ObjectIdentifier(06) organizationName 0C0454455354 UTF8String(0C) "TEST" 310C SET(31) OF -- RDN[3] 300A SEQUENCE(30) -- AttributeTypeAndValue 0603550403 ObjectIdentifier(06) commonName 0C03616161 UTF8String(0C) "aaa"
    ASN.1¥Ç¡¼¥¿¤Ï¥Ç¡¼¥¿·¿¤òɽ¤¹¥¿¥°¡¢¥Ð¥¤¥ÈĹ¡¢Ãͥǡ¼¥¿¤è¤ê¹½À®¤µ¤ì¡¢¾å¤ÎÎã¤ÎºÇ¸å¤Î¹Ô¤Ç¤Ï¡¢0C¤¬UTF8String·¿¡¢03¤¬¥Ð¥¤¥ÈĹ(=3)¡¢616161(=aaa)¤¬Ãͤòɽ¤·¤Æ¤¤¤Þ¤¹¡£

    ¤µ¤Æ¡¢¼¡¤ËMulti-valued RDN¤Î¾ì¹ç¤Ë¤Ï¤É¤Î¤è¤¦¤Ë¥¨¥ó¥³¡¼¥É¤µ¤ì¤ë¤Î¤«¡¢²¼¤ÎÎã¤ò¸µ¤Ë¸«¤Æ¤ß¤Þ¤·¤ç¤¦¡£¤³¤³¤Ç¤Ï¡¢CN=aaa¤ÈCN=a¤Î2¤Ä¤ÎAttributeTypeAndValue¤¬»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£

    CN=aaa+CN=a,O=TEST,C=JP
    ¤³¤ì¤òASN.1 DER¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤¹¤ë¤È°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ºÇ¸å¤ÎRDN¤ËÃíÌܤ·¤Æ¤¯¤À¤µ¤¤¡£CN=a¤ÈCN=aaa¤ÈÆó¤Ä¤ÎAttributeTypeAndValues¤¬¤¢¤ë¤³¤È¤¬³Îǧ¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¤Þ¤¿¡¢CN=a¤ÈCN=aaa¤Ç¤Ï¡¢É¬¤ºCN=a¤¬Àè¤ËÍè¤ë¤³¤È¤Ë¤âÃíÌܤǤ¹¡£
    3034 DN 310B RDN[1] C=JP 3009 0603550406 13024A50 310D RDN[2] O=TEST 300B 060355040A 0C0454455354 3116 RDN[3] CN=aaa+CN=a SEQUENCE(30)¤¬2¤Ä¤¢¤ë 3008 ATV[1] CN=a CN=a¤ÎÊý¤¬Àè¤ËÍè¤Æ¤¤¤ë 0603550403 0C0161 300A ATV[2] CN=aaa 0603550403 0C03616161
    ¤³¤ÎRDNÃæ¤ÎCN=a¡¢CN=aaa¤Î½ç½ø´Ø·¸¤Ë¤ÏASN.1 DER¤ÈBER¤Î¤Á¤ç¤Ã¤È¤·¤¿°ã¤¤¤¬´Ø·¸¤¬¤¢¤ê¤Þ¤¹¡£DER¤ÏBER¤Î¥µ¥Ö¥»¥Ã¥È¤Ç¤Ê¤ó¤Ç¤¹¤¬¡¢BER¤Ç¤ÏÊ£¿ô¤Îɽ¸½¤¬µö¤µ¤ì¤ë¤Î¤ËÂФ·¡¢DER¤Ç¤Ïɬ¤º°ì°Õ¤Êɽ¸½¤Ë¤Ê¤ê¤Þ¤¹¡£¤½¤Î°ã¤¤¤òɽ¤Ë¤Þ¤È¤á¤Þ¤·¤¿¡£
    ASN.1 DERASN.1 BER
    ³µÍ×ASN.1¤Î°ì°Õ¤Ê¥¨¥ó¥³¡¼¥Éµ¬Â§ASN.1¤Î¥¨¥ó¥³¡¼¥Éµ¬Â§¡£DER¤Î¥¹¡¼¥Ñ¡¼¥»¥Ã¥È¤ÇDER¤Ç¤¢¤ì¤ÐBER
    ¶¦ÄÌ¤ÎÆÃħÄÌ¿®¤ÎÀ¤³¦¤Ç¤ÏŤ¤Îò»Ë¤Î¤¢¤ë¡¢CPU¤äÀ°¿ô·¿¤Î¥µ¥¤¥º¤ËÀ©¸Â¤µ¤ì¤Ê¤¤¡¢µðÂç¤Ê¥Ç¡¼¥¿¤â°·¤¨¤ë¡¢Ç¤°Õ¤Î¹½Â¤²½¥Ç¡¼¥¿¤ò°·¤¨¤ë¥Ç¡¼¥¿É½¸½¡£XML, JSON¤ËÈæ¤Ù¥³¥ó¥Ñ¥¯¥È¡£
    ÍÑÅÓ¾ÚÌÀ½ñ¡¢CRL¡¢OCSP¡¢RFC3161¥¿¥¤¥à¥¹¥¿¥ó¥×S/MIME¥Ç¡¼¥¿¡¢CMS½ð̾¡¦°Å¹æ²½¥Ç¡¼¥¿¡¢PKCS#12
    Èæ³Óɬ¤ºÉ½¸½¤Ï°ì°Õ¡£Ä¶µðÂç¤Ê¥Ç¡¼¥¿¤Ç¤âŤµ¤¬Í½¤á¤ï¤«¤Ã¤Æ¤¤¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤Î¤Ç¡¢¥¹¥È¥ê¡¼¥à½èÍý¤Ê¤ÉÉÔ¸þ¤­Ê£¿ô¤Îɽ¸½¤¬¤¢¤ë¡£Ä¶Â礭¤Ê¥Ç¡¼¥¿¤Ç¤â¼è¤ê°·¤¤²Äǽ
    SETÍ×ÁǤΥХ¤¥ÈÎó¤Ç¾º½ç¥½¡¼¥È¤¹¤ë¥½¡¼¥È¤·¤Ê¤¯¤ÆÎɤ¤
    BOOLEANTRUE¤Î¤ß»È¤¨¡¢FALSE¤Ï¾Êά¤¹¤ë¤è¤¦¥¯¥é¥¹ÄêµÁTRUE¡¢FALSE¤¬»È¤¨¤ë
    ÉÔÄêĹɽ¸½Ä¹¤µÉ½¸½¤Ï°ì°Õ¤Ç¡¢Í½¤á¥Ç¡¼¥¿¥µ¥¤¥º¤¬¤ï¤«¤Ã¤Æ¤¤¤Ê¤¤¤È¤¤¤±¤Ê¤¤¡£Ä¹¤µÉ½¸½¤ÇÉÔÄêĹɽ¸½¤¬»È¤¨¡¢Ä¹¤µ¤ò8000¤È¤·¤¿¾ì¹ç¤½¤ì¤Ï³«»Ïµ­¹æ¤Ç0000¤¬Â³¤¯¤Þ¤Ç°ì¤Ä¤ÎÍ×ÁǤǤ¢¤ê¡¢Â礭¤Ê¥Ç¡¼¥¿¤â°·¤¤¤ä¤¹¤¤¡£
    °Ê¾å¤Î¤è¤¦¤Ê°ã¤¤¤¬¤¢¤ê¡¢SET¤Î°ã¤¤¤Ë¤è¤êMulti-valued RDN¤ÎSET OF¤Î½ç½ø¤¬·è¤Þ¤Ã¤Æ¤¤¤ë¤ï¤±¤Ç¤¹¡£

    SET¤ÎÍ×ÁǤϡ¢³ÆÍ×ÁǤòASN.1¥¨¥ó¥³¡¼¥É¤·¤¿¤È¤­¤Î¾º½ç¤Î¼­½ñ½ç¤Ç¥½¡¼¥È¤µ¤ì¡¢¤¶¤Ã¤¯¤ê¸À¤¨¤Ð¡¢

    • Í×ÁǤÎû¤¤ÊªÄøÀè
    • Ʊ¤¸Ä¹¤µ¤Ê¤é°À­¥¿¥¤¥×¤ÎŤµ¤¬Ã»¤¤Êý¤¬Àè
    ¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£Îã¤Ç¤ß¤Æ¤ß¤Þ¤·¤ç¤¦¡£
    3008 0603550403 0C0161 CN=a 300A 0603550403 0C03616161 CN=aaa ^^ Á´ÂΤÎŤµL¤¬08, 0A¤Î½ç¤Ë¤Ê¤ë¤Î¤ÇƱ¤¸Â°À­¥¿¥¤¥×Ĺ¤Ê¤é°À­ÃͤÎû¤¤Êý¤¬Àè C,O,OU,CN¤Ê¤É¼çÍפʰÀ­¥¿¥¤¥×¤ÏOID¤ÎÃͤ¬2.5.4.x¤Ë¤Ê¤ë¤Î¤ÇƱ°ì°À­¥¿¥¤¥×Ĺ
    Á´ÂΤÎŤµ¤¬Æ±¤¸»þ¡¢
    ^^ Á´ÂΤÎŤµ¤ÏƱ¤¸¤Ê¤é 3011 0603550403 0C0A6162636465666768696A CN=abcdefghij 3011 060B2B0601040182373C020103 0C024A50 jurisdictionOfIncorporateC=JP ^^ °À­¥¿¥¤¥×¤ÎÃͤÎû¤¤Êý¤¬Àè

    OpenSSL¤ÎMulti-valued RDNÂбþ

    OpenSSL¤ÏMULTI-valued RDN¤ËÂбþ¤·¤Æ¤ª¤ê¡¢"-multivalue-rdn"¤ò¤Ä¤±¤ë¤À¤±¤Ç¤¹¡£ Î㤨¤Ð¡¢´û¸¤ÎÈëÌ©¸°¤Ç¥ï¥ó¥é¥¤¥Ê¡¼¤ÇMulti-valued RDN¤Î¼«¸Ê½ð̾¾ÚÌÀ½ñ¤òºî¤ê¤¿¤¤»þ

    openssl genrsa 2048 > a.prv
    openssl req -new -key a.prv -x509 -subj /C=JP/O=Test/OU=b+CN=a -out c.cer -multivalue-rdn
    Multi-valued RDN¤Î¾ÚÌÀ½ñȯ¹ÔÍ×µá¤òºî¤ê¤¿¤¤¤È¤­
    openssl req -new -key a.prv -subj /C=JP/O=Test/OU=b+CN=a -out c.csr -multivalue-rdn
    ¤È¤Ê¤ê¤Þ¤¹¡£

    jsrsasign¤ÎMulti-valued RDNÂбþ

    jsrsasign¤Ï¡¢»ä¤¬¼ñÌ£¤Çºî¤Ã¤¿Pure JavaScript¤Ë¤è¤ë°Å¹æ¥é¥¤¥Ö¥é¥ê¤Ç¤·¤Æ¡¢2010ǯ¤°¤é¤¤¤«¤é¥Ü¥Á¥Ü¥Á²Ë¤ò¸«¤Ä¤±¤Æ¤ÏºòÆü¤òÄɲ䷤Ƥª¤ê¡¢ºÇ½é¤ÏRSA½ð̾¤À¤±¤À¤Ã¤¿¤â¤Î¤¬¡¢ASN.1¤ä¾ÚÌÀ½ñ¤ä¥¿¥¤¥à¥¹¥¿¥ó¥×¤äJOSE¤Ê¤ó¤«¡¢¼«Ê¬¤¬¡ÖÍߤ·¤¤¤Ê¡×¤È»×¤Ã¤¿»þ¤ËÁýÃÛ¤ò·«¤êÊÖ¤·¤Æ¤ª¤ê¡¢PKI¤äASN.1¤äJOSE(JWS,JWT,JWK)´Ø·¸¤Ç¤Á¤ç¤Ã¤È»î¤·¤¿¤¤¤Ê¤È»×¤Ã¤¿»þ¤Ë½ÅÊõ¤·¤Æ¤¤¤Þ¤¹¡£

    ¥¦¥§¥Ö¥Ö¥é¥¦¥¶¾å¤Ç¤â¡¢Node¤Ç¤â»È¤¨¡¢API¥É¥­¥å¥á¥ó¥È¤ä¥µ¥ó¥×¥ë¤â½¼¼Â¤µ¤»¤Æ¤¤¤ë¤Î¤Ç¡¢·ë¹½¥æ¡¼¥¶¤ÏÀ¤³¦Ãæ¤Ë¤¤¤¿¤ê¡¢ºÇ¶á¤ÏSONY¤ä²£²Ï(¤ä¾¡¼ê¤Ë¤¦¤Á¤Î²ñ¼Ò¡Ê¡°¡°¡¨)¤Î¥Ï¡¼¥É¥¦¥§¥¢¾¦ÉʤǤâ»È¤ï¤ì¤Æ¤¤¤ë¤³¤È¤¬È¯³Ð¤·¤¿¤ê¡¢Node¤Înpm¥Ñ¥Ã¥±¡¼¥¸¤Ï·î´Ö10Ëü¼å¤Î¥À¥¦¥ó¥í¡¼¥É¤¬¤¢¤ë¤è¤¦¤Ç¡¢¥Û¥ó¥È¤¢¤ê¤¬¤¿¤¤ÏäǤ¹¡£

    JavaScript¤Î°Å¹æ¥é¥¤¥Ö¥é¥ê¤ÎAPI¤È¤·¤Æ¤Ï¡¢W3C Web Crypto API¤Ê¤É¤¢¤ë¤ó¤Ç¤¹¤¬¡¢¥â¥Ð¥¤¥ë¥Ö¥é¥¦¥¶¤Ç¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥±¡¼¥¹¤¬¤¢¤Ã¤¿¤ê¡¢¸Å¤¤°Å¹æ¤¬»È¤¨¤Ê¤«¤Ã¤¿¤ê¡¢¤Á¤ç¤Ã¤È½ñ¤³¤¦¤È»×¤Ã¤Æ¤â²¿¹Ô¤â½ñ¤«¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤«¤Ã¤¿¤ê¡¢ÌÌÅݤ¯¤µ¤¤¤ó¤Ç¤¹¤è¤Í¡£¤½¤³¤Ç¡¢jsrsasign¤Ç¤Ï¡¢¡Ö¤Ê¤ë¤Ù¤¯¾¯¤Ê¤¤¹Ô¿ô¤Ç¤ä¤ê¤¿¤¤»ö¤¬¤Ç¤­¤ë¡×¤Ã¤Æ¤¤¤¦¤Î¤òÌÜɸ¤Ë¤·¤Æ¤¤¤Æ¡¢Î㤨¤Ð¸°¤Ê¤ó¤«¤ÏÈëÌ©¸°¤Ç¤â¸ø³«¸°¤Ç¤âPKCS#5¤Ç¤âPKCS#8¤Ç¤âJSON Web Key¤Ç¤â¤Ê¤ó¤Ç¤âKEYUTIL.getKey¤ËÅϤ·¤Æ¤·¤Þ¤¨¤ÐŬÅö¤Ë½èÍý¤·¤Þ¤¹¡£¤Þ¤¿¡¢PC¤Ç¤â¥¹¥Þ¥Û¤Ç¤âNode¤Ç¤â¡¢Â¿¾¯¸Å¤¤´Ä¶­¤Ç¤âJavaScript¤µ¤¨Æ°¤±¤Ð»È¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿¡¢API¥É¥­¥å¥á¥ó¥È¤ä¥Á¥å¡¼¥È¥ê¥¢¥ë¤Î»ñÎÁ¤â¤Ç¤­¤ë¸Â¤ê½áÂô¤ËÍѰդ·¤¿¤Ä¤â¤ê¤Ç¤¹¡£

    ³ä¤ÈºÇ¿·¤ÎÏÃ¤Þ¤ÇÆþ¤Ã¤Æ¤¤¤ë±Ñ¸ì¤ÎÆþÌ祹¥é¥¤¥É¤¬¤¢¤Ã¤¿¤ê¡¢
    slidee
    ¤Þ¤¿¤Á¤ç¤Ã¤È¸Å¤¤¤Ç¤¹¤¬¡¢2013ǯ¤ËJNSA¤ÎWG¤Ç¤ªÏä·¤¿jsrsasign¤Èjsjws¤¬Ê̤γ«È¯¥é¥¤¥ó¤À¤Ã¤¿»þ¤ÎÆþÌ祹¥é¥¤¥É ¤¬¤¢¤ë¤Î¤Ç¤è¤«¤Ã¤¿¤é»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
    slidej

    ¥É¥­¥å¥á¥ó¥ÈÎà¤ÏÀÛ¤¤±Ñ¸ì¤Î¤â¤Î¤·¤«¤Ê¤¯¤Æ¿½¤·Ìõ¤Ê¤¤¤Ç¤¹¤¬¡¢ÌäÂê¤È¤«¤¢¤ì¤Ð¡¢Issue¤Ë¤ÏÆüËܸì¤ÇÆþ¤ì¤ÆÄº¤¤¤Æ¹½¤ï¤Ê¤¤¤Î¤ÇÆþ¤ì¤ÆÄº¤±¤ì¤Ð¤È»×¤¤¤Þ¤¹¡£

    ¤Ç¡¢jsrsasign¤òMulti-valued RDNÂбþ¤µ¤»¤¿¤ê¡¢¥«¥ó¥Þ·Ò¤®DNÂбþ¤·¤¿¤¤¤Ê¤È»×¤Ã¤Æ¤¤¤Æ¡¢¤è¤¦¤ä¤¯6.2.2¤ò¥ê¥ê¡¼¥¹¤·¤¿ºÇ¶á¤Ë¤Ê¤Ã¤Æ¤«¤éÂбþ¤µ¤»¤Þ¤·¤¿¡£ Î㤨¤Ð¡¢Multi-valued RDN¤Î¼±ÊÌ̾¤¬¤É¤Î¤è¤¦¤ËASN.1 DER¥¨¥ó¥³¡¼¥É¤µ¤ì¤ë¤Î¤«¤Ê¤ó¤ÆÏäϡ¢¼¡¤Î¤è¤¦¤Ë³Îǧ¤Ç¤­¤Þ¤¹¡£

    % node > var X509Name = require("jsrsasign").KJUR.asn1.x509.X500Name; > new X509Name({str: "/C=JP/O=T1+CN=kjur"}).getEncodedHex(); '3027310b3009060355040613024a5031183009060355040a0c025431300b06035504030c046b6a7572'
    ¤¢¤È¤Ï¡¢¾ÚÌÀ½ñȯ¹ÔÍ×µá(CSR)¤òºî¤Ã¤¿¤ê¡¢
    var rs = require("jsrsasign"); var kp = rs.KEYUTIL.generateKeypair("RSA", 2048); pem = rs.KJUR.asn1.csr.CSRUtil.newCSRPEM({ subject: {ldapstr: 'OU=T1+CN=example.com,O=Test,C=US'}, ext: [ {subjectAltName: {array: [{dns: 'example.net'}]} ], sbjpubkey: pubKeyPEM, sigalg: "SHA256withRSA", sbjprvkey: prvKeyPEM });
    ¾ÚÌÀ½ñ¤òȯ¹Ô¤·¤¿¤ê¤¹¤ë»þ¤Ë¤âMulti-valued RDN¤¬»È¤¨¤Þ¤¹¡£
    var pem = KJUR.asn1.x509.X509Util.newCertPEM({ serial: {int: 4}, sigalg: {name: 'SHA1withRSA', paramempty: true}, issuer: {str: '/C=US/O=a'}, notbefore: {str: '130504235959Z'}, notafter: {str: '140504235959Z'}, subject: {ldapstr: 'OU=kjur+CN=kjur,O=b,C=US'}, sbjpubkey: kp.pubKeyObj, ext: [ {basicConstraints: {cA: true, critical: true}}, {keyUsage: {bin: '11'}}, ], cakey: kp.pubKeyObj });
    ³ä¤ÈÍ»Ä̤¬Íø¤¯¤Î¤Ç¡¢¤è¤«¤Ã¤¿¤é»È¤Ã¤Æ¤ä¤Ã¤Æ¤¯¤À¤µ¤¤¡£

    ¤ª¤ï¤ê¤Ë

    ¤È¤¤¤¦¤ï¤±¤ÇĹ¡¹¡¢Multi-valued RDN¤ä¼±ÊÌ̾(DN)¤Î¤³¤È¤Ç¥À¥é¥À¥é½ñ¤¤¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£¤´¤á¤ó¤Ê¤µ¤¤¡£Ã¯¤«¤Î»²¹Í¤Ë¤Ê¤ì¤ÐÎɤ¤¤«¤Ê¡¢¤È»×¤¤¤Þ¤¹¡£

    Äɵ­(2016.12.19)

    ¤¢¤Ã¡¢¸í²ò¤µ¤ì¤Ê¤¤¤è¤¦¤Ë½ñ¤¤¤Æ¤ª¤­¤Þ¤¹¤È¡¢»ä¤È¤·¤Æ¤Ï¡¢Multi-valued RDN¤ò¹­¤á¤¿¤¤¤È¤«¡¢»È¤¦¤Ù¤­¤À¤È¤«¸À¤¦¤Ä¤â¤ê¤ÏÌÓÆ¬¤¢¤ê¤Þ¤»¤ó¡£Áê¸ß±¿ÍÑÀ­¤¬¹â¤¤Êý¸þ¤Ç¥¤¥ó¥Õ¥éÀ߷פ¹¤ë¤Î¤¬¸¶Â§¤Ç¤¢¤ê¡¢»È¤ï¤Ê¤¯¤ÆºÑ¤à¤Ê¤é»È¤ï¤Ê¤¤Êý¤¬¤¤¤¤¤Ç¤·¤ç¤¦¡£¤¿¤À¡¢¼õ¤±¼è¤Ã¤¿¤È¤·¤Æ¤â¡¢¤Ó¤Ã¤¯¤ê¤·¤Ê¤¤¤Ç¤Í¡¢¤È¡¢¡¢¡¢¡¢£÷

    ´ØÏ¢µ­»ö

    CRYPTREC/IPA¡ÖSSL/TLS°Å¹æÀßÄꥬ¥¤¥É¥é¥¤¥ó¡×¤Î¸ø³«¤ÈÈó¸ø¼°ÀßÄê¥Õ¥¡¥¤¥ëÀ¸À®¥Ä¡¼¥ë¤Î¸ø³«

    2015ǯ5·î12Æü¤Ë¡¢IPA¤Î¥µ¥¤¥È¤ÇCRYPTREC¤ÎWG¤ÇºîÀ®¤·¤¿ ¡ÖSSL/TLS°Å¹æÀßÄꥬ¥¤¥É¥é¥¤¥ó¡×¤¬¸ø³«¤µ¤ì¤Þ¤·¤¿¡£

    ¤³¤ÎSS/TLSÀßÄꥬ¥¤¥É¥é¥¤¥ó¤¬ºîÀ®¤µ¤ì¤¿Çطʤ䳵ÍפϵÆÃÓÀèÀ¸¤Î CRYPTREC¥·¥ó¥Ý¥¸¥¦¥à2015¤Ç¤Î ¹Ö±é»ñÎÁ¤Ë¤ï¤«¤ê¤ä¤¹¤¯½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤³¤ì¤ò¤´Í÷ĺ¤¯¤Î¤¬ °ìÈ֤褤¤«¤È»×¤¤¤Þ¤¹¡£

    ¤³¤Î¥¬¥¤¥É¥é¥¤¥ó¤Ï¥µ¡¼¥Ð¡¼´ÉÍý¼Ô¸þ¤±¤Ë¡¢ ¤Ê¤ë¤Ù¤¯°Å¹æ¤Î¤³¤È¤ÏºÙ¤«¤¯¿¨¤ì¤º¤Ë¡¢ (¤È¤Ï¤¤¤¨ºÙ¤«¤¤°Å¹æ¤ÎÏä⿤¤¤Ç¤¹¤¬¡¢¡¢¡¢) ºòǯÅÙ¡¢ÆÃ¤Ë¿¤«¤Ã¤¿SSL/TLS´ØÏ¢¤ÎÍÍ¡¹¤ÊÀȼåÀ­¤ËÂФ·¤Æ¡¢ ¤É¤Î¤è¤¦¤ËÀßÄꤹ¤ì¤Ð¤¤¤¤¤Î¤«¤ò²òÀ⤷¤Æ¤¤¤Þ¤¹¡£ ¾Ò²ð¤µ¤ì¤Æ¤¤¤ë¥³¥é¥à¤Ê¤ÉÆÉ¤ßʪ¤È¤·¤Æ¤â¤Ê¤«¤Ê¤«¤ª¤â¤·¤í¤¤¤Î¤Ç¡¢ À§Èó¤´Í÷¤¤¤¿¤À¤±¤ì¤Ð¤È»×¤¤¤Þ¤¹¡£

    ¥¬¥¤¥É¥é¥¤¥ó¤Ç¤Ï¡¢ÍÑÅӤ˱þ¤¸¤Æ3¤Ä¤Î¥¿¥¤¥×¤Ëʬ¤±¤ÆÀßÄê¤ò¾Ò²ð¤·¤Æ¤¤¤Þ¤¹¡£

    • À¯ÉÜ¡¦¶âÍ»¡¦°åÎŤʤɹ⤤¥»¥­¥å¥ê¥Æ¥£¤¬µá¤á¤é¤ì¤ë¾ì¹ç¤ÎÀßÄꢪ¹â¥»¥­¥å¥ê¥Æ¥£·¿
    • °ìÈÌŪ¤Ê¿ä¾©ÀßÄꢪ¿ä¾©¥»¥­¥å¥ê¥Æ¥£·¿
    • ¸Å¤¤¥Ö¥é¥¦¥¶¡¢¥²¡¼¥àµ¡¡¢¥Õ¥£¡¼¥Á¥ã¡¼¥Õ¥©¥ó¤Ê¤É¤Ø¤ÎÂбþ¤âɬÍפʾì¹ç¢ª¥»¥­¥å¥ê¥Æ¥£Îã³°·¿

    ÆÃ¤Ë°Å¹æ¥¹¥¤¡¼¥È¤ä¥×¥í¥È¥³¥ë¤ÎÀßÄê¤ò¡¢ºòº£¤ÎÀȼåÀ­¡¦°Å¹æ´íËØ²½¤Ë¾È¤é¤·¤Æ ¤É¤Î¤è¤¦¤ËÀßÄꤹ¤ë¤Î¤«¤È¤¤¤¦¤Î¤¬¡¢´ÉÍý¼Ô¤Î¤ß¤Ê¤µ¤óǺ¤Þ¤·¤¤¤È¤³¤í¤À¤È»×¤¦¤Î¤Ç¤¹¤¬¡¢ ¤³¤ì¤ò´¬Ëö¤ÎAppendix¤Ë¤Æ¡¢¶ñÂÎŪ¤Ë¤É¤Î¥µ¡¼¥Ð¡¼¤Ç¤Ï¤É¤¦ÀßÄꤹ¤ì¤Ð¤è¤¤¤Î¤«¤ò µ­ºÜ¤·¤Æ¤¤¤Þ¤¹¡£

    ¤¿¤À¡¢¤¢¤ì¤òÁ´ÉôÆÉ¤ó¤Çư¤¯ÀßÄê¥Õ¥¡¥¤¥ë¤òºî¤ë¤Î¤Ã¤Æ¥Ú¡¼¥¸¿ô¤â¿¤¤¤··ë¹½¹ü¤¬ÀÞ¤ì¤ë¤«¤Ê¤È»×¤¤¤Þ¤¹¡£ ¤½¤³¤Ç¡¢¥¬¥¤¥É¥é¥¤¥ó¤Î¸ø³«¤òµ­Ç°¤·¤Æ¡¢ ¥¬¥¤¥É¥é¥¤¥ó¤Î¥¿¥¤¥×¤ä¥µ¡¼¥Ð¡¼¤Î¼ïÎà¤òÁª¤ó¤Ç¡¢¥Ü¥¿¥ó¤ò²¡¤»¤ÐÀßÄê¥Õ¥¡¥¤¥ë¤¬ ºî¤ì¤ë¤è¤¦¤Ê¥Ä¡¼¥ë¤òºî¤Ã¤Æ¤ß¤Þ¤·¤¿¡£(¤Ñ¤Á¤Ñ¤Á¤Ñ¤Á)

    HTTPSÀßÄê¥Õ¥¡¥¤¥ëÀ¸À®¥Ä¡¼¥ë0.2(¥Ù¡¼¥¿ÈÇ)
    https://kjur.github.io/jsrsasign/tool/tool_httpscfg.html

    º£¤Î¤È¤³¤í¡¢Apache¤Ènginx¤À¤±¤À¤Ã¤¿¤ê¡¢¿ä¾©ÀßÄê¤Î°ìÉô¤À¤±¤À¤Ã¤¿¤ê¤¹¤ë¤ó¤Ç¤¹¤¬¡¢ ¥×¥í¥È¥³¥ë¤ä°Å¹æ¥¹¥¤¡¼¥È¤Ê¤É¤Ï²¡¤µ¤¨¤Æ¤¤¤ë¤Î¤Ç¡¢¤è¤«¤Ã¤¿¤é»È¤Ã¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
    IMG_0216
    »ú¤Ï¾®¤µ¤¤¤Ç¤¹¤¬¡¢¥¹¥Þ¥Û¥Ö¥é¥¦¥¶¤Ç¤âÀßÄê¥Õ¥¡¥¤¥ë¤¬ºî¤ì¤Þ¤¹¡£¤Ü¤Á¤Ü¤Á¥¢¥Ã¥×¥Ç¡¼¥È¤·¤Æ ¥Õ¥ëÂбþ¤Ë¤·¤Þ¤¹¤Î¤Ç¡¢¸ð¤¦¤´´üÂԤäƤ³¤È¤Ç¡£

    ¤¢¤È¡¢¤³¤Î¥Ä¡¼¥ë¤ÎÌÌÇò¤¤¤Î¤ÏCRYPTREC/IPA¤Î¥¬¥¤¥É¥é¥¤¥ó¤À¤±¤Ç¤Ê¤¯¡¢ Mozilla¤äQualys¤Ê¤É¤Î¿ä¾©ÀßÄê¤ä¡¢Linux·ÏOS¤Î¥Ç¥Õ¥©¥ë¥ÈÀßÄê¤â »î¤»¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë½ê¤Ç¤¹¡£°Å¹æ¥¹¥¤¡¼¥È¤ÎÀßÄê¤ß¤Æ¥Ë¥ä¥Ë¥ä¤·¤Æ¤¤¤¿¤À¤±¤ì¤Ð¤È¡¢¡¢¡¢

    º£Æü¤Ï¤³¤ÎÊդǡ¢¡¢¡¢

    (Äɵ­ 2021.03.25) ¥Ä¡¼¥ë¤Î¥ê¥ó¥¯ÀÚ¤ì¤ò½¤Àµ¤·¤Þ¤·¤¿¡£

    (³¤­1)POODLE¹¶·â¤Ë¤Ä¤¤¤ÆËÜÅö¤ËTLSv1.0¤Ê¤é°ÂÁ´¤Ê¤Î¤«¡©(OpenSSL¤Ï°ÂÁ´)

    Á°²ó¤ÏTLSv1.1°Ê¹ß¤ÈTLSv1.0¤È¤Ç¥Ñ¥Ç¥£¥ó¥°½èÍý¤Ë´Ø¤¹¤ëRFC¾å¤Îµ¬Ä꤬°ã¤¦¤Î¤ÇPOODLE¹¶·â¤Î±Æ¶Á¤ò¼õ¤±¤ë¼ÂÁõ¤¬¤¢¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¡¢¤È¤¤¤¦Ïäò¤·¤Þ¤·¤¿¡£

    ±Æ¶Á¤ò¼õ¤±¤ë²ÄǽÀ­¤¬¹â¤¤¤Î¤ÏTLSv1.0¤È¡¢TLSv1.1¤äTLSv1.2¤È¤Ç ¥Ñ¥Ç¥£¥ó¥°½èÍý¤Î¼ÂÁõ¤ò¶èÊ̤·¤Æ¤¤¤ë¥±¡¼¥¹¤Ç¤Ï±Æ¶Á¤ò¤¦¤±¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£

    OpenSSL¤ÎºÇ¿·¤Î¤â¤Î1.0.1j¤Ë¤Ä¤¤¤Æ¡¢¥½¡¼¥¹¤ò¸«¤Æ¤Þ¤·¤¿¡£ ·ëÏÀ¤«¤é¸À¤¦¤È¡¢TLSv1.x¤Ç¤ÏPOODLE¤Ø¤Î±Æ¶Á¤¬Ìµ¤¤»ö¤¬³Îǧ¤Ç¤­¤Þ¤·¤¿¡£

    OpenSSL¤Î¥½¡¼¥¹¥³¡¼¥É¤Ç¤Ï¡¢ssl¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¤Ë SSL/TLS´Ø·¸¤Î¥³¡¼¥É¤¬¤Þ¤È¤á¤é¤ì¤Æ¤ª¤ê¡¢Âç¤Þ¤«¤Ë¡¢

    • s3_*.c SSLv3(or TLSv1.x)¤Î¥³¡¼¥É
    • d1_*.c DTLSv1¤Î¥³¡¼¥É
    • t1_*.c TLSv1.x¤Î¥³¡¼¥É
    ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ CBC¥â¡¼¥É¤Î¥Ñ¥Ç¥£¥ó¥°½èÍý¤Ë¤Ä¤¤¤Æ¤Ï¡¢SSLv3¡¢TLSv1.x¶¦¤Ë¡¢ ssl/s3_cbc.c ¤ËÄêµÁ¤¬¤¢¤ê¡¢°Ê²¼¤Î´Ø¿ô¤Ç¥Ñ¥Ç¥£¥ó¥°Éôʬ¤Îºï½ü¤È¥Ñ¥Ç¥£¥ó¥°¤Î¥Á¥§¥Ã¥¯ ¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
    • ssl3_cbc_remove_padding
    • tls1_cbc_remove_padding
    ´Ø¿ôssl3_cbc_remove_padding¤Ç¤Ï¡¢ ³Î¤«¤Ë¥Ñ¥Ç¥£¥ó¥°¤ÎÃͤò¥Á¥§¥Ã¥¯¤·¤Æ¤¤¤Ê¤¤¤³¤È¤¬³Îǧ¤Ç¤­¡¢ ´Ø¿ôtls1_cbc_remove_padding¤Ç¤Ï¡¢
    # to_check¡§¥Á¥§¥Ã¥¯¤¬É¬Íפʥѥǥ£¥ó¥°¥Ð¥¤¥È¿ô # padding_length¡§¥Ñ¥Ç¥£¥ó¥°Ä¹¤ÎÃͥХ¤¥È # b¡§¥Á¥§¥Ã¥¯ÂоݤÎÃͥХ¤¥È for (i = 0; i < to_check; i++) { unsigned char mask = constant_time_ge_8(padding_length, i); unsigned char b = rec->data[rec->length-1-i]; /* The final |padding_length+1| bytes should all have the value * |padding_length|. Therefore the XOR should be zero. */ # XOR¤ò¼è¤Ã¤Æ¥¼¥í¤Ê¤é¤Ð¥Ñ¥Ç¥£¥ó¥°Ä¹¤ÎÃͥХ¤¥È¤ÈÂоݤϰìÃ× good &= ~(mask&(padding_length ^ b)); }
    ¤Î¤è¤¦¤ËTLSv1.0¤Ç¤âTLSv1.1¤Ç¤âTLSv1.2¤Ç¤â ¶¦ÄÌ¤ÇÆ±¤¸¥Ñ¥Ç¥£¥ó¥°ÃͥХ¤¥ÈÎó¤Î¥Á¥§¥Ã¥¯¤ò¹Ô¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢ TLSv1.0¤ÇPOODLE¹¶·â¤Î±Æ¶Á¤¬Ìµ¤¤»ö¤¬³Îǧ¤Ç¤­¤Þ¤·¤¿¡£

    ¤È¤ê¤¢¤¨¤ºOpenSSL¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤³¤ó¤Ê½ê¤Ç¡£

    (³)RSA¤ÈECDSA¡¢½ð̾À¸À®¤È½ð̾¸¡¾Ú¤É¤Ã¤Á¤¬Â®¤¤¡©

    Á°²ó¤Îµ­»ö¤Ç¤Ï¡¢½ð̾À¸À®¤È½ð̾¸¡¾Ú¤È¤«¡¢RSA¤ÈECDSA¤È¤«¤É¤Ã¤Á¤¬Â®¤¤¤Î¤«OpenSSL¤äJava JCE¤ò»È¤Ã¤ÆÂ®ÅÙ¤ÎÈæ³Ó¤ò¤·¤Þ¤·¤¿¡£°ìÅÙºî¤Ã¤¿½ð̾¤ò²¿²ó¤«¸¡¾Ú¤Ë»È¤¦¤È¤¤¤¦¥±¡¼¥¹¤â¤¢¤ë¤Î¤Ç¡¢¸¡¾Ú¤Ë¤«¤«¤ë»þ´Ö¤Ï¤È¤Æ¤â½ÅÍפÀ¤È»×¤¤¤Þ¤¹¡£º£Æü¤Ï¡¢Á°²ó¤ÎÈæ³Ó¤ò¤µ¤é¤Ë·¡¤ê²¼¤²¤Æ¤ß¤¿¤¤¤È»×¤¤¤Þ¤¹¡£

    ¡¦½ð̾¸¡¾Ú¤Î®ÅÙ¤Ï(º£²æ¡¹¤¬ÉáÄ̤˻Ȥ¦¸°Ä¹¤Ç¤Ï)RSA¤ÎÊý¤¬ÃÇÁ³Â®¤¤
    ¡¦¤·¤«¤·¤Ê¤¬¤éECC¤Ï¸°Ä¹¤¬Ä¹¤¯¤Æ¤âÃÙ¤¯¤Ê¤é¤Ê¤¤¤È¤¤¤¦ÆÃħ¤¬¤¢¤ë¤Î¤Ç¤¤¤Ä¤«µÕž¤¹¤ë¤Ï¤º

    ¸°Ä¹¤¬Ä¹¤¤¤ÈRSAÉÔÍø¡¢ECDSAÍ­Íø¤Ë¤Ê¤Ã¤Æ¤¯¤ë¤Î¤Ç¤¤¤Ä¤«Â®Å٤εÕž¤¬µ¯¤­¤ë¤Î¤À¤í¤¦¤È»×¤¤¤Þ¤¹¡£¤Ç¤Ï¡¢¤½¤ì¤¬¸°Ä¹¤È¤·¤Æ¤¤¤Ä¤Ê¤Î¤«¤òÄ´¤Ù¤¿¤¤¤È»×¤¤¤Þ¤¹¡£

    NIST¤Î°Å¹æ¶¯ÅÙ¤ÎÈæ³Óɽ¤òºÆÅÙ°úÍѤ·¤Þ¤¹¡£

    ¶¦Ä̸°°Å¹æ
    ÁêÅö
    RSAECDSA
    80 1024 160-223
    1122048 224-255
    1283072 256-383
    1927680 384-511
    25615360512-

    ¤Þ¤º¤Ï¡¢Æ±¤¸°Å¹æ¶¯ÅÙ¤ÎECC¡¢RSA¤Î¸°Ä¹¤ËÂФ·¤ÆÉôֽð̾¸¡¾Ú²ó¿ô¤ò¥×¥í¥Ã¥È¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
    cmp6-verify2
    ¤´Í÷¤ÎÄ̤궦Ä̸°°Å¹æ¤Ç200bitÁêÅö¡¢RSA¤Ê¤é9000bit¡¢ECC¤Ê¤é200bitÄøÅ٤νê¤Ç½ð̾¸¡¾Ú¤Î ¤Î¥¹¥Ô¡¼¥É¤¬µÕž¤·¤Æ¤¤¤ë¤è¤¦¤Ë¸«¤¨¤Þ¤¹¡£²æ¡¹¤¬¸½ºßÍøÍѤ¹¤ë¤³¤È¤Î¿¤¤2048¡Á4096bitÄøÅ٤ΠRSA¤Î¸°¤Ê¤é¤Þ¤À¤Þ¤À½½Ê¬¹â®¤Ç¤¢¤ë¤³¤È¤Ï¸À¤¨¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£

    ¾åµ­¤Î¥°¥é¥Õ¤¬»Ø¿ô´Ø¿ôŪ¤Ê¤Î¤Çº£ÅÙ¤ÏÉôֽð̾²ó¿ô¤ÎÂпô¤ò¼è¤Ã¤Æ¥×¥í¥Ã¥È¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
    cmp7-verify3log
    ¥°¥é¥Õ¤«¤é¡¢°Å¹æ¶¯ÅÙ¤ËÂФ·¤Æ¤Ï¤Û¤Ü¥ê¥Ë¥¢¤ËÉôֽð̾®ÅÙ¤ÎÂпô¤¬¿ä°Ü¤·¡¢ ¶¦Ä̸°°Å¹æÁêÅö¤Î°Å¹æ¶¯Å٤μ´¤Ç¤¢¤ëxºÂɸ¤¬212.5423729(bit)¤Î»þ¤Ë¡¢ RSA¤ÈECC¤Î½ð̾¸¡¾Ú¤Î®ÅÙ¤¬µÕž¤·¤Æ¤¤¤Þ¤¹¡£

    ¤½¤ì¤Ç¤Ï¡¢¶¦Ä̸°°Å¹æ¤Î¶¯ÅÙ¤Ç213bit¤È¤¤¤¦¤³¤È¤ÏRSA¤äECC¤Ç¤Ï¤É¤ÎÄøÅ٤θ°Ä¹¤Ë ÁêÅö¤¹¤ë¤Î¤Ç¤·¤ç¤¦¤«¡£ ¶¦Ä̸°°Å¹æ°Å¹æ¶¯ÅÙ¤ÈÆ±Åù¤ÎECC¡¢RSA¤Î¸°Ä¹¤ÏºÇ½é¤ÎNIST¤Îɽ¤«¤é ¤³¤ì¤â»Ø¿ô´Ø¿ôŪ¤Ê¤Î¤ÇRSA¤Î¸°Ä¹¤È¡¢ECC¤Î¸°Ä¹¤ÎÂпô¤ò»È¤Ã¤Æ¥×¥í¥Ã¥È¤·¤Æ¤ß¤Þ¤¹¡£
    cmp8-strength
    ¤¹¤ë¤È¡¢¤´Í÷¤Î¤è¤¦¤Ë¼è¤Ã¤¿Âпô¤ËÂФ·¤Æ¤Û¤Ü¥ê¥Ë¥¢¤Ë¿ä°Ü¤¹¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£ ¶¦Ä̸°°Å¹æ¤Î°Å¹æ¶¯ÅÙ¤Ç213bit¤È¤¹¤ëÅÀ¤ÏRSA¤À¤Èy¼´¤¬3.965¡¢ECC¤À¤È2.612¤È¤Ê¤ê¡¢ ¤³¤ì¤é¤Ï»Ø¿ô¤ËÌᤷ¤Æ

    RSA¤ÈECDSA¤ÈƱ¤¸°Å¹æ¶¯Å٤ǽð̾¸¡¾Ú®ÅÙ¤¬µÕž¤¹¤ë¤Î¤Ï
    ¡¦RSA¤À¤È9234bit ¤Î¤È¤­
    ¡¦ECC¤À¤È409bit¤Î¤È¤­
    ¤È¤¤¤¦¤³¤È¤Î¤è¤¦¤Ç¤¹¡£¤³¤ÎÃͤ˶á¤Å¤¤¤Æ¤ë¤è¤¦¤Ê¤éECDSA¤Ø¤Î°Ü¹Ô¤ò¹Í¤¨¤¿Êý¤¬ ¤è¤¤¤È¤¤¤¦¤³¤È¤Ê¤ó¤Ç¤·¤ç¤¦¤Í¡£

    º£ÈդϤ³¤ÎÊÕ¤Ç

    ¤¢¡¢¤½¤¦¤½¤¦¡£¤³¤ì½ñ¤¤¤Æ¤¤¤ëÅÓÃæ¤Çizu¤µ¤ó¤Î¤È¤Æ¤â¤¿¤á¤Ë¤Ê¤ë´ØÏ¢µ­»ö¤òȯ¸«¤·¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£ÅÎÀñ¤Ê¸¦µæ¼Ô¤ÎÆüµ­¡ÖRSA°Å¹æ¤Î¶¯ÅÙ (2009.11.19)¡×¡£

    RSA¤ÈECDSA¡¢½ð̾À¸À®¤È½ð̾¸¡¾Ú¤É¤Ã¤Á¤¬Â®¤¤¡©

    2013ǯ9·î4Æü¤Ë³«ºÅ¤µ¤ì¤¿OpenID Tech Night Vol.10 ¤Ë»²²Ã¤·¤Æ¤Æ¡¢

    Â礭¤Ê¥×¥í¥Ð¥¤¥À¤Ç¤ÏRSA½ð̾¤Î¸¡¾Ú¤Ï·ë¹½ÂçÊѤǤ¹¡£ RSA¤Ï½ð̾¤è¤ê¤â¸¡¾Ú¤ÎÊý¤¬·×»»¥³¥¹¥È¤¬¤«¤«¤ë¤Î¤Ç...

    ¤ß¤¿¤¤¤ÊÏäò¤µ¤ì¡¢¡Ö¤ó¤ó¡©µÕ¤¸¤ã¤Ê¤¤¤Î¡£RSA½ð̾¤Î¸¡¾Ú¤Ï½ð̾À¸À®¤è¤ê¤â°µÅÝŪ¤Ë·×»»¥³¥¹¥ÈÄ㤤¤è¤Í¡£¡×¤È¤« »×¤Ã¤Æ¤¿¤ï¤±¤Ç¡Ö¤¬¤¬¡Á¡Á¤ó¡×¤È¡£ ¡Ö¤Þ¤¡¡¢¤Á¤ç¤Ã¤ÈÄ´¤Ù¤Æ¤ß¤ë¤Ù¤§¡£¡×¤È¼ê»ý¤Á¤Î¥Î¡¼¥ÈPC¤ÇÄ´¤Ù¤Æ¤ß¤Þ¤·¤¿¡£

    ¸¡¾ÚÆâÍÆ

    °Ê²¼¤Î¤³¤È¤ò¸¡¾Ú¤·¤Æ¤ß¤¿¤¤¤È»×¤¤¤Þ¤¹¡£

    • ½ð̾¤ÎÀ¸À®¤È¸¡¾Ú¤Ç¤Ï¤É¤Á¤é¤¬Â®¤¤¤Î¤«¡£RSA¤ÈECC(ECDSA)¤Ç¤Ï°ã¤¤¤¬¤¢¤ë¤Î¤«¡£
    • Æ±ÄøÅ٤ΰŹ涯ÅÙ¤ÎRSA½ð̾¤ÈECDSA½ð̾¤Ç¤Ï¤É¤ì¤¯¤é¤¤Â®ÅÙº¹¤¬¤¢¤ë¤Î¤«¡£
    • RSA½ð̾¤Ç¤Ï¸°Ä¹¤¬ÊѤï¤Ã¤¿¤È¤­¡¢¤É¤ì¤¯¤é¤¤Â®ÅÙº¹¤¬¤¢¤ë¤Î¤«¡£
    • ECDSA½ð̾¤Ç¤ÏÂʱ߶ÊÀþ¤ä¸°Ä¹¤¬ÊѤï¤Ã¤¿¤È¤­¡¢¤É¤ì¤¯¤é¤¤Â®ÅÙº¹¤¬¤¢¤ë¤Î¤«¡£
    • Ruby+OpenSSL¤ÈJava JCE¤Ç¤Ï¤É¤ì¤¯¤é¤¤Â®ÅÙº¹¤¬¤¢¤ë¤Î¤«¡£
    ¤Ê¤ó¤«¡¢Âʱߡ֥ޥ󥻡¼¡×¤ß¤¿¤¤¤Ê¿Í¤â¤ª¤é¤ì¤Þ¤¹¤¬¡¢ ¡ÖÂʱߤϸ°Ä¹¤¬Ã»¤¤¤«¤é°µÅÝŪ¤Ë®¤¤¡×¤ß¤¿¤¤¤Ê»ö¤ò¸À¤¤½Ð¤¹¿Í¤â¤¤¤Æ ¡Ö¥Û¥ó¥Þ¤«¤¤¤Ê¡©¡×¤ÈÄ´¤Ù¤Æ¤ß¤¿¤«¤Ã¤¿¤ï¤±¤Ç¤¹¡£ ÂʱߤäƴüÂÔ¤¹¤ë¤Û¤É¤½¤ó¤Ê¤Ë®¤¯¤Ê¤¤¤Ç¤¹¤è¤Í¡© ¤à¤·¤íÃÙ¤¤¤Ç¤¹¤è¤Í¡£

    ¸¡¾ÚÊýË¡¡¦¸¡¾Ú´Ä¶­

    ¸À¸ì¤ÎÊФ꤬¤¢¤ë¤Î¤âÎɤ¯¤Ê¤¤¤Î¤ÇOpenSSL¥Ù¡¼¥¹¤Î¤â¤Î¤ÈJava JCE¥Ù¡¼¥¹¤Î¤â¤Î¤ÈÄ´¤Ù¤Þ¤¹¡£ ¤¤¤Á¤¤¤ÁOpenSSL¤òC¤Ç½ñ¤¯¤Î¤âÌÌÅݤʤΤǡ£Ruby¤ò»È¤¤¤Þ¤·¤¿¡£ ½èÍý»þ´Ö¤Î¬ÄêÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï¡¢Ruby+OpenSSL¡¢Java JCE¤Ç¼¡¤Î¤è¤¦¤Ê´ÑÅÀ¤Ç¬Äꤷ¤Æ¤¤¤Þ¤¹¡£

    ¶¦ÄÌ
    • ¸°¤ä¾ÚÌÀ½ñ¤Î¥í¡¼¥É¤Î»þ´Ö¤Ï½èÍý»þ´Ö¤Ë´Þ¤á¤Ê¤¤¡£
    • ¬Äê¾ò·ïÅý°ì¤Î¤¿¤á¥Ï¥Ã¥·¥å·×»»¤Î»þ´Ö¤Ï½èÍý»þ´Ö¤Ë´Þ¤á¤ë¡£
    • Ʊ°ì¤Î¥Þ¥·¥ó¤Ç¬Äꤹ¤ë¡£
    • ºÆÍøÍѤ·¤Ê¤¤Æ±°ì¤Î¸°¤Ç2000²ó¤Î½ð̾À¸À®¡¢½ð̾¸¡¾Ú¤Î»þ´Ö¤ò·×¬¡£
    • ¸ø³«¸°°Å¹æ¤Î¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤òÃΤꤿ¤¤¤À¤±¤Ê¤Î¤Ç½ð̾ÂоݤÏ"aaa"¤Îû¤¤Ê¸»úÎó¡£
    • SHA1withRSA¤â¤·¤¯¤ÏSHA1withECDSA¤ÇÈæ³Ó¤¹¤ë¡£
    Ruby+OpenSSL
    • Rubyɸ½à¤Î'benchmark'¥â¥¸¥å¡¼¥ë¤òÍѤ¤¡¢¥ê¥Ï¡¼¥µ¥ë¤â¹Ô¤¦¡£benchmark¤Îreal¤Î»þ´Ö¤òÍѤ¤¤ë¡£
    Java JCE
    • ¥¤¥Æ¥ì¡¼¥·¥ç¥ó¥ë¡¼¥×¤ÎÁ°¸å¤Ç¤ÎSystem.currentTimeMillis()¤ÎÃͤκ¹¤ò½èÍý»þ´Ö¤È¤¹¤ë¡£
    ºÙ¤«¤¤¸¡¾Ú´Ä¶­¾ðÊó¤Ï°Ê²¼¤ÎÄ̤ê¤È¤Ê¤ê¤Þ¤¹¡£
    ¸¡¾Ú´Ä¶­
    ¥Þ¥·¥óLenovo X201s
    CPUIntel Core i7 L620 2.00GHz
    ¥á¥â¥ê8GB
    OSMicrosoft Windows 7 Professional 32bit SP1
    Java
    ¥Ð¡¼¥¸¥ç¥óOracle Java 1.7.0 build 1.7.0-b147
    RSA½ð̾JCE¥×¥í¥Ð¥¤¥ÀSunRsaSign 1.7 Provider
    ECDSA½ð̾JCE¥×¥í¥Ð¥¤¥ÀSunEC 1.7 Provider
    Ruby (+ OpenSSL)
    ¥Ð¡¼¥¸¥ç¥ócygwin C Ruby 1.9.3p194
    OpenSSLOpenSSL 1.0.1c

    Ruby + OpenSSL¤Ç½ð̾

    Ruby + OpenSSL¤ÇRSA¤äECDSA½ð̾¤¹¤ë¤Ë¤Ï¡¢OpenSSL¥³¥Þ¥ó¥É¤ÇÉáÄÌ¤Ë PKCS#5¤ÎÈëÌ©¸°¤È¸ø³«¸°¤ò½àÈ÷¤·¤Æ¤³¤ó¤Ê´¶¤¸¤Ç½ð̾À¸À®¡¢½ð̾¸¡¾Ú¤¹¤ì¤Ð¥è¥í¥·¡£

    # ECDSA¤Î½ð̾À¸À®
    prvKey = OpenSSL::PKey::EC.new(File.read(PKCS#5ÈëÌ©¸°PEM))
    hashed = OpenSSL::Digest::SHA1.digest(½ð̾Âоݥá¥Ã¥»¡¼¥¸)
    sigVal = prvKey.dsa_sign_asn1(hashed)
    
    # ECDSA¤Î½ð̾¸¡¾Ú
    pubKey = OpenSSL::PKey::EC.new(File.read(PKCS#5¸ø³«¸°PEM))
    hashed = OpenSSL::Digest::SHA1.digest(data)
    isValid = pubKey.dsa_verify_asn1(hashed, sigVal)
    
    # RSA¤Î½ð̾À¸À®
    prvKey = OpenSSL::PKey::RSA.new(File.read(PKCS#5ÈëÌ©¸°PEM))
    sigVal = prvKey.sign("sha1", data)   
    
    # RSA¤Î½ð̾¸¡¾Ú
    pubKey = OpenSSL::PKey::RSA.new(File.read(PKCS#5¸ø³«¸°PEM))
    isValid = pubKey.verify("sha1", sigVal, data)   
    
    ECDSA¤Î»þ¤Ï¥Ï¥Ã¥·¥å¤ò¼«Ê¬¤Ç·×»»¤¹¤ë¤Î¤È¡¢ ECDSA¤Î½ð̾ÃͤòASN.1¹½Â¤¤Çɽ¸½¤¹¤ë¤³¤È¤Ëµ¤¤ò¤Ä¤±¤ì¤ÐÌäÂê¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£

    Java JCE¤Ç½ð̾

    ºÇ¶á¡¢¥­¡¼¥¹¥È¥¢»È¤Ã¤Æ³Ú¤·¤Æ¤¿¤Î¤ÇÉáÄ̤˸°¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢ PKCS#8 DER¤¸¤ã¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤ó¤À¤è¤Ê¤È¤«Ãµ¤·¤Æ¤ß¤ë¤È ¼«Ê¬¤Îµ­»ö ¡ÖOpenSSL¤Ç¸°À¸À®¤·¤¿ÈëÌ©¸°¤òJava¤Ç»È¤¦¡×¤¬¸«¤Ä¤«¤Ã¤Æ½õ¤«¤ê¤Þ¤·¤¿¡£ ÈëÌ©¸°¥Õ¥¡¥¤¥ë¤ÏPKCS#8¤Ë¤·¤È¤¤¤Æ¡¢¸ø³«¸°¤âPKCS#8¤Ë¤·¤è¤¦¤È¤·¤¿¤é ¡ÖÆÉ¤á¤Ê¡Á¡Á¡Á¤¤¡ª¡ª¡×¸°¤Ï¥Ñ¥é¥á¡¼¥¿¤Î¿ôÃÍ(BigInteger)¤ò»ØÄꤹ¤ë¤« ¾ÚÌÀ½ñ¤¸¤ã¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤½¤¦¤À¡£»ÅÊý¤Ê¤¤¤«¤é̵Íý¤ä¤ê¼«¸Ê½ð̾¾ÚÌÀ½ñ¤òºî¤ê¤Þ¤·¤¿¡£

    ECDSA¤Î½ð̾À¸À®¤Ï¤³¤ó¤Ê´¶¤¸¡£

    KeySpec keySpec = new PKCS8EncodedKeySpec(PKCS#8ÈëÌ©¸°DER¤Î¥Ç¡¼¥¿byteÇÛÎó);
    KeyFactory kf = KeyFactory.getInstance("EC");
    PrivateKey prvKey = kf.generatePrivate(keySpec);
    Signature sig = Signature.getInstance("SHA1withECDSA");
    sig.initSign(prvKey);
    sig.update(½ð̾Âоݥǡ¼¥¿aaa);
    sigVal = sig.sign();
    

    RSA¤Î½ð̾À¸À®¤Ï¤³¤ó¤Ê´¶¤¸¡£

    KeySpec keySpec = new PKCS8EncodedKeySpec(PKCS#8ÈëÌ©¸°DER¤Î¥Ç¡¼¥¿byteÇÛÎó);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    PrivateKey prvKey = kf.generatePrivate(keySpec);
    Signature sig = Signature.getInstance("SHA1withRSA");
    sig.initSign(prvKey);
    sig.update(½ð̾Âоݥǡ¼¥¿aaa);
    sigVal = sig.sign();
    

    RSA¤äECDSA¤Î½ð̾¸¡¾Ú¤Ï¤³¤ó¤Ê´¶¤¸¡£

    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    X509Certificate cer = (X509Certificate)cf.generateCertificate(new FileInputStream(¸ø³«¸°¾ÚÌÀ½ñ));
    pubKey = cer.getPublicKey();
    Signature sig = Signature.getInstance("SHA1withECDSA"); // RSA¤Ê¤éSHA1withRSA
    sig.initVerify(pubKey);
    sig.update(½ð̾Âоݥǡ¼¥¿);
    isValid = sig.verify(sigVal);
    

    ºÇ½é¡¢BouncyCastle»È¤¨¤Ð¤¤¤¤¤«¤È¤â»×¤Ã¤¿¤ó¤Ç¤¹¤¬¡¢ Java SE 7¤«¤éÂʱßÍѤΥץí¥Ð¥¤¥ÀSunEC¤¬É¸½àÄ󶡤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤Ç¡¢ Java SE 7¤Îɸ½à¥Ð¥ó¥É¥ë¤µ¤ì¤¿¥×¥í¥Ð¥¤¥À¤ò»È¤¦¤³¤È¤Ë¤·¤Þ¤·¤¿¡£ ¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ëÂʱ߶ÊÀþ¤Ï¤É¤¦¤À¤Ã¤±¤È»×¤Ã¤¿¤é Á°¤Ë¼«Ê¬¤ÇÄ´¤Ù¤Æ¤¢¤Ã¤¿¤Î¤Ç¤½¤ì¤ò»²¹Í¤Ë¤·¤Þ¤·¤¿¡£ ( ½Ë Java SE 7 ¥ê¥ê¡¼¥¹µ­Ç°¡ÖJCE¤Ï¤É¤¦¤Ê¤Ã¤Æ¤ó¤Î¡©¡×)

    RSA¤ÈECC¤Î°Å¹æ¶¯ÅÙÂбþ

    °ìÈ̤ˡ¢

    • ECC 160bit ¤Ï RSA 1024bit¤ËÁêÅö¤¹¤ë¡¢¤È¤«
    • ECC 256bit ¤Ï RSA 3072bit¤ËÁêÅö¤¹¤ë¡¢¤È¤«
    ¸À¤ï¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢Ä´¤Ù¤Æ¸«¤ë¤È¡¢ NIST SP800-57 Recommendation for Key Management - Part1: General¤Î 5.6.1Àá Comparable Algorithm Strength¤ÇÂоݰŹ桢RSA¡¢DSA¡¢ECC(ECDSA)¤Î¸°Ä¹¤È °Å¹æ¶¯ÅÙ¤ÎÂбþ¤Îɽ¤¬¤¢¤ê¡¢ RFC 5656 Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer¤Ç¤â°úÍѤ·¤Æ¤Þ¤¹¡£(¤³¤Ã¤Á¤ÎÊý¤¬¸«¤ä¤¹¤¤)

    ɽ¤ò°úÍѤ·¤Æ¤ª¤­¤Þ¤·¤è¤¦¡£

    ¶¦Ä̸°°Å¹æDSARSAECDSA
    80 L=1024,N=160 1024 160-223
    112L=2048,N=256 2048 224-255
    128L=3072,N=256 3072 256-383
    192L=7680,N=384 7680 384-511
    256L=15360,N=51215360512-

    (·ë²Ì1)RSA¤Î½ð̾À¸À®¤È½ð̾¸¡¾Ú¤Ï¤É¤Ã¤Á¤¬Â®¤¤¤«

    ¤Þ¤º¤ÏRSA¸°¤Ç¤Î½ð̾¤È¸¡¾Ú¤¬¤É¤ì¤¯¤é¤¤°ã¤¦¤Î¤«¸«¤Æ¤ß¤Þ¤·¤ç¤¦¡£


    cmp1-rsa-sign-verify

    ½ð̾¤ÈÀ¸À®¤Ç¤Ï¡¢½ð̾¤ÎÊý¤¬°µÅÝŪ¤Ë»þ´Ö¤¬¤«¤«¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£ ¤Þ¤¿¡¢¸°Ä¹¤¬Ä¹¤¯¤Ê¤ë¤Û¤É»Ø¿ô´Ø¿ôŪ¤Ë»þ´Ö¤¬¤«¤«¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£ ½ð̾À¸À®¤Ë´Ø¤·¤Æ¤ÏÆÃ¤ËJava JCE¤ÎÃÙ¤µ¤¬¸²Ãø¤Ç¤¹¡£

    (·ë²Ì2)ECDSA¤Î½ð̾À¸À®¤È½ð̾¸¡¾Ú¤Ï¤É¤Ã¤Á¤¬Â®¤¤¤«

    ¥°¥é¥Õ¤«¤éECDSA¤Ç¤ÏRSA¤È¤ÏµÕ¤Ë½ð̾¸¡¾Ú¤è¤ê½ð̾À¸À®¤ÎÊý¤¬ ¤ï¤º¤«¤Ê¤¬¤é®¤¤¤Ç¤¹¤¬¡¢¤¢¤Þ¤êÊѤï¤é¤Ê¤¤¤È¤¤¤¦¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£ ¤Þ¤¿¡¢Æ±¤¸¸°Ä¹¤Îsecp160r1, secp160r2, secp160k1¤È¤Ç¤Ï ¤Û¤È¤ó¤É½èÍý®Å٤ˤϰ㤤¤Ï¤Ê¤¯¡¢¸°Ä¹¤¬Ä¹¤¯¤Ê¤ë¤È½èÍý»þ´Ö¤ÏÁý¤¨¤Þ¤¹¤¬¡¢ RSA¤¬Èó¾ï¤Ë¸°Ä¹¤Î±Æ¶Á¤ò¼õ¤±¤ë¤Î¤ËÂФ·¡¢ECDSA¤Ç¤Ï ¤¢¤Þ¤ê¸°Ä¹¤¬Ä¹¤¯¤Ê¤Ã¤Æ¤â½èÍý»þ´Ö¤¬Ä¹¤¯¤Ï¤Ê¤é¤Ê¤¤»ö¤¬¤ï¤«¤ê¤Þ¤¹¡£


    cmp2-ecdsa-sign-verify

    (·ë²Ì3)Ʊ¤¸°Å¹æ¶¯Å٤ǤÏRSA¤ÈECDSA¤È¤É¤Á¤é¤¬Â®¤¤¤«

    ECC 160bit ¤ÈRSA 1024bit¤Ï¤Û¤ÜƱÅù¤Î°Å¹æ¶¯Å٤Ǥ¹¡£ ECDSA¤ÈÈæ³Ó¤·¤Æ¡¢RSA¤Ï½ð̾À¸À®¤Ï¤È¤Æ¤âÃÙ¤¤¤¬¡¢½ð̾¸¡¾Ú¤Ï ¤È¤Æ¤â®¤¤¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£


    cmp3-ecc160rsa

    ¸°Ä¹¤¬Ä¹¤¤¥±¡¼¥¹¡¢ECC 256bit ¤ÈƱÅù¤ÊRSA 3072bit ¤òÈæ³Ó¤·¤Æ¤ß¤ë¤È¡¢ ½ç½ø´Ø·¸¤ÏÊѤï¤ê¤Þ¤»¤ó¤¬¡¢¸°Ä¹¤¬Ä¹¤¯¤Ê¤Ã¤¿Ê¬¡¢ Èó¾ï¤ËRSA½ð̾¤ÎÀ¸À®»þ´Ö¤¬Ä¹¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤³¤ì¤ËÂФ·¡¢ECDSA¤Ç¤ÏRSA¤Û¤É¤Ï¸°Ä¹¤¬Ä¹¤¯¤Ê¤Ã¤¿±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤Þ¤»¤ó¡£


    cmp4-ecc256rsa

    ¤Þ¤È¤á

    ´Êñ¤Ë¤Þ¤È¤á¤ë¤È»þ´Ö¤¬¤«¤«¤ë½ç¤Ë

    • RSA½ð̾¤ÎÀ¸À®¤Ë¤ÏÈó¾ï¤Ë»þ´Ö¤¬¤«¤«¤ë
    • ECDSA¤Î½ð̾¸¡¾Ú¤Ï½ð̾À¸À®¤è¤ê¤Û¤ó¤Î¾¯¤·Ä¹¤¯»þ´Ö¤¬¤«¤«¤ë
    • ECDSA¤Î½ð̾À¸À®¤ÏÉáÄ̤˻þ´Ö¤¬¤«¤«¤ë
    • RSA½ð̾¤Î¸¡¾Ú¤ÏÈó¾ï¤Ëû»þ´Ö¤Ç¤¢¤ëECDSA¤Î½ð̾À¸À®¤ÏÉáÄ̤˻þ´Ö¤¬¤«¤«¤ë
    • RSA¤Ç¤Ï¸°Ä¹¤¬Ä¹¤¯¤Ê¤ë¤Û¤É¤½¤Î·¹¸þ¤¬¸²Ãø¤Ë¤Ê¤ë¡£
    • ECDSA¤ÏRSA¤Û¤É¤Ï¸°Ä¹¤¬Ä¹¤¯¤Ê¤ë±Æ¶Á¤ò¼õ¤±¤Ê¤¤¡£
    ¤È¤¤¤Ã¤¿´¶¤¸¤Ç¤·¤ç¤¦¤«¡£Ç§¼±¤·¤Æ¤¿¤È¤ª¤ê¤ÇÎɤ«¤Ã¤¿¤Ê¤¡¤È»×¤¤¤Þ¤·¤¿¡£º£Æü¤Ï¤³¤ÎÊդǡ£

    ¿ÞÀâ¡§PKCS#5ÈëÌ©¸°¤ò¥Ñ¥¹¥ï¡¼¥ÉÊݸ¤ë¶¦Ä̸°¤ÈIV¤Îºî¤êÊý(µ­»ö½¤Àµ)

    ¥Ñ¥¹¥ï¡¼¥É¤ÇÊݸ¤ì¤¿PEM·Á¼°¤ÎPKCS#5 RSAÈëÌ©¸°¤òÉü¹æ¤·¤Æ¼è¤ê½Ð¤·¤Æ½ð̾¤Ê¤ó¤«¤Ë»È¤¨¤ë¤è¤¦¤ÊJavaScript¥é¥¤¥Ö¥é¥ê¤òºî¤ê¤¿¤¤¤È»×¤Ã¤Æ¤ë¤ó¤Ç¤¹¤¬¡¢¤Ê¤ó¤«¸½¶È¤¬Ë»»¦¤µ¤ì¤Æ¤ª¤ê¤½¤ó¤Ê»þ´Ö¤â¤Ê¤¯¡£¤¿¤À¡¢¤½¤ó¤Ê»ö¤Ç¤Ï¤â¤¦¥¨¥ó¥¸¥Ë¥¢¤È¤·¤ÆµÍ¤ó¤Ç¤¤¤ë¤Ê¤¡¤È»×¤¤¥ê¥Ï¥Ó¥ê¤Î¤¿¤á¤Ë¤¤¤í¤¤¤íÄ´¤Ù¤Æ¤ß¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£

    ¥Ñ¥¹¥ï¡¼¥ÉÊݸ¤ì¤¿PKCS#5 PEM·Á¼°¤ÎÈëÌ©¸°

    OpenSSH¤Î¸ø³«¸°Ç§¾Ú¤ä¡¢OpenSSL¥Ù¡¼¥¹¤Ç¤ÎCA¤ä¡¢Apache¥µ¡¼¥Ð¡¼¤Îµ¯Æ°¤Ê¤É¤Ç¥Ñ¥¹¥ï¡¼¥ÉÊݸ¤ì¤¿PKCS#5 PEM·Á¼°¤Î¸ø³«¸°°Å¹æ¤ÎÈëÌ©¸°¤ò»È¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£°ìÈ̤ˤϤ³¤ó¤Ê´¶¤¸¤Î¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Ë¤Ê¤Ã¤Æ¤Þ¤¹¡£

    -----BEGIN RSA PRIVATE KEY----- ¢«­¡PKCS#5 RSAÈëÌ©¸°¤ò¼¨¤¹¥Ø¥Ã¥À
    Proc-Type: 4,ENCRYPTED ¢«­¢¶¦Ä̸°°Å¹æ¤ÇÈëÌ©¸°¤ò°Å¹æ²½¤·¤Æ¤¤¤ë¤³¤È¤ò¼¨¤¹
    DEK-Info: DES-EDE3-CBC,E83B4019057F55E9 ¢«­£¶¦Ä̸°°Å¹æÊý¼°¤È¡¢¥½¥ë¥È¤ò´Þ¤à½é´ü²½¥Ù¥¯¥¿

    iIPs59nQn4RSd7ppch9/vNE7PfRSHLoQFmaAjaF0DxjV9oucznUjJq2gphAB2E2H ¢«­¤¶¦Ä̸°¤Ç°Å¹æ²½¤µ¤ì¤¿ÈëÌ©¸°ËÜÂÎ
    1r9k4e7lc7LZjF0RIgfeRl7MKmLHVCNo2EhPkt5yTb6bNdf3trS03+N+L5zBoaVp
    °Ê²¼¡¢Î¬

    PEM·Á¼°¤ÎÈëÌ©¸°¤Ë¤Ï"BEGIN RSA PRIVATE KEY"¤È¤«½ñ¤¤¤Æ¤¢¤ë¤ä¤Ä¤È"BEGIN PRIVATE KEY"¤È¤«½ñ¤¤¤Æ¤¤¤ë¤ä¤Ä¤¬¤¢¤ë¤ó¤Ç¤¹¤±¤É¡¢¤½¤ì¤¾¤ìPKCS#5·Á¼°¤ÈPKCS#8·Á¼°¤Î¸ø³«¸°°Å¹æ¤ÎÈëÌ©¸°¤Ë¤Ê¤ê¤Þ¤¹¡£ PKCS#5¤ÈPKCS#8¤Î¸°·Á¼°¤Î°ã¤¤¤Ï¤¶¤Ã¤È¤³¤ó¤Ê´¶¤¸¡£

    PKCS#5 ÈëÌ©¸°
    • PEM¥Ø¥Ã¥À¤Ë"BEGIN RSA PRIVATE KEY"¤Î¤è¤¦¤Ë¸ø³«¸°°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤¬½ñ¤¤¤Æ¤¢¤ë¡£
    • ¸°ËÜÂΤˤϸø³«¸°°Å¹æ¸°¥¢¥ë¥´¥ê¥º¥à¤ò¼¨¤¹¼±Ê̾ðÊó¤Ï½ñ¤«¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç PEM¥Ø¥Ã¥À¦¤Ç¶èÊ̤¹¤ëɬÍפ¬¤¢¤ë¡£
    • (¿ô»ú¤ÎÍåÎ󤬲¿¸Ä¤¢¤ë¤«¤È¤«¡¢ÍåÎó¤ÎŤµ¤È¤«¤Ç¸«¤ë¿Í¤¬¸«¤ì¤Ð¤ï¤«¤ê¤Þ¤¹¤¬w)
    PKCS#8 ÈëÌ©¸°
    • PEM¥Ø¥Ã¥À¤Ï"BEGIN PRIVATE KEY"¤Î¤è¤¦¤Ë¸ø³«¸°°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤¬½ñ¤¤¤Æ¤Ê¤¤¡£
    • ¸°ËÜÂΤˤϸø³«¸°°Å¹æ¸°¥¢¥ë¥´¥ê¥º¥à¤ò¼¨¤¹¼±Ê̾ðÊó¤¬ASN.1¥ª¥Ö¥¸¥§¥¯¥È¼±ÊÌ»Ò(OID) ¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¡£
    • PKCS#8¤Î¸°¥Ç¡¼¥¿¤Ï¡¢PKCS#5¤Î¸°ËÜÂΤȥ¢¥ë¥´¥ê¥º¥à¼±Ê̻Ҥò¤Þ¤È¤á¤ÆASN.1¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤¿¤â¤Î¡£
    PKCS#5¤ÎÈëÌ©¸°¤Ë¤Ï¤½¤Î¾¤Ë¡¢°Å¹æ²½¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¡¢¸ø³«¸°°Å¹æ¤ÎÈëÌ©¸°¤ò¥Ñ¥¹¥ï¡¼¥É¤ÇÊݸ¤ë ¤¿¤á¤Î¶¦Ä̸°°Å¹æ¤Î¥¢¥ë¥´¥ê¥º¥à¡¢¥½¥ë¥È¤ò´Þ¤à½é´ü²½¥Ù¥¯¥¿¤¬½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£¥½¥ë¥È¤ÏƱ¤¸¥Ñ¥¹¥ï¡¼¥É¤ò»È¤Ã¤Æ¤â ¶¦Ä̸°°Å¹æ¤Î¶¦Ä̸°¤¬Æ±¤¸¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¤³¤È¤¬Ìµ¤¤¤è¤¦¤Ë¸°¤ÎÊݸ»þ¤Ë¤Ä¤±¤é¤ì¤¿8¥Ð¥¤¥È¤ÎŤµ¸ÇÄê¤ÎÍð¿ô¤Ç¤¹¡£¶¦Ä̸°°Å¹æ¤Î¥¢¥ë¥´¥ê¥º¥à¤ä¸°Ä¹¤Ë°Í¸¤·¤ÆÄ¹¤µ¤¬´Þ¤à¡Ö¥½¥ë¥È¤ò´Þ¤à½é´ü²½¥Ù¥¯¥¿¡×¤ÎÀèÆ¬8¥Ð¥¤¥Èʬ¤ò¥½¥ë¥È¤È¤·¤Æ»ÈÍѤ·¤Þ¤¹¡£

    ¶¦Ä̸°°Å¹æ¤Î¶¦Ä̸°¤È½é´ü¥Ù¥¯¥¿IV¤Ï¤É¤¦¤ä¤Ã¤Æºî¤ë¤Î¤«

    ÈëÌ©¸°¤ò»È¤¦¤¿¤á¤Î¥Ñ¥¹¥Õ¥ì¡¼¥º(¥Ñ¥¹¥ï¡¼¥É¡¢PIN¥³¡¼¥É¤È¤â¸Æ¤Ð¤ì¤ë)¤È¡¢Á°½Ò¤Î ¥½¥ë¥È¤«¤é¤É¤Î¤è¤¦¤Ë¶¦Ä̸°¤È½é´ü¥Ù¥¯¥¿¤òÀ¸À®¤¹¤ë¤Î¤«¤òOpenSSL¤Î¥½¡¼¥¹¥³¡¼¥É¤ò į¤á¤Ê¤¬¤éÄ´¤Ù¤Æ¤ß¤Þ¤·¤¿¡£¤³¤Î½èÍý¤ò¹Ô¤¦´Ø¿ô¤Ï "crypto/evp/evp_key.c" ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë "EVP_BytesToKey" ¤È¤¤¤¦´Ø¿ô¤Ç¤¹¡£¤³¤Î´Ø¿ô¤Ï¶¦Ä̸°¤È½é´ü²½¥Ù¥¯¥¿(IV)¤òƱ»þ¤Ëºî¤ë¤â¤Î¤Ç¤¹¤¬¡¢PKCS#5¤Î¸°¥Ç¡¼¥¿¤òÉü¹æ¤¹¤ë¤¿¤á¤Ë¤ÏÀ¸À®¤µ¤ì¤¿¶¦Ä̸°¤Î¤ß¤ò»È¤¤¡¢½é´ü²½¥Ù¥¯¥¿¤Ï´Ø¿ô¤è¤êÀ¸À®¤µ¤ì¤¿¤â¤Î¤Ç¤Ï¤Ê¤¯¡¢PKCS#5¥Õ¥¡¥¤¥ë¤ÎDEK-Info¤Ëµ­ºÜ¤µ¤ì¤¿¥½¥ë¥È¤ò´Þ¤à½é´ü²½¥Ù¥¯¥¿Á´ÂΤò»È¤¤¤Þ¤¹¡£

    ¥Ñ¥¹¥Õ¥ì¡¼¥º¤È¥½¥ë¥È¤«¤é¤É¤Î¤è¤¦¤Ë¶¦Ä̸°¤È½é´ü¥Ù¥¯¥¿(IV)¤òÀ¸À®¤¹¤ë¤Î¤«¤ò¿Þ¤Ë½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£
    EVP_BytesToKey

    ´ðËÜŪ¤Ë¤Ï¥Ñ¥¹¥Õ¥ì¡¼¥º¤Îʸ»úÎó¤È¥½¥ë¥È¤«¤éMD5¥Ï¥Ã¥·¥å¥¢¥ë¥´¥ê¥º¥à¤Î¥Ï¥Ã¥·¥åÃͤò·×»»¤·¡¢ Äê¤á¤é¤ì¤¿Ä¹¤µ¤òÀÚ¤ê½Ð¤·¤Æ¶¦Ä̸°¤ÈIV¤ò¼èÆÀ¤·¤Þ¤¹¡£º£¤Ê¤ªMD5¸ÇÄê¤Ç»È¤ï¤ì¤Æ¤¤¤ë¤È¤¤¤¦¤Î¤Ï ¤¦¡¼¤à¤È¤¤¤¦´¶¤¸¤Ç¤¹¤Í¡£

    ¶¦Ä̸°¤È½é´ü¥Ù¥¯¥¿IV¤òOpenSSL¥³¥Þ¥ó¥É¤Ç´Êñ¤Ë¸«¤ë¤Ë¤Ï

    ¡Ö¸ø³«¸°°Å¹æ¤ÎÈëÌ©¸°¡×¤òºÇ½ªÅª¤ËÊݸ¤ë¡Ö¶¦Ä̸°°Å¹æ¤Î¶¦Ä̸°¡×¤È¡Ö½é´ü¥Ù¥¯¥¿IV¡×¤Ï¡¢ °Å¹æ²½ÂоݤÎÈëÌ©¸°¤ÎÃͤˤϰìÀÚ´Ø·¸¤Ê¤¯¡¢Ã±¤Ë¶¦Ä̸°°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤È¥Ñ¥¹¥³¡¼¥É¤È¥½¥ë¥È¤Î¤ß¤Ç·è¤Þ¤ê¡¢ ´Êñ¤ËOpenSSL¤Î¥³¥Þ¥ó¥É¤Ç¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

    Î㤨¤Ð¡¢¶¦Ä̸°°Å¹æ¤¬¥È¥ê¥×¥ëDES(DES-EDE3-CBC)¤Ç¡¢ ¥Ñ¥¹¥³¡¼¥É¤¬ "hoge" ¤Ç¡¢¥½¥ë¥È¤¬ "E83B4019057F55E9" ¤Ç¤¢¤Ã¤¿¤È¤­¤Î¡¢ ¶¦Ä̸°¤È½é´ü¥Ù¥¯¥¿¤Ï°Ê²¼¤Î¥³¥Þ¥ó¥É¤Çɽ¼¨¤µ¤ì¤Þ¤¹¡£

    % openssl ¶¦Ä̸°°Å¹æ -p -in /dev/null -out /dev/null -pass pass:¥Ñ¥¹¥Õ¥ì¡¼¥º -S 8¥Ð¥¤¥È16¿Ê¿ô¥½¥ë¥È
    (Îã)
    % openssl des-ede3-cbc -p -in /dev/null -out /dev/null -pass pass:hoge -S 1F2F3F4F5F6F7F8F
    salt=1F2F3F4F5F6F7F8F
    key=BD2B936A94EA6C2E0D15CD066C008F1F88735EE491687A29
    iv =C180CD24D8B03454 (¤³¤ÎIV¤ÏÉü¹æ¤Ë¤Ï»È¤ï¤Ê¤¤)

    ÆÉ¤ß¤Ë¤¯¤¤OpenSSL¤ÎC¤Î¥³¡¼¥É²òÀϤθå¤Ç

    ¤µ¤ó¤¶¤ó¡¢ÆÉ¤ß¤Ë¤¯¤¤Æñ²ò¤ÊOpenSSL¤ÎC¤Î¥½¡¼¥¹¥³¡¼¥É¤òÆÉ¤ó¤À¤¢¤È¤Ç¡¢¤½¤Î¸°¤È½é´ü²½¥Ù¥¯¥¿¤ò¼èÆÀ¤¹¤ë EVP_BytesToKey´Ø¿ô¤òPython¤Ç½ñ¤­Ä¾¤·¤Æ¤¯¤ì¤Æ¤¤¤ë yasusii ¤µ¤ó¤È¤¤¤¦Êý¤¬¤¤¤é¤Ã¤·¤ã¤¤¤Þ¤·¤¿¡£ ¡ÖDiscreet Blog 25.6.2007 - OpenSSL¤ÎPBE(Password Based Encryption) (2007-06-25)¡×¡¢Àè¤Ë¤³¤Îµ­»ö¸«¤È¤­¤ã¤è¤«¤Ã¤¿orz

    ¤³¤ì¤Ç¡¢¤Ê¤ó¤È¤Ê¤¯JavaScript¤ÇPKCS#5¸°¤ò²ò¤¤¤ÆRSA½ð̾¤¹¤ë¤Ê¤ó¤Æ¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Êµ¤¤¬¤·¤Æ¤­¤Þ¤·¤¿¡£ º£Æü¤Ï¤³¤ó¤Ê¤È¤³¤í¤Ç¡£

    ²þÄû

    • 2013.04.10 - ¥½¥ë¥È¤ÈIV¤Î°·¤¤¤Ë¤Ä¤¤¤ÆÄ´ººÉÔ­¤È¤¤¤¦¤«¸í²ò¤¬¤¢¤Ã¤¿¤Î¤Ç½¤Àµ¤·¤Þ¤·¤¿¡£

    OpenSSL0.9.8[hij]¤ÎCMS½ð̾¸¡¾Ú¤ÎÀȼåÀ­

    ISS X-Force Database: openssl-cmsverify-security-bypass(49432): OpenSSL CMS_verify() function security bypass
    OpenSSL could allow a remote attacker to bypass security restrictions, caused by an error in the CMS_verify() function when handling error conditions. An attacker could exploit this vulnerability using malformed signed attributes containing invalid signed attributes to bypass content digest checks.


    2009ǯ3·î25Æüº¢¡¢OpenSSL 0.9.8¤Îh¡¢i¡¢j¤Î3À¤Âå¤Î¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç¥ó¤ÎCMS½ð̾¤Î¸¡¾Ú¤ËÀȼåÀ­¤¬¤¢¤Ã¤¿ÌäÂ꤬Êó¹ð¤µ¤ì¡¢ÌäÂ꽤Àµ¤µ¤ì¤¿¤½¤¦¤Ç¤¹¤Í¡£

    ¡¦OpenSSL 0.9.8h (2008.05.28) ¡ßÀȼå
    ¡¦OpenSSL 0.9.8i (2008.09.15) ¡ßÀȼå
    ¡¦OpenSSL 0.9.8j (2009.01.07) ¡ßÀȼå
    ¡¦OpenSSL 0.9.8k (2009.03.25) ¡ûÌäÂ꽤Àµ

    OpenSSL¤Ï¤¤¤í¤¤¤í¤ÊÀ½Éʤˤâ»È¤ï¤ì¤Æ¤¤¤Æ¡¢ÈÆÍѤνð̾¥¢¥×¥ê¡¢S/MIME½ð̾¥á¡¼¥ë¤äCAdESĹ´ü½ð̾¤Î¥Ù¡¼¥¹¤È¤·¤Æ¤³¤ì¤¬»È¤ï¤ì¤Æ¤¤¤ë¤³¤È¤â¤¢¤ë¤Î¤Ç¡¢¤Þ¤¡¡¢¤½¤ì¤Ê¤ê¤Ë±Æ¶Á¤¬¤¢¤ê¤Þ¤¹¡£

    º£Æü¤ÏͼÊý²Ë¤À¤Ã¤¿¤Î¤Ç¡¢²¿¤¬ÌäÂê¤À¤Ã¤¿¤Î¤«¤Á¤ç¤Ã¤È¸«¤Æ¤ß¤Þ¤·¤¿¡£ÌäÂê¤Î¥³¡¼¥É¤Ï "crypto/cms/cms_smime.c" ¤Î CMS_verify() ´Ø¿ô¤Ê¤ó¤À¤½¤¦¤Ê¤ó¤Ç¤¹¤¬¡¢½¤Àµ¤µ¤ì¤¿¤Î¤Ï¾ò·ï¼°¤¬ "!" ¤« "<=" ¤«¤À¤±¤Î°ã¤¤¤Ç¤¹¡£


    crypto/cms/cms_smime.c 428¹ÔÌÜ
    ¡ß½¤ÀµÁ°¡§if (!CMS_SignerInfo_verify_content(si, cmsbio))
    ¡û½¤Àµ¸å¡§if (CMS_SignerInfo_verify_content(si, cmsbio) <= 0)


    CMS_SignerInfo_verify_content()´Ø¿ô¤Ï "crypto/cms/cms_sd.c" ¤ÇÄêµÁ¤µ¤ì¤Æ¤ª¤ê¡¢½ð̾ÂоÝʸ½ñ¤È¤Ê¤ëencapContentInfoÃæ¤ÎeContent¤È½ð̾¾ðÊóSignerInfo¤ËÂФ·¤Æ

    ¡¦SignerInfo¤Ë½ð̾°À­¤¢¤ì¤ÐMessageDigest°À­Ãæ¤Î¥Ï¥Ã¥·¥åÃͤÈ
    ¡¡¡¡eContent¤«¤é·×»»¤µ¤ì¤¿¥Ï¥Ã¥·¥åÃͤ¬°ìÃפ¹¤ë¤«
    ¡¦SignerInfo¤Ë½ð̾°À­¤¬Ìµ¤±¤ì¤ÐeContent¤ËÂФ¹¤ë½ð̾Ãͤ¬°ìÃפ¹¤ë¤«

    ¸¡¾Ú¤¹¤ë´Ø¿ô¤Ç¤¹¡£

    ¤Ç¤Ï¡¢CMS_SignerInfo_verify_content()´Ø¿ô¤ÎÌá¤êÃͤϤɤ¦¤Ê¤Î¤«¤òÄ´¤Ù¤Æ¤ß¤Þ¤¹¤È¡¢

    Ìá¤êÃÍ "1" ¤Î¾ì¹ç(½ð̾ÂоÝʸ½ñeContent¤Î¥Ï¥Ã¥·¥å/½ð̾°ìÃ×)¡§
    ¡¦MessageDigest°À­¤¬¤¢¤êeContent¤Î¥Ï¥Ã¥·¥åÃͤȰìÃפ¹¤ë¾ì¹ç
    ¡¦½ð̾°À­¤¬¤Ê¤¯eContent¤Î½ð̾Ãͤ¬signature¥Õ¥£¡¼¥ë¥É¤È°ìÃפ¹¤ë¾ì¹ç

    Ìá¤êÃÍ "0" ¤Î¾ì¹ç(½ð̾ÂоÝʸ½ñeContent¤Î¥Ï¥Ã¥·¥å/½ð̾ÉÔ°ìÃ×¥¨¥é¡¼)¡§
    ¡¦MessageDigest°À­¤¬¤¢¤ê¥Ï¥Ã¥·¥åŰìÃפÀ¤¬¥Ï¥Ã¥·¥åÃͤ¬ÉÔ°ìÃפξì¹ç
    ¡¦½ð̾°À­¤¬¤Ê¤¯eContent¤Î½ð̾Ãͤ¬signature¥Õ¥£¡¼¥ë¥É¤ÈÉÔ°ìÃפξì¹ç

    Ìá¤êÃÍ "-1" ¤Î¾ì¹ç(¤½¤Î¾¤Î¥¨¥é¡¼)¡§
    ¡¦½ð̾°À­¥Õ¥£¡¼¥ë¥É¤¬¤¢¤ë¤Î¤ËMessageDigest°À­¤¬¤Ê¤¤¾ì¹ç
    ¡¦SignerInfo¤ÎdigestAlgorithm¤Î¥¢¥ë¥´¥ê¥º¥à¤¬ÉÔÌÀ¤Ê¤É
    ¡¡¥Ï¥Ã¥·¥å·×»»¥³¥ó¥Æ¥­¥¹¥È¤Î½é´ü²½¤Ë¼ºÇÔ¤·¤¿¾ì¹ç
    ¡¦MessageDigest°À­¤¬¤¢¤êeContent¤«¤é¤Î¥Ï¥Ã¥·¥åÃÍ·×»»¤Ë¼ºÇÔ¤·¤¿¾ì¹ç
    ¡¦MessageDigest°À­¤¬¤¢¤ê¤½¤Î°À­Ãͤȷ׻»·ë²Ì¤Î¥Ï¥Ã¥·¥å¤È·ë²ÌŤ¬ÉÔ°ìÃ×

    ¤Ê¤è¤¦¤Ç¤¹¡£¤Ç¡¢ÌäÂê¤Î¤¢¤ë OpenSSL 0.9.8 h¡Áj ¤Ç¤Ï¥¨¥é¡¼¥±¡¼¥¹¤Ç¤¢¤ëÌá¤êÃÍ"-1"¤Î¾ì¹ç¤Ç¤â¡¢(! 1)==0¤ÈƱ¤¸¤¯(! -1)==0¤Ç¤¢¤ê¤ã¤ê¤ã¥¹¥ë¡¼¤Ã¤È½ð̾¸¡¾ÚÀ®¸ù¥Ð¥Ã¥Á¥êOK¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¤è¤¦¤Ç¡¢

    ¡¦½ð̾ÂоÝʸ½ñ(eContent)¤È¥Ï¥Ã¥·¥åÃͤ¬ÉÔ°ìÃפÀ¤í¤¦¤¬
    ¡¦¤ï¤¶¤ÈÃΤé¤Ê¤½¤¦¤Ê¥Þ¥¤¥Ê¡¼¤Ê¥¢¥ë¥´¥ê¥º¥à¤òdigestAlgorithm¤òÀßÄꤷ¤Æ¤ä¤ì¤Ð

    CMS½ð̾¸¡¾ÚOK¤È¤Ç¤­¤¿¤è¤¦¤Ç¤¹¡£

    ½ð̾ÂоÝʸ½ñ(eContent)¤È°ìÃ׳Îǧ¤ò¤·¤Æ¤¤¤Ê¤¤¤Î¤Ï¡¢¤«¤Ê¤ê¥Þ¥º¡¼¤Ç¤·¤¿¤Í¡¢¡¢¡¢¡Ê¡°¡°¡¨¤³¤¦¤¤¤¦¥·¥ç¥Ü¥¤´Ö°ã¤¤¤·¤Á¤ã¤¦¤Î¤â¡¢Ìá¤êÃͤȤ«´Ø¿ô¤ÎÀâÌÀ¤È¤«¥³¥á¥ó¥È¤òÁ´¤¯½ñ¤«¤Ê¤¤¤»¤¤¤Ê¤ó¤¸¤ã¤Ê¤¤¤«¤È»×¤Ã¤Æ¤ë¤ó¤Ç¤¹¤¬¤É¤¦¤Ç¤·¤ç¤¦¤«¡¢¡¢¡¢¡¢

    ¡ã¥ê¥ó¥¯¡ä
    ¡¦OpenSSL Security Advisory [25-Mar-2009]

    OpenSSL FIPS 140-2 Lv1 module 1.2

    OpenSSL: The Open Source toolkit for SSL/TLS
    18-Nov-2008: OpenSSL FIPS 140-2 module 1.2 is now available


    ¤À¤½¤¦¤Ç¤¹¡¢¡¢¡¢¡¢¾ðÊ󤢤꤬¤È¤¦¤´¤¶¤¤¤Þ¤¹£í¡Ê¡²¡¡¡²¡Ë£í

    Apache2.2.9+OpenSSL0.9.8h Win32

    Index of /dist/httpd/binaries/win32


    ¼ê¸µ¤ËSSL¥¯¥é¥¤¥¢¥ó¥Èǧ¾Ú¤¬»î¤»¤ëŬÅö¤Ê¥µ¡¼¥Ð¡¼¤¬¤Û¤·¤«¤Ã¤¿¤Î¤Ç
    apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi
    ¤òÆþ¤ì¤Æ¤ß¤Þ¤·¤¿¡£

    Á°¤ÏWindows¾å¤ÇApache+mod_ssl¤ò¥Ó¥ë¥É¤¹¤ë¤Î¤¬¤È¤Æ¤âÌÌÅݤÀ¤Ã¤¿µ¤¤¬¤·¤¿¤ó¤Ç¤¹¤¬¡¢¤Ê¤ó¤À¡¢¡¢¡¢¡¢¥¤¥ó¥¹¥È¡¼¥é¡¼¤¬¤Á¤ã¤ó¤È¤¢¤ë¤¸¤ã¤Ê¤¤¤Ç¤¹¤«¡Á¡Á¡Á¡Á¡£¤Á¤ç¤Ã¤Èhttpd.conf¡¢httpd-ssl.conf¤òÀßÄꤹ¤ë¤À¤±¤ÇSSL¥¯¥é¥¤¥¢¥ó¥Èǧ¾Ú¤¬»î¤»¤Æ¤·¤Þ¤¤¤Þ¤¹¡£(Í­Æñ¤¤Í­Æñ¤¤¡¢¡¢¡¢¡¢)

    NumericString¤äGraphicString¤òSubject DN¤Ë´Þ¤à¾ÚÌÀ½ñ¤Ç¥¯¥é¥¤¥¢¥ó¥Èǧ¾Ú¤·¤Æ¤ß¤è¤¦¤È¤·¤¿¤ó¤À¤±¤É¡¢Ã±¤Ë¥¨¥é¡¼¤Ë¤Ê¤ë¤À¤±¤À¤Ã¤¿¡¢¡¢¡¢¤Ä¤Þ¤ó¤Ê¤¤¤Î¡Ê¡ì¢Ï¡®¡Ë

    ¤Á¤Ê¤ß¤Ë¥µ¥Ý¡¼¥È¤·¤Æ¤Ê¤¤DirectoryString Type¤Î¥¯¥é¥¤¥¢¥ó¥È¾ÚÌÀ½ñ¤ò»È¤Ã¤¿ºÝ¤Ë½Ð¤ë¥¨¥é¡¼¤Ï¤³¤ì¡¢LogLevel¤Ïinfo°Ê²¼¤Ç¤Ê¤¤¤È¤À¤á¡¢¡¢¡¢¡¢
    asn1 encoding routines:ASN1_ITEM_EX_D2I:mstring wrong tag
    ºÇ¿·µ­»ö
    Categories
    Archives
    Twitter
    µ­»öGoogle¸¡º÷

    ËÜ¥Ö¥í¥°Æâ¤òGoogle¸¡º÷
    Yahoo!¥¢¥¯¥»¥¹²òÀÏ
    Travel Advisor
    µ­»ö¸¡º÷
    QR¥³¡¼¥É
    QR¥³¡¼¥É
    • ¥é¥¤¥Ö¥É¥¢¥Ö¥í¥°