The leak that wasn't: a sync bug we caught in beta
A race condition in delta ordering could have surfaced ciphertext from another user under specific timing. How we found it, what we changed, and why it never reached production.
Crypto deep-dives, post-mortems, design notes. We write when there's something specific to share — not on a schedule.
The OWASP-recommended default for Argon2id is 64 MB. Our default is 1 GB — 16× higher. The math, the memory budget on a 2018 iPhone, and the GPU-cracking economics behind that choice.
Read post →A race condition in delta ordering could have surfaced ciphertext from another user under specific timing. How we found it, what we changed, and why it never reached production.
Two medium-severity findings, both about edge cases in our recovery flow. What they were, how we fixed them, and why we made the report public the day we got it.
A native AutoFill UI lives at the intersection of OS chrome and our prompt. We had three iterations before the prompt clearly said "this is Keevo, not the website you're on."
When you share a credential with a teammate, you're solving a small key-exchange problem. We walk through every option we considered and why X25519 + ed25519 won.
The biggest release since launch. What's new, what changed, and what we cut between RC and ship.
A Rust core compiled to a static library, called from native Swift. Native AutoFill, Face ID, and Watch sync APIs aren't worth wrapping. Our build matrix and the trade-offs.