iOS 18/macOS 15 Passkeys PRF扩展:平台与跨平台认证输出差异咨询
Passkeys PRF扩展:平台与跨平台认证器输出差异的原因及解决方案
这是预期行为吗?
是的,这属于苹果Passkey实现的预期设计行为。
原因在于:平台认证器(platform authenticator)和跨平台认证器(cross-platform authenticator)虽然共享同一个Passkey的用户可见元数据,但底层用于PRF(伪随机函数)计算的密钥材料是通过不同路径派生的:
- 当使用本地平台认证器(比如MacBook直接用Touch ID、iPhone/iPad直接登录)时,PRF计算依赖的是与设备本地安全元件绑定的平台密钥派生链;
- 当通过扫码使用跨平台认证器(iPhone/iPad作为跨平台设备给Mac授权)时,PRF计算依赖的是跨平台认证器专用的密钥派生链。
这两条链的根密钥不同,因此即使输入完全相同的PRF参数,最终输出的结果也会不一致,但各自场景下的输出是稳定的(比如平台场景始终输出X,跨平台场景始终输出Y)。
能否让两种场景得到确定性的统一PRF输出?
目前没有办法直接让同一Passkey在两种认证器类型下输出相同的PRF结果,因为这是苹果对Passkey认证器分离设计的固有特性。但可以通过以下两种方式实现业务层面的一致性:
1. 限制认证器类型
在发起Passkey获取请求时,通过WebAuthn的authenticatorSelection参数明确指定允许的认证器类型,强制所有登录请求使用同一类认证器:
- 如果需要统一输出X(平台认证器结果),设置:
这样用户只能使用本地平台认证器登录,无法通过扫码使用跨平台认证器。authenticatorSelection: { authenticatorAttachment: "platform" } - 如果需要统一输出Y(跨平台认证器结果),设置:
这样用户必须通过跨平台认证器(比如扫码)完成登录,无法使用本地平台认证器。authenticatorSelection: { authenticatorAttachment: "cross-platform" }
2. 业务层适配
如果业务需要支持两种认证器类型,可以在后端同时接受两种PRF输出结果,或者在客户端根据当前使用的认证器类型,对PRF输入添加一个区分标识(比如在输入字符串后拼接_platform或_crossplatform),让不同场景下的实际输入不同,从而接受对应的输出结果。不过这种方式会增加业务逻辑复杂度,仅推荐在无法限制认证器类型的场景下使用。
内容的提问来源于stack exchange,提问作者Giura Andrei
相关产品推荐
相关产品推荐

