Hacker News 中文摘要

RSS订阅

构建passkeybot时学到的关于通行密钥的知识 -- Things I learnt about passkeys when building passkeybot

文章摘要

作者在开发passkeybot.com时总结了关于passkeys的知识:苹果设备的Secure Enclave处理器(SEP)是一个独立的安全芯片,能生成并安全存储密钥,主系统只能通过签名验证来间接使用这些密钥。用户使用passkey登录时,SEP会先要求生物识别或密码验证。

文章总结

我在开发PasskeyBot时学到的关于通行密钥的知识

最近我发布了PasskeyBot.com,这是一个托管登录页面,只需几个服务器端HTTP处理程序就能为网站添加通行密钥认证功能。以下是开发过程中获得的经验总结。

硬件安全模块

苹果设备配备的安全隔离区(SEP)就像是主CPU内的独立微型计算机,拥有独立的加密内存和操作系统。它能创建永远不会离开隔离区的密钥,主系统只能通过请求SEP签署数据来证明拥有该密钥。其他厂商也有类似技术,只是名称不同,比如SIM卡本质上也是一种安全元件。

用户验证机制

  • 存在验证(UP):用户点击按钮确认存在
  • 身份验证(UV):需要生物识别或密码验证 关键区别在于:存在验证可能被任何解锁设备的人模拟,而身份验证始终需要重新验证。

认证器工作原理

认证器是保存密钥对并签署挑战的硬件/软件组合(如苹果的SEP)。浏览器通过统一JS API与各类认证器交互,底层则调用不同协议(如Yubikey使用USB协议)。Chrome开发者工具还提供虚拟认证器方便测试。

认证凭证机制

  • 签名:证明拥有私钥
  • 认证:证明密钥对的生成硬件 但认证数据可能泄露用户设备信息,且密钥同步到新设备后认证会失效。苹果设备默认禁用硬件认证,仅企业设备管理可启用。

使用限制与安全考量

  • 通行密钥仅用于认证,不能用于通用签名
  • 虽然JS代码需要安全,但无法完全验证其完整性
  • 浏览器扩展可能注入恶意代码,存在密钥滥用风险

新兴技术特性

  1. 即时验证API:允许快速检测本地密钥状态(0/1/多个密钥)
  2. 关联源请求:允许跨域管理通行密钥(目前iOS18和Firefox不支持)
  3. 蓝牙近场认证:通过BLE协议实现无密钥传输的跨设备登录
  4. 信号API:提供异步删除密钥的提示功能

关键技术细节

  • user.id和userHandle用于映射多个密钥到同一账户
  • crypto.subtle.generateKey可创建不可提取的密钥
  • PKCE协议通过动态密钥防止令牌截获
  • 数字凭证API可调用系统钱包中的证件信息

这些发现揭示了通行密钥技术在实际应用中的复杂性和潜力,同时也指出了当前实现中的安全边界和未来改进方向。

评论总结

以下是评论内容的总结:

  1. 对passkeybot指南的质疑

    • 作者BoppreH和loloquwowndueo对使用LLM生成安全代码表示担忧。
    • 引用:"I was a bit shocked that the first time I see these sort of instructions is for an auth framework."
    • 引用:"I’m not going to delegate a security-critical task to an LLM."
  2. Passkeys的用户体验问题

    • ChrisMarshallNY和godelski提到Passkeys比传统登录方式更复杂,且缺乏良好的备用方案。
    • 引用:"they do present a bit more friction to users than Sign in with Apple."
    • 引用:"All my banking apps have SMS OTP fallbacks and that’s no better than having only SMS OTP."
  3. 技术实现与安全性讨论

    • tptacek和smallnix讨论了PKCE在OAuth2中的作用及其必要性。
    • 引用:"PKCE is one of the few things that introduces an actual cryptography primitive."
    • 引用:"Isn’t PKCE in that case redundant?"
  4. Passkeys的潜在问题

    • coldpie和IgorPartola提到Passkeys可能被用于厂商锁定,以及孤儿密钥的管理问题。
    • 引用:"It appears to be more useful for vendor lock-in than anything else."
    • 引用:"Now I can’t sign in but when I go to recover my account iOS/macOS will refuse to create a new passkey."
  5. 其他观点

    • boombapoom希望Passkeys能完全替代密码。
    • quantummagic对数字凭证API的潜在滥用表示担忧。
    • 引用:"i wish passkeys could replace passwords, not suppliment them."
    • 引用:"when you need government issued credentials to surf the net, the good times are over."

总结:评论中对Passkeys的技术实现、用户体验和潜在问题提出了多种观点,既有支持也有批评,尤其是在安全性和用户友好性方面存在明显分歧。