Tuesday, January 28, 2014

Encryption is a GO!

Successfully added the code to handle encryption!

Current features (with more to come in later versions):

  • Micro USB charged internal LiPo battery.
  • 1.8" Color LCD display.
  • Dual SD card storage/loading system (one removable SD card for loading new addresses and locking/unlocking the device, one internal SD card for encrypted storage)
  • Without the unlock code present on the removable SD card device will not boot, allowing you to lock the device and unlock it with any SD card containing the proper user-defined passcode.
  • Device lock is secured with SHA-256.
  • Private keys are protected by AES-256 CBC.
  • Displays saved private keys in plain text and/or QR codes.
  • Supports all current cryptocurrencies.


Lots more to do yet in the form of cleaning up the code, adding some error prevention, a little more refining on the encryption process, and making the GUI a little prettier.  Once I am a little more satisfied with the performance of the software, I will be looking more into custom PCBs (as everything was prototyped on retail breakout boards and a Teensy) and possible production options.  It is 9PM where I am now, so I don't have time to make one tonight, but there will be another video coming in the next few days showing how everything functions.  Also, **if there is anyone out there with a 3D printer** I am hoping to get a prototype enclosure made for it soon.

Sunday, January 19, 2014

File IO now working!

Posted a new video showing current progress...Since last time, I have gotten the file IO for both the secure and unsecure SD card worked out and finished most of the associated code.  Currently you can view stored addresses saved on the secure side and import new addresses from the unsecure, storing them on the secure side.  The video contains a demo of how that is done.  I have also added the lock/unlock option, requiring a user defined pass-phrase to be present on the unsecure SD card to allow the device to boot past the splash screen.

The last major process that needs to be implemented is encryption.  I have several libraries to choose from that look like they will be incredibly easy to use, so I don't expect this to take too terribly long to finish.  The user entered text that acts as a lock-code is going to be stored in the devices EEPROM after a hash with SHA-256 so that even if the EEPROM is compromised it will not give up information that will bypass the lock.  As for address encryption, when an address is loaded to the secure card from the unsecure it will undergo some form of AES encryption, which mode depends on how much available RAM I have left when it get to it, but I the libraries I have found offer many options to balance security and performance.

After that, it is a matter of cleaning up...Adjusting the menu system to allow multiple "pages" of addresses if more than 10 are stored, optimizing the code, prettying up the UI, adding error correction, and any other features I decide to add.

In the mean time, if there is anyone out there with a 3D printer that is interested in helping me out with a prototype enclosure, let me know and I will give you details on dimensions and such!

Closer and closer...

I now have the multi-SD card functionality worked out which took a while...The SdFat library required to work with more than one is considerably more complex than the SD library I was used to using in the past.  Now that I have that going, I have most of the File IO finished, minus some error checking and over-write protection to keep existing keys from being lost when adding new keys.  Here soon a new video will be posted detailing the rest of the changes and progress.

Sunday, January 5, 2014

Finally moving along!

It has been longer than I intended since the last update, and most of that was spent waiting for parts to get here in the mail...Now that they have, things are moving quickly.  Here is a quick video showing what I have done so far:



I have gotten my SD card readers, new LCD screen, and my Teensy 3.1's in and all the code for the display and controller updated from the libraries I was using for the old screen.  I have also gotten the QR code generation library modified for my purposes and it runs great!  It took a long time to find a library that did everything I needed it to without being to intense to run on a microcontroller.

Many things left to do...The next big step is getting all of the file manipulation code completed.  It is taking more library modification to get things to work with multiple SD cards, but that should be knocked out in the next few days.  The process is basically going to be:


  • Check EEPROM to see if device is locked
  • Check unsecure SD card for unlock code
  • Check unlock code against data in EEPROM
  • Load list of keys from secure SD card
  • Display/delete keys from secure card
  • Load new keys from unsecure card and store them on the secure card before removing them from the unsecure card
  • Associate labels with each key to be displayed on screen.
After all that is done, then I will move on to the encryption for the keys stored on the secure card, as well as the unlock code to be stored in EEPROM.