题干与适用场景
游戏平台、内容网站和在线药房需要判断用户是否达到 13、16 或 18 岁。用户持有政府或可信机构签发的数字凭证,服务必须支持多签发方、离线恢复、撤销和滥用调查。
面试官考察点
考察凭证生命周期、隐私最小化、信任根、重放防护、可用性与监管审计之间的系统取舍。W3C VC 2.0 定义 issuer、holder、verifier 三方;Digital Credentials API 让用户代理介导凭证展示。
回答前需要澄清的问题
确认年龄门槛、司法辖区、凭证来源、是否允许匿名证明、失败后的用户体验与保存期限。还要问网站是否需要知道具体年龄,还是只需布尔结论,以及高风险场景是否要求人工复核。
30 秒回答
“我会让签发方产生带年龄属性的可验证凭证,钱包只向验证方展示满足门槛的证明,而非生日或姓名。验证方为每次请求生成 nonce 和 audience,检查签名、有效期、状态列表与用途绑定;服务端只保存最小审计事件。先从单辖区和单门槛灰度,监控成功率、重放拒绝、误拒率与隐私泄漏,再扩展签发方和离线流程。”
分步骤深入解答
划分参与者与信任根
签发方负责事实与签名,holder 钱包控制披露,verifier 网站提出一次性请求。平台维护可信签发方目录和密钥轮换,不替代签发方重新证明身份。
设计最小披露
优先返回“达到 18 岁”的派生声明、凭证类型和有效期,不返回出生日期、姓名或稳定标识。按辖区和门槛定义 schema,避免把多余字段带入日志。
防止重放与跨站关联
每次展示绑定 nonce、audience、回调来源和短过期时间。验证方拒绝重复 nonce;钱包不复用可关联标识,必要时为每个 verifier 生成不同的 pseudonym。
验证签名与状态
检查凭证链、签名算法、issuer 信任、有效期和撤销/暂停状态。状态服务应可缓存但要有新鲜度上限;状态查询失败时按风险等级选择 fail-closed 或人工复核。
处理离线与恢复
离线验证只能使用带有效期的签名材料和最近状态快照,不能无限信任旧状态。钱包丢失时通过新设备重新绑定或重新签发,恢复流程不能降低原有门槛。
审计与数据边界
审计记录请求方、政策版本、结果和验证时间,不记录原始凭证或生日。为调查滥用保留受控关联令牌,并通过权限、加密和分离存储限制访问。
高质量示范回答
我会按 issuer、holder、verifier 建模。签发方发布带年龄属性的 VC,钱包只展示门槛结论;网站为每次请求生成 nonce 和 audience,检查签名、信任目录、有效期与状态列表,并拒绝重放。服务端只保存政策版本、结果与时间,不保存生日或原始凭证。离线模式依赖有新鲜度上限的状态快照,恢复需重新绑定或签发。先单辖区灰度,观察成功率、误拒率、重放拒绝和隐私审计,再扩展。
常见错误
收集完整身份证明
这违反数据最小化,也增加泄漏与跨站追踪风险;年龄结论通常足够。
只验证签名
签名有效不代表凭证未过期、未撤销或用于正确的 verifier;必须检查状态和 audience。
复用全局用户标识
全局标识让不同网站能关联用户;应使用每 verifier 的伪名或一次性声明。
离线无限信任旧状态
撤销和密钥轮换会失效;离线材料必须有过期和升级策略。
追问及应对
未满年龄但凭证缺失怎么办?
提供重新签发、受监管人工复核或明确拒绝路径,不要求上传完整身份证件到平台。
如何应对恶意网站重放凭证?
让展示绑定 verifier、nonce 和短 TTL;监控重复 nonce 与异常来源并撤销相关信任配置。
多辖区规则不同怎么办?
将政策版本、门槛和签发方目录配置化,验证结果带辖区与政策版本,避免把一个年龄规则硬编码全球。
如何证明系统保护隐私?
用端到端测试检查日志、分析和错误响应不含生日或稳定标识,并定期审计披露字段与状态查询。