github framefilter/keyroost v0.4.0

latest releases: v0.7.6, v0.7.5, v0.7.4...
one month ago

PIV: from status view to full management — with on-card certificates

The headline of this release. The PIV applet went from a read-only status
panel to a complete management surface, in both keyroostctl piv and the
desktop app's PIV pane, hardware-verified end to end:

  • Management-key authentication (AES-128/192/256 and 3DES, auto-detected
    — including the AES-192 default on newer YubiKey firmware), with rotation
    to a key of your own.
  • On-card key generation: RSA 1024–4096, ECC P-256/P-384, Ed25519.
  • Certificates, signed by the card itself: create a self-signed
    certificate straight into the slot, or a PKCS#10 CSR to hand to a
    certificate authority — the private key never leaves the device. All four
    signature families validated against OpenSSL.
  • Certificate import/export, PIN & PUK change, PIN unblock, retry-count
    configuration, and a typed-confirmation applet reset.

Security hardening

A full-workspace review (quality, efficiency, simplicity, security) drove a
broad hardening pass:

  • Robust against misbehaving devices: no panics, stack overflows, or
    unbounded allocations from malformed or hostile card/authenticator
    responses; device-driven loops and lengths are bounded everywhere.
  • Memory hygiene: PINs, seeds, passwords, and key material are wiped
    after use across every layer — CLI buffers, GUI fields, transmitted APDUs,
    cipher key schedules, and the import pipeline (including decrypted Aegis
    vaults) — and secret-bearing traffic is redacted from --debug traces.
  • Safer flows: typed secrets can no longer follow you from one device to
    another in the GUI; card probing no longer resets cards held by other
    software; destructive confirmations can't be silently dropped; secrets
    never appear in command-line arguments.
  • Supply-chain posture: all CI actions SHA-pinned with least-privilege
    tokens, release artifacts ship with SHA256SUMS and GitHub build-provenance
    attestation, a cargo audit job watches advisories, and the fuzzing suite
    grew new targets (CTAP typed parsers, encrypted-vault handling).

Imports

  • Encrypted Aegis vault parameters are capped against decompression-bomb
    style abuse; imported TOTP seeds are wiped end to end.
  • Stricter base32/otpauth validation rejects malformed entries before
    anything is written to a device.
  • Multi-code QR screenshots now salvage every readable code instead of
    failing the whole image on one damaged QR.

Desktop app

  • Slow work (QR decode, vault decryption, every Molto2 operation) runs off
    the UI thread — no more frozen window during "Sync time (all)".
  • Capability panes share one consistent scroll layout with a proper
    scrollbar gutter.
  • Copied OTP codes auto-clear from the clipboard; seed fields clear after a
    successful write; warnings for factory-default customer keys and device
    clock drift.

Note for upgraders

The udev rule now matches FIDO devices by ID_SECURITY_TOKEN instead of the
HID interface class. If FIDO operations stop working after upgrading,
re-install the rule: copy udev/70-keyroost-fido.rules to
/etc/udev/rules.d/ and run sudo udevadm control --reload.

Don't miss a new keyroost release

NewReleases is sending notifications on new releases.