Project Name: Encrypted USB Drive

Project Functional Description:

  We plan to make an encrypted thumb drive. There will be a fixed number of 4 users. When the user enters the correct password on the keypad or enters the correct fingerprint, they will get to access the files corresponding to their user.
  Initially on hardware reset, all the users’ passwords are 4 0s. When the user plugs in the thumb drive, the LCD screen will say "Select User" and they have to enter a number on the keypad to select the user (1 for user 1, 2 for user 2, 3 for user 3, and 4 for user 4). Then the LCD screen will show “Enter Passcode / Fingerprint” and the screen will display what the user types on the keypad. As the user types, their input will be replaced with a dot. Once the user enters the correct passcode or inputs the correct fingerprint, the thumb drive will go into the unlocked state where all the files for that user can be accessed. Each user gets their own designated flash chip. In the unlocked state, the user can press a button on the keypad to change the passcode or change the fingerprint, and can press another button to lock the thumb drive.
  The system will be implemented using an STM32 microcontroller. It will handle interfacing with the keypad, LCD screen, fingerprint sensor, 4 flash chips, and a host computer. It will also handle keeping track of what state it’s in and handle keeping track of what user is accessing the flash drive.
  The system is powered through the 5V USB signal that will be interfaced with the 5V USB-A female connector. According to the USB 2.0 specifications, it should be able to handle an input voltage ranging from 4.75V to 5.25V. This input voltage will directly power the LCD screen. There will be a low dropout regulator to step down the voltage to 3.3V to power the microcontroller, fingerprint sensor, and the flash chips.
  The system will be enclosed in a 3D-printed rectangular case. We want the flash drive to weigh at most 1lb, be about the size of a phone, and can withstand temperatures between 32F - 110F. Since the user has to press down on the USB drive to enter a password, we will connect it using a cable instead of directly into a computer.
  One of our stretch goals will be to encrypt data onto the Flash IC using AES encryption, to ensure anyone who tries to retrieve data from the flash ICs themselves will not be able to read the data.

Project Specific Design Requirements (PSDRs):

  1. PSDR #1 (Hardware): An ability for the microcontroller to communicate with the LCD display over SPI
  2. PSDR #2 (Hardware): An ability for the flash memory chip and the microcontroller to communicate over SPI
  3. PSDR #3 (Hardware): An ability for the microcontroller and a host computer to communicate over USB
  4. PSDR #4 (Hardware): An ability for the fingerprint sensor and the microcontroller to communicate over UART
  5. PSDR #5 (Software): An ability for the microcontroller to use the fingerprint sensor and keypad input to transition between the User Select, Receiving Passwoord, Unlocked, Change Fingerprint, Change PIN, and Locking states.

Stretch PSDRs:

  1. PSDR #6 (Software): An ability for the microcontroller to encrypt and decrypt the data on the flash chips.

Here is a state transition diagram to convey the state information more clearly:

Encrypted Thumb Drive STD