Ever heard of a hardware wallet? It’s a type of blockchain device that stores a user’s private keys in a locked-down microchip, often to stash cryptocurrencies like bitcoin from exchanges. The wallets are plug-and-play, physically durable, and highly reconfigurable, which is why researchers believe they could help usher in a more secure digital future if adopted at scale.
But they’re not perfect. That’s why a team of scientists at MIT’s Computer Science and Artificial Intelligence Lab (CSAIL) developed Notary, a hardware wallet architecture they claim eliminates common bugs affecting security devices. The source code is available on GitHub, and the team pegs the cost of production hardware between $50 and $150.
“A computer is such a gigantic attack surface, with lots of complexity and lots of code … You could spend most of your day working normally on your computer, but when you have to do something important like sell stock or transfer money, it could be done relatively smoothly using this external device,” explained lead research author Anish Athalye in a statement. “Being able to build a secure hardware wallet would lead to better security for so many different kinds of applications.”
Notary’s platform takes the form of a USB stick containing a small display and button, with software that executes code requesting approval to perform actions. One of Notary’s key innovations is what Athalye and colleagues call “reset-based switching,” which fully resets the wallet’s processor and memory to clear all internal state information before executing new agent code. Another is a “trustworthy I/O path” between the aforementioned agent code and the user, which prevents adversarial tampering with the device’s screen or buttons.
Importantly, and as alluded to earlier, Notary clamps down on attack vectors present in off-the-shelf hardware wallets, including memory errors arising from memory protection units (MPUs) misprogrammed to break inter-app isolation. It addresses system call vulnerabilities (which let individual apps read kernel memory) by supplying apps with data at load time prior to launch. And to tackle exploits where data packets sent over USB create bugs, Notary places the USB software outside the security-critical parts of the wallet.
In a demonstration of Notary’s versatility and ease of integration, the team implemented it for a bitcoin wallet and approval manager. The bitcoin wallet was written in just 300 lines of code, while the off-the-shelf approval manager app required fewer than 150 lines of new code.
“Notary simplifies software (e.g., using reset-based agent switching) and wastes resources (e.g., using physical separation) in order to achieve strong isolation and defense in depth,” concluded the researchers. “[It] can improve the security of applications where the crucial transaction decision can be succinctly summarized and delegated to a strongly isolated agent running on Notary.”