github framefilter/keyroost v0.10.0

5 hours ago

Added

  • Nix flake. The repository now builds as a flake: keyroost (the
    default package), keyroostctl, and a development shell, with the GUI's
    X11/Wayland libraries wired into the binary's rpath on Linux. Tested on
    x86_64 Linux. Contributed by @MakeShiftArtist. (#109)
  • PIV slot key self-test. keyroostctl piv test --slot <slot> (and a
    Test button in the GUI slot pane) proves a slot's private key works end to
    end: keyroost builds a fixed challenge from the slot certificate's public
    key, the card runs every operation the key type supports (decrypt for RSA,
    key agreement for P-256/P-384/X25519, sign for RSA/ECDSA/Ed25519), and the
    host verifies each result against that public key. Read-only on the card;
    needs the PIN unless the slot's PIN policy is "never". The verification
    side lives in a new keyroost-pivtest crate, which adds p384,
    ed25519-dalek and x25519-dalek (RustCrypto/dalek) to the tree.
    Contributed by @episource. (#127)
  • Fingerprint unlock for Token2 Bio3 OTP. On an R3.4 Bio3 key with a
    fingerprint enrolled, protected OTP codes can be released by a sensor touch
    as well as by the PIN. The CLI's otp group gains fp-status, fp-enable,
    fp-disable, fp-list (touch to unlock) and unlock-list (fingerprint
    first, PIN fallback; --pin-only forces the PIN), and the GUI's unlock
    prompt offers a touch button alongside the PIN field when fingerprint
    protection is on. Enrollment itself is done through the key's FIDO2
    fingerprint setup. Contributed by @token2. (#130)

Changed

  • keyroost-token2otp's PinFlag is now #[non_exhaustive]. It gained an
    fp_enable field this release; sealing the struct lets later firmware flags
    be added as fields without breaking library consumers, matching the other
    response types. Obtain a PinFlag from PinFlag::parse rather than a struct
    literal. (#130)

Fixed

  • PIV management-key authentication no longer assumes 3DES on cards that
    lack GET METADATA.
    That Yubico extension is the only place a card reports
    its 9B key's algorithm, and applets without it (the Cryptnox OpenFIPS201
    variant, which ships with an AES key) were authenticated as 3DES and
    failed. When the extension is absent, keyroost now probes each algorithm
    with a bare GENERAL AUTHENTICATE witness request (no key material leaves
    the host), keeps the ones the card accepts, and narrows by the length of
    the key in hand; a 24-byte key that fits both 3DES and AES-192 still
    resolves to 3DES, so older YubiKeys behave as before. Applies to the CLI
    and the GUI alike, and --debug traces each probe's verdict. Contributed
    by @episource. (#124)

Security

  • The --debug trace no longer prints Token2 OTP PIN material. The
    PIN-bearing commands — SET_OTP_PIN, CHANGE_OTP_PIN, and the PIN-carrying
    forms of VERIFY_OTP_PIN (a plain PIN verify, and the R3.4 Bio3
    fingerprint-protection toggle) — now have their request bodies length-redacted
    in the trace, the same as seed writes. The 1-byte VERIFY forms that carry no
    secret (lock, fingerprint verify) still show in full. (#131)

Full changelog: https://github.com/framefilter/keyroost/blob/v0.10.0/CHANGELOG.md

Don't miss a new keyroost release

NewReleases is sending notifications on new releases.