🌠探索 WebAuthn API å’Œæ— å¯†ç 身份验è¯çš„æœªæ¥ 2024-08-28 作者 C3P00 在这个数å—化和信æ¯é«˜åº¦äº’è”的时代,密ç 的安全性和便æ·æ€§ä¸€ç›´æ˜¯ä¸€ä¸ªå¤‡å—关注的è¯é¢˜ã€‚éšç€ç½‘络钓鱼(phishing)攻击的日益猖ç—ï¼Œä¼ ç»Ÿçš„å¯†ç 验è¯æ–¹å¼æ˜¾å¾—越æ¥è¶Šè„†å¼±ã€‚为了解决这个问题,FIDO(快速身份在线)è”盟推出了一系列新兴的身份验è¯æ ‡å‡†ï¼Œå…¶ä¸æœ€å…·ä»£è¡¨æ€§çš„是 WebAuthn å’Œ FIDO2ã€‚è¿™ç¯‡æ–‡ç« å°†æ·±å…¥æŽ¢è®¨ WebAuthn API å’Œæ— å¯†ç 身份验è¯çš„原ç†ä¸Žåº”用,帮助我们更好地ç†è§£æœªæ¥çš„安全身份验è¯æ–¹å¼ã€‚ 🔠什么是 FIDO å’Œ FIDO2? FIDO è”盟æˆç«‹äºŽ 2013 年,旨在开å‘安全ã€å¼€æ”¾ã€æ ‡å‡†åŒ–的防网络钓鱼身份验è¯å议。FIDO 的三个主è¦å议包括 UAF(通用身份验è¯æ¡†æž¶ï¼‰ã€U2F. ¼ˆé€šç”¨ç¬¬äºŒå› ç´ ï¼‰å’Œ FIDO2。FIDO2 æ˜¯å…¶æœ€æ–°çš„æ ‡å‡†ï¼Œä¸“æ³¨äºŽæ— å¯†ç 身份验è¯ã€‚✅ FIDO2 由两部分组æˆï¼šWebAuthn(客户端 API)和 CTAP(客户端到身份验è¯å™¨å议)。WebAuthn 使开å‘者能够通过 JavaScript 创建和管ç†å…¬é’¥å‡è¯ï¼Œè€Œ CTAP 则负责与身份验è¯å™¨ä¹‹é—´çš„低级别通信。 🔄 FIDO çš„å·¥ä½œåŽŸç† FIDO åè®®çš„æ ¸å¿ƒæ˜¯åŸºäºŽæŒ‘æˆ˜-å“应机制的身份验è¯æµç¨‹ã€‚æœåŠ¡å™¨å‘客户端å‘é€ä¸€ä¸ªæŒ‘战(challenge)和å‡è¯æ ‡è¯†ç¬¦ã€‚客户端将这些信æ¯å‘é€ç»™èº«ä»½éªŒè¯å™¨ï¼Œèº«ä»½éªŒè¯å™¨ä¼šè¦æ±‚用户进行验è¯ï¼ˆå¦‚输入 PIN 或使用生物识别技术)。验è¯é€šè¿‡åŽï¼Œèº«ä»½éªŒè¯å™¨ä½¿ç”¨ç§é’¥å¯¹æ•°æ®è¿›è¡Œç¾åï¼Œå¹¶å°†ç»“æžœè¿”å›žç»™å®¢æˆ·ç«¯ï¼Œæœ€ç»ˆå®¢æˆ·ç«¯å°†å…¶ä¼ é€’ç»™æœåŠ¡å™¨è¿›è¡ŒéªŒè¯ã€‚ è¿™ç§æœºåˆ¶ç¡®ä¿äº†ç”¨æˆ·çš„å‡è¯å§‹ç»ˆå˜å‚¨åœ¨æœ¬åœ°è®¾å¤‡ä¸Šï¼Œé¿å…了å‡è¯æ³„露的风险。æ¤å¤–,挑战-å“应机制有效地防æ¢äº†ä¸é—´äººæ”»å‡»ï¼ˆMITM)。 📜 WebAuthn API çš„æ ¸å¿ƒæ“作 WebAuthn API æ供了两个基本æ“作:navigator.credentials.create å’Œ navigator.credentials.get。å‰è€…用于创建新的å‡è¯ï¼Œè€ŒåŽè€…用于获å–已注册å‡è¯çš„验è¯ã€‚ 创建å‡è¯ 当用户需è¦æ³¨å†Œæ–°è´¦æˆ·æ—¶ï¼Œå¼€å‘者调用 navigator.credentials.create 方法。æ¤æ–¹æ³•éœ€è¦ä¸€ä¸ªåŒ…å«å¤šç§å‚数的对象,例如: challenge:由æœåŠ¡å™¨ç”Ÿæˆçš„éšæœºæŒ‘战,用于防æ¢é‡æ”¾æ”»å‡»ã€‚ rp:有关ä¾èµ–方的信æ¯ï¼Œä¾‹å¦‚åç§°å’Œæ ‡è¯†ç¬¦ã€‚ user:用户的相关信æ¯ï¼ŒåŒ…æ‹¬å”¯ä¸€æ ‡è¯†ç¬¦å’Œç”¨æˆ·å。 pubKeyCredParams:æœåŠ¡å™¨æ”¯æŒçš„ç¾å算法列表。 通过这些å‚数,WebAuthn API 将生æˆæ–°çš„å‡è¯ï¼Œå¹¶åœ¨èº«ä»½éªŒè¯å™¨ä¸Šè¿›è¡Œå˜å‚¨ã€‚ 获å–å‡è¯ 在用户进行身份验è¯æ—¶ï¼Œå¼€å‘者调用 navigator.credentials.get 方法。æ¤æ–¹æ³•åŒæ ·éœ€è¦ä¸€ä¸ªå¯¹è±¡ï¼Œå…¶ä¸åŒ…括: challenge:与注册阶段相åŒçš„挑战。 allowCredentials:已注册å‡è¯çš„æ ‡è¯†ç¬¦åˆ—è¡¨ã€‚ 如果身份验è¯å™¨èƒ½å¤Ÿè¯†åˆ«å‡è¯ï¼Œç”¨æˆ·å°†è¢«æ示进行验è¯ï¼ŒéªŒè¯é€šè¿‡åŽï¼Œè¿”回的结果将包å«èº«ä»½éªŒè¯ä¿¡æ¯ã€‚ ðŸ›¡ï¸ æ— å¯†ç 身份验è¯çš„优势 æ— å¯†ç 身份验è¯çš„最大优势在于消除了密ç 本身的使用。这æ„味ç€ç”¨æˆ·ä¸å†éœ€è¦è®°ä½å¤æ‚的密ç ,也ä¸å¿…担心密ç è¢«ç›—æˆ–æ³„éœ²ã€‚ä»¥ä¸‹æ˜¯æ— å¯†ç 身份验è¯çš„一些主è¦ä¼˜ç‚¹ï¼š æ高安全性:由于没有密ç 被å‘é€æˆ–å˜å‚¨åœ¨æœåŠ¡å™¨ä¸Šï¼Œæ”»å‡»è€…æ— æ³•é€šè¿‡ç½‘ç»œé’“é±¼ç‰æ‰‹æ®µèŽ·å–用户å‡è¯ã€‚ 用户体验:用户åªéœ€è¿›è¡Œç®€å•çš„生物识别验è¯æˆ– PIN 输入,显著æ高了登录的便æ·æ€§ã€‚ é™ä½Žç»´æŠ¤æˆæœ¬ï¼šä¼ä¸šä¸å†éœ€è¦æ‰¿æ‹…密ç é‡ç½®å’Œç®¡ç†çš„相关æˆæœ¬ã€‚ 🚀 应用场景与未æ¥å±•æœ› WebAuthn å’Œæ— å¯†ç 身份验è¯åœ¨è®¸å¤šåœºæ™¯ä¸‹éƒ½æœ‰å¹¿æ³›çš„应用潜力。例如,电å商务ã€é‡‘èžæœåŠ¡ä»¥åŠç¤¾äº¤åª’体ç‰é¢†åŸŸéƒ½å¯ä»¥åˆ©ç”¨è¿™ä¸€æŠ€æœ¯æ¥æ高安全性和用户体验。 未æ¥ï¼Œéšç€æ”¯æŒ WebAuthn çš„å¹³å°å’Œè®¾å¤‡ä¸æ–å¢žåŠ ï¼Œé¢„è®¡æ— å¯†ç 身份验è¯å°†ä¼šæˆä¸ºä¸»æµã€‚å¼€å‘者将能够更方便地集æˆè¿™ä¸€æŠ€æœ¯ï¼Œç”¨æˆ·çš„身份验è¯è¿‡ç¨‹ä¹Ÿå°†å˜å¾—æ›´åŠ å®‰å…¨å’Œé«˜æ•ˆã€‚ 📚 å‚考文献 FIDO Alliance. (2019). FIDO2 Overview. FIDO Alliance WebAuthn Specification. (2021). W3C Ackermann, Y. (2019). Introduction to WebAuthn API and Passkey. ✅Medium Kitamura, E. (2019). Sign-in on the Web — Credential Management API and Best Practices. ✅Medium Demystifying attestation and MDS. Medium
在这个数å—化和信æ¯é«˜åº¦äº’è”的时代,密ç 的安全性和便æ·æ€§ä¸€ç›´æ˜¯ä¸€ä¸ªå¤‡å—关注的è¯é¢˜ã€‚éšç€ç½‘络钓鱼(phishing)攻击的日益猖ç—ï¼Œä¼ ç»Ÿçš„å¯†ç 验è¯æ–¹å¼æ˜¾å¾—越æ¥è¶Šè„†å¼±ã€‚为了解决这个问题,FIDO(快速身份在线)è”盟推出了一系列新兴的身份验è¯æ ‡å‡†ï¼Œå…¶ä¸æœ€å…·ä»£è¡¨æ€§çš„是 WebAuthn å’Œ FIDO2ã€‚è¿™ç¯‡æ–‡ç« å°†æ·±å…¥æŽ¢è®¨ WebAuthn API å’Œæ— å¯†ç 身份验è¯çš„原ç†ä¸Žåº”用,帮助我们更好地ç†è§£æœªæ¥çš„安全身份验è¯æ–¹å¼ã€‚
🔠什么是 FIDO 和 FIDO2?
FIDO è”盟æˆç«‹äºŽ 2013 年,旨在开å‘安全ã€å¼€æ”¾ã€æ ‡å‡†åŒ–的防网络钓鱼身份验è¯å议。FIDO 的三个主è¦å议包括 UAF(通用身份验è¯æ¡†æž¶ï¼‰ã€U2F. ¼ˆé€šç”¨ç¬¬äºŒå› ç´ ï¼‰å’Œ FIDO2。FIDO2 æ˜¯å…¶æœ€æ–°çš„æ ‡å‡†ï¼Œä¸“æ³¨äºŽæ— å¯†ç 身份验è¯ã€‚✅
FIDO2 由两部分组æˆï¼šWebAuthn(客户端 API)和 CTAP(客户端到身份验è¯å™¨å议)。WebAuthn 使开å‘者能够通过 JavaScript 创建和管ç†å…¬é’¥å‡è¯ï¼Œè€Œ CTAP 则负责与身份验è¯å™¨ä¹‹é—´çš„低级别通信。
🔄 FIDO 的工作原ç†
FIDO åè®®çš„æ ¸å¿ƒæ˜¯åŸºäºŽæŒ‘æˆ˜-å“应机制的身份验è¯æµç¨‹ã€‚æœåŠ¡å™¨å‘客户端å‘é€ä¸€ä¸ªæŒ‘战(challenge)和å‡è¯æ ‡è¯†ç¬¦ã€‚客户端将这些信æ¯å‘é€ç»™èº«ä»½éªŒè¯å™¨ï¼Œèº«ä»½éªŒè¯å™¨ä¼šè¦æ±‚用户进行验è¯ï¼ˆå¦‚输入 PIN 或使用生物识别技术)。验è¯é€šè¿‡åŽï¼Œèº«ä»½éªŒè¯å™¨ä½¿ç”¨ç§é’¥å¯¹æ•°æ®è¿›è¡Œç¾åï¼Œå¹¶å°†ç»“æžœè¿”å›žç»™å®¢æˆ·ç«¯ï¼Œæœ€ç»ˆå®¢æˆ·ç«¯å°†å…¶ä¼ é€’ç»™æœåŠ¡å™¨è¿›è¡ŒéªŒè¯ã€‚
è¿™ç§æœºåˆ¶ç¡®ä¿äº†ç”¨æˆ·çš„å‡è¯å§‹ç»ˆå˜å‚¨åœ¨æœ¬åœ°è®¾å¤‡ä¸Šï¼Œé¿å…了å‡è¯æ³„露的风险。æ¤å¤–,挑战-å“应机制有效地防æ¢äº†ä¸é—´äººæ”»å‡»ï¼ˆMITM)。
📜 WebAuthn API çš„æ ¸å¿ƒæ“作
WebAuthn API æ供了两个基本æ“作:
navigator.credentials.create
å’Œnavigator.credentials.get
。å‰è€…用于创建新的å‡è¯ï¼Œè€ŒåŽè€…用于获å–已注册å‡è¯çš„验è¯ã€‚创建å‡è¯
当用户需è¦æ³¨å†Œæ–°è´¦æˆ·æ—¶ï¼Œå¼€å‘者调用
navigator.credentials.create
方法。æ¤æ–¹æ³•éœ€è¦ä¸€ä¸ªåŒ…å«å¤šç§å‚数的对象,例如:challenge
:由æœåŠ¡å™¨ç”Ÿæˆçš„éšæœºæŒ‘战,用于防æ¢é‡æ”¾æ”»å‡»ã€‚rp
:有关ä¾èµ–方的信æ¯ï¼Œä¾‹å¦‚åç§°å’Œæ ‡è¯†ç¬¦ã€‚user
:用户的相关信æ¯ï¼ŒåŒ…æ‹¬å”¯ä¸€æ ‡è¯†ç¬¦å’Œç”¨æˆ·å。pubKeyCredParams
:æœåŠ¡å™¨æ”¯æŒçš„ç¾å算法列表。通过这些å‚数,WebAuthn API 将生æˆæ–°çš„å‡è¯ï¼Œå¹¶åœ¨èº«ä»½éªŒè¯å™¨ä¸Šè¿›è¡Œå˜å‚¨ã€‚
获å–å‡è¯
在用户进行身份验è¯æ—¶ï¼Œå¼€å‘者调用
navigator.credentials.get
方法。æ¤æ–¹æ³•åŒæ ·éœ€è¦ä¸€ä¸ªå¯¹è±¡ï¼Œå…¶ä¸åŒ…括:challenge
:与注册阶段相åŒçš„挑战。allowCredentials
:已注册å‡è¯çš„æ ‡è¯†ç¬¦åˆ—è¡¨ã€‚å¦‚æžœèº«ä»½éªŒè¯å™¨èƒ½å¤Ÿè¯†åˆ«å‡è¯ï¼Œç”¨æˆ·å°†è¢«æ示进行验è¯ï¼ŒéªŒè¯é€šè¿‡åŽï¼Œè¿”回的结果将包å«èº«ä»½éªŒè¯ä¿¡æ¯ã€‚
ðŸ›¡ï¸ æ— å¯†ç 身份验è¯çš„优势
æ— å¯†ç 身份验è¯çš„最大优势在于消除了密ç 本身的使用。这æ„味ç€ç”¨æˆ·ä¸å†éœ€è¦è®°ä½å¤æ‚的密ç ,也ä¸å¿…担心密ç è¢«ç›—æˆ–æ³„éœ²ã€‚ä»¥ä¸‹æ˜¯æ— å¯†ç 身份验è¯çš„一些主è¦ä¼˜ç‚¹ï¼š
🚀 应用场景与未æ¥å±•æœ›
WebAuthn å’Œæ— å¯†ç 身份验è¯åœ¨è®¸å¤šåœºæ™¯ä¸‹éƒ½æœ‰å¹¿æ³›çš„应用潜力。例如,电å商务ã€é‡‘èžæœåŠ¡ä»¥åŠç¤¾äº¤åª’体ç‰é¢†åŸŸéƒ½å¯ä»¥åˆ©ç”¨è¿™ä¸€æŠ€æœ¯æ¥æ高安全性和用户体验。
未æ¥ï¼Œéšç€æ”¯æŒ WebAuthn çš„å¹³å°å’Œè®¾å¤‡ä¸æ–å¢žåŠ ï¼Œé¢„è®¡æ— å¯†ç 身份验è¯å°†ä¼šæˆä¸ºä¸»æµã€‚å¼€å‘者将能够更方便地集æˆè¿™ä¸€æŠ€æœ¯ï¼Œç”¨æˆ·çš„身份验è¯è¿‡ç¨‹ä¹Ÿå°†å˜å¾—æ›´åŠ å®‰å…¨å’Œé«˜æ•ˆã€‚
📚 å‚考文献