news 2026/9/26 18:02:29

Search 浏览器如何安全存储密码?macOS 钥匙串与 Passkeys 机制完整解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Search 浏览器如何安全存储密码?macOS 钥匙串与 Passkeys 机制完整解析

Search 浏览器如何安全存储密码?macOS 钥匙串与 Passkeys 机制完整解析

【免费下载链接】SearchA small, fast WebKit browser for macOS, by Office Commun.项目地址: https://gitcode.com/gh_mirrors/search59/Search

Search是一款由 Office Commun 打造的 macOS 轻量 WebKit 浏览器(约 3 MB、免费、需 macOS 14+),它的核心卖点之一就是把密码存储交给系统:所有账号密码写入 macOS 登录钥匙串,支持 Passkeys 无密码登录,并可从 Chrome 等浏览器一键导入。这篇文章带你完整看懂它的钥匙串与 Passkeys 安全机制。

密码存在哪里:macOS 登录钥匙串

很多浏览器把密码存在自己的数据库文件里,而 Search 选择了与 Safari 同一套"保险柜"——macOS 钥匙串(Keychain)。

具体规则写在 Vault.swift 的注释里:

  • 每条密码是一条互联网密码项(kSecClassInternetPassword),按"网站 + 账号"索引;
  • 所有条目打上Search标签,只属于 Search 自己,不会与 git 令牌等其他应用的同名条目互相覆盖(见 Vault.swift 的写入逻辑);
  • 加密由系统完成,任何形式都不会落盘到别处,也从不写日志;
  • 条目权限设为"解锁时可访问"(kSecAttrAccessibleWhenUnlocked),读取方只能是签名自 Office Commun 的 Search,其他应用碰一下就会触发系统的授权弹窗。

简单说:密码的保管人是你的 Mac,不是浏览器厂商。Search 没有服务器、没有云同步(README.md 的隐私表 写得明明白白),历史记录等也只是本地 JSON 小文件。

保存与自动填充:克制的密码流程

Search 对密码的态度可以概括为"只在你确认的情况下动手":

  1. 先成功、再询问。只有当一次登录真正生效后,Search 才会弹窗询问是否保存(见 README.md 中 "Passwords, in your keychain" 一节)。
  2. 按"站点"而非"主机"匹配。你在example.com保存的密码,在accounts.example.com也能被找到——它用可注册域名做匹配(Vault.swift 的跨子域查找),并记录最近使用时间,常用账号排在最前。
  3. 明文 HTTP 页面不喂密码。从普通 http 页面保存的密码会被单独标记(clear字段),Search 绝不会把它交给任何可能被中间人篡改的页面(Login 结构定义)。
  4. 查看必须过生物识别。在密码面板(⌥⌘L)里点"显示",会先调用 Touch ID / Apple Watch / 系统密码验证(Vault.prove 实现);密码明文只显示15 秒后自动打码(Passwords.swift 的揭示逻辑)。

Passkeys 机制:为什么 Search 要亲自接管

Passkeys(无密码密钥)是 WebAuthn 标准:用 Touch ID、iCloud 钥匙串或安全密钥登录,密码本身不存在浏览器里。

这里有个技术细节值得新手了解:Apple 把 Passkeys 的浏览器权限作为受限 entitlement发放,需要专用签名才能启用。Search 的发布构建携带了对应的 Search.passkeys.entitlements,其中com.apple.developer.web-browser.public-key-credential一项就是关键。

由于 WebKit 对"条件中介"(在用户名输入框下自动推荐 Passkey)存在一个已知的卡死缺陷(Passkeys.swift 开头的注释 记录了排查过程),Search 像 Mac 上的 Chrome 和 Firefox 一样自己接管了整个 Passkeys 流程:从页面接收请求 → 校验 → 交给系统 AuthenticationServices → 把结果回传给页面。

发起 Passkeys 请求前的五道安全校验

在 Passkeys.perform 方法 中,任何请求都要先过这五关:

校验拦截的风险
必须是 https 页面(localhost 除外)中间人监听
窗口必须处于前台聚焦后台标签页偷偷弹系统验证面板
只允许主框架或同站 iframe第三方嵌入内容冒充站点发起请求
Relying Party 域名必须是页面的可注册域名或其上级用com、github.io这类任何人都能注册的公共后缀套取密钥
必须携带非空 challenge伪造/重放请求

其中"公共后缀"判断直接复用了 macOS 系统自带的域名列表(Passkeys.fits 实现),确保bbc.co.uk这类复杂域名也能正确处理。

用户侧体验

一切校验通过后,弹出的是macOS 自己的 Passkeys 面板:Touch ID 验证、iCloud 钥匙串里的 Passkey、附近 iPhone 扫码,或插入 USB/NFC 安全密钥,任选其一。设置中可随时关闭 Passkeys 推荐(Prefs.swift);如果装了 1Password、Bitwarden 等密码管理扩展,它们优先应答 Passkeys 请求,Search 会把浏览器侧的通道让给扩展(Forms.swift 的说明)。

从其他浏览器一键导入

迁移不需要导出 CSV 再手动粘贴。在密码面板底部(PasswordsPanel 的导入区)直接点 Chrome、Arc、Dia、Brave 或 Edge 的按钮:

  • 读取源浏览器本地存储的密码(系统会请求一次源浏览器的钥匙串密钥,不改动原数据);
  • 所有条目直接进入你自己的钥匙串、归在 Search 名下;
  • 也可以选择 CSV 文件导入,文件读完即止,Search 不保留副本(Vault.take 实现)。

整个过程不出本机——这也是 Search 的隐私底线:没有账号、没有云、没有遥测(README.md)。

快速上手清单 📋

操作方法
打开密码管理面板⌥⌘L
显示某个密码先过 Touch ID,15 秒后自动隐藏
关闭 Passkeys 推荐设置 › Passwords
检查 Passkeys 系统授权系统设置 › 隐私与安全性
发现安全漏洞按 SECURITY.md 私有渠道上报

小结

Search 的密码安全设计可以总结为三句话:存储上交给系统钥匙串(加密、权限隔离、生物识别验证),流程上保持克制(登录成功才询问、http 页面不喂密码、明文限时展示),Passkeys 上主动加固(五重校验 + 系统原生面板)。代码只有约一万两千行且单文件单职责,想核对任何一个结论,直接读 Sources/Search/ 里的 Vault.swift 和 Passkeys.swift 即可。

【免费下载链接】SearchA small, fast WebKit browser for macOS, by Office Commun.项目地址: https://gitcode.com/gh_mirrors/search59/Search

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 18:02:13

SQLite 工具类实战:用反射把 Cursor 封装到 VO 对象

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 18:02:10

2024一人公司必备AI工具:从电商详情页到图文创作全自动化实战指南

2024 一人公司必备 AI 工具:从电商详情页到图文创作的全自动化实战指南 在“一人公司”(One Person Company, OPC)的浪潮下,独立创作者和微型创业者面临的最大挑战不再是寻找商机,而是**生产力瓶颈**。 当你需要同时兼…

作者头像 李华
网站建设 2026/9/26 18:01:40

给AI编码代理装上“辅助轮”:Trellis框架的规范约束与工程实践

最近在折腾AI编程代理的时候,我越来越觉得一个事儿不对劲:Cursor、Copilot这些工具,单点补全确实香,但一旦让代理去跑一个跨多文件的完整任务,经常会出现“自以为懂了,结果跑偏”的情况。上下文一多&#x…

作者头像 李华
网站建设 2026/9/26 18:01:27

二手交易网站源码全栈解析:从论文到可运行系统

简介:这份资源是二手交易网站项目的论文与源码合集,面向电子商务、网络开发方向的学习者与研究者,尤其适合需要完成课程设计、毕业设计或想深入理解二手电商运作机制的中高级开发者。压缩包为zip格式,整体约53.32MB,文…

作者头像 李华
网站建设 2026/9/26 18:00:42

10 个最佳 Golang 库:用 TaoToken 统一 Key 打通 AI 编码工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华