Most Ethereum (and crypto) users are familiar with the BIP-39 Mnemonic Phrase, that 12 word phrase you were asked to backup, which is used to create an account's private key.
What many may not know is that the standard supports using a password in a plausible-deniable way, which allows for some powerful techniques to hide ether (and any crypto asset) like a squirrel burying its acorns.
The tentative term I am using for this technique is Simultaneous Qualified Roots with Lure (or SQRL; obviously a backronym).
tl;dr: store lower-value, easy to steal ether, in your wallet to "bribe" any attackers into accidentally revealing they have compromised your private keys
For the purpose of this article, we won't dive too deep into the technical details, but you can basically think of the password as just getting mixed with the mnemonic as a salt and hashed. In fact, all mnemonic phrases require a password, but most software simply uses the empty string as the password.
The important thing to note is that any password is valid and will produce a different private key, and hence different account and address. The same password will always produce the same private key.
There is no way to associate a mnemonic phrase and a password to its address, so if your mnemonic phrase is leaked there is no way for an attacker to even know the balance of the account, if any. If they try to guess your password, they cannot know whether they just haven't guessed correctly yetor wether the mnemonic is simply not password protected and has no funds.
With SQRL-ing, we will take advantage of this to accomplish signalling, by bribing any attacker to accidentally notify you your account has been compromised.
First we will talk about the canary account, which is the default address generated by a mnemonic phrase; i.e. without a password. After creating a mnemonic phrase for SQRL-ing, place a small "bounty" in the canary account. Any popular token can be used, such as ether or BTC, since every token has a default address for a given mnemonic phrase.
Next we can create our qualified account, the actual account we intend to use to store our ether and other crypto assets. Using the same mnemonic phrase, just enter a secure password, which will result in a new address. Do not forget this password, since without it you cannot access this account.
Finally use a notification service to inform you when the canary account is accessed. For example, in Etherscan, you can add an address as a "Watched Address" which will trigger an e-mail when the balance changes.
That's it. Now use the qualified account for all your crypto needs.
If your mnemonic phrase is ever leaked, any attacker that recognizes what it is will likely enter it into their wallet software, see the default account has funds and immediately steal them, not realizing that they are actually just accepting your bounty to responsibly disclose the leak.
Once you get an e-mail that the bounty has been "stolen" (i.e. claimed) you should immediately relocate all the assets from the qualified account into a new account. That mnemonic is in the wild and should no longer be used; be sure to update any ENS names pointing to it too.
In general though, we expect a mnemonic phrase to be stored safely; this is just an extra level of security for when things go far more wrong than planned and gives us a little heads-up that something may be a bit lacking in our security.
There are a few other interesting things we can do with this technique.
First, there is no need to limit the number of qualified accounts. You can have multiple qualified accounts by using different passwords, with various levels of password difficulty.
If an attacker suspects a mnemonic phrase is SQRL-ing, they may not steal the funds immediately and try guessing passwords instead. If they find a few easier passwords along the way they may steal those funds or keep guessing, but the longer they wait, the more likely a more conservative attacker might discover the leak and steal the bounty anyways, alerting you to the leak, resulting in the subtle attacker getting nothing.
If you regularly move from one SQRL-ing mnemonic phrase to another, you further incentivize an attacker to grab what they can, when they can, lest they lose what they've found and not claimed when you change accounts.
Another possibility is duress accounts, which allow signalling other parties of a compromised wallet.
By creating another qualified account, which has a fairly enticing amount of ether, but which you will normally not use, you can give the address of that account to a trusted friend, who will add it to their notification service, like Etherscan.
Then you can have an arrangement with a friend, that if the funds are ever moved (without you contacting them first), that they should attempt to contact you or call the authorities.
If you are ever physically forced to provide your mnemonic phrase and password to an attacker, you can provide this duress account password, which the attacker will steal the funds from, unknowingly sending an alert to your trusted friend that something is awry.
As a short demonstration, the ethers CLI has SQRL-ing support, since it allows using a mnemonic with password.
It also supports a memory-hard password-based key derivation function which will perform a time-intensive operation to your password first, so that the password actually used is substantially more secure, using the experimental flag, --xxx-mnemonic-password.
Anyone who wishes to try attacking a known SQRL-ed mnemonic phrase, I will be posting a 12 word mnemonic next week which will have 19 qualified accounts each with $10 of ether. Once 9 of them have been claimed, I will sweep the remaining unclaimed ether back.
So dust off your password brute-forcing scripts and get ready to try to de-squirrel some of those accounts.
Keep in mind that this technique can control any Externally-Owned Account (EOA), so it can be used in conjunction with other methods of security, such as multi-sig contract wallets or Shamir Secret Sharing.
Anyhoo, thanks for reading! Any feedback or suggestions are absolutely welcome and if you would like to keep updated on my random projects and stray thoughts, follow me on Twitter or GitHub.
"Tell Dafne to run a one-ninety-nine on a possible Dolittle..."