I'm more than happy to share more about my setup and thought process, so ask away. I'm glad I can finally share and discuss these ideas somewhere. I'll try to separate my responses into sections:
Convenience and Backups
Remembering the passphrase for the ring 0 device is risky at best, especially with an added duress passphrase and second factor PIN (if applicable)
I talk about duress and 2fa codes below, but as for remembering the master passphrase, it's risky but unavoidable. Your entire digital life is made up of information. Devices can be discarded, exchanged, but the information is what matters. There must be a "root" piece of information that unlocks all the rest. If that root key is stored in your brain, nobody else can access it. If the key is anywhere else (like in a physical safe), then anybody with access to that safe can unlock everything else. Maybe you hide the safe somewhere in the ground. Where it is hidden is now your "root key", stored in your brain. Maybe you write the safe's coordinates on a piece of paper. That is now your root key. There is always a root, either you store it in your brain and risk forgetting, or you store it outside and risk it stolen. I don't mind the burden of remembering one piece of information for the rest of my life, if it means the security of everything else.
Keeping the database automatically backed up seemed impossible
In my system automatic backups are not needed. This is the advantage of having a small ring 1
. The ring 0
database only stores the passwords for ring 1
, and ring 1
rarely changes. For my personal setup, I only need to update the ring 0
database when I buy a new ring 1
device, which is like once a year at most. Then I just update my backup usb manually.
The added expense and inconvenience of buying and carrying a separate phone was an issue
I don't see a way around this, aside from the Qubes solution mentioned in my post.
Handling 2FA
Where are 2FA recovery codes and other backup methods stored?
If the root key is air-gapped device or virtual machine (like the Qubes password vault), then it is already 2FA. To access the contents requires both posession of the device and knowledge of the password. I don't use 2FA for my ring 1
devices either, I don't see much benefit and just added risk. You do have to be wary for a thief that tries to see you typing in your password before stealing your device, but if a thief is that persistent, they could also see you use your 2FA key and steal that as well. I generally use 2FA for important online accounts, where the password can be easily stolen via phishing, database breaches, etc. These 2FA keys are considered ring 1
or ring 2
, so their recovery codes can be stored in ring 0
or ring 1
. Same with keyfiles, if you use those. Remember, the root is simply the master password, everything else can be derived from that.
Storing other information such as the duress passphrase or the unlock method for the database had no clear solution
As mentioned in my post, the database has the same password as the phone. I don't see a need for a different one. The phone password is already used for encrypting the entire phone, so you could technically avoid putting a password on the keepass database, but keeping the keepass database encrypted makes backups easier since you can just copy the file to the usb drive. The duress passphrase can be stored in the ring 0
device as well, as long as you periodically revisit it to refresh your memory.
Trust Rings
The system you came up with is good. Whether or not you want to isolate KeePass databases and accounts is up to you, though if you want that level of isolation I would just use Qubes and VMs, much easier than juggling devices.
Though I noticed your system only has two rings. One important thing I should mention is that the ring system is not just for passwords. It is for trust, access, and control in general. Higher rings are more trusted, and can access and control lower rings. For example, my ring 1
PC has ssh access into my ring 2
devices. It would not make sense the other way around. This is why I have multiple rings. Information in lower rings is less trusted. I would not pass an executable from a lower ring to a higher ring unless I have a way to re-validate it, using checksums or PGP keys. Hierarchies of trust are common in security and I find them easy to reason about and very powerful.
You're system sounds well thought out and more than secure enough for most people's needs, so if that is what works for you I would go for it. I also like the fun idea for the duress passphrase, I just hope a friend doesn't get tempted to try and unlock your phone and accidentally wipe everything! Overall, the only comments I would make are:
ring 0
, in countries like the US the cops can force you to use your biometrics, by law. GrapheneOS does have ways to quickly disable biometric unlock in emergencies, or automatically disable it after a set period of timering 0
database. Perhaps commit to one of them, to reduce complexity. The more complicated the system, the more places there can be vulnerabilitiesring 0
device is effectively compromising the database, even if you have a password on the database. There are numerous things that an attacker can do once in control of the device, like enabling internet, flash a custom rom and copy all the files over to make it look identical, installing a keylogger, changing the UI to hide any modifications, etc. This is also why I try to use myring 0
device as little as possible, every time I enter the password is another chance for the password to be stolenring 0
means you have to constantly use yourring 0
device. I prefer to use myring 0
device as little as possible, both for security and convenience. My TOTP app is on aring 1
device instead, and is only used to secure online accounts (which I considerring 2
). If you want to use 2FA forring 1
then I suppose you are forced to put your TOTP app onring 0
, though I find the inconvenience not worth it.