FIDOのキホン

1K Views

October 04, 18

スライド概要

#idcon vol.25 fidcon 勝手に Meet up!で発表した内容です。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

FIDOのキホン idcon vol.25 fidcon 勝手に Meet up! ヤフー株式会社 @kg0r0 2018/10/03

2.

自己紹介 合路 健人 新卒入社2年目 システム統括本部 プラットフォーム開発本部 アイデンティティ&アクセスマネジメント部 社内における認証をよりセキュアで使いやすくする取り組み 興味のある方は是非一緒にどうですか??

3.

アジェンダ 1. パスワード認証の課題 2. FIDOとは 3. FIDOの技術仕様 4. デモ 5. まとめ 3

4.

パスワード認証の課題 4

5.

パスワード認証の課題(利便性) こんなことはありませんか  認証機会の増加  サービスごとに異なるパスワードを登録  複雑なパスワードの入力操作が不便 5

6.

パスワード認証の課題(安全性) username + password Client Relying party DB Password List Attack Dictionary Attack Phishing DB Leak 6

7.

FIDOとは 7

8.

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

9.

FIDO認証モデル  公開鍵暗号方式による認証  オンラインサービスへの登録時に鍵ペアを生成して登録 challenge User verification Authenticator gesture FIDO Authentication signature privatekey publickey 9

10.

利便性  認証行為が容易  複数のパスワードを覚える負担を軽減 10

11.

認証行為が容易  生体認証の導入 • 指紋・虹彩・顔・声紋など  認証器を指定・選択できるポリシー • 認証器の多様性 • 認証器の選択 User verification Authenticator https://www.slideshare.net/FIDOAlliance/getting-to-know-the-fido-specifications-technical-tutorial 11

12.

複数のパスワードを覚える負担を軽減  パスワード(記憶) • 本人のみが記憶している情報  認証器(所持) • 本人のみが所持している物 • 認証器が利用者本人を検証する機能を持つ 12

13.

安全性  クレデンシャル情報の通信経路  プライバシーの保護  認証器の信頼性 13

14.

クレデンシャル情報の通信経路 パスワード認証 Client User リモート認証 (ユーザー名, パスワード) FIDO認証モデル User Relying party Authenticator ローカル認証 (指紋など) client リモート認証 (署名) Relying party 14

15.

プライバシーの保護 RPごとに鍵ペアを生成して登録  リスト型攻撃に対する耐性  フィッシングに対する耐性 rpid1(origin) FIDO Authentication Authenticator Relying party1 Kpub1 rpid2(origin) User Presence Kpriv1 Kpriv2 Client Kpub2 Relying party2 15

16.

プライバシーの保護(リスト型攻撃) RPごとに異なる公開鍵を登録 rpid1(origin) FIDO Authentication Authenticator Kpub1 Relying party1 rpid2(origin) User Presence Kpriv1 Kpriv2 Client Kpub2 Relying party2 16

17.

プライバシーの保護(フィッシング対策) RPごとに異なる秘密鍵を保管 Authenticator FIDO Authentication Relying party1 Kpub1 Relying party2 Kpub2 Kpriv1 User Presence Kpriv2 Client Relying party3 17

18.

認証器の信頼性 Attestation & Metadata Authenticator Attestation privKey Attestation Certificate Signed Attestation Object Metadata Registration Attestation pubKey Relying party Authentication Keys 18

19.

FIDOの技術仕様 19

20.

FIDOの3つの技術仕様  FIDO UAF(Universal Authentication Framework)  FIDO U2F(Universal 2nd Factor)  FIDO2 20

21.

FIDO UAF  パスワードレス型(所持+生体など)  主にスマートフォン端末での利用を想定  生体認証などの認証手段によりパスワードレスを実現 https://www.slideshare.net/FIDOAlliance/fido-83445442 21

22.

FIDO U2F  パスワード補完型(記憶+所持)  主にPC上でWebブラウザの利用を想定した二要素認証  着脱方式と無線方式に対応 https://www.slideshare.net/FIDOAlliance/fido-83445442 22

23.

UAFとU2F  ユースケースが異なる • UAF(FIDOクライアント=アプリ) • U2F(ブラウザから利用できるが二要素認証)  ブラウザからパスワードレス認証を!! https://www.slideshare.net/FIDOAlliance/fido-83445442 23

24.

FIDO2 FIDO認証対応プラットフォームの拡大 Web Authentication API ブラウザからクレデンシャルにアクセスするAPI CTAP クライアントと外部認証器間の通信をサポートするプロトコル FIDO2 Project FIDO UAF FIDO U2F (@FIDO) CTAP WebAuthn (@FIDO) (@W3C) 24

25.

Web Authentication API ブラウザからクレデンシャルにアクセスするAPI  ブラウザの標準インターフェース  Credential Manegement API の拡張  登録 : navigator.credentials.create()  認証 : navigator.credentials.get() 25

26.
[beta]
登録 : navigator.credentials.create()
navigator.credentials.create({
publicKey: {
rp: {
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,
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

27.
[beta]
認証 : 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

28.

登録フロー(概略) 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

29.

認証フロー(概略) 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

30.

チャレンジレスポンス方式(認証) Authenticator Relying party Client challenge challenge Kpubを取り出す Kprivで署名 signature(challenge) S S KpubでSを検証 30

31.

フィッシング対策(認証) Authenticator Relying party Client challenge challenge, RP ID Kprivで署名 Kpubを取り出す C signature(challenge) S C・S KpubでSを検証 RP Idの検証 31

32.

リプレイアタック対策(認証) 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

33.

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

34.

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

35.

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

36.

CTAP クライアントと外部認証器間の通信をサポートするプロトコル  物理的に異なるクライアントと外部認証器が連携  USB・BLE・NFC などをサポート USB, BLE, NFC, Authenticator client 36

37.

様々な認証器に対応 https://www.slideshare.net/FIDOAlliance/fido-83445442 37

38.

デモ 38

39.

まとめ  パスワード認証は利便性と安全性に問題  FIDO認証は公開鍵暗号を応用しパスワード認証の課題を解消  FIDO2プロジェクトにより認証対応プラットフォームの拡大 39

40.

参考 • 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