The AT88SC0202C ICs have arrived. After a few hours of programming and reading documentation I managed to get them working. These have 64 bytes per user zone, and 4 zones in total. Each zone will contain a 128bit encryption key, and will be locked by it's own password. This is handy for allowing different security levels so bank logins can be kept separate from forum logins for example. Interestingly the CryptoMemory® has 8 passwords (16 if you treat read and write passwords separately), allowing for more than one password per zone. I'm not sure what use this has, but it's there if needed.
For the device architecture I have settled on the following layout:
The serial flash is where all the login info and encrypted passwords will be stored. The microcontroller will use the encryption key stored on the CryptoMemory® to decrypt the password before typing it out over the virtual USB keyboard. The full process would be as follows:
- Send verify password command to CryptoMemory® and check if successful.
- Read the encryption key stored in the CryptoMemory® user zone.
- Read username/password from serial flash.
- Decrypt password using encryption key.
- Write username/password through the virtual keyboard.
My current task is to implement the input and menu system. Also I have switched over from using Arduino to using the LUFA library which allows for a lot more control over the USB stack. For example I am able to add a Generic HID alongside the keyboard for backup/restore of passwords, or even direct control of the device without having to use the on-board button.