1. A computer readable medium containing executable instructions for protecting the secrecy and integrity of data stored on a non-volatile storage medium, the executable instructions including instructions for: receiving a block of data for storage on the non-volatile storage medium; generating at least one piece of meta-data relating to the block of data; calculating a first cryptographic hash of at least a portion of the block of data; calculating a second cryptographic hash of the meta-data; encrypting the block of data and encrypting the meta-data to form one or more uniform blocks of encrypted data; storing a cryptographic key in a substantially secret storage medium, the key being operable to decrypt the one or more uniform blocks of encrypted data; and storing the one or more uniform blocks of encrypted data on the non-volatile storage medium.