RockyGuard

Blog

Engineering notes.

Write-ups from the work itself — root-cause analyses, the reasoning behind API decisions, and the defects we found before you did. Same stance as the Phase 4.1 report: publish what went wrong, not only what went right.

Subscribe by RSS. No tracking, no newsletter signup.

  • ·6 min read ·Preview · v1.4.0

    Don't check the licence. Make the feature need it.

    A licence check is a boolean an attacker can patch. So we removed the branch: the feature decrypts its own data with a key only a valid licence carries.

    engineering-notessecuritycryptography

  • ·4 min read ·Preview · v1.4.0

    The public key isn't secret. That's not why we hide it.

    Reading an embedded verification key is harmless — the attack is overwriting it. How we made key substitution tamper-evident and fail-closed.

    engineering-notessecuritycryptography

  • ·5 min read ·Preview · v1.4.0

    The signature is unforgeable. The branch that trusts it isn't.

    Crypto makes a licence unforgeable, so attackers patch the branch that trusts it. How we obfuscate that branch, and why your own call site matters more.

    engineering-notessecuritybuild-and-packaging

  • ·8 min read ·Preview · v1.4.0

    The file on disk is clean. The running code isn't.

    The on-disk signature check hashes a file that an in-memory patch never touches, and it skips static builds entirely. A trust-on-first-use check for the gap.

    engineering-notessecurity

  • ·5 min read

    An HMAC salted with a filename

    A valid licence could be denied outright, and the documented remedy never cleared it. The salt depended on how the licence was named, not on which anchor.

    postmortemcryptography

  • ·5 min read ·Preview · v1.4.0

    Adding 56 diagnostic codes without breaking a single caller

    The library already knew why verification failed, then threw the distinction away. Promoting it to a public enum, without touching LicenseStatus.

    engineering-notesapi-designabi

  • ·6 min read ·Preview · v1.4.0

    The licence hasn't expired. The clock is three days fast.

    A per-section diagnostic can't answer the ticket that costs the most. What it took to correlate across a report instead, and what we refused to build.

    engineering-notesdiagnostics