Some newer hard drives and solid state drives are SED (Self-Encrypting Drives), which create a DEK (Data Encryption Key) and store it either unencrypted, or encrypted with a user-supplied AK (Authentication Key) if FDE is wanted. The DEK is used to encrypt all content on the drive. In the case the drive needs to be securely wiped, the DEK can simply be erased, regardless of whether or not the AK is set.

According to the TCG, the DEK is generated on the drive itself, rather than being generated on the computer and transferred over through some vendor-specific ATA command:

A: The encryption key is generated on board the drive and NEVER LEAVES THE DRIVE. The manufacturer does NOT retain or even have access to the key.

My question is how the DEK is generated. Obviously, the AK, if used, is transferred from the computer, but the DEK is apparently generated on the drive. If each drive's own firmware generates the DEK in its own way, with the firmware developers trying to reinvent the wheel and think up their own way to generate randomness, it would in all likelihood result in a predictable DEK.

For at least one model of the HGST Ultrastar, it uses what it calls the NDRNG, the "Non-deterministic Random Number Generator that is the source of entropy for the DRBG". Is this a requirement in for all SED drives, or might some of them try to generate entropy from more deterministic sources like timing drive head movement?


1 Answer 1


Newer Self Encrypting Drives (SEDs) generally follow either the TCG OPAL or TCG Enterprise standards. I've done a lot of digging on this issue and as best I can tell there is no specific method specified in the TCG standards for generating the DEK.

If you review the security policy documents that each manufacture submits to NIST to obtain FIPS 140-2 approval for their product it seems like they all use a DRBG that follows the SP 800-90A standard. How they seed that DRBG though varies between manufactures. Some use a NDRNG as you noted with the HGST. Others like Seagate seem to have a seed that is set at the time of manufacture. I've also seen some older Seagates that seem to indicate the user can set the DRBG seed with vendor proprietary commands. The bottom line seems to be that the mechanism used for seeding the DRBG is vendor specific.

  • Using a hardcoded seed seems to completely and utterly defeat the point of SED...
    – forest
    Jun 30, 2018 at 11:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .