Instead of having one symmetric access key per data room and encrypting everything in the room with that key, we now have asymmetric keys (public/private key pair) per room.
Each piece of data is encrypted with its own randomly generated symmetric access key (AES256-GCM) and then that key is encrypted with the active data room public key (X25519-XSalsa20-Poly1305).
When a person is removed from the data room, we rotate the data room private key and distribute the new key to all current members, so that the removed person no longer has access to the exchanged data.
Giving data rooms their own key pairs will also enable our upcoming request data feature.
Other fixes and improvements
- Our crypto folder has been completely refactored, enabling encryption versioning (for the future upgrades) and getting ready to be ported as an npm module.
- We have implemented atomic batch transactions, meaning that transactions are only committed once the entire batch is validated
- File view routing improvements.
- Decryption optimisations to prevent flickering and make the application more stable.