1.2K Views
October 04, 18
スライド概要
#idcon vol.25 fidcon 勝手に Meet up!で発表した内容です。
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
FIDOのキホン idcon vol.25 fidcon 勝手に Meet up! ヤフー株式会社 @kg0r0 2018/10/03
自己紹介 合路 健人 新卒入社2年目 システム統括本部 プラットフォーム開発本部 アイデンティティ&アクセスマネジメント部 社内における認証をよりセキュアで使いやすくする取り組み 興味のある方は是非一緒にどうですか??
アジェンダ 1. パスワード認証の課題 2. FIDOとは 3. FIDOの技術仕様 4. デモ 5. まとめ 3
パスワード認証の課題 4
パスワード認証の課題(利便性) こんなことはありませんか 認証機会の増加 サービスごとに異なるパスワードを登録 複雑なパスワードの入力操作が不便 5
パスワード認証の課題(安全性) username + password Client Relying party DB Password List Attack Dictionary Attack Phishing DB Leak 6
FIDOとは 7
FIDO(Fast IDentity Online) Strong Weak SECURITY パスワードへの依存度を減らし、利便性と安全性を向上する SECURITY USABILITY Poor Easy USABILITY https://www.slideshare.net/FIDOAlliance/introduction-to-fido-alliance-66730790 https://www.slideshare.net/FIDOAlliance/fido-83445442 8
FIDO認証モデル 公開鍵暗号方式による認証 オンラインサービスへの登録時に鍵ペアを生成して登録 challenge User verification Authenticator gesture FIDO Authentication signature privatekey publickey 9
利便性 認証行為が容易 複数のパスワードを覚える負担を軽減 10
認証行為が容易 生体認証の導入 • 指紋・虹彩・顔・声紋など 認証器を指定・選択できるポリシー • 認証器の多様性 • 認証器の選択 User verification Authenticator https://www.slideshare.net/FIDOAlliance/getting-to-know-the-fido-specifications-technical-tutorial 11
複数のパスワードを覚える負担を軽減 パスワード(記憶) • 本人のみが記憶している情報 認証器(所持) • 本人のみが所持している物 • 認証器が利用者本人を検証する機能を持つ 12
安全性 クレデンシャル情報の通信経路 プライバシーの保護 認証器の信頼性 13
クレデンシャル情報の通信経路 パスワード認証 Client User リモート認証 (ユーザー名, パスワード) FIDO認証モデル User Relying party Authenticator ローカル認証 (指紋など) client リモート認証 (署名) Relying party 14
プライバシーの保護 RPごとに鍵ペアを生成して登録 リスト型攻撃に対する耐性 フィッシングに対する耐性 rpid1(origin) FIDO Authentication Authenticator Relying party1 Kpub1 rpid2(origin) User Presence Kpriv1 Kpriv2 Client Kpub2 Relying party2 15
プライバシーの保護(リスト型攻撃) RPごとに異なる公開鍵を登録 rpid1(origin) FIDO Authentication Authenticator Kpub1 Relying party1 rpid2(origin) User Presence Kpriv1 Kpriv2 Client Kpub2 Relying party2 16
プライバシーの保護(フィッシング対策) RPごとに異なる秘密鍵を保管 Authenticator FIDO Authentication Relying party1 Kpub1 Relying party2 Kpub2 Kpriv1 User Presence Kpriv2 Client Relying party3 17
認証器の信頼性 Attestation & Metadata Authenticator Attestation privKey Attestation Certificate Signed Attestation Object Metadata Registration Attestation pubKey Relying party Authentication Keys 18
FIDOの技術仕様 19
FIDOの3つの技術仕様 FIDO UAF(Universal Authentication Framework) FIDO U2F(Universal 2nd Factor) FIDO2 20
FIDO UAF パスワードレス型(所持+生体など) 主にスマートフォン端末での利用を想定 生体認証などの認証手段によりパスワードレスを実現 https://www.slideshare.net/FIDOAlliance/fido-83445442 21
FIDO U2F パスワード補完型(記憶+所持) 主にPC上でWebブラウザの利用を想定した二要素認証 着脱方式と無線方式に対応 https://www.slideshare.net/FIDOAlliance/fido-83445442 22
UAFとU2F ユースケースが異なる • UAF(FIDOクライアント=アプリ) • U2F(ブラウザから利用できるが二要素認証) ブラウザからパスワードレス認証を!! https://www.slideshare.net/FIDOAlliance/fido-83445442 23
FIDO2 FIDO認証対応プラットフォームの拡大 Web Authentication API ブラウザからクレデンシャルにアクセスするAPI CTAP クライアントと外部認証器間の通信をサポートするプロトコル FIDO2 Project FIDO UAF FIDO U2F (@FIDO) CTAP WebAuthn (@FIDO) (@W3C) 24
Web Authentication API ブラウザからクレデンシャルにアクセスするAPI ブラウザの標準インターフェース Credential Manegement API の拡張 登録 : navigator.credentials.create() 認証 : navigator.credentials.get() 25
登録 : navigator.credentials.create()
navigator.credentials.create({
publicKey: {
rp: {
name: "Acme”
},
user: {
id: new Uint8Array(16),
name: "[email protected]",
displayName: "John P. Smith”
},
pubKeyCredParams: [{
type: "public-key",
alg: -7
}],
attestation: "direct",
timeout: 60000,
challenge: new Uint8Array([
0x8C, 0x0A, 0x26, 0xFF, 0x22, 0x91, 0xC1, 0xE9, 0xB9, 0x4E, 0x2E, 0x17, 0x1A, 0x98, 0x6A, 0x73,
0x71, 0x9D, 0x43, 0x48, 0xD5, 0xA7, 0x6A, 0x15, 0x7E, 0x38, 0x94, 0x52, 0x77, 0x97, 0x0F, 0xEF
]).buffer
}})
.then((cred) => {
console.log("NEW CREDENTIAL", cred);
});
サンプル
26
認証 : navigator.credentials.get()
navigator.credentials.get({
publicKey: {
timeout: 60000,
challenge: new Uint8Array([
0x79, 0x50, 0x68, 0x71, 0xDA, 0xEE, 0xEE, 0xB9, 0x94, 0xC3, 0xC2, 0x15, 0x67, 0x65, 0x26, 0x22,
0xE3, 0xF3, 0xAB, 0x3B, 0x78, 0x2E, 0xD5, 0x6F, 0x81, 0x26, 0xE2, 0xA6, 0x01, 0x7D, 0x74, 0x50
]).buffer,
allowCredentials: [{
id: cred.rawId,
transports: ["usb", "nfc", "ble"],
type: "public-key "
}]
},
}).then((assertion) => {
console.log("ASSERTION", assertion);
});
サンプル
27
登録フロー(概略) Authenticator Relying party Client challenge, userInfo 鍵ペアを生成 (Kpriv, Kpub) challenge, RP ID, userInfo C counter++ counter, Kpub, attestCert, attestSign(C, etc) S KpubAttstでSを検証 counter, C, S, etc Kpubを保管 RP IDの検証 28
認証フロー(概略) Authenticator Relying party Client challenge, userinfo 鍵ペアの検索 challenge, RP ID, userInfo Kpubを取り出す C Kprivで署名 counter++ counter, signature(C, etc) S counter, C, S KpubでSを検証 RP IDなどの検証 29
チャレンジレスポンス方式(認証) Authenticator Relying party Client challenge challenge Kpubを取り出す Kprivで署名 signature(challenge) S S KpubでSを検証 30
フィッシング対策(認証) Authenticator Relying party Client challenge challenge, RP ID Kprivで署名 Kpubを取り出す C signature(challenge) S C・S KpubでSを検証 RP Idの検証 31
リプレイアタック対策(認証) Authenticator Relying party Client challenge challenge, RP ID Kprivで署名 counter++ Kpubを取り出す C counter, signature(C, counter) S counter, C, S KpubでSを検証 RP Idの検証 counterの検証 32
RP固有の鍵ペア(認証) Authenticator Relying party Client challenge, userinfo challenge, RP ID, userInfo Kpubを取り出す 鍵ペアの検索 C Kprivで署名 counter, signature(C, etc) counter++ S counter, C, S KpubでSを検証 RP Idなどの検証 33
RP固有の鍵ペア(登録) Authenticator Relying party Client challenge, userinfo 鍵ペアを生成 (Kpriv, Kpub) challenge, RP ID, userInfo C counter++ counter, Kpub, signature(C, Kpub, etc) KpubでSを検証 S counter, C, S, etc RP ID, counterを検証 34
Attestation(登録) Authenticator Relying party Client challenge, userinfo 鍵ペアを生成 (Kpriv, Kpub) challenge, RP ID, userInfo C counter++ counter・Kpub・attestCert・attestSign(C, etc) S counter, C, S, etc KpubAttstと KpubでSを検証 RP Idなどの検証 35
CTAP クライアントと外部認証器間の通信をサポートするプロトコル 物理的に異なるクライアントと外部認証器が連携 USB・BLE・NFC などをサポート USB, BLE, NFC, Authenticator client 36
様々な認証器に対応 https://www.slideshare.net/FIDOAlliance/fido-83445442 37
デモ 38
まとめ パスワード認証は利便性と安全性に問題 FIDO認証は公開鍵暗号を応用しパスワード認証の課題を解消 FIDO2プロジェクトにより認証対応プラットフォームの拡大 39
参考 • FIDO認証の概要説明 https://www.slideshare.net/FIDOAlliance/fido-83445442?ref=https://fidoalliance.org/presentations/ • 次世代認証プロトコルFIDOの動向 https://techblog.yahoo.co.jp/security/fido-introduction/ • Webauthn-isig http://slides.com/herrjemand/webauthn-isig • INTRODUCTION TO FIDO ALLIANCE https://www.slideshare.net/FIDOAlliance/introduction-to-fido-alliance-66730790 • MDN web docs WebAuthentication API https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API 40