The final key – Hardware password manager


The final key – Hardware password manager by

The Final Key is a piece technology that solves a problem. The Final Key is a hardware password manager with encryption and focus on combining portability, compatibility security and easy of use. It is a hobbyproject of mine and not under any commercial distribution, you are also free to build your own clones if you like the idea. The Final Key is based around a 16 MHz Atmel ATmega3U4 microprocessor and 64 KiB of EEPROM for storage.
You connect to The Final Key using any serial terminal, and “triggers” the account you want to log into. Then you can focus the username/password field of the website/application you want to log into, and then you press the button and The Final Key acts as a keyboard and types your credentials directly into the receiving application.

Via Hacked Gadgets.

Join the Conversation


  1. First of all: COOL! I didn’t know this was posted there.

    Scott, I made the first version using the onchipp eeprom, it was too small, as it could keep only 16 accounts of reasonable size.

    I would like to point to the a href=””>Main page describing the usage and some of the security aspects of the device, and also like to point your attention to the hacking challenge where I have promised to send a free Final Key to the first person who can document a method to extract passwords from the key.

  2. I made one.
    No problem with the hardware but can’t get a compilation. I got message error with keyboard.
    Another point, I’d like to have a French keyboard layout.
    If you have an idea?

  3. Hi Ben,

    You need to be more specific about the error message, it is quite impossible to help you without the exact message.

    But I will guess here, that maybe you did not apply the patches to the Arduino software itself?
    There are important changes to both the Wire and Keyboard lib, which are needed for the firmware to compile and work correctly.

    About French keyboard layout, locally I have support for French keyboards for PC(Win/Linux) and I am currently working on one for OSX, these changes will be pushed to github when they are finished.
    These are changes to the Arduino softare itself, not the FinalKey project.

  4. Hi DusteD, thanks for your reply.

    You’re right, I missed some infos ;)

    Here we are:
    1- arduino 1.0.5 installed
    2- patched with arduino-1.0.5-finalkey.patch
    3- when I try to compile FinalKey.ino, I get this message:

    FinalKey.ino: In function ‘void getKbLayout()’:
    FinalKey:145: error: ‘KEYBOARD_LANG_DK_PC’ was not declared in this scope
    FinalKey:148: error: ‘KEYBOARD_LANG_US_PC’ was not declared in this scope
    FinalKey:151: error: ‘KEYBOARD_LANG_DK_MAC’ was not declared in this scope
    FinalKey.ino: In function ‘uint8_t login(bool)’:
    FinalKey:304: error: ‘KEYBOARD_LANG_DK_PC’ was not declared in this scope
    FinalKey:307: error: ‘KEYBOARD_LANG_US_PC’ was not declared in this scope
    FinalKey:309: error: ‘KEYBOARD_LANG_DK_MAC’ was not declared in this scope
    FinalKey.ino: In function ‘bool testChars()’:
    FinalKey:391: error: ‘Keyboard’ was not declared in this scope
    FinalKey.ino: In function ‘void fireEntry(uint8_t, int16_t, bool)’:
    FinalKey:483: error: ‘Keyboard’ was not declared in this scope

    I missed something for sure!
    I’m on Linux.


  5. Hi again Ben,

    I just downloaded a fresh copy of Arduino and tried applying the patch,
    it should look something like:
    $ cd arduino-1.0.5
    $ patch -p 1 < arduino-1.0.5-finalkey.patch
    patching file hardware/arduino/cores/arduino/HID.cpp
    patching file hardware/arduino/cores/arduino/USBAPI.h
    patching file hardware/arduino/cores/arduino/keymap-dk.h
    patching file hardware/arduino/cores/arduino/keymap-us.h
    patching file libraries/Wire/Wire.h
    patching file libraries/Wire/utility/twi.h

    I could not reproduce your error, but I can confirm that those errormessages are because the Arduino software has not been patched, or is for some reason, not re-compiling those files.
    Try manually to browse to ardware/arduino/cores/arduino/ and look for the keymap-dk.h and keymap-us.h files, if those are there, try opening hardware/arduino/cores/arduino/USBAPI.h and search for KEYBOARD_LANG_DK_PC, if that define is there, then I think somehow those files are not being compiled, and my only suggestion is to try and start from a fresh copy of Arduino.

    I can be reached at dusted sometweirdletterA dusted rounddot dk if you continue having problems, you are free to write, put FinalKey in the subject.

  6. hey,
    I did a complete fresh installation of arduino + patch + librairies.
    I checked the keymap-dk.h and keymap-us.h files and their definition inside the hardware/arduino/cores/arduino/USBAPI.h file.
    Everything seems ok BUT I get again the previous error.
    If you have a brillant idea ;)

  7. Hi Ben,

    I don’t have any idea what could be wrong, because I cannot reproduce the issue..
    However, I have put binary of the firmware on github, so that you can program that directly (it requires an ISP of some kind, another arduino board can do it)

    1. Hi DusteD! Great project, however there will be any chance to get other keyboard layouts (e.g. Italian)?

      Thank you very much!
      Greetings from Italy!

      1. Hi mk2soldier, yes there is a chance, I’m working on a system to make it easier to add new layouts without patching the Arduino package every time.
        There are 2 issues with layouts:
        First issue: There is limited flash, so a right now a FinalKey can hold max 6 unique layouts (like 6 different languages for pc or mac, or 3 different languages for pc and mac, or any combination), meaning that when we get more maps, we will need to do different builds depending on which layouts are wanted on each device.

        Second issue: Creating the usb-hid -> ascii mapping for each language is a time consuming task, and something I’ll do for people who order a device (I added French pc/mac because I sold a FinalKey to a person from France who used both pc and mac).
        I’m ofcause publishing those maps opensource as they are created.
        If you create a map (take a short look at the BruteKeyLayout project), I’ll be happy to include it.

  8. Hi DusteD! Thank you for your reply.
    I don’t have this type of programmer.
    I’ll try with another computer with a fresh version, we’ll see.

Leave a comment

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail. You can also subscribe without commenting.