Repository navigation
Releases
Releases · FreyFlyy/Redoubt
Redoubt 2.2.1
Redoubt 2.2.1
Security
- Hardened the update check request:
update_check.pynow validates the URL scheme before callingurllib.request.urlopen(), rejecting anything other thanhttp/https(e.g.file:or custom schemes). This addresses Bandit B310 while preserving TLS certificate verification. The endpoint remains a hardcoded HTTPS GitHub URL.
Improvements
- Added
CONTRIBUTING.mdwith development setup and contribution guidelines. - Added
RELEASE_WORKFLOW.mddocumenting versioning, the release procedure, artifact building (Linux AppImage / Windows ZIP), testing requirements, and release quality criteria. - Documented the
migration.pymodule in the README module overview. - Updated the README roadmap: Tor/onion networking moved to v2.3.0; post-quantum cryptography remains a v3.0.0 goal.
Compatibility & migration
- Fully backward compatible with
2.X.Xversions. - No storage or migration format changes since 2.2.0; existing vaults continue to work without manual steps.
Release 2.2.0
Redoubt 2.2.0
Security
- Fixed critical key reuse vulnerability: The master vault key (derived from the passphrase via Argon2id) is no longer used directly for encryption. Instead, two independent subkeys are derived via HKDF-SHA256 with distinct
infolabels:- Identity subkey (
VAULT_KEY_IDENTITY_LABEL) → encryptsidentity.encusing AES-256-GCM - Database subkey (
VAULT_KEY_DATABASE_LABEL) → passed to SQLCipher asPRAGMA keyforredoubt.db - Previously, the same master key protected both files; a weakness in either encryption scheme exposed the other. Now the encryption keys are cryptographically separated.
- Identity subkey (
- Strengthened Argon2id KDF: Increased
time_costfrom 3 to 4 iterations (memory cost remains 256 MiB, parallelism 4), further slowing brute-force attacks against the vault passphrase. - Constant-time fingerprint comparison: Added
hmac.compare_digest()for fingerprint verification during contact validation, eliminating timing side-channels. - Automatic transparent migration with backups: On first unlock after upgrading, existing
identity.encandredoubt.dbare automatically migrated to the new key-separated format. Before any modification, timestamped backups are created in~/.redoubt/backups/(including WAL/SHM files for the database). Migration requires user confirmation in interactive mode.
Updates
- Added dedicated
migration.pymodule handling all legacy format detection and migration logic (pre-v2.1.1 single-key format, v2.1.1 legacy time_cost=3 format, and partial migrations). - Migration is atomic: both
identity.encandredoubt.dbare migrated together on first successful unlock with the correct passphrase. - Updated
ARCHITECTURE.mdto document the new vault key separation architecture and added a "Post-Quantum Readiness (Store-Now-Decrypt-Later)" section acknowledging the current lack of PQC and planning migration for v3.0.0. - Updated
README.mdroadmap to reflect post-quantum cryptography as a v3.0.0 goal.
Compatibility & migration
- Fully backward compatible: Existing installations migrate transparently on first run after upgrade (asks for y/N confirmation). No manual steps required.
- Migration handles all known legacy formats:
- Pre-v2.1.1 (single master key for both files, time_cost=3 or 4)
- v2.1.1 with legacy Argon2id
time_cost=3but already separated keys - v2.1.1 with current
time_cost=4but single key (partial migration)
- Backups are created in
~/.redoubt/backups/with timestamps (e.g.,identity.enc.20261106_185731.bak,redoubt.db.20261106_185731.bakplus-wal/-shm). - If migration is cancelled or fails, original files remain untouched and backups are available for manual recovery.
- Non-interactive environments (tests, CI, piped input) auto-confirm migration.
- After migration, subsequent launches use the fast path (no re-migration overhead).
v2.1.1
Redoubt 2.1.1
Improvements
- Renamed "☰ Settings" to "☰ Menu".
- Added a dedicated Settings submenu to accommodate future application settings.
- Added an opt-in update check at launch, which connects to the GitHub API (
api.github.com) to check for new releases. This requires an internet connection and exposes the user's public IP address to GitHub.
Release 2.1.0
Redoubt 2.1.0
Improvements
- Settings menu: New top-left
☰ Settingsmenu (alsoF2) withAbout,Show card,Contact listandAdd contact. - Contact management in the UI: Add contacts through a validated form, browse saved contacts with name, IP, public key and fingerprint, and revoke them from the contact list.
- Revocation with confirmation: Revoking a contact deletes its messages and outbox, closes any live session, wipes the Double Ratchet state, drops pending ACKs/presence, and prevents in-flight handshakes from installing a new session.
- Shared contact validation:
contact_validation.pycentralizes name/IP/public-key/fingerprint checks for both the UI form and the CLI. - Legacy CLI retained:
--add-contact,--list-contactsand--remove-contactare still available and documented. - About screen: Shows author, version and license.
- Test coverage: Added tests for the settings menu, theme cycling, settings persistence and revoked-contact session handling.
Security
- Revocation is enforced at runtime:
_install_sessionrefuses sessions for contacts no longer present in storage, anddrop_contact()removes live session/ratchet state and pending retransmissions. - Contact validation (fingerprint must match the public key, own identity rejected, duplicate contacts rejected) is now shared between CLI and UI, avoiding divergent checks.
- Wire protocol and message cryptography are unchanged.
Fixes
- Restored the missing
packaging/redoubt.desktop, so AppImage builds ship a valid desktop entry again (v2.0.0 packaging regression). - Corrected the desktop entry
Versionfield (it is the Desktop Entry specification version1.0, not the Redoubt version). - Documentation updates: settings menu, legacy CLI contact commands, module table, revocation behavior and AppImage output path.
Compatibility
- Version 2.1.0 clients ARE compatible with version 2.0.0 clients (but not 1.x.x): the wire protocol and message cryptography are unchanged.
- Existing identity keys, contacts and locally stored history remain valid.
- The legacy CLI contact commands remain available.
Release 2.0.0
Redoubt 2.0.0
Improvements
- Double Ratchet Protocol: Implemented a Double Ratchet mechanism combining symmetric-key ratcheting and Diffie-Hellman key exchanges to provide Forward Secrecy and Post-Compromise Security within individual sessions (NOT X3DH as previously suggested by the README.md's roadmap, but still enough for the use case).
- Ephemeral Key Exchange: Session root keys are now derived from ephemeral Diffie-Hellman secrets rather than static identity keys, preventing identity key compromise from exposing previously established session traffic.
- Message Key Isolation: Each message uses an independently derived encryption key. Compromise of an individual message key does not expose previous or subsequent messages.
- Automatic Recovery: The ratchet periodically introduces fresh DH material, allowing sessions to recover confidentiality after a temporary state compromise.
- Protocol Authentication: New DH ratchet metadata is authenticated as part of the message's Additional Authenticated Data (AAD), protecting protocol state against tampering.
- Secure Message Processing: Introduced a two-phase message reception process (
prepare_receive→commit) to prevent invalid or forged packets from advancing ratchet state. - Session Synchronization: Improved handling of out-of-order messages through bounded skipped message keys.
Security
- Replaced the previous static-key-based session root derivation with an ephemeral key exchange combining
DH-EE,DH-SEandDH-ES. - Introduced bounded skipped-key storage to limit memory consumption and exposure.
- Improved ratchet state management, including one-time commits and protection against stale state transitions.
- Invalid ratchet operations and malformed key exchange metadata are rejected without advancing cryptographic state.
Compatibility
- Breaking protocol change: Message packet structure has changed to accommodate Double Ratchet metadata (
dh,pn). - Version 2.0.0 clients are not wire-compatible with version 1.0.1 clients.
- Existing identity keys and locally stored message history are not inherently invalidated by the protocol upgrade.
Redoubt 1.0.1
Redoubt 1.0.1
Improvements
- Added sha256sums of AppImages in
appimages/ - Added
--versionargument to the executable
v1.0.0
Full Changelog: https://github.com/FreyFlyy/Redoubt/commits/v1.0.0