Hello,
Here is a new secure hardware wallet project based on javacard and compatible with the YubiKey NEO. The sources and building instructions are available on
https://github.com/Toporin/SatoChipAppletThis project is fully open source and consists of a javacard applet that is to be loaded on a Yubikey (or any smartcard supporting the required functionalities - ECDSA-SHA256). Beside the applet, a java client is provided in the form of a light java library to simplify integration on existing applications (as the yubikey obviously needs to interact with a client application):
https://github.com/Toporin/SatoChipClient.
A simple client java application is also provided as a proof-of-work. This application is a fork based on the BitcoinWallet from ScripterRon:
https://github.com/Toporin/BitcoinWalletThe SatoChip has partial BIP32 support but due to technical limitations of current javacards, only hardened keys are supported (i.e. child keys using indices 2^31 through 2^32-1). Using SatoChip, an initial BIP32 seed is imported in the javacard and private keys are derived as requested by an external application. Private keys are never exported outside of the secure chip.
The SatoChip also supports the import of regular (non-BIP32 keys) such as vanity keys. Here again, private keys cannot be exported outside of the secure chip. Up to 16 regular keys can be imported on the chip. In any case, the private keys can be used to sign transactions and Bitcoin messages, if sufficient credentials are provided.
Access to private keys (creation, derivation and signature) is enforced through the use of PIN code. This access control is based on the MUSCLE framework on which the applet is built. As part of this framework, it is also possible to securely store and retrieve data & secret keys in secure memory, or use the chip to perform data encryption and decryption, although some functionalities have been disabled for readability of the code.
Please note that this implementation is currently under development: Use at your own risk!Don't forget to backup the seed as it is not possible to recover it afterward!I cannot be held responsible for any loss incurred by the use of this application...
Important remark: the Yubikeys currently sold by Yubico are configured for production only and it is not possible to load the applet on these dongles (see this link for more details:
https://www.yubico.com/2014/07/yubikey-neo-updates/). Only the development Yubikeys (with serial number below 3,000,000) are suitable for this use!
Advantages:
-Code is free and open source
-Code should be easy to read and maintain (java card is a subset of java)
-Multiple form factor supported in addition to Yubikey (e.g smartcards, sim cards)
-Plug and play
-Smartcards have a long experience in dealing with physical security
-Can be easily used or extended for other crypto-currencies
-Cheap: possible to buy a compliant smartcard for less than 10$!
Also, when used with a Yubikey Neo:
-Yubikey has minimimal size and is practically indestructible
-Yubico is a reliable company that is not going anywhere anytime soon!
-Many other functionalities: Yubikey OTP, U2F, PGP support...
-Possibility to support NFC
Limitations:
-No screen!
-This is still beta code, use with caution!
-The applet could use more testing
-Performances could be improved
I am open to suggestions/corrections/improvements... Remember, this is a work in progress!
Let me know how it works for you and if you have trouble using it!