0.25.0
19th July, 2025 (beta1 in 0.25.0-beta1, 13th July, 2025)
After reading Issue #668, I conducted another self-review of the E2EE-related code. In retrospect, it was clearly written by someone inexperienced, which is understandable, but it is still rather embarrassing. Three years is certainly enough time for growth.
I have now rewritten the E2EE code to be more robust and easier to understand. It is significantly more readable and should be easier to maintain in the future. The performance issue, previously considered a concern, has been addressed by introducing a master key and deriving keys using HKDF. This approach is both fast and robust, and it provides protection against rainbow table attacks. (In addition, this implementation has been a dedicated package on the npm registry, and tested in 100% branch-coverage).
As a result, this is the first time in a while that forward compatibility has been broken. We have also taken the opportunity to change all metadata to use encryption rather than obfuscation. Furthermore, the Dynamic Iteration Count
setting is now redundant and has been moved to the Patches
pane in the settings. Thanks to Rabin-Karp, the eden setting is also no longer necessary and has been relocated accordingly. Therefore, v0.25.0 represents a legitimate and correct evolution.
Fixed
- The encryption algorithm now uses HKDF with a master key.
- This is more robust and faster than the previous implementation.
- It is now more secure against rainbow table attacks.
- The previous implementation can still be used via
Patches
->End-to-end encryption algorithm
->Force V1
.- Note that
V1: Legacy
can decrypt V2, but produces V1 output.
- Note that
Fetch everything from the remote
now works correctly.- It no longer creates local database entries before synchronisation.
- Extra log messages during QR code decoding have been removed.
Changed
- The following settings have been moved to the
Patches
pane:Remote Database Tweak
Incubate Chunks in Document
Data Compression
Behavioural and API Changes
DirectFileManipulatorV2
now requires new settings (as you may already know, E2EEAlgorithm).- The database version has been increased to
12
from10
.- If an older version is detected, we will be notified and synchronisation will be paused until the update is acknowledged. (It has been a long time since this behaviour was last encountered; we always err on the side of caution, even if it is less convenient.)
Refactored
couchdb_utils.ts
has been separated into several explicitly named files.- Some missing functions in
bgWorker.mock.ts
have been added.