Jeff,

The fipscanister's integrity test must be called before main(), and that's why 
fipsld does what it does.  The process to load it and verify it is given (in 
source form) in the fips-1.2.0 package, and those bits can be located as well 
as the compiled bits of the canister itself.

I think that this discussion is good, because it will (hopefully) lead to a 
tool -- perhaps a script -- that can perform all of the tests that we can 
identify on an executable to determine if it's been statically linked with a 
correct fipscanister.

(additional comments inline)

-Kyle H

On Thu, Dec 23, 2010 at 3:48 PM, Jeffrey Walton <noloa...@gmail.com> wrote:
On Thu, Dec 23, 2010 at 5:56 PM,  <aerow...@gmail.com> wrote:
OPENSSL_FIPS=1 causes openssl to invoke FIPS_mode_set(1).  Once that occurs,
MD5 is a prohibited algorithm unless it's explicitly limited to the TLSv1
PRF (and that only because SHA is also used).  If an MD5 operation completes
successfully, it's not a FIPS canister that's running the cryptography.

In other words: If it's FIPS, it will refuse to do it.  If it doesn't refuse
to do it, it's not FIPS.
Ok. Suppose you download or purchase a component from a company that
claims to offer FIPS validated implementation using OpenSSL sources.
I'm not clear how "OPENSSL_FIPS=1" verifies the claim of FIPS
validation on the binaries.

It doesn't do it if you can't use bin/openssl itself.  That makes my suggestion 
a bit less than useful in your scenario.

Looking at it pragmatically: as a client, one can either
base the decision on declaration or on demonstrable, observable, and
well-defined behavior.
A better perspective might be to look at it from a practical
standpoint in the context of acceptance testing and quality assurance
Perhaps the process should require presenting fipscanister.o and
compiler/version statement in addition to the resulting binary.

as well as the signature of the person who performed the build, certifying that 
it was done in accordance with the security policy.  Government is very big on 
personal responsibility.

If a company claims a FIPS validated module, I can always compile the
canister using GCC X.Y.Z (or whatever compiler) and reproduce the
object file, and then search for the bits in the resulting binary. The
final test would simply be a breakpoint on FIPS_mode_set under GDB to
ensure the function was called.

Or, you can accept the documentation provided (including said signature and 
certification), and use that as a legal defense if it ever comes up?  (Yes, I 
agree that this option sucks -- but it's a paper trail and a valid CYA, if you 
don't have the time or the tools to run any verification of acceptability.)

Jeff

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to