Overview
Bravura Safe uses industry standard and respected encryption to ensure your data remains private to only you and the people you share items with. A fundamental tenet of its encryption is that other people cannot gain access to your data plain text regardless of the level of access they have to the raw database backups or the backend services. Bravura Safe embraces the fundamentals of zero-knowledge solutions; you can trust that you are the only one with access to your key, and you are the only one who can decrypt your data.
Zero-knowledge encryption
Bravura Security staff cannot see your passwords ever due to the strong end-to-end encryption that is used with Bravura Safe. All encryption occurs on the client-side device (web browser, browser extension, mobile application, desktop application, CLI) and only encrypted and/or hashed material is transferred to the server.
AES-CBC (Cipher Block Chaining) is used to encrypt all content stored reversibly. The key used in AES-CBC is derived from the user's master password salted with their email address using PBKDF2. The resulting key is then hashed before transmission to the server. The server then goes through another key expansion phase using the provided hash salted with a cryptographically secure random value, and hashed once again. It is this resulting hash that is stored in the database to authenticate a user.
PBKDF2 uses 100,001 iterations on the client. The server side uses 100,000 iterations. So in total, 200,001 iterations are used in the overall process.
All hashes are secure one-way SHA-256 hashes.
Invoked crypto libraries
Bravura Security only leverages third-party implemented cryptographic libraries. The following Libraries are leveraged:
Web Crypto - Built into web browsers
Node.js Crypto - https://nodejs.org/api/crypto.html
Forge - https://github.com/digitalbazaar/forge
System.Security.Cryptography
CommonCrypto (iOS, Apple)
Javax.Crypto (Android, Oracle)
BouncyCastle (Android)