ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

密钥为什么必须存 macOS Keychain?深度解析 Claude Usage Tracker 的隐私优先安全设计

密钥为什么必须存 macOS Keychain?深度解析 Claude Usage Tracker 的隐私优先安全设计 密钥为什么必须存 macOS Keychain深度解析 Claude Usage Tracker 的隐私优先安全设计【免费下载链接】Claude-Usage-TrackerNative macOS menu bar app for tracking Claude AI usage limits in real-time. Built with Swift/SwiftUI.项目地址: https://gitcode.com/gh_mirrors/cl/Claude-Usage-TrackerClaude Usage Tracker是一款原生 macOS 菜单栏应用用 Swift/SwiftUI 实时追踪 Claude AI 的用量上限。要读取用量它必须保存 Claude 会话密钥——而密钥存哪里直接决定了你的账号安全。这篇文章带你读懂它为什么把密钥全部放进 macOS Keychain以及背后那些容易被忽略的安全细节。明文存密钥为什么是重大隐患很多小应用图省事把密钥写进普通文件。这个项目曾经也这样做过早期版本把会话密钥放在用户目录下的~/.claude-session-key文件里多资料档案Profile系统上线后密钥一度随配置一起写进了profiles_v3的plist 文件——而 plist 在磁盘上是明文任何能读文件的操作都能拿到你的凭证这正是项目安全公告 GHSA-mfxh-xpwm-23c7对应 issue #267要解决的核心问题凭证绝不能以明文形式落在磁盘上。v3.2.0 之后所有凭证被强制迁入 Keychain明文 plist 只保留非敏感的显示设置。macOS Keychain 是什么为什么它是密钥的最佳归宿对新手来说Keychain 是 macOS 系统级的保险箱能力说明系统级加密由操作系统统一托管密钥材料应用拿不到万能钥匙身份访问控制只有签名身份匹配的应用才能读写条目其他 App 一律被拒不随磁盘明文暴露数据受数据保护机制加密直接拷贝文件也读不出内容可禁止云同步明确设置不同步到 iCloud凭证只留在本机细粒度可用性可指定首次解锁后可访问等粒度适配登录项应用对一款常驻菜单栏、登录时就要自动启动的 App 来说这几乎是不二之选。源码级拆解密钥是怎么存进 Keychain 的核心逻辑集中在 KeychainService.swift设计上有几个很值得学习的点1️⃣ 每个资料档案 4 类凭证独立隔离服务用ProfileSecretField枚举管理每类秘密KeychainService.swiftclaude-session-keyClaude.ai 会话密钥api-session-keyAPI 控制台会话密钥cli-credentialsClaude Code 的 OAuth 凭证codex-credentialsCodex 凭证条目名用「档案 ID 字段」组合多账号之间互不干扰。删除某个资料档案时ProfileManager 会调用deleteAllProfileSecrets一并清掉 Keychain 里的全部凭证不留尾巴。2️⃣ 双保险库策略数据保护 Keychain 优先文件式登录 Keychain 兜底这是整套实现里最精妙的部分KeychainService.swift首选数据保护 Keychain它没有烦人的某某应用想访问你的保密信息密码弹窗——系统按应用签名身份静默放行/拒绝用户体验最干净但数据保护 Keychain 需要 entitlement 授权部分构建如 Ad-hoc 开发构建拿不到。于是代码自动回退到文件式登录 Keychain而不是干脆放弃 Keychain回退还有门槛只有签名身份稳定的构建才允许写入登录 Keychain否则改用回退方案时会触发密码弹窗骚扰用户KeychainService.swift这套能用什么用什么、绝不裸奔的策略保证了任何构建形态下密钥都不落明文。3️⃣ 写入后先回读校验再删明文verifyProfileSecretKeychainService.swift会把刚写入的值直接从 Keychain 读出来比对确认真的落库之后才允许调用方清除手里的明文副本——注释里写得很直白幻影写入绝不应该让用户丢掉凭证。4️⃣ 可用性粒度与零同步数据保护条目使用kSecAttrAccessibleAfterFirstUnlockApp 是登录项开机自动启动时就必须能读到凭证不能用每次解锁后可访问这种更严的级别KeychainService.swift所有条目显式设置kSecAttrSynchronizable false凭证永不进 iCloud老用户如何无缝迁移从明文文件到 Keychain升级不用重新登录靠的是两层迁移机制一次性迁移服务KeychainMigrationService.swift扫描旧位置的~/.claude-session-key文件先用 SessionKeyValidator 校验合法性再存入 Keychain最后删除旧文件把散落在 UserDefaults 里的 API 会话密钥迁入 Keychain 并清理原位置用keychainMigrationCompleted_v1标记防止重复执行热路径自动迁移ProfileStore.swift 加载资料档案时如果发现 plist 里还残留明文密钥老版本写入的会自动触发saveProfiles把它们写进 Keychain——而且遵循先写 Keychain、再清 plist的顺序万一 Keychain 写入失败明文会暂时留在 plist 里并在下次保存时重试保证零数据丢失ProfileStore.swift。隐私优先Keychain 之外的完整拼图Keychain 只是安全体系的一环项目其余部分同样克制只走 HTTPS请求只发往 Claude 官方端点无遥测、无分析、无第三方追踪无云同步所有数据留在本地✅Apple 签名签名身份本身也是 Keychain ACL 校验的依据 完整安全政策见 SECURITY.md隐私定位见 README.md 的 Security Privacy 章节写在最后我们能从中学到什么Claude Usage Tracker 的 Keychain 实践浓缩了四个可复用的安全设计原则原则在本项目中的体现密钥永不明文落盘plist 中凭证字段被剥离只进 Keychain存储失败 ≠ 丢数据写入回读校验 失败时临时保留明文并重试能力降级要有底线双 Keychain 回退链最坏情况也不直接明文存储升级零打扰校验后自动迁移旧密钥用户无感如果你也在写需要保存用户凭证的 macOS 应用建议直接对照 KeychainService.swift 的实现——它几乎是密钥安全管理的一份标准答案。【免费下载链接】Claude-Usage-TrackerNative macOS menu bar app for tracking Claude AI usage limits in real-time. Built with Swift/SwiftUI.项目地址: https://gitcode.com/gh_mirrors/cl/Claude-Usage-Tracker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表