2018年11月09日(金) に開催された「WEBエンジニア勉強会 #10」で 、Web Authentication (WebAuthn) / FIDO2 について発表しました。
04$" ᖛҰೋࡾ[email protected]࣍ੈͷೝূʹ͍ͭͯઆ໌ΛࢼΈΔ8FC"VUIFOUJDBUJPO"1*'*%08ΤϯδχΞษڧձ
View Slide
ࣗݾհ© OSCA04$"ᖛҰೋࡾ ·ͷ͔ͣ;Έ4*FSܠࣸਅՈ* ʮ8ΤϯδχΞษڧձʯΛओ࠵* +BWB 1)1ܥͷ8ΤϯδχΞ* ਓೳ "*ͷ։ൃͬͯΔ* ݸਓͰ714आΓͯ8αʔϏεΛӡӦ͢Δͷ͕झຯ* ເͷࠃɹెาݍॅΈ* [email protected][email protected]
© OSCAͲΜͳ͜ͱ͢ͷʁ
ʮύεϫʔυೝূʯͷ՝Λղܾ͢Δ࣍ੈͷೝূ© OSCAΞΧϯτύεϫʔυϩάΠϯ8ͷੈքʹ͓͍ͯύεϫʔυΛར༻ͨ͠ೝূʹมΘΔɺ৽͍͠ೝূٕज़͕ීٴ͠͡ΊΑ͏ͱ͍ͯ͠·͢ɻ
ʮύεϫʔυೝূʯͷ՝Λղܾ͢Δ࣍ੈͷೝূ© OSCAͱ͍͏͍ͷதͰɺʮͲΜͳͷͳͷ͔ʯͱ͍͏֓ཁΛ͓͍͑ͨ͠ͱࢥ͍·͢ɻ
© OSCAࠓ͢͜ͱʹؔ࿈͢Δχϡʔε
© OSCA݄1VCMJDLFZύεϫʔυʹґଘ͠ͳ͍ೝূʮ8FC"VUIOʯΛ$ISPNF'JSFGPY&EHF͕࣮։࢝ɺ8$͕ඪ४Խɻ8FCύεϫʔυʹґଘ͠ͳ͍ΑΓ҆શͰศརͳͷIUUQTXXXQVCMJDLFZKQCMPHXFCBVUIODISPNFGJSFGPYFEHFXDXFCIUNMl(PPHMFɺ.P[JMMBɺϚΠΫϩιϑτ͕ʮ8FC"VUIOʯͷ࣮Λ։࢝ɻ͜ΕʹΑͬͯʮ'*%0ʯͷීٴ͕ظ͞Εɺ8FCϒϥβ͔ΒࢦೝূإೝূͳͲͰ؆୯ʹ8FCαΠτͷϩάΠϯࢧ͍ͷঝೝͱ͍ͬͨૢ࡞͕࣮ݱ͞Εͦ͏ͩɻz
© OSCA݄*5NFEJBΤϯλʔϓϥΠζʮ'JSFGPYʯެ։ɺύεϫʔυʹґଘ͠ͳ͍ೝূʮ8FC"VUIOʯΛαϙʔτIUUQXXXJUNFEJBDPKQFOUFSQSJTFBSUJDMFTOFXTIUNMl৽͍͠ηΩϡϦςΟػೳͱͯ͠ɺύεϫʔυʹґଘ͠ͳ͍ೝূํ๏ͷʮ8FC"VUIFOUJDBUJPOʢ8FC"VUIOʣʯΛαϙʔτͨ͠ɻz
© OSCA݄;%/FU+BQBOʮ(PPHMF$ISPNFʯ҆ఆ൛ϦϦʔεʮ4QFDUSFʯ؇ࡦɺʮ8FC"VUIOʯରԠͳͲIUUQTKBQBO[EOFUDPNBSUJDMFl݅ͷηΩϡϦςΟमਖ਼Λࢪͨ͠΄͔ɺύεϫʔυʹґଘ͠ͳ͍৽ͨͳೝূํࣜʮ8FC"VUIOʯʹσϑΥϧτͰରԠ͢Δɻ தུࢦεϚʔτϑΥϯʹอଘ͞Εͨإը૾ͷΑ͏ͳੜମೝূใɺ͋Δ͍:VCJLFZͷೝূσόΠεͷΑ͏ͳ64#ϋʔυΣΞΛར༻ͯ͠ΣϒαΠτʹαΠϯΞοϓ͢ΔखஈΛఏڙ͢Δɻz
© OSCA݄1VCMJDLFZϚΠΫϩιϑτɺ8FC"VUIOΛ&EHFʹ࣮ɻύεϫʔυෆཁɺੜମೝূ1*/Ͱ8FCαΠτϩάΠϯՄೳʹɻळͷ8JOEPXTΞοϓσʔτͰ[email protected]lϚΠΫϩιϑτɺ݄ࠒʹ༧ఆ͞Ε͍ͯΔ8JOEPXTͷେܕΞοϓσʔτʢ34ʣʹ͚ͯ։ൃதͷ࠷৽Ϗϧυɺ8JOEPXTCVJMEͰɺύεϫʔυෆཁͰ8FCαΠτʹϩάΠϯͰ͖Δඪ४༷ʮ8FC"VUIOʯΛ.JDSPTPGU&EHFʹ࣮ͨ͜͠ͱΛ໌Β͔ʹ͠·ͨ͠ɻz
© OSCA݄1VCMJDLFZ$ISPNF͔Βɺ8FC"VUIOͰ.BDͷ5PVDI*%ͱ"OESPJEͷࢦೝূ͕σϑΥϧτͰར༻Մೳʹɻ8FCαΠτͷϩάΠϯλονͰ[email protected]l(PPHMF݄ʹϦϦʔεͨ͠$ISPNFͰ8FC"VUIOͷରԠΛߦ͍·͕ͨ͠ɺ݄ʹϦϦʔε͞ΕΔ$ISPNFͰ࣮ΛਐԽͤ͞ɺσϑΥϧτͰ.BDͷ5PVDI*%ͱ"OESPJEͷࢦೝূʹରԠ͢Δ͜ͱΛ໌Β͔ʹ͠·ͨ͠ɻz
© OSCA݄ϠϑʔגࣜձࣾϠϑʔɺ৽ͨͳΣϒೝূͷن֨ʮ'*%0ʯͷ'*%0$FSUJGJFEʢೝఆʣΛࠃاۀͰ།ҰऔಘɹύεϫʔυΛΘͳ͍҆શͳϩάΠϯڥͷ࣮ݱʹલਐIUUQTBCPVUZBIPPDPKQQSSFMFBTFBlϠϑʔגࣜձࣾɺੜମೝূͳͲͷ࣍ੈೝূͷඪ४ԽΛఏএ͢Δۀքஂମ'*%0ʢϑΝΠυʣΞϥΠΞϯεͷ৽ͨͳن֨ʮ'*%0ʯͷೝఆΛɺ݄ʹੈքͰॳΊͯ։࠵͞Εͨʮ'*%0ʯೝఆςετʹ͓͍ͯɺ͜ͷͨͼऔಘͨ͜͠ͱΛ͓Βͤ͠·͢ɻࠃاۀͰ།ҰͷೝఆऔಘͱͳΓ·͢ɻz
© OSCA݄ϠϑʔגࣜձࣾϠϑʔɺ"OESPJEεϚʔτϑΥϯͷΣϒϒϥβʔ্ͰͷϩάΠϯ͕ࢦೝূͳͲͷੜମೝূʹରԠIUUQTBCPVUZBIPPDPKQQSSFMFBTFBl"OESPJEεϚʔτϑΥϯͷΣϒϒϥβʔ্ʹ͓͍ͯɺϠϑʔͷαʔϏεʹࢦೝূͳͲͷੜମೝূΛ༻ͯ͠ϩάΠϯͰ͖ΔΑ͏ʹͳΓ·ͨ͠ɻzl·ͣ"OESPJEͷදతͳΣϒϒϥβʔͰ͋Δʮ(PPHMF$ISPNFʯʹରԠ͍ͨ͠·͢ɻຊػೳɺ:BIPP+"1"/*%ʹϩάΠϯ্ͨ͠Ͱɺੜମೝূͷઃఆʹɺ༻͢Δ"OESPJEεϚʔτϑΥϯΛొ͢Δ͜ͱͰར༻Ͱ͖·͢ɻz
© OSCAχϡʔε͔ΒಡΈऔΕΔ͜ͱʁ
֤छϒϥβ͕ʮ8FC"VUIOʯʹରԠ© OSCA݄'JSFGPY݄(PPHMF$ISPNF·ͳ͘.JDSPTPGU&EHF
֤छϒϥβ͕ʮ8FC"VUIOʯʹରԠ© OSCA݄'JSFGPY݄(PPHMF$ISPNF·ͳ͘.JDSPTPGU&EHFύεϫʔυ͕ෆཁͷೝূํࣜΒ͍͠
Ϡϑʔגࣜձࣾࠃ།Ұͷ'*%0ೝఆऔಘ© OSCA
© OSCA'*%0ΞϥΠΞϯε
'*%0ΞϥΠΞϯε'BTU*%FOUJUZ0OMJOF"MMJBODF© OSCAੜମೝূΛϕʔεͱͨ͠ศརͰ҆શͳΦϯϥΠϯೝূΛ࣮ݱ͢ΔͨΊʹɺʹ݁͞Εͨۀքஂମɻ<Ճໍஂମൈਮ>.JDSPTPGU (PPHMF "NB[PO .BTUFS$BSE 7*4" ࢜௨ υίϞ -*/& େຊҹ ָఱ ࡾඛ6'+ Ϡϑʔ
8FC"VUIOͷي© OSCA8$ʹ'*%0ͷ8FC"1*෦Λఏग़ɻ8$8FC"VUIFOUJDBUJPOϫʔΩϯάάϧʔϓൃɻ8FC"VUIFOUJDBUJPO 8FC"VUIO"1*קࠂީิʹɻ
© OSCAΈͷ֓ཁ
ύεϫʔυೝূͷ՝© OSCAଟ͘ͷ8αΠτͰར༻͞Ε͍ͯΔʮύεϫʔυೝূʯɺ࣍ͷΑ͏ͳ՝͕͋Γ·͢ɻ✓ ͓͔֮͑ͯͳ͍ͱ͍͚ͳ͍ ֮͑ΒΕͳ͍✓ ೖྗ͕໘͍͘͞✓ ࿙Ӯ͍͢͠✓ ࠶ར༻͕Մೳརศੑ҆શੑ
ύεϫʔυೝূͷ՝© OSCAʮΞΧϯτʯͱʮύεϫʔυʯͷೝূͰɺωοτϫʔΫதΛʮύεϫʔυʯ͕ྲྀΕͯ͠·͍ͬͯΔɻtGb9T3hM!gLaThB14Pೝূ
ύεϫʔυೝূͷ՝© OSCAͬͱzศརzͰz҆શzͳΈ͕͋Εྑ͍ͷʹɾɾɾ
৽͍͠ೝূͷΈ ֓ཁ© OSCA➢ ύεϫʔυ େͳͷΛωοτϫʔΫதʹྲྀ͞ͳ͍ɻtGb9T3hM!gLaThB14P
৽͍͠ೝূͷΈ ֓ཁ© OSCA➢ ύεϫʔυ େͳͷΛωοτϫʔΫதʹྲྀ͞ͳ͍ɻ➢ ೝূσόΠεଆͷzศརͳํ๏lͰߦ͏ɻtGb9T3hM!gLaThB14Pೝূ
৽͍͠ೝূͷΈ ֓ཁ© OSCA➢ ύεϫʔυ େͳͷΛωοτϫʔΫதʹྲྀ͞ͳ͍ɻ➢ ೝূσόΠεଆͷzศརͳํ๏zͰߦ͏ɻ➢ ೝূ݁ՌΛαʔόʔʹૹ৴͢ΔɻtGb9T3hM!gLaThB14Pೝূ݁Ռೝূ
৽͍͠ೝূͷΈ ֓ཁ© OSCA͜͜·Ͱͷઆ໌͚ͩͩͱʮೝূ݁ՌΛӕ͔ͭΕͨΒͲ͏͢ΔΜͩʁʯͱࢥ͑ͯ͠·͏͚Ͳɺ͔ͦͬ͜͠Γߟ͑ΒΕ͍ͯΔɻ
© OSCAΈ ৄࡉ
ొ͢Δͷ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSʮೝূثʯʮϒϥβʯʮαʔόʔʯ
ొ͢Δͷ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSʮೝূثʯʮϒϥβʯʮαʔόʔʯࢦηϯλʔΧϝϥ64#ΩʔͳͲ
ొ͢Δͷ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSʮೝূثʯʮϒϥβʯʮαʔόʔʯ8FC"VUIOʹରԠͨ͠ϒϥβ
ొ͢Δͷ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSೝূثͷʮൿີ伴ʯʮެ։伴ʯ ެ։伴҉߸ํࣜൿີ伴 ެ։伴
ొ͢Δͷ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSೝূثͷʮൿີ伴ʯʮެ։伴ʯ ެ։伴҉߸ํࣜൿີ伴 ެ։伴ೝূثݻ༗ͷൿີ伴ɾެ։伴Λ࣋ͭ
ԡ͓͖͑ͯͭ͘͞ͷॲཧ© OSCA ೝূʹར༻͢Δೝূثͷొ ೝূثΛར༻ͨ͠ೝূ
ೝূʹར༻͢Δೝূثͷొ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSϩάΠϯೝূͳͲͰར༻͍ͨ͠ೝূثΛɺαʔϏεΛఏڙ͍ͯ͠Δαʔόʔʹొ͠·͢ɻ
ೝূʹར༻͢Δೝূثͷొ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSϩάΠϯೝূͳͲͰར༻͍ͨ͠ೝূثΛɺαʔϏεΛఏڙ͍ͯ͠Δαʔόʔʹొ͠·͢ɻࠓޙར༻͢ΔೝূثΛڭ͑ͯʔʂ
ೝূʹར༻͢Δೝূثͷొ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSϩάΠϯೝূͳͲͰར༻͍ͨ͠ೝূثΛɺαʔϏεΛఏڙ͍ͯ͠Δαʔόʔʹొ͠·͢ɻೝূث͝ͱͷॴఆͷखஈͰɺϢʔβݕূ
ೝূʹར༻͢Δೝূثͷొ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSϩάΠϯೝূͳͲͰར༻͍ͨ͠ೝূثΛɺαʔϏεΛఏڙ͍ͯ͠Δαʔόʔʹొ͠·͢ɻൿີ伴ɾެ։伴͕ੜ͞ΕΔൿີ伴 ެ։伴
ೝূʹར༻͢Δೝূثͷొ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSϩάΠϯೝূͳͲͰར༻͍ͨ͠ೝূثΛɺαʔϏεΛఏڙ͍ͯ͠Δαʔόʔʹొ͠·͢ɻެ։伴ͳͲΛؚΉใΛૹΓฦ͢ɻൿີ伴ެ։伴
ೝূʹར༻͢Δೝূثͷొ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSϩάΠϯೝূͳͲͰར༻͍ͨ͠ೝূثΛɺαʔϏεΛఏڙ͍ͯ͠Δαʔόʔʹొ͠·͢ɻϢʔβใͱެ։伴Λඥ͚ͮΔɻʮྃղʂొͨ͠ʂʯൿີ伴 ެ։伴
ೝূʹར༻͢Δೝূثͷొ© OSCAҎޙɺରʹͳΔʮൿີ伴ʯͰॺ໊͞Εͨσʔλɺొ͞Εͨೝূث͔Βͷσʔλͩͱ͍͏͜ͱʹͳΔɻެ։伴҉߸ํࣜͷಛʹΑΓ
ೝূثΛར༻ͨ͠ೝূ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSೝূ࣌ɺొࡁΈͷೝূث͔Βͷ݁ՌΛ৴པ͢Εྑ͍ɻൿີ伴 ެ։伴ೝূΑΖ͘͠
ೝূثΛར༻ͨ͠ೝূ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSೝূ࣌ɺొࡁΈͷೝূث͔Βͷ݁ՌΛ৴པ͢Εྑ͍ɻൿີ伴 ެ։伴ೝূث͝ͱͷॴఆͷखஈͰɺϢʔβݕূ
ೝূثΛར༻ͨ͠ೝূ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSೝূ࣌ɺొࡁΈͷೝূث͔Βͷ݁ՌΛ৴པ͢Εྑ͍ɻൿີ伴 ެ։伴ೝূثͰͷೝূ݁ՌΛൿີ伴Λར༻ͯ͠ॺ໊͢Δɻೝূ݁Ռ
ೝূثΛར༻ͨ͠ೝূ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSೝূ࣌ɺొࡁΈͷೝূث͔Βͷ݁ՌΛ৴པ͢Εྑ͍ɻൿີ伴 ެ։伴ॺ໊͞Εͨೝূ݁ՌΛૹΓฦ͢ɻೝূ݁Ռ
ೝূثΛར༻ͨ͠ೝূ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSೝূ࣌ɺొࡁΈͷೝূث͔Βͷ݁ՌΛ৴པ͢Εྑ͍ɻൿີ伴 ެ։伴ެ։伴Λར༻ͯ͠ɺೝূ݁ՌΛݕূ͠ɺͳ͚ΕϢʔβΛಛఆͰ͖Δɻೝূ݁Ռ
© OSCAීٴʹ͚ͯ
ීٴʹ͚ͯ© OSCAϒϥβWeb Authentication APIαʔόʔೝূث"VUIFOUJDBUPSϒϥβ͚͕ͩ8FC"VUIOʹରԠ͢Εྑ͍༁Ͱͳ͘ɺೝূثɾαʔόʔରԠͨ͠ͷ͕ඞཁͰ͋Δɻ
© OSCA·ͱΊɾॴײ
·ͱΊ© OSCA➢ ֤ϒϥβͰ8FC"VUIFOUJDBUJPO"1* 8FC"VUIOͷ࣮͕ਐΊΒΕ͍ͯΔ͜ͱͰɺϒϥβͰ'*%0ೝূ͕࣮ݱͰ͖ΔΑ͏ʹͳ͖ͬͯͨɻ➢ ࠃͰϠϑʔ͕͍ͪૣ͘ରԠΛߦͬͨɻ➢ ͕ʮݩʯʹͳΔ͔ʂʁ
ؾʹͳ͍ͬͯΔ© OSCA➢ 8FC"VUIO '*%0ͷରԠίετ✓ ʮνରԠ͍ͨ͠ʯͱͳͬͨͱ͖ɺͲͷ͘Β͍େมͳͷ͔ʁ✓ '*%0ن֨ͷқʁ
ૉࡐར༻4*-)06&55&*--645IUUQTXXXTJMIPVFUUFJMMVTUDPN© OSCA