Movatterモバイル変換


[0]ホーム

URL:


SlideShare a Scribd company logo

FIDO認証によるパスワードレスログイン実装入門

21 likes22,485 views
Yahoo!デベロッパーネットワーク
Yahoo!デベロッパーネットワーク

HTML5 Conference2018で発表した内容です。 #html5j #html5j_a

1 of 104
Downloaded 169 times
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.FIDO認証によるパスワードレスログイン実装入門HTML5 Conference 2018ヤフー株式会社2018/11/25合路 健人@kg0r0
アジェンダCopyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 21. 自己紹介2. パスワード認証の課題3. FIDOとは4. FIDOの技術仕様5. デモ6. Web Authenticationフロー7. まとめ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.社内における認証をよりセキュアで使いやすくする取り組み興味のある方は是非一緒にどうですか??新卒入社2年目システム統括本部プラットフォーム開発本部アイデンティティー&アクセスマネジメント部自己紹介合路 健人
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 4パスワード認証の課題
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 5パスワード認証の課題(利便性)こんなことはありませんか 認証機会の増加 サービスごとに異なるパスワードを登録 複雑なパスワードの入力操作が不便
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 6パスワード認証の課題(安全性)Client Serverusername + passwordDBDB LeakPhishingPassword List AttackDictionary Attack
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 7FIDOとは
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 8FIDO(Fast IDentity Online)パスワードへの依存度を減らし、利便性と安全性を向上するPoor EasyWeakStrongUSABILITYSECURITYUSABILITYSECURITYhttps://www.slideshare.net/FIDOAlliance/fido-83445442https://www.slideshare.net/FIDOAlliance/introduction-to-fido-alliance-66730790
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 9FIDO認証モデルAuthenticatorUser verification FIDO Authenticationchallengegesture signatureprivatekeypublickey 公開鍵暗号方式による認証 オンラインサービスへの登録時に鍵ペアを生成して登録clientRP
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 10用語説明 RP(Relying Party)• ユーザーの登録、認証を⾏うウェブサイト、または、事業者 認証器(Authenticator)• キーペアの管理を行う• 外部認証器と内部認証器がある
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 11利便性 認証行為が容易 複数のパスワードを覚える負担を軽減
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 12認証行為が容易 生体認証の導入• 指紋・虹彩・顔・声紋など 認証器を指定・選択できるポリシー• 認証器の多様性• 認証器の選択
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 13複数のパスワードを覚える負担を軽減 パスワード(記憶)• 本人のみが記憶している情報 認証器(所持)• 本人のみが所持している物• 認証器が利用者本人を検証する機能を持つ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 14安全性 クレデンシャル情報の通信経路 クレデンシャル情報の安全性 認証器の信頼性
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 15クレデンシャル情報の通信経路パスワード認証リモート認証(ユーザー名, パスワード)ローカル認証(指紋など)リモート認証(署名)FIDO認証モデルUser ClientUser Authenticator clientRelying partyRelying party
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 16クレデンシャル情報の安全性FIDO AuthenticationKpub1Kpub2RPごとに鍵ペアを生成して登録rpid1(origin)rpid2(origin)Relying party1Relying party2Client リスト型攻撃に対する耐性 フィッシングに対する耐性AuthenticatorKpriv1 Kpriv2User Presence
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 17クレデンシャル情報の安全性(リスト型攻撃対策)AuthenticatorFIDO Authentication Kpub1Kpriv1RPごとに異なる公開鍵を登録Kpriv2rpid1(origin)rpid2(origin)Relying party1Relying party2ClientKpub2User Presence
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 18クレデンシャル情報の安全性(フィッシング対策)FIDO AuthenticationKpriv1RPごとに異なる秘密鍵を保管Kpriv2ClientUser PresenceKpub1Relying party1Relying party2 Kpub2AuthenticatorRelying party3
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 19認証器の信頼性Attestation & MetadataAuthenticatorRegistrationAttestation privKey MetadataAuthentication KeysSigned Attestation ObjectRelying partyAttestation pubKeyAttestation Certificate
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 20FIDOの技術仕様
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 21FIDOの3つの技術仕様 FIDO UAF(Universal Authentication Framework) FIDO U2F(Universal 2nd Factor) FIDO2
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 22FIDO UAF パスワードレス型(所持+生体など) 主にスマートフォン端末での利用を想定 生体認証などの認証手段によりパスワードレスを実現https://www.slideshare.net/FIDOAlliance/fido-83445442
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 23FIDO U2F パスワード補完型(記憶+所持) 主にPC上でWebブラウザの利用を想定した二要素認証 着脱方式と無線方式に対応https://www.slideshare.net/FIDOAlliance/fido-83445442
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 24UAFとU2F ユースケースが異なる• UAF(FIDOクライアント=アプリ)• U2F(ブラウザから利用できるが二要素認証) ブラウザからパスワードレス認証を!!https://www.slideshare.net/FIDOAlliance/fido-83445442
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 25FIDO2FIDO認証対応プラットフォームの拡大Web Authentication APIブラウザからクレデンシャルにアクセスするAPICTAPクライアントと外部認証器間の通信をサポートするプロトコルhttps://www.slideshare.net/FIDOAlliance/fido-psd2-solving-the-strong-customer-authentication-challenge-in-europe
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 26Web Authentication APIブラウザからクレデンシャルにアクセスするAPI ブラウザの標準インターフェース Credential Management API の拡張 登録 : navigator.credentials.create() 認証 : navigator.credentials.get()
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 27CTAPクライアントと外部認証器間の通信をサポートするプロトコル 物理的に異なるクライアントと外部認証器が連携 USB・BLE・NFC などをサポートUSB, BLE, NFC,Authenticator client
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 28様々な認証器に対応https://www.slideshare.net/FIDOAlliance/fido-83445442
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 29デモ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 30Web Authentication(登録)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 31登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)検証公開鍵の保存
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 32実装範囲Authenticator Client Relying partyWeb Authentication API 実装が必要な箇所ユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 33登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 34ユーザー名の入力 フォームからユーザー名を取得 ユーザー名を送信してチャレンジなどの情報を要求
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 35ユーザー名の送信fetch('/webauthn/register', {method: 'POST',credentials: 'include',headers: {'Content-Type': 'application/json'},body: JSON.stringify({username: this.username.value,name: this.name.value})}) サンプル フォームからユーザー名を取得 ユーザー名を送信してチャレンジなどの情報を要求
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 36challengeの送信{// random numberchallenge: randomBase64URLBuffer(32),rp: {name: "FIDO Examples Corporation”},user: {id: id,name: username,displayName: displayName},pubKeyCredParams: [{type: "public-key",alg: -7 // "ES256" IANA COSE Algorithms registry}]} サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.Web Authentication API37登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 38navigator.credentials.create()navigator.credentials.create({publicKey: {rp: {id: "example.com”,name: "Acme"},user: {id: new Uint8Array(16),name: "john.p.smith@example.com",displayName: "John P. Smith "},pubKeyCredParams: [{type: "public-key",alg: -7}],attestation: "direct",timeout: 60000,// must be a cryptographically random number sent from a serverchallenge: new Uint8Array([0x8C, 0x0A, 0x26, 0xFF, 0x22, 0x91, 0xC1, 0xE9, ... ]).buffer}})サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 39Parameter rp [Object] (必須)• Relying partyに関する情報 user [Object](必須)• Credentialが紐づくユーザー情報 challenge[ArrayBuffer] (必須)• サーバーで生成した乱数 pubKeyCredParams[Object] (必須)• Credentialのタイプとアルゴリズムの指定(typeはpublic-key固定) timeout [Int]• ユーザーの入力待機時間 attestation [String]• Authenticatorの出どころを検証するかどうか authenticatorSelection [Object]• 認証器への要求事項
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 40navigator.credentials.create()
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 41登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 42AuthenticatorAttestationResponse{// credential identifier on the device"rawId": "imCIoe8U_N9M1rTGeCqJ96TAu5uqSPa7YUzd ... ","id": ” imCIoe8U_N9M1rTGeCqJ96TAu5uqSPa7YUzdh7qq ... ",// attestation data"response": {"clientDataJSON": ”eyJjaGFsbGVuZ2UiOiJJSFdtWjFPa1MydDZLaH ... ”,"attestationObject": ”o2NmbXRoZmlkby11MmZnYXR0U3RtdKJjc2 ... "},// extensions results struct"getClientExtensionResults": {},//  type of credential"type": "public-key”}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 43clientDataJSON{// random number"challenge": "IHWmZ1OkS2t6KhvX-koNxutkYuMVEunCjYNSXXgAxvU",// origin of the website"origin": "http://localhost:3000",// type of the call."type": "webauthn.create”}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 44attestationObject CBOR(Concise Binary Object Representation)• JSONフォーマットをバイナリで表現• JSONよりもサイズが小さいconst cbor = require('cbor');. . .let attestationBuffer =base64url.toBuffer(webAuthnResponse.response.attestationObject);let ctapMakeCredResp = cbor.decodeAllSync(attestationBuffer)[0];公開鍵などを含むCBORでエンコードされたデータサンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 45attestationObject{// attestation format"fmt": ”packed",// raw buffer struct containing user info"authData": "9569088f1ecee3232954035dbd10d7cae3 ... ",// attestation statement data"attStmt": {// signature"sig": "3046022100db3162cfa7b5dbd78c46864e5f9 ... ",// X.509 Certificate Chain"x5c": ["3082013c3081e4a003020102020a395187893878526 ... ”]}}サンプル公開鍵などを含むCBORでエンコードされたデータ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 46authDatahttps://medium.com/@herrjemand/verifying-fido2-responses-4691288c8770ユーザーの情報を含むバイナリデータ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 47authDataのパースlet parseMakeCredAuthData = (buffer) => {let rpIdHash = buffer.slice(0, 32); buffer = buffer.slice(32);let flagsBuf = buffer.slice(0, 1); buffer = buffer.slice(1);let flags = flagsBuf[0];let counterBuf = buffer.slice(0, 4); buffer = buffer.slice(4);let counter = counterBuf.readUInt32BE(0);let aaguid = buffer.slice(0, 16); buffer = buffer.slice(16);let credIDLenBuf = buffer.slice(0, 2); buffer = buffer.slice(2);let credIDLen = credIDLenBuf.readUInt16BE(0);let credID = buffer.slice(0, credIDLen); buffer = buffer.slice(credIDLen);let COSEPublicKey = buffer;return {rpIdHash, flagsBuf, flags, counter, counterBuf, aaguid, credID, credIDLen, credIDLenBuf,COSEPublicKey}}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 48authDataのパース結果{// hash of the rpIdrpIdHash: <Buffer 49 96 0d e5 88 0e 8c 68 74 34 17 0f 64 76 60 5b 8f ... >,// state of the authenticator during the authenticationflags: 65,flagsBuf: <Buffer 41>,// 4byte countercounter: 53,counterBuf: <Buffer 00 00 00 35>,// authenticator attestation identifier aaguid: <Buffer f8 a0 11 f3 8c 0a 4d 15 80 06 17 11 1f 9e dc 7d>,// credential IdentifiercredID: <Buffer de 13 93 92 33 87 5a 0e 89 1b de 60 dc 43 1f 89 8c ... >,credIDLenBuf: <Buffer 00 40>,credIDLen: 64,// COSE encoded public keyCOSEPublicKey: <Buffer a5 01 02 03 26 20 01 21 58 20 36 25 71 4a ... >} サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 49登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 50Verify Attestation challenge、origin、typeの検証 flagsの検証 signatureの検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 51challengeの検証router.post('/response', (request, response) => {let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));if(clientData.challenge !== request.session.challenge) {response.json({'status': 'failed','message': 'Challenges don¥'t match!’})}. . .})サンプルclientDataJSON内のchallengeを検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 52originの検証router.post('/response', (request, response) => {let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));. . .if(clientData.origin !== config.origin) {response.json({'status': 'failed','message': 'Origins don¥'t match!’})}})サンプルclientDataJSON内のoriginを検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 53typeの検証. . .let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));if(clientData.type !== 'webauthn.create') {. . .}})サンプルclientDataJSON内のtypeがwebauthn.createであるか確認
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 54Verify Attestation challenge、origin、typeの検証 flagsの検証 signatureの検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 55flagsの検証AuthenticatorでのUP、UVの結果 UP : User Presence• ユーザーの存在確認(必須) UV : User Verification• ユーザーの認証(任意)https://slides.com/fidoalliance/jan-2018-fido-seminar-webauthn-tutorial#/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 56flagsの検証let authrDataStruct = parseMakeCredAuthData(ctapMakeCredResp.authData);if(!(authrDataStruct.flags & 0x01))throw new Error('User was NOT presented durring authentication!');サンプルAuthenticatorでのUP、UVの結果 UP : User Presence• ユーザーの存在確認(必須) UV : User Verification• ユーザーの認証(任意)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 57Verify Attestation challenge、origin、typeの検証 flagsの検証 signatureの検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 58signatureの検証 Attestation Certificateの取得 authDataのパラメーターとclientDataJSONのハッシュ値を連結 attStmtからsignatureを取得 signatureを検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 59Attestation Certificateの取得 authData内にあるattSmtのx5c(X.509 Certificate Chain) PEM形式に変換する• Base64エンコード• 64文字ごとに改行コードをいれる• ヘッダとフッタを入れるlet ASN1toPEM = (pkBuffer) => {let type;. . .type = 'CERTIFICATE';}let b64cert = pkBuffer.toString('base64');let PEMKey = '';for(let i = 0; i < Math.ceil(b64cert.length / 64); i++) {let start = 64 * i;PEMKey += b64cert.substr(start, 64) + '¥n';}PEMKey = `-----BEGIN ${type}-----¥n` + PEMKey + `-----END ${type}-----¥n`;return PEMKey}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 60signatureの検証. . .let attestationBuffer = base64url.toBuffer(attestationObject);let ctapMakeCredResp = cbor.decodeAllSync(attestationBuffer)[0];let authrDataStruct = parseMakeCredAuthData(ctapMakeCredResp.authData);let clientDataHash = hash(base64url.toBuffer(clientDataJSON))// Attestation Certificateの取得let PEMCertificate = ASN1toPEM(ctapMakeCredResp.attStmt.x5c[0]);// authDataのパラメーターとclientDataJSONのハッシュ値を連結let signatureBase = Buffer.concat([authrDataStruct.rpIdHash,authrDataStruct.flagsBuf,authrDataStruct.counterBuf,authrDataStruct.aaguid,authrDataStruct.credIDLenBuf,authrDataStruct.credID,authrDataStruct.COSEPublicKey,clientDataHash]);// attStmtからsignatureの取得let signature = ctapMakeCredResp.attStmt.sig;// 検証response.verified = crypto.createVerify('SHA256').update(signatureBase).verify(PEMCertificate, signature);}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 61Verify Attestation challenge、origin、typeの検証 flagsの検証 signatureの検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 62登録成功!!
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 63登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 64publicKeyの保存let verifyAuthenticatorAttestationResponse = (webAuthnResponse) => {. . .let authrDataStruct = parseMakeCredAuthData(ctapMakeCredResp.authData);// COSE PublicKeyをPKCS形式に変換let publicKey = COSEECDHAtoPKCS(authrDataStruct.COSEPublicKey)let verified = verifySignature(signature, signatureBase, PEMCertificate)if(verified) {// publicKeyなどを保存response.authrInfo = {fmt: ’packed',publicKey: base64url.encode(publicKey),counter: authrDataStruct.counter,credID: base64url.encode(authrDataStruct.credID)}}}return response}サンプル COSE(CBOR Object Signing and Encryption)• 暗号鍵を表現するためのJSONをCBORエンコードしたフォーマット• COSEから取得したxとyを連結し、先頭に0x04を加えるとPublicKeyになる
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 65publicKeyの保存 COSE(CBOR Object Signing and Encryption)• 暗号鍵を表現するためのJSONをCBORエンコードしたフォーマット• COSEから取得したxとyを連結し、先頭に0x04を加えるとPublicKeyになる// result of COSE parse{1: kty=2,3: alg=-7,-1: crv=1,-2: x,-3: y,} サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 66publicKeyの保存 COSE(CBOR Object Signing and Encryption)• 暗号鍵を表現するためのJSONをCBORエンコードしたフォーマット• COSEから取得したxとyを連結し、先頭に0x04を加えるとPublicKeyになるconst cbor = require('cbor');. . .let COSEECDHAtoPKCS = (COSEPublicKey) => {let coseStruct = cbor.decodeAllSync(COSEPublicKey)[0];let tag = Buffer.from([0x04]);let x = coseStruct.get(-2);let y = coseStruct.get(-3);return Buffer.concat([tag, x, y])}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 67Web Authentication(認証)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 68認証フロー(概略)Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 69実装範囲Authenticator Client Relying partyWeb Authentication API 実装が必要な箇所ユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 70認証フロー(概略)Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 71ユーザー名の入力
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 72ユーザー名の送信fetch('/webauthn/login', {method: 'POST',credentials: 'include',headers: {'Content-Type': 'application/json'},body: JSON.stringify({username: this.username.value})})サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 73challengeの送信let generateServerGetAssertion = (authenticators) => {let allowCredentials = [];for(let authr of authenticators) {allowCredentials.push({type: 'public-key',id: authr.credID,transports: ['usb', 'nfc', 'ble']})}return {// random numberchallenge: randomBase64URLBuffer(32),allowCredentials: allowCredentials}}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.Web Authentication API74実装範囲Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 75navigator.credentials.get()navigator.credentials.get({publicKey: {timeout: 60000,challenge: new Uint8Array([0x79, 0x50, 0x68, 0x71, 0xDA, 0xEE, 0xEE, 0xB9, 0x94, 0xC3, 0xC2, ...]).buffer,allowCredentials: [{id: cred.rawId,transports: ["usb", "nfc", "ble"],type: "public-key"}]},})サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 76Parameter challenge [ArrayBuffer] (必須)• サーバーで生成した乱数 timeout [Int]• ユーザーの入力待機時間 allowCredentials [Array]• ユーザーに紐づくCredentialのidリスト rpId [String]• rpIdの指定(登録時と同じ値を指定) userVerification [String]• ユーザーに紐づくCredentialのリスト
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 77navigator.credentials.get()
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 78実装範囲Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 79AuthenticatorAssertionResponse{// credential identifier on the device"rawId": "imCIoe8U_N9M1rTGeCqJ96TAu5uqSPa7YUzd ... " ,"id": "imCIoe8U_N9M1rTGeCqJ96TAu5uqSPa7YUzdh7qq ... ",// assertion data"response": {"authenticatorData": "SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MBAAAALQ","signature": "MEUCIQCFOqnsAFZLQmcPt2qSjnCb403SisGEASSjT3fOPuD5JgIgF ...","userHandle": "","clientDataJSON": "eyJjaGFsbGVuZ2UiOiJDUXF5aUlrQ00yWEtvaHVSdlNqTEFoN ...”},// extensions results struct"getClientExtensionResults": {},// type of credential"type": "public-key”}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 80authenticatorDatahttps://slides.com/fidoalliance/jan-2018-fido-seminar-webauthn-tutorial#/ユーザーの情報を含むバイナリデータ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 81authenticatorDataのパースlet parseGetAssertAuthData = (buffer) => {let rpIdHash = buffer.slice(0, 32); buffer = buffer.slice(32);let flagsBuf = buffer.slice(0, 1); buffer = buffer.slice(1);let flags = flagsBuf[0];let counterBuf = buffer.slice(0, 4); buffer = buffer.slice(4);let counter = counterBuf.readUInt32BE(0);return {rpIdHash, flagsBuf, flags, counter, counterBuf}}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 82authenticatorDataのパース結果{// hash of the rpIdrpIdHash: <Buffer 49 96 0d e5 88 0e 8c 68 74 34 17 0f 64 76 60 5b 8f e4 ae b9a2 86 32 c7 99 5c f3 ba 83 1d 97 63>,// state of the authenticator during the authenticationflags: 1,flagsBuf: <Buffer 01>,// 4byte countercounter: 68,counterBuf: <Buffer 00 00 00 44>}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 83認証フロー(概略)Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 84Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 85challengeの検証router.post('/response', (request, response) => {let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));if(clientData.challenge !== request.session.challenge) {response.json({'status': 'failed','message': 'Challenges don¥'t match!’})}. . .})サンプルclientDataJSONとセッションなどに保存していたchallengeを比較
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 86originの検証router.post('/response', (request, response) => {let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));. . .if(clientData.origin !== config.origin) {response.json({'status': 'failed','message': 'Origins don¥'t match!’})}})サンプルclientDataJSONとサーバーのコンフィグなどから取得したoriginを比較
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 87typeの検証. . .let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));if(clientData.type !== 'webauthn.get') {. . .}})サンプルclientDataJSONのtypeがwebauthn.getであるか確認
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 88Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 89flagsの検証let authrDataStruct = parseMakeCredAuthData(ctapMakeCredResp.authData);if(!(authrDataStruct.flags & 0x01))throw new Error('User was NOT presented durring authentication!');サンプルAuthenticatorでのUP、UVの結果を検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 90Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 91signatureの検証 Authenticatorの検索 PublicKeyの取得 authenticatorDataのパラメータとclientDataJSONのハッシュ値を連結 AuthenticatorAssertionResponseからsignatureを取得 signatureを検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 92Authenticatorの検索let findAuthr = (credID, authenticators) => {for(let authr of authenticators) {if(authr.credID === credID)return authr}throw new Error(`Unknown authenticator with credID ${credID}!`)}サンプルCredentialIdを元にAuthenticatorを検索する
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 93publicKeyの取得 登録時に保存したpublicKeyを取りだす PEM形式に変換する• 26バイトのメタデータ(固定)を付与する• Base64エンコード• 64文字ごとに改行コードをいれる• ヘッダとフッタを入れる
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 94publicKeyの取得let ASN1toPEM = (pkBuffer) => {. . .// 26byteのメタデータを追加pkBuffer = Buffer.concat([new Buffer.from("3059301306072a8648ce3d020106082a8648ce3d030107034200", "hex"),pkBuffer]);type = 'PUBLIC KEY';. . .// Base64エンコードlet b64cert = pkBuffer.toString('base64');let PEMKey = '';for(let i = 0; i < Math.ceil(b64cert.length / 64); i++) {let start = 64 * i;// 改行コードの追加PEMKey += b64cert.substr(start, 64) + '¥n';}// ヘッダとフッタの追加PEMKey = `-----BEGIN ${type}-----¥n` + PEMKey + `-----END ${type}-----¥n`;return PEMKey}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 95signatureの検証let verifyAuthenticatorAssertionResponse = (webAuthnResponse, authenticators) => {. . .let authenticatorData = base64url.toBuffer(webAuthnResponse.response.authenticatorData);let authrDataStruct = parseGetAssertAuthData(authenticatorData);let clientDataHash = hash(base64url.toBuffer(webAuthnResponse.response.clientDataJSON))// authenticatorDataとclientDataJSONのハッシュ値を連結let signatureBase = Buffer.concat([authrDataStruct.rpIdHash,authrDataStruct.flagsBuf,authrDataStruct.counterBuf,clientDataHash]);// 登録時に保存した公開鍵を取得let publicKey = ASN1toPEM(base64url.toBuffer(authr.publicKey));// navigator.credentials.get()の戻り値のsignatureを取得let signature = base64url.toBuffer(webAuthnResponse.response.signature);// 検証response.verified = crypto.createVerify('SHA256').update(signatureBase).verify(publicKey, signature);. . .}サンプル
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 96Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 97counterの検証と更新let verifyAuthenticatorAssertionResponse = (webAuthnResponse, authenticators) =>{. . .if(response.verified) {if(response.counter <= authr.counter)throw new Error('Authr counter did not increase!');authr.counter = authrDataStruct.counter}}. . .} サンプルauthenticatorDataのcounterを検証
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 98Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 99認証成功!!
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 100まとめ
まとめCopyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 101 パスワード認証は利便性と安全性に問題 FIDO認証は公開鍵暗号を応用しパスワード認証の課題を解消 FIDO2プロジェクトにより認証対応プラットフォームの拡大
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 102RPのサンプル実装様々な言語で実装されている Node.js : https://github.com/fido-alliance/webauthn-demo Python : https://github.com/duo-labs/py_webauthn Ruby : https://github.com/cedarcode/webauthn-ruby Go : https://github.com/duo-labs/webauthn Java : https://github.com/Yubico/java-webauthn-serverこの他にもいっぱい!!https://github.com/apowers313/fido2-server-demo/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 103参考• FIDO認証の概要説明https://www.slideshare.net/FIDOAlliance/fido-83445442?ref=https://fidoalliance.org/presentations/• Webauthn-isighttp://slides.com/herrjemand/webauthn-isig• INTRODUCTION TO FIDO ALLIANCEhttps://www.slideshare.net/FIDOAlliance/introduction-to-fido-alliance-66730790• MDN web docs WebAuthentication APIhttps://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API• Welcome to WebAuthn workshophttps://slides.com/fidoalliance/jan-2018-fido-seminar-webauthn-tutorial#/• Verifying WebAuthn/FIDO2 responseshttps://medium.com/@herrjemand/verifying-fido2-responses-4691288c8770• Verifying FIDO-U2F Attestationhttps://medium.com/@herrjemand/verifying-fido-u2f-attestations-in-fido2-f83fab80c355• WebAuthn from the relying-party viewhttps://speakerdeck.com/ynojima/webauthn-from-the-relying-party-view
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.

Recommended

イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
Takami Sato
 
【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
MLSE
 
Attentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門までAttentionの基礎からTransformerの入門まで
Attentionの基礎からTransformerの入門まで
AGIRobots
 
先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15
Yoichi Ochiai
 
Diabetes Mellitus
Diabetes MellitusDiabetes Mellitus
Diabetes Mellitus
MD Abdul Haleem
 
Power Point Presentation on Artificial Intelligence
Power Point Presentation on Artificial Intelligence Power Point Presentation on Artificial Intelligence
Power Point Presentation on Artificial Intelligence
Anushka Ghosh
 
Republic Act No. 11313 Safe Spaces Act (Bawal Bastos Law).pptx
Republic Act No. 11313 Safe Spaces Act (Bawal Bastos Law).pptxRepublic Act No. 11313 Safe Spaces Act (Bawal Bastos Law).pptx
Republic Act No. 11313 Safe Spaces Act (Bawal Bastos Law).pptx
maricelabaya1
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
Masaru Kurahayashi
 
認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入
TakashiTsukamoto4
 
FIDOのキホン
FIDOのキホンFIDOのキホン
FIDOのキホン
Yahoo!デベロッパーネットワーク
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
Hitachi, Ltd. OSS Solution Center.
 
Fido認証概要説明
Fido認証概要説明Fido認証概要説明
Fido認証概要説明
FIDO Alliance
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
Masaru Kurahayashi
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについて
Hiroyuki Wada
 
分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
 
俺が考えた最強のID連携デザインパターン
俺が考えた最強のID連携デザインパターン俺が考えた最強のID連携デザインパターン
俺が考えた最強のID連携デザインパターン
Masaru Kurahayashi
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Masaru Kurahayashi
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 
パスワードのいらない世界へ  FIDO認証の最新状況
パスワードのいらない世界へ  FIDO認証の最新状況パスワードのいらない世界へ  FIDO認証の最新状況
パスワードのいらない世界へ  FIDO認証の最新状況
FIDO Alliance
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
Naohiro Fujie
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 
MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要
Naohiro Fujie
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
Tatsuo Kudo
 
自己主権型IDと分散型ID
自己主権型IDと分散型ID自己主権型IDと分散型ID
自己主権型IDと分散型ID
Naohiro Fujie
 
Iddance2 fido
Iddance2 fidoIddance2 fido
Iddance2 fido
HiroshiUeno15
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
Hiroyuki Wada
 

More Related Content

What's hot(20)

認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
Masaru Kurahayashi
 
認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入
TakashiTsukamoto4
 
FIDOのキホン
FIDOのキホンFIDOのキホン
FIDOのキホン
Yahoo!デベロッパーネットワーク
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
Hitachi, Ltd. OSS Solution Center.
 
Fido認証概要説明
Fido認証概要説明Fido認証概要説明
Fido認証概要説明
FIDO Alliance
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
Masaru Kurahayashi
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについて
Hiroyuki Wada
 
分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
 
俺が考えた最強のID連携デザインパターン
俺が考えた最強のID連携デザインパターン俺が考えた最強のID連携デザインパターン
俺が考えた最強のID連携デザインパターン
Masaru Kurahayashi
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Masaru Kurahayashi
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 
パスワードのいらない世界へ  FIDO認証の最新状況
パスワードのいらない世界へ  FIDO認証の最新状況パスワードのいらない世界へ  FIDO認証の最新状況
パスワードのいらない世界へ  FIDO認証の最新状況
FIDO Alliance
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
Naohiro Fujie
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 
MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要
Naohiro Fujie
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
Tatsuo Kudo
 
自己主権型IDと分散型ID
自己主権型IDと分散型ID自己主権型IDと分散型ID
自己主権型IDと分散型ID
Naohiro Fujie
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
Masaru Kurahayashi
 
認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入
TakashiTsukamoto4
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
 
Fido認証概要説明
Fido認証概要説明Fido認証概要説明
Fido認証概要説明
FIDO Alliance
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
Masaru Kurahayashi
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについて
Hiroyuki Wada
 
分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
 
俺が考えた最強のID連携デザインパターン
俺が考えた最強のID連携デザインパターン俺が考えた最強のID連携デザインパターン
俺が考えた最強のID連携デザインパターン
Masaru Kurahayashi
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Masaru Kurahayashi
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 
パスワードのいらない世界へ  FIDO認証の最新状況
パスワードのいらない世界へ  FIDO認証の最新状況パスワードのいらない世界へ  FIDO認証の最新状況
パスワードのいらない世界へ  FIDO認証の最新状況
FIDO Alliance
 
SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
Naohiro Fujie
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 
MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要
Naohiro Fujie
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
Tatsuo Kudo
 
自己主権型IDと分散型ID
自己主権型IDと分散型ID自己主権型IDと分散型ID
自己主権型IDと分散型ID
Naohiro Fujie
 

Similar to FIDO認証によるパスワードレスログイン実装入門(20)

Iddance2 fido
Iddance2 fidoIddance2 fido
Iddance2 fido
HiroshiUeno15
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
Hiroyuki Wada
 
Bonfire API #1 生体認証のAPI化
Bonfire API #1 生体認証のAPI化Bonfire API #1 生体認証のAPI化
Bonfire API #1 生体認証のAPI化
Yahoo!デベロッパーネットワーク
 
Advancement of FIDO Technology
Advancement of FIDO TechnologyAdvancement of FIDO Technology
Advancement of FIDO Technology
FIDO Alliance
 
FIDO2導入とヤフーがめざすパスワードレスの世界
FIDO2導入とヤフーがめざすパスワードレスの世界FIDO2導入とヤフーがめざすパスワードレスの世界
FIDO2導入とヤフーがめざすパスワードレスの世界
FIDO Alliance
 
YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜
YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜
YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜
Yahoo!デベロッパーネットワーク
 
テレビ版GYAO!アプリへのOAuth2.0 Device Flowの実装
テレビ版GYAO!アプリへのOAuth2.0 Device Flowの実装テレビ版GYAO!アプリへのOAuth2.0 Device Flowの実装
テレビ版GYAO!アプリへのOAuth2.0 Device Flowの実装
Hiromitsu Homma
 
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Jun Kurihara
 
新しい認証技術FIDOの最新動向
新しい認証技術FIDOの最新動向新しい認証技術FIDOの最新動向
新しい認証技術FIDOの最新動向
FIDO Alliance
 
What are Passkeys.pdf
What are Passkeys.pdfWhat are Passkeys.pdf
What are Passkeys.pdf
Keiko Itakura
 
Authentication and Authorization of The Latest Keycloak
Authentication and Authorization of The Latest KeycloakAuthentication and Authorization of The Latest Keycloak
Authentication and Authorization of The Latest Keycloak
Hitachi, Ltd. OSS Solution Center.
 
Yahoo! JAPANが考えるテクノロジーとITエンジニアの未来 #devsumi
Yahoo! JAPANが考えるテクノロジーとITエンジニアの未来 #devsumiYahoo! JAPANが考えるテクノロジーとITエンジニアの未来 #devsumi
Yahoo! JAPANが考えるテクノロジーとITエンジニアの未来 #devsumi
Yahoo!デベロッパーネットワーク
 
Authlete overview
Authlete overviewAuthlete overview
Authlete overview
mtisol
 
Nii open forum_053019_dr.gomi
Nii open forum_053019_dr.gomiNii open forum_053019_dr.gomi
Nii open forum_053019_dr.gomi
FIDO Alliance
 
社内認証基盤用のVault Pluginを作るメリット
社内認証基盤用のVault Pluginを作るメリット社内認証基盤用のVault Pluginを作るメリット
社内認証基盤用のVault Pluginを作るメリット
Katsuya Yamaguchi
 
パスワードのいらない世界へ
パスワードのいらない世界へパスワードのいらない世界へ
パスワードのいらない世界へ
Keiko Itakura
 
アイデンティティ (ID) 技術の最新動向とこれから
アイデンティティ (ID) 技術の最新動向とこれからアイデンティティ (ID) 技術の最新動向とこれから
アイデンティティ (ID) 技術の最新動向とこれから
Tatsuo Kudo
 
認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向
Tatsuo Kudo
 
ヤフーでHardeningを実施する意味 (#sec_kansai #sosaisec)
ヤフーでHardeningを実施する意味 (#sec_kansai #sosaisec)ヤフーでHardeningを実施する意味 (#sec_kansai #sosaisec)
ヤフーでHardeningを実施する意味 (#sec_kansai #sosaisec)
Yahoo!デベロッパーネットワーク
 
LoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンLoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオン
Tomokazu Kizawa
 
Advancement of FIDO Technology
Advancement of FIDO TechnologyAdvancement of FIDO Technology
Advancement of FIDO Technology
FIDO Alliance
 
FIDO2導入とヤフーがめざすパスワードレスの世界
FIDO2導入とヤフーがめざすパスワードレスの世界FIDO2導入とヤフーがめざすパスワードレスの世界
FIDO2導入とヤフーがめざすパスワードレスの世界
FIDO Alliance
 
YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜
YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜
YJTC18 D-1 安心安全な次世代認証を目指して 〜社会に溶け込む認証技術〜
Yahoo!デベロッパーネットワーク
 
テレビ版GYAO!アプリへのOAuth2.0 Device Flowの実装
テレビ版GYAO!アプリへのOAuth2.0 Device Flowの実装テレビ版GYAO!アプリへのOAuth2.0 Device Flowの実装
テレビ版GYAO!アプリへのOAuth2.0 Device Flowの実装
Hiromitsu Homma
 
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Jun Kurihara
 
新しい認証技術FIDOの最新動向
新しい認証技術FIDOの最新動向新しい認証技術FIDOの最新動向
新しい認証技術FIDOの最新動向
FIDO Alliance
 
What are Passkeys.pdf
What are Passkeys.pdfWhat are Passkeys.pdf
What are Passkeys.pdf
Keiko Itakura
 
Yahoo! JAPANが考えるテクノロジーとITエンジニアの未来 #devsumi
Yahoo! JAPANが考えるテクノロジーとITエンジニアの未来 #devsumiYahoo! JAPANが考えるテクノロジーとITエンジニアの未来 #devsumi
Yahoo! JAPANが考えるテクノロジーとITエンジニアの未来 #devsumi
Yahoo!デベロッパーネットワーク
 
Authlete overview
Authlete overviewAuthlete overview
Authlete overview
mtisol
 
Nii open forum_053019_dr.gomi
Nii open forum_053019_dr.gomiNii open forum_053019_dr.gomi
Nii open forum_053019_dr.gomi
FIDO Alliance
 
社内認証基盤用のVault Pluginを作るメリット
社内認証基盤用のVault Pluginを作るメリット社内認証基盤用のVault Pluginを作るメリット
社内認証基盤用のVault Pluginを作るメリット
Katsuya Yamaguchi
 
パスワードのいらない世界へ
パスワードのいらない世界へパスワードのいらない世界へ
パスワードのいらない世界へ
Keiko Itakura
 
アイデンティティ (ID) 技術の最新動向とこれから
アイデンティティ (ID) 技術の最新動向とこれからアイデンティティ (ID) 技術の最新動向とこれから
アイデンティティ (ID) 技術の最新動向とこれから
Tatsuo Kudo
 
認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向認証技術、デジタルアイデンティティ技術の最新動向
認証技術、デジタルアイデンティティ技術の最新動向
Tatsuo Kudo
 
LoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンLoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオン
Tomokazu Kizawa
 

More from Yahoo!デベロッパーネットワーク(20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
Yahoo!デベロッパーネットワーク
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
Yahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
Yahoo!デベロッパーネットワーク
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
Yahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
 

Recently uploaded(8)

2025 04 Dayne
2025 04 Dayne2025 04 Dayne
2025 04 Dayne
arts yokohama
 
林 沙也加, 畑 玲音, 松下 光範. 既存データセットの活用事例に基づく新規データセットの活用方法推薦に関する検討, 第17回データ工学と情報マネジメン...
林 沙也加, 畑 玲音, 松下 光範. 既存データセットの活用事例に基づく新規データセットの活用方法推薦に関する検討, 第17回データ工学と情報マネジメン...林 沙也加, 畑 玲音, 松下 光範. 既存データセットの活用事例に基づく新規データセットの活用方法推薦に関する検討, 第17回データ工学と情報マネジメン...
林 沙也加, 畑 玲音, 松下 光範. 既存データセットの活用事例に基づく新規データセットの活用方法推薦に関する検討, 第17回データ工学と情報マネジメン...
Matsushita Laboratory
 
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdfJaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
MaiKaneko4
 
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
Toyo University
 
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptxダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ssuserfcafd1
 
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアルLoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
CRI Japan, Inc.
 
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
Matsushita Laboratory
 
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアルLoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
CRI Japan, Inc.
 
林 沙也加, 畑 玲音, 松下 光範. 既存データセットの活用事例に基づく新規データセットの活用方法推薦に関する検討, 第17回データ工学と情報マネジメン...
林 沙也加, 畑 玲音, 松下 光範. 既存データセットの活用事例に基づく新規データセットの活用方法推薦に関する検討, 第17回データ工学と情報マネジメン...林 沙也加, 畑 玲音, 松下 光範. 既存データセットの活用事例に基づく新規データセットの活用方法推薦に関する検討, 第17回データ工学と情報マネジメン...
林 沙也加, 畑 玲音, 松下 光範. 既存データセットの活用事例に基づく新規データセットの活用方法推薦に関する検討, 第17回データ工学と情報マネジメン...
Matsushita Laboratory
 
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdfJaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
JaSST2025-D5-1開発者手動の自動テスト導入によるバグ早期発見.pdf
MaiKaneko4
 
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
学会発表資料(2025/3/3):LLMを利用したSNSの投稿内容のインタラクティブマップ表示
Toyo University
 
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptxダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ダイアグラム思考_Yumemi.grow_読書シェア会2025_3_26.pptx
ssuserfcafd1
 
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアルLoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
CRI Japan, Inc.
 
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
Matsushita Laboratory
 
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアルLoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
CRI Japan, Inc.
 

FIDO認証によるパスワードレスログイン実装入門

  • 1.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.FIDO認証によるパスワードレスログイン実装入門HTML5 Conference 2018ヤフー株式会社2018/11/25合路 健人@kg0r0
  • 2.アジェンダCopyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 21. 自己紹介2. パスワード認証の課題3. FIDOとは4. FIDOの技術仕様5. デモ6. Web Authenticationフロー7. まとめ
  • 3.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.社内における認証をよりセキュアで使いやすくする取り組み興味のある方は是非一緒にどうですか??新卒入社2年目システム統括本部プラットフォーム開発本部アイデンティティー&アクセスマネジメント部自己紹介合路 健人
  • 4.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 4パスワード認証の課題
  • 5.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 5パスワード認証の課題(利便性)こんなことはありませんか 認証機会の増加 サービスごとに異なるパスワードを登録 複雑なパスワードの入力操作が不便
  • 6.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 6パスワード認証の課題(安全性)Client Serverusername + passwordDBDB LeakPhishingPassword List AttackDictionary Attack
  • 7.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 7FIDOとは
  • 8.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 8FIDO(Fast IDentity Online)パスワードへの依存度を減らし、利便性と安全性を向上するPoor EasyWeakStrongUSABILITYSECURITYUSABILITYSECURITYhttps://www.slideshare.net/FIDOAlliance/fido-83445442https://www.slideshare.net/FIDOAlliance/introduction-to-fido-alliance-66730790
  • 9.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 9FIDO認証モデルAuthenticatorUser verification FIDO Authenticationchallengegesture signatureprivatekeypublickey 公開鍵暗号方式による認証 オンラインサービスへの登録時に鍵ペアを生成して登録clientRP
  • 10.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 10用語説明 RP(Relying Party)• ユーザーの登録、認証を⾏うウェブサイト、または、事業者 認証器(Authenticator)• キーペアの管理を行う• 外部認証器と内部認証器がある
  • 11.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 11利便性 認証行為が容易 複数のパスワードを覚える負担を軽減
  • 12.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 12認証行為が容易 生体認証の導入• 指紋・虹彩・顔・声紋など 認証器を指定・選択できるポリシー• 認証器の多様性• 認証器の選択
  • 13.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 13複数のパスワードを覚える負担を軽減 パスワード(記憶)• 本人のみが記憶している情報 認証器(所持)• 本人のみが所持している物• 認証器が利用者本人を検証する機能を持つ
  • 14.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 14安全性 クレデンシャル情報の通信経路 クレデンシャル情報の安全性 認証器の信頼性
  • 15.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 15クレデンシャル情報の通信経路パスワード認証リモート認証(ユーザー名, パスワード)ローカル認証(指紋など)リモート認証(署名)FIDO認証モデルUser ClientUser Authenticator clientRelying partyRelying party
  • 16.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 16クレデンシャル情報の安全性FIDO AuthenticationKpub1Kpub2RPごとに鍵ペアを生成して登録rpid1(origin)rpid2(origin)Relying party1Relying party2Client リスト型攻撃に対する耐性 フィッシングに対する耐性AuthenticatorKpriv1 Kpriv2User Presence
  • 17.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 17クレデンシャル情報の安全性(リスト型攻撃対策)AuthenticatorFIDO Authentication Kpub1Kpriv1RPごとに異なる公開鍵を登録Kpriv2rpid1(origin)rpid2(origin)Relying party1Relying party2ClientKpub2User Presence
  • 18.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 18クレデンシャル情報の安全性(フィッシング対策)FIDO AuthenticationKpriv1RPごとに異なる秘密鍵を保管Kpriv2ClientUser PresenceKpub1Relying party1Relying party2 Kpub2AuthenticatorRelying party3
  • 19.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 19認証器の信頼性Attestation & MetadataAuthenticatorRegistrationAttestation privKey MetadataAuthentication KeysSigned Attestation ObjectRelying partyAttestation pubKeyAttestation Certificate
  • 20.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 20FIDOの技術仕様
  • 21.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 21FIDOの3つの技術仕様 FIDO UAF(Universal Authentication Framework) FIDO U2F(Universal 2nd Factor) FIDO2
  • 22.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 22FIDO UAF パスワードレス型(所持+生体など) 主にスマートフォン端末での利用を想定 生体認証などの認証手段によりパスワードレスを実現https://www.slideshare.net/FIDOAlliance/fido-83445442
  • 23.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 23FIDO U2F パスワード補完型(記憶+所持) 主にPC上でWebブラウザの利用を想定した二要素認証 着脱方式と無線方式に対応https://www.slideshare.net/FIDOAlliance/fido-83445442
  • 24.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 24UAFとU2F ユースケースが異なる• UAF(FIDOクライアント=アプリ)• U2F(ブラウザから利用できるが二要素認証) ブラウザからパスワードレス認証を!!https://www.slideshare.net/FIDOAlliance/fido-83445442
  • 25.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 25FIDO2FIDO認証対応プラットフォームの拡大Web Authentication APIブラウザからクレデンシャルにアクセスするAPICTAPクライアントと外部認証器間の通信をサポートするプロトコルhttps://www.slideshare.net/FIDOAlliance/fido-psd2-solving-the-strong-customer-authentication-challenge-in-europe
  • 26.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 26Web Authentication APIブラウザからクレデンシャルにアクセスするAPI ブラウザの標準インターフェース Credential Management API の拡張 登録 : navigator.credentials.create() 認証 : navigator.credentials.get()
  • 27.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 27CTAPクライアントと外部認証器間の通信をサポートするプロトコル 物理的に異なるクライアントと外部認証器が連携 USB・BLE・NFC などをサポートUSB, BLE, NFC,Authenticator client
  • 28.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 28様々な認証器に対応https://www.slideshare.net/FIDOAlliance/fido-83445442
  • 29.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 29デモ
  • 30.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 30Web Authentication(登録)
  • 31.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 31登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)検証公開鍵の保存
  • 32.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 32実装範囲Authenticator Client Relying partyWeb Authentication API 実装が必要な箇所ユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
  • 33.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 33登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
  • 34.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 34ユーザー名の入力 フォームからユーザー名を取得 ユーザー名を送信してチャレンジなどの情報を要求
  • 35.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 35ユーザー名の送信fetch('/webauthn/register', {method: 'POST',credentials: 'include',headers: {'Content-Type': 'application/json'},body: JSON.stringify({username: this.username.value,name: this.name.value})}) サンプル フォームからユーザー名を取得 ユーザー名を送信してチャレンジなどの情報を要求
  • 36.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 36challengeの送信{// random numberchallenge: randomBase64URLBuffer(32),rp: {name: "FIDO Examples Corporation”},user: {id: id,name: username,displayName: displayName},pubKeyCredParams: [{type: "public-key",alg: -7 // "ES256" IANA COSE Algorithms registry}]} サンプル
  • 37.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.Web Authentication API37登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
  • 38.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 38navigator.credentials.create()navigator.credentials.create({publicKey: {rp: {id: "example.com”,name: "Acme"},user: {id: new Uint8Array(16),name: "john.p.smith@example.com",displayName: "John P. Smith "},pubKeyCredParams: [{type: "public-key",alg: -7}],attestation: "direct",timeout: 60000,// must be a cryptographically random number sent from a serverchallenge: new Uint8Array([0x8C, 0x0A, 0x26, 0xFF, 0x22, 0x91, 0xC1, 0xE9, ... ]).buffer}})サンプル
  • 39.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 39Parameter rp [Object] (必須)• Relying partyに関する情報 user [Object](必須)• Credentialが紐づくユーザー情報 challenge[ArrayBuffer] (必須)• サーバーで生成した乱数 pubKeyCredParams[Object] (必須)• Credentialのタイプとアルゴリズムの指定(typeはpublic-key固定) timeout [Int]• ユーザーの入力待機時間 attestation [String]• Authenticatorの出どころを検証するかどうか authenticatorSelection [Object]• 認証器への要求事項
  • 40.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 40navigator.credentials.create()
  • 41.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 41登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
  • 42.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 42AuthenticatorAttestationResponse{// credential identifier on the device"rawId": "imCIoe8U_N9M1rTGeCqJ96TAu5uqSPa7YUzd ... ","id": ” imCIoe8U_N9M1rTGeCqJ96TAu5uqSPa7YUzdh7qq ... ",// attestation data"response": {"clientDataJSON": ”eyJjaGFsbGVuZ2UiOiJJSFdtWjFPa1MydDZLaH ... ”,"attestationObject": ”o2NmbXRoZmlkby11MmZnYXR0U3RtdKJjc2 ... "},// extensions results struct"getClientExtensionResults": {},//  type of credential"type": "public-key”}サンプル
  • 43.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 43clientDataJSON{// random number"challenge": "IHWmZ1OkS2t6KhvX-koNxutkYuMVEunCjYNSXXgAxvU",// origin of the website"origin": "http://localhost:3000",// type of the call."type": "webauthn.create”}サンプル
  • 44.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 44attestationObject CBOR(Concise Binary Object Representation)• JSONフォーマットをバイナリで表現• JSONよりもサイズが小さいconst cbor = require('cbor');. . .let attestationBuffer =base64url.toBuffer(webAuthnResponse.response.attestationObject);let ctapMakeCredResp = cbor.decodeAllSync(attestationBuffer)[0];公開鍵などを含むCBORでエンコードされたデータサンプル
  • 45.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 45attestationObject{// attestation format"fmt": ”packed",// raw buffer struct containing user info"authData": "9569088f1ecee3232954035dbd10d7cae3 ... ",// attestation statement data"attStmt": {// signature"sig": "3046022100db3162cfa7b5dbd78c46864e5f9 ... ",// X.509 Certificate Chain"x5c": ["3082013c3081e4a003020102020a395187893878526 ... ”]}}サンプル公開鍵などを含むCBORでエンコードされたデータ
  • 46.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 46authDatahttps://medium.com/@herrjemand/verifying-fido2-responses-4691288c8770ユーザーの情報を含むバイナリデータ
  • 47.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 47authDataのパースlet parseMakeCredAuthData = (buffer) => {let rpIdHash = buffer.slice(0, 32); buffer = buffer.slice(32);let flagsBuf = buffer.slice(0, 1); buffer = buffer.slice(1);let flags = flagsBuf[0];let counterBuf = buffer.slice(0, 4); buffer = buffer.slice(4);let counter = counterBuf.readUInt32BE(0);let aaguid = buffer.slice(0, 16); buffer = buffer.slice(16);let credIDLenBuf = buffer.slice(0, 2); buffer = buffer.slice(2);let credIDLen = credIDLenBuf.readUInt16BE(0);let credID = buffer.slice(0, credIDLen); buffer = buffer.slice(credIDLen);let COSEPublicKey = buffer;return {rpIdHash, flagsBuf, flags, counter, counterBuf, aaguid, credID, credIDLen, credIDLenBuf,COSEPublicKey}}サンプル
  • 48.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 48authDataのパース結果{// hash of the rpIdrpIdHash: <Buffer 49 96 0d e5 88 0e 8c 68 74 34 17 0f 64 76 60 5b 8f ... >,// state of the authenticator during the authenticationflags: 65,flagsBuf: <Buffer 41>,// 4byte countercounter: 53,counterBuf: <Buffer 00 00 00 35>,// authenticator attestation identifier aaguid: <Buffer f8 a0 11 f3 8c 0a 4d 15 80 06 17 11 1f 9e dc 7d>,// credential IdentifiercredID: <Buffer de 13 93 92 33 87 5a 0e 89 1b de 60 dc 43 1f 89 8c ... >,credIDLenBuf: <Buffer 00 40>,credIDLen: 64,// COSE encoded public keyCOSEPublicKey: <Buffer a5 01 02 03 26 20 01 21 58 20 36 25 71 4a ... >} サンプル
  • 49.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 49登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
  • 50.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 50Verify Attestation challenge、origin、typeの検証 flagsの検証 signatureの検証
  • 51.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 51challengeの検証router.post('/response', (request, response) => {let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));if(clientData.challenge !== request.session.challenge) {response.json({'status': 'failed','message': 'Challenges don¥'t match!’})}. . .})サンプルclientDataJSON内のchallengeを検証
  • 52.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 52originの検証router.post('/response', (request, response) => {let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));. . .if(clientData.origin !== config.origin) {response.json({'status': 'failed','message': 'Origins don¥'t match!’})}})サンプルclientDataJSON内のoriginを検証
  • 53.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 53typeの検証. . .let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));if(clientData.type !== 'webauthn.create') {. . .}})サンプルclientDataJSON内のtypeがwebauthn.createであるか確認
  • 54.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 54Verify Attestation challenge、origin、typeの検証 flagsの検証 signatureの検証
  • 55.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 55flagsの検証AuthenticatorでのUP、UVの結果 UP : User Presence• ユーザーの存在確認(必須) UV : User Verification• ユーザーの認証(任意)https://slides.com/fidoalliance/jan-2018-fido-seminar-webauthn-tutorial#/
  • 56.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 56flagsの検証let authrDataStruct = parseMakeCredAuthData(ctapMakeCredResp.authData);if(!(authrDataStruct.flags & 0x01))throw new Error('User was NOT presented durring authentication!');サンプルAuthenticatorでのUP、UVの結果 UP : User Presence• ユーザーの存在確認(必須) UV : User Verification• ユーザーの認証(任意)
  • 57.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 57Verify Attestation challenge、origin、typeの検証 flagsの検証 signatureの検証
  • 58.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 58signatureの検証 Attestation Certificateの取得 authDataのパラメーターとclientDataJSONのハッシュ値を連結 attStmtからsignatureを取得 signatureを検証
  • 59.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 59Attestation Certificateの取得 authData内にあるattSmtのx5c(X.509 Certificate Chain) PEM形式に変換する• Base64エンコード• 64文字ごとに改行コードをいれる• ヘッダとフッタを入れるlet ASN1toPEM = (pkBuffer) => {let type;. . .type = 'CERTIFICATE';}let b64cert = pkBuffer.toString('base64');let PEMKey = '';for(let i = 0; i < Math.ceil(b64cert.length / 64); i++) {let start = 64 * i;PEMKey += b64cert.substr(start, 64) + '¥n';}PEMKey = `-----BEGIN ${type}-----¥n` + PEMKey + `-----END ${type}-----¥n`;return PEMKey}サンプル
  • 60.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 60signatureの検証. . .let attestationBuffer = base64url.toBuffer(attestationObject);let ctapMakeCredResp = cbor.decodeAllSync(attestationBuffer)[0];let authrDataStruct = parseMakeCredAuthData(ctapMakeCredResp.authData);let clientDataHash = hash(base64url.toBuffer(clientDataJSON))// Attestation Certificateの取得let PEMCertificate = ASN1toPEM(ctapMakeCredResp.attStmt.x5c[0]);// authDataのパラメーターとclientDataJSONのハッシュ値を連結let signatureBase = Buffer.concat([authrDataStruct.rpIdHash,authrDataStruct.flagsBuf,authrDataStruct.counterBuf,authrDataStruct.aaguid,authrDataStruct.credIDLenBuf,authrDataStruct.credID,authrDataStruct.COSEPublicKey,clientDataHash]);// attStmtからsignatureの取得let signature = ctapMakeCredResp.attStmt.sig;// 検証response.verified = crypto.createVerify('SHA256').update(signatureBase).verify(PEMCertificate, signature);}サンプル
  • 61.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 61Verify Attestation challenge、origin、typeの検証 flagsの検証 signatureの検証
  • 62.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 62登録成功!!
  • 63.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 63登録フロー(概略)Authenticator Client Relying partyユーザー名チャレンジなどAttestation response 検証公開鍵の保存鍵ペアの生成Attestation responseチャレンジ・RPの情報・ユーザーの情報(署名・証明書・公開鍵など)(署名・証明書・公開鍵など)
  • 64.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 64publicKeyの保存let verifyAuthenticatorAttestationResponse = (webAuthnResponse) => {. . .let authrDataStruct = parseMakeCredAuthData(ctapMakeCredResp.authData);// COSE PublicKeyをPKCS形式に変換let publicKey = COSEECDHAtoPKCS(authrDataStruct.COSEPublicKey)let verified = verifySignature(signature, signatureBase, PEMCertificate)if(verified) {// publicKeyなどを保存response.authrInfo = {fmt: ’packed',publicKey: base64url.encode(publicKey),counter: authrDataStruct.counter,credID: base64url.encode(authrDataStruct.credID)}}}return response}サンプル COSE(CBOR Object Signing and Encryption)• 暗号鍵を表現するためのJSONをCBORエンコードしたフォーマット• COSEから取得したxとyを連結し、先頭に0x04を加えるとPublicKeyになる
  • 65.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 65publicKeyの保存 COSE(CBOR Object Signing and Encryption)• 暗号鍵を表現するためのJSONをCBORエンコードしたフォーマット• COSEから取得したxとyを連結し、先頭に0x04を加えるとPublicKeyになる// result of COSE parse{1: kty=2,3: alg=-7,-1: crv=1,-2: x,-3: y,} サンプル
  • 66.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 66publicKeyの保存 COSE(CBOR Object Signing and Encryption)• 暗号鍵を表現するためのJSONをCBORエンコードしたフォーマット• COSEから取得したxとyを連結し、先頭に0x04を加えるとPublicKeyになるconst cbor = require('cbor');. . .let COSEECDHAtoPKCS = (COSEPublicKey) => {let coseStruct = cbor.decodeAllSync(COSEPublicKey)[0];let tag = Buffer.from([0x04]);let x = coseStruct.get(-2);let y = coseStruct.get(-3);return Buffer.concat([tag, x, y])}サンプル
  • 67.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 67Web Authentication(認証)
  • 68.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 68認証フロー(概略)Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
  • 69.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 69実装範囲Authenticator Client Relying partyWeb Authentication API 実装が必要な箇所ユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
  • 70.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 70認証フロー(概略)Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
  • 71.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 71ユーザー名の入力
  • 72.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 72ユーザー名の送信fetch('/webauthn/login', {method: 'POST',credentials: 'include',headers: {'Content-Type': 'application/json'},body: JSON.stringify({username: this.username.value})})サンプル
  • 73.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 73challengeの送信let generateServerGetAssertion = (authenticators) => {let allowCredentials = [];for(let authr of authenticators) {allowCredentials.push({type: 'public-key',id: authr.credID,transports: ['usb', 'nfc', 'ble']})}return {// random numberchallenge: randomBase64URLBuffer(32),allowCredentials: allowCredentials}}サンプル
  • 74.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.Web Authentication API74実装範囲Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
  • 75.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 75navigator.credentials.get()navigator.credentials.get({publicKey: {timeout: 60000,challenge: new Uint8Array([0x79, 0x50, 0x68, 0x71, 0xDA, 0xEE, 0xEE, 0xB9, 0x94, 0xC3, 0xC2, ...]).buffer,allowCredentials: [{id: cred.rawId,transports: ["usb", "nfc", "ble"],type: "public-key"}]},})サンプル
  • 76.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 76Parameter challenge [ArrayBuffer] (必須)• サーバーで生成した乱数 timeout [Int]• ユーザーの入力待機時間 allowCredentials [Array]• ユーザーに紐づくCredentialのidリスト rpId [String]• rpIdの指定(登録時と同じ値を指定) userVerification [String]• ユーザーに紐づくCredentialのリスト
  • 77.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 77navigator.credentials.get()
  • 78.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 78実装範囲Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
  • 79.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 79AuthenticatorAssertionResponse{// credential identifier on the device"rawId": "imCIoe8U_N9M1rTGeCqJ96TAu5uqSPa7YUzd ... " ,"id": "imCIoe8U_N9M1rTGeCqJ96TAu5uqSPa7YUzdh7qq ... ",// assertion data"response": {"authenticatorData": "SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MBAAAALQ","signature": "MEUCIQCFOqnsAFZLQmcPt2qSjnCb403SisGEASSjT3fOPuD5JgIgF ...","userHandle": "","clientDataJSON": "eyJjaGFsbGVuZ2UiOiJDUXF5aUlrQ00yWEtvaHVSdlNqTEFoN ...”},// extensions results struct"getClientExtensionResults": {},// type of credential"type": "public-key”}サンプル
  • 80.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 80authenticatorDatahttps://slides.com/fidoalliance/jan-2018-fido-seminar-webauthn-tutorial#/ユーザーの情報を含むバイナリデータ
  • 81.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 81authenticatorDataのパースlet parseGetAssertAuthData = (buffer) => {let rpIdHash = buffer.slice(0, 32); buffer = buffer.slice(32);let flagsBuf = buffer.slice(0, 1); buffer = buffer.slice(1);let flags = flagsBuf[0];let counterBuf = buffer.slice(0, 4); buffer = buffer.slice(4);let counter = counterBuf.readUInt32BE(0);return {rpIdHash, flagsBuf, flags, counter, counterBuf}}サンプル
  • 82.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 82authenticatorDataのパース結果{// hash of the rpIdrpIdHash: <Buffer 49 96 0d e5 88 0e 8c 68 74 34 17 0f 64 76 60 5b 8f e4 ae b9a2 86 32 c7 99 5c f3 ba 83 1d 97 63>,// state of the authenticator during the authenticationflags: 1,flagsBuf: <Buffer 01>,// 4byte countercounter: 68,counterBuf: <Buffer 00 00 00 44>}サンプル
  • 83.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 83認証フロー(概略)Authenticator Client Relying partyユーザー名チャレンジやユーザーの情報などAssertion response検証署名の生成Assertion responseチャレンジ・RPの情報・ユーザーの情報(署名など)(署名など)
  • 84.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 84Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
  • 85.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 85challengeの検証router.post('/response', (request, response) => {let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));if(clientData.challenge !== request.session.challenge) {response.json({'status': 'failed','message': 'Challenges don¥'t match!’})}. . .})サンプルclientDataJSONとセッションなどに保存していたchallengeを比較
  • 86.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 86originの検証router.post('/response', (request, response) => {let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));. . .if(clientData.origin !== config.origin) {response.json({'status': 'failed','message': 'Origins don¥'t match!’})}})サンプルclientDataJSONとサーバーのコンフィグなどから取得したoriginを比較
  • 87.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 87typeの検証. . .let webauthnResp = request.bodylet clientData =JSON.parse(base64url.decode(webauthnResp.response.clientDataJSON));if(clientData.type !== 'webauthn.get') {. . .}})サンプルclientDataJSONのtypeがwebauthn.getであるか確認
  • 88.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 88Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
  • 89.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 89flagsの検証let authrDataStruct = parseMakeCredAuthData(ctapMakeCredResp.authData);if(!(authrDataStruct.flags & 0x01))throw new Error('User was NOT presented durring authentication!');サンプルAuthenticatorでのUP、UVの結果を検証
  • 90.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 90Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
  • 91.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 91signatureの検証 Authenticatorの検索 PublicKeyの取得 authenticatorDataのパラメータとclientDataJSONのハッシュ値を連結 AuthenticatorAssertionResponseからsignatureを取得 signatureを検証
  • 92.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 92Authenticatorの検索let findAuthr = (credID, authenticators) => {for(let authr of authenticators) {if(authr.credID === credID)return authr}throw new Error(`Unknown authenticator with credID ${credID}!`)}サンプルCredentialIdを元にAuthenticatorを検索する
  • 93.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 93publicKeyの取得 登録時に保存したpublicKeyを取りだす PEM形式に変換する• 26バイトのメタデータ(固定)を付与する• Base64エンコード• 64文字ごとに改行コードをいれる• ヘッダとフッタを入れる
  • 94.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 94publicKeyの取得let ASN1toPEM = (pkBuffer) => {. . .// 26byteのメタデータを追加pkBuffer = Buffer.concat([new Buffer.from("3059301306072a8648ce3d020106082a8648ce3d030107034200", "hex"),pkBuffer]);type = 'PUBLIC KEY';. . .// Base64エンコードlet b64cert = pkBuffer.toString('base64');let PEMKey = '';for(let i = 0; i < Math.ceil(b64cert.length / 64); i++) {let start = 64 * i;// 改行コードの追加PEMKey += b64cert.substr(start, 64) + '¥n';}// ヘッダとフッタの追加PEMKey = `-----BEGIN ${type}-----¥n` + PEMKey + `-----END ${type}-----¥n`;return PEMKey}サンプル
  • 95.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 95signatureの検証let verifyAuthenticatorAssertionResponse = (webAuthnResponse, authenticators) => {. . .let authenticatorData = base64url.toBuffer(webAuthnResponse.response.authenticatorData);let authrDataStruct = parseGetAssertAuthData(authenticatorData);let clientDataHash = hash(base64url.toBuffer(webAuthnResponse.response.clientDataJSON))// authenticatorDataとclientDataJSONのハッシュ値を連結let signatureBase = Buffer.concat([authrDataStruct.rpIdHash,authrDataStruct.flagsBuf,authrDataStruct.counterBuf,clientDataHash]);// 登録時に保存した公開鍵を取得let publicKey = ASN1toPEM(base64url.toBuffer(authr.publicKey));// navigator.credentials.get()の戻り値のsignatureを取得let signature = base64url.toBuffer(webAuthnResponse.response.signature);// 検証response.verified = crypto.createVerify('SHA256').update(signatureBase).verify(publicKey, signature);. . .}サンプル
  • 96.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 96Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
  • 97.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 97counterの検証と更新let verifyAuthenticatorAssertionResponse = (webAuthnResponse, authenticators) =>{. . .if(response.verified) {if(response.counter <= authr.counter)throw new Error('Authr counter did not increase!');authr.counter = authrDataStruct.counter}}. . .} サンプルauthenticatorDataのcounterを検証
  • 98.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 98Verify Assertion challenge、origin、typeの検証 flagsの検証 signatureの検証 counterの検証と更新
  • 99.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 99認証成功!!
  • 100.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 100まとめ
  • 101.まとめCopyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 101 パスワード認証は利便性と安全性に問題 FIDO認証は公開鍵暗号を応用しパスワード認証の課題を解消 FIDO2プロジェクトにより認証対応プラットフォームの拡大
  • 102.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 102RPのサンプル実装様々な言語で実装されている Node.js : https://github.com/fido-alliance/webauthn-demo Python : https://github.com/duo-labs/py_webauthn Ruby : https://github.com/cedarcode/webauthn-ruby Go : https://github.com/duo-labs/webauthn Java : https://github.com/Yubico/java-webauthn-serverこの他にもいっぱい!!https://github.com/apowers313/fido2-server-demo/
  • 103.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 103参考• FIDO認証の概要説明https://www.slideshare.net/FIDOAlliance/fido-83445442?ref=https://fidoalliance.org/presentations/• Webauthn-isighttp://slides.com/herrjemand/webauthn-isig• INTRODUCTION TO FIDO ALLIANCEhttps://www.slideshare.net/FIDOAlliance/introduction-to-fido-alliance-66730790• MDN web docs WebAuthentication APIhttps://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API• Welcome to WebAuthn workshophttps://slides.com/fidoalliance/jan-2018-fido-seminar-webauthn-tutorial#/• Verifying WebAuthn/FIDO2 responseshttps://medium.com/@herrjemand/verifying-fido2-responses-4691288c8770• Verifying FIDO-U2F Attestationhttps://medium.com/@herrjemand/verifying-fido-u2f-attestations-in-fido2-f83fab80c355• WebAuthn from the relying-party viewhttps://speakerdeck.com/ynojima/webauthn-from-the-relying-party-view
  • 104.Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp