Skip to content

[BUG] macOS 26.4 keychain (blobVersion=0x200) cannot be decrypted offline #18

Description

@lyndonpm

It seems it failed on version 26.4. When I called

kc, err := keychainbreaker.Open(openOpts...)
kc.Unlock(keychainbreaker.WithPassword(*password))

it returned the error: keychainbreaker: wrong key or password: invalid padding value 186: keychainbreaker: wrong key or password. Has anyone else encountered this?


[Update 2026-04-22 — maintainer @moonD4rk reverse-engineering notes]: Root cause identified. macOS 26.4 re-keyed the login keychain to blobVersion=0x200; the user password is now pre-processed by the Secure Enclave before reaching PBKDF2, which makes offline brute force infeasible. Recovery is still possible on the originating machine via a one-time masterKey capture, after which the existing --key flag fully decrypts everything offline. Full analysis in the comment below.

[Update 2026-07-11 — how to recover full data on macOS 26.4+] On the machine that created the keychain (with SIP temporarily disabled), capture the 24-byte master key with an lldb breakpoint on securityd's CSSM_DeriveKey, then decrypt everything offline with keychainbreaker dump --key=<hex> (or WithKey(<hex>) in the library). Step-by-step lldb commands are in the README: Recover the master key on macOS 26.4+ (v2). Method contributed by @gmazzola (details).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions