A method of operating a mass storage device, comprising: providing a non-secure flash memory for the mass storage of content and software; providing a secure controller that manages operations of the device and comprises a hardware based cryptographic engine for encrypting and/or decrypting data as it passes through the secure controller; wherein firmware (200, 200a, 200b, 202A-202X) signed with a secret key stored in the secure controller or one or more keys derived from a secret key stored in the secure controller is stored within the flash memory; wherein the firmware (200, 200a, 200b, 202A-202X) comprises a first level (200, 200a, 200b) stored in a physical access partition of the flash memory and a second level (202A, 202B) stored in a logical access partition of the flash memory; wherein the first level of firmware (200, 200a, 200b) comprises boot loader firmware; the firmware is executed from RAM, wherein the size of the firmware (200, 200a, 200b, 202A-202X) is larger than the size of the RAM; wherein the second level of firmware (202A-202X) is divided into a plurality of overlays, each overlay comprising a different portion of the second level of firmware (202A-202X); wherein each of the plurality of overlays of the second level of firmware is signed with a different key; reading the firmware (200, 200a, 200b, 202A-202X) stored in the flash memory; prior to execution of the first and second levels of the firmware (200, 200a, 200b, 202A-202X), verifying the signatures of the respective first and second levels of the firmware (200, 200a, 200b, 202A-202X) using the cryptographic engine as the firmware is read from the flash memory and passes through the encryption engine; wherein verifying the one or more signatures comprises the secure controller generating a signature for the firmware (200, 200a, 200b, 202A-202X) read from the flash memory and comparing the generated signature with the signature stored in the flash memory. providing a non-secure flash memory for the mass storage of content and software; providing a secure controller that manages operations of the device and comprises a hardware based cryptographic engine for encrypting and/or decrypting data as it passes through the secure controller; wherein firmware (200, 200a, 200b, 202A-202X) signed with a secret key stored in the secure controller or one or more keys derived from a secret key stored in the secure controller is stored within the flash memory; wherein the firmware (200, 200a, 200b, 202A-202X) comprises a first level (200, 200a, 200b) stored in a physical access partition of the flash memory and a second level (202A, 202B) stored in a logical access partition of the flash memory; wherein the first level of firmware (200, 200a, 200b) comprises boot loader firmware; the firmware is executed from RAM, wherein the size of the firmware (200, 200a, 200b, 202A-202X) is larger than the size of the RAM; wherein the second level of firmware (202A-202X) is divided into a plurality of overlays, each overlay comprising a different portion of the second level of firmware (202A-202X); wherein each of the plurality of overlays of the second level of firmware is signed with a different key; reading the firmware (200, 200a, 200b, 202A-202X) stored in the flash memory; prior to execution of the first and second levels of the firmware (200, 200a, 200b, 202A-202X), verifying the signatures of the respective first and second levels of the firmware (200, 200a, 200b, 202A-202X) using the cryptographic engine as the firmware is read from the flash memory and passes through the encryption engine; wherein verifying the one or more signatures comprises the secure controller generating a signature for the firmware (200, 200a, 200b, 202A-202X) read from the flash memory and comparing the generated signature with the signature stored in the flash memory.