The Final Key - Building your own



Building it requires little skill, pretty much anyone with comprehension of the English language and access to "The Internet" can make one. These are the things you need to either know how to do, or read up on:
  1. Basic soldering
  2. Using a hotglue gun
  3. Burning firmware to AVR chips


Nothing fancy at all, you can probably do with even less, but these are what I use:
Note that the optional ISP programmer is for burning the firmware without the Arduino bootloader, this option is the most secure as a bootloader on the chip leaves it open to attackers who could install compromised firmware on your FinalKey if it is connected to a compromised computer.


These are the parts I use to assemble mine.


  1. Burn Firmware to Arduino
  2. Solder EEPROM to Arduino
  3. Solder Pullups to Arduino
  4. Solder LED to Arduino
  5. Solder Button to Arduino
  6. Place in case
  7. Seal with hotglue


I modified some files in the Arduino distribution (I increased the buffer size of the wire lib and changed some USB hid stuff to accommodate several keyboard layouts and multiple modifier keys at the cost of increased memory usage).
Therefore you need to use the patched files from the FinalKey firmware package.
Download the FinalKey firmware source from github.
If you find errors in the software or implement additional features, please submit a pull request for the change on github, thank you :)
Hook up the pro-micro board to your programmer using the correct pins, or simply use the arduino-bootloader. (last option is not secure as it allows attacker to replace the firmware on the device and should only be used for development and testing).

Using a programmer

If you have a AvrISP, you can download the precompiled hex file from github and burn that using avrdude.
Here's pictures of my homebrew programmer jig in case you need a laugh ;)


Solder the EEPROM chip to the Arduino, I used a bit of SuperAttack glue to hold it in place. Place the EEPROM directly on top of the AVR chip and align its pins such that EEPROM pin0 is at Arduino pin A0 and EEPROM pin 5 (diagonally opposite of 0) is at Arduino pin 2. Then bend the pins down to holes and solder them in place.

Turn around the board and solder the two 4.7k pullups. They will both connect to pin 15, and then one to pin 2 and the other to pin 3.

It's important that you orient the tact switch correctly as the leads go through in one direction as indicated by the elegantly drawn red diagram on the above picture, check your switch before soldering! Check again before potting with glue!

Cut leads to reasonable lengths and fix the button and LED into the case before soldering the next components. I used a small amount of glue to fix the button, be careful about thin glues and tact switches!
Solder a short length of wire to the switch pins and Ardunino pins 7 and 9.
Solder a short piece of wire to LED- and Arduino pin 10, and solder the 380 ohm reistor to LED+ and a small wire going to Arduino VCC.

Now is a really good time to test it.

If everything works, fill the cavity beneath the PCB.

Press the board down into the glue and put some tape over the USB connector.

Fill with glue and let harden.

The light was cool? :)

Enjoy safe keeping of passwords 'n' stuff

Using the Final Key

Return to the main page for usage instructions.
Creation date: 2014-03-16 (YYYY-MM-DD)