Hi takeshi and anonfinn,
Thank you for your analysis of our backup encryption mechanism. Let me clarify several technical points about the implementation.
The 7zip format uses PBKDF2-HMAC-SHA256 with 2^19 iterations for key derivation, meaning each password guess requires 524,288 HMAC operations that must be performed sequentially. Each round of the HMAC requires two SHA256 calculations (in addition to some HMAC and decryption overhead), bringing us up over 1 million SHA256 operations per password guess. While Bitcoin ASICs like the Antminer S19 XP Hydro can perform 255 TH/s, they cannot be repurposed for password cracking as they are hardwired specifically for Bitcoin mining. The algorithm is literally etched into the silicon and they cannot be “reprogrammed” to perform PBKDF2-HMAC-SHA256.
Current high-end GPUs can perform around 80,000-100,000 complete password guesses per second of PBKDF2-HMAC-SHA256. With our 20-digit, truly-random passwords (10^20 possibilities), a single GPU would take approximately 31.7 million years to try all combinations. So an attacker focused on cracking the password in a 1-year period would need to commit 31.7 million GPUs for an entire year, just for that one wallet. Attempting to crack it in 6 months would require 63.4 million GPUs, etc.
The cost of these GPUs would be billions of dollars, not to mention the electricity costs, facility costs and personnel costs. This is obviously not even remotely feasible.
Regarding implementation details, we use Python code to read/write the 7zip file format rather than the 7zip program itself. Our initialization vectors (IVs) are generated using three independent true random number generator (TRNG) sources with a length of 16 bytes, so we are not subject to the IV-related vulnerabilities you cited. The LostMyPass comparison was just a way to show that another company, whose entire business is attempting to brute force passwords, validates our crack-time calculations, confirming our security margin calculations are accurate.
While longer passwords would indeed provide additional security margin, our current implementation balances strong security against practical attacks with usability. The key derivation function’s sequential nature, combined with our random 20-digit passwords, ensures that even well-funded adversaries with significant computational resources would find cracking attempts impractical to say the least.
Let’s keep in mind here that the use case is to secure a microSD card that you should keep stored in a safe place (your literal home safe or a safe deposit box, or in a box hidden in your basement). This file is not online, and nobody will have access to it unless they get physical access to your storage location. And even then, if you simply rotate your bitcoin every 1,000 years or so to a new wallet, you will be fine.