This is from the FIPS 140-2 standard:

Cryptographic keys stored within a cryptographic module shall be stored either in plaintext form or encrypted form. Plaintext secret and private keys shall not be accessible from outside the cryptographic module to unauthorized operators A cryptographic module shall associate a cryptographic key (secret, private, or public) stored within the module with the correct entity (e.g., person, group, or process) to which the key is assigned. Documentation shall specify the key storage methods employed by a cryptographic module.

I am not sure I can interpret it correctly.
If the keys can be stored in plaintext form does it mean that there is no security expectations for key-storage (as a structure) from FIPS?
Or to reverse the question:if the keys are stored in encrypted form, does the algorithm used to encrypt the keys need to be FIPS certified?If yes why, since they could be stored in plaintext and still be acceptable by the standard.
My interpretation of this is that you can store the keys how you want, just make sure that no unauthorized users can access them.E.g. store them in plain text and "shield" the PC that has the plaintext. So no kind of e.g. FIPS encryption algorithms are needed.
Any input on this is highly appreciated.
Thank you!

1 Answer 1


I think it means that if you store the key in plaintext form inside the cryptographic module, then you have to make sure that no one else can access the place where the key is stored in the cryptographic module. For instance, it needs to be stored in private memory that only the cryptographic module can access, and that others are prevented from accessing. This means that there are security expectations for key storage.

I think the part that has confused you is the difference between storing a key in internal memory of the cryptographic module (which others can't access) vs exporting the key to the outside world. There is supposed to be a security perimeter around the cryptographic module that prevents others from tampering with or examining its internal memory. If the key is stored unencrypted in internal memory, then the internal memory has to be designed so that it cannot be accessed by anyone/anything else than the code of the crypto module.

I don't think it's exactly right say that keys can be stored in plaintext and still be acceptable by the standard. In particular, I don't think it's accurate to say that you can store the keys however you want. As I understand it, FIPS doesn't let you store a key in plaintext anywhere you want; it would be a security risk to have an unencrypted key laying around in unprotected storage.

  • I think that what you say, is the same as what I note in the post.That there are supposed to be security expectations, BUT the security barrier(filtering access) could be the whole computing machine and not necessarily the crypto module itself.(E.g a PC locked with windows credentials or even locked with a smart card).Same logic applies to the encryption algorithm of keystorage if applicable i.e. does NOT need to be FIPS.Additionally to give more details, my question is targetting towards the PKCS12 key storage, and its usage in programs running in FIPS compliant mode.What do you think?
    – Jim
    Commented Jun 3, 2011 at 5:00

You must log in to answer this question.

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