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:
- Basic soldering
- Using a hotglue gun
- 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
- Soldering iron and solder
- Hot-glue gun and hot-glue stick
- Micro-USB cable
- Small wire-pliers
- Flat-head screw-driver
- Optional: An ISP programmer like AvrISP-MKii
These are the parts I use to assemble mine.
- 1x 6x6x7 mm Tact switch (maybe 6x6x6 is okay too?)
- 1x Arduino Pro Micro
- 1x 3 mm LED
- 1x 380 Ohm Resistor for LED
- 2x 4.7K Ohm Resistor for I2C Pullup
- 1x EEPROM (I used a Microchip 24LC512 - 512K/64KiB I2C Serial EEPROM)
- 1x The Final Key Case
- Thin insulated wire (optional but highly recommended for ease of assembly)
- Burn Firmware to Arduino
- Solder EEPROM to Arduino
- Solder Pullups to Arduino
- Solder LED to Arduino
- Solder Button to Arduino
- Place in case
- 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
See http://cyberstalker.dk/finalkey for instructions.
Creation date: 2014-03-16 (YYYY-MM-DD)