isbase
1.25D
0.29D
V2EX  ›  macOS

炸了! macOS 26 钥匙串突然无法访问,几乎所有软件的登录、激活、认证状态瞬间归零

  •  
  •   isbase ·
    PRO
    · 1h 35m ago · 697 views

    Tahoe 26.5.2 的 login keychain 突然解不开,重启后系统新建了 login_renamed_1

    设备是 Mac mini 。故障发生时运行 macOS Tahoe 26.5.2 ( 25F84 ),之后才升级到 26.6.1 。

    想问问有没有人遇到过类似情况:Mac 登录密码没有改,传统的 login.keychain-db 却突然无法解锁。重启后,系统把旧库改名为 login_renamed_1.keychain-db,又新建了一个空的 login

    故障表现

    最开始是几个看似无关的问题一起出现:

    • 自签名开发版 App 无法打开,重新签名时报 errSecInternalComponent
    • 重启后,系统要求重新登录 Apple ID ,并通过另一台设备批准 iCloud 端到端加密数据。
    • Chrome 的网站登录态几乎全部丢失,部分扩展提示损坏。
    • 「钥匙串访问」里的默认 login 几乎是空的。旧内容被移到 Custom Keychains 下,名称变成 login_renamed_1。很多应用反复要求输入密码,但当前 Mac 登录密码和空密码都无法解锁。

    我检查了本机账户策略。账户密码最后修改时间仍是几年前,屏幕解锁和用户 keybag 也一直成功。出问题的是传统 login keychain ,不是 Mac 账户密码。

    系统自带「密码」 App 中的 iCloud 密码仍然可见,因为它使用另一套 Data Protection keychain 。这不能说明旧的 login.keychain-db 正常。

    时间线

    故障前一晚,我通过 SSH 执行过两次:

    security unlock-keychain ~/Library/Keychains/login.keychain-db
    

    命令没有带 -p,密码通过交互输入。当时看起来没有报错,其中一次可能还输入了错误密码。后来查看日志,Tahoe 似乎可能先使用 Data Protection 中缓存的间接解锁材料,所以命令成功不一定代表输入的密码真正解开了传统数据库。

    这件事发生在明确故障的大约 16 小时前。我怀疑它有关,但没有当时的 rekey 或关联日志,不能确认它是触发原因。

    第二天下午,机器空闲时,securityd 已开始反复出现:

    CSSMERR_CSP_INVALID_DATA
    MacOS error: -25337
    

    当晚解锁屏幕后,账户认证成功,但 loginwindow 解锁旧 login keychain 时,缓存的间接材料、当前密码和重新派生的材料全部失败,最后报告:

    KCLogin failed with -2147413984
    security error -25293
    

    同一时间,用户 keybag 解锁成功。因此这里的 -25293 不是登录密码错误,而是旧 login keychain 的认证被拒。

    之后手动运行 security unlock-keychain 也失败,codesign 继续报 errSecInternalComponent

    升级到 26.6.1 并重启后,系统再次尝试解锁旧库,仍然失败。随后日志明确显示:

    Keychain could not be unlocked, local account,
    moving login keychain to the side and creating a replacement
    

    系统于是把旧库改名为 login_renamed_1.keychain-db,并创建了新的空 login.keychain-db。升级和重启只是让系统执行了替换,不是故障起点,因为升级前已经出现了完整的解锁失败。

    目前能确认的情况

    • Mac 账户密码没有改,屏幕和用户 keybag 都能正常解锁。
    • 没发现磁盘 I/O 、校验、加密结构错误或 kernel panic 。
    • 旧库文件仍在,能枚举出 1500 多条密码、私钥和证书记录,并非被清空。
    • 现有解锁材料无法解开旧库的私有数据,问题应在认证层。
    • 目前只能怀疑 Tahoe 的 Data Protection 间接解锁材料与传统 login keychain 失配,无法确认具体触发点。

    想请教两个问题:

    1. 有没有人在 Tahoe 上遇到过账户密码正确,但 login 突然报 -25293,重启后出现 login_renamed_1
    2. 如果故障前也通过 SSH 执行过 security unlock-keychain,是否见过类似结果?

    可供搜索的关键词:CSSMERR_CSP_INVALID_DATACSSMERR_DL_OPERATION_AUTH_DENIED-25293errSecInternalComponentProtectLoginKeychainWithDPgenerateDerivedEntropylogin_renamed_1.keychain-db

    6 replies    2026-08-13 13:51:27 +08:00
    lululau
        1
    lululau  
       1h 1m ago
    Read URL: https://v2ex.com/t/1234067
    Viewed content.md:1-562

    在该帖子中,作者遇到的 `login.keychain-db` 突然无法解锁并被系统自动重命名为 `login_renamed_1.keychain-db` 的情况,**最有可能的原因是:在 SSH 远程会话中执行 `security unlock-keychain` 时混用了错误密码/不完整的上下文,导致 macOS Security 进程(`securityd`)在缺乏 GUI Keybag 会话环境的情况下写回了损坏或失配的 Data Protection 派生熵(Derived Entropy)。**

    以下是结合 macOS Keychain 机制与作者日志的具体技术原因分析:

    ---

    ### 1. 核心触发机制:SSH 域隔离与 Data Protection (DP) 熵损坏

    * **现代 macOS Keychain 的双重保护机制**:
    在现代 macOS 中,传统的 `login.keychain-db` 并不是单纯靠明文账户密码哈希加密的,而是集成了 **Data Protection (DP)** 机制(日志中提及的 `ProtectLoginKeychainWithDP` 和 `generateDerivedEntropy`)。它的解锁依赖“用户账户密码 + 系统 User Keybag + Cached DP 间接解锁材料”。
    * **SSH 会话上下文缺失**:
    通过 SSH 登录的 Shell 属于 Daemon / CLI 域,**不具备 GUI 登录界面 (`loginwindow`) 的完整 User Session 和 Keychain 授权上下文**。
    * **错误派生密钥写回(导致 `CSSMERR_CSP_INVALID_DATA`)**:
    作者在故障前 16 小时曾通过 SSH 执行 `security unlock-keychain` 并可能输入过错误密码。由于 Tahoe 系统可能优先使用了缓存的 DP 间接材料,当时命令行没有直接报错,但 `securityd` 在后台触发了密钥重新派生(Rekeying)。
    在缺乏完整 GUI 会话上下文、且输入了错误密码的情况下,`securityd` 派生出了错误的密钥熵(Entropy),并将这些失配的加密元数据更新写入了 `login.keychain-db` 的文件头部。日志中随后反复出现的 `CSSMERR_CSP_INVALID_DATA (-25337)`,正是底层密码服务提供者(CSP)读取到了损坏/无效密钥元数据的报错。

    ---

    ### 2. 连锁反应:GUI 登录解锁拒绝与系统自动自愈

    1. **登录认证被拒(`error -25293`)**:
    次日作者在 Mac 本机解锁屏幕时,系统 `loginwindow` 尝试使用当前正确的账户密码解开 `login.keychain-db`。但由于文件头部的 DP 认证材料已被上一步在 SSH 中派生的错误熵覆盖,导致密码校验直接失败,触发 `CSSMERR_DL_OPERATION_AUTH_DENIED (-25293)`。此时**并不是 Mac 账户密码变了,而是 Keychain 文件内部的认证元数据损坏了**。
    2. **系统自动备份并重建(`login_renamed_1`)**:
    当 macOS 发现主 `login.keychain-db` 无法用当前登录账户解锁时,为了防止依赖钥匙串的应用(Chrome、签名校验、系统服务等)陷入无限崩溃或卡死,`securityd` 会触发内置的自愈降级策略:
    * 将解除绑定的旧 Keychain 移到旁边并重命名为 `login_renamed_1.keychain-db`;
    * 重新生成一个空的默认 `login.keychain-db`。

    ---

    ### 3. 日志证据链总结

    | 日志/报错信息 | 含义与对应原因 |
    | :--- | :--- |
    | `CSSMERR_CSP_INVALID_DATA (-25337)` | `securityd` 在后台处理 Keychain 时,发现文件头的 DP 加密元数据/密钥数据格式无效或失配。 |
    | `KCLogin failed ... security error -25293` | `CSSMERR_DL_OPERATION_AUTH_DENIED`,即便账户密码正确,Keychain 文件的凭据校验也被拒绝。 |
    | `moving login keychain to the side and creating a replacement` | macOS 标准自愈保护机制:旧库改名 `login_renamed_1`,新建空库以维持系统基本运行。 |

    ### 总结

    这种问题的本质是 **macOS 的 Data Protection Keychain 机制与非 GUI 环境(如 SSH / CI/CD 自动化脚本)中的 `security unlock-keychain` 命令存在上下文竞争与派生漏洞**。在 SSH 下交互输入密码解锁主 Keychain 极易触发 DP 材料错误派生,从而破坏主钥匙串文件的头元数据。
    aero99
        2
    aero99  
       57 mins ago
    所以鸡蛋不能放到一个篮子里
    julyclyde
        3
    julyclyde  
       38 mins ago
    系统自带「密码」 App

    iCloud keychain
    居然还不是同一个后端??
    julyclyde
        4
    julyclyde  
       38 mins ago
    @aero99 你不能根据一篇猜测就“所以”啊
    cheese
        5
    cheese  
       31 mins ago
    @lululau 不要直接粘贴 ai 回复,会被封号
    xue777hua
        6
    xue777hua  
       29 mins ago via iPhone
    ai 问 ai 答

    这是啥 养号?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5651 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 06:20 · PVG 14:20 · LAX 23:20 · JFK 02:20
    ♥ Do have faith in what you're doing.