I am working an a Windows application that will encrypt and decrypt files using AES Encryption. The 32 byte key which is diversified and derived using a ATSHA204 unique serial number and some addition data via the SHA256 algorithm.
The key is stored on an ATAES132A serial EEPROM and is locked from reading and is only accessible using AES in CCM mode (MAC authentication). In my design, the ATAES132a communicates with a MicroChip (Atmel) microcontroller. The Micro Controller has a security bit which is set to prevent reading the firmware.
The Window's application is designed to only encrypt and decrypt using the unique key stored on the USB HID device. The key is transferred over the USB bus unencrypted to the Windows application. Additionally, the key is held in the PCs memory unencrypted.
My question; Are these acceptable points of failure in a system design? Meaning if someone has access to the USB bus, they may have access to the computers memory and the key is no longer secret. In my opinion, if someone has access to the PC with the USB HID connected, it is no different than being knocked on the head and someone stealing your car keys. It is almost impossible to prevent (at least I think its impossible to prevent).
I also thought that I could use AES-CCM to transfer the encrypted key over the USB bus, but both the USB HID device and Application must share another Key and additional data to encrypt and generate a MAC for the transmission. Even if I would do that, the unencrypted key is still being held in memory.
Here is a general overview of the scenario: