Kyle Hamilton wrote:
> ... Yes, the fipsld script proper is not required (for the Windows
> platform it isn't used at all).  However, the two step linking
> operation that fipsld performs is required.  In this sense the
> cryptographic module boundary at the point where fipscanister.o has
>  been created consists not only of that file but also the ancillary
>  files fipscanister.o.sha1, fips_premain.c, and fips_premain.c.sha1
>  files.

 Er... my biggest question actually wasn't answered here.  The
 two-step linking process involves the creation of the library memory
 image/memory segment (which is the entire reason for the
 fips_premain.c requirement, I think?), but is it required that the
 premain function actually be called before the entry point into the
 program itself?  If the answer to this is "yes", then it's not
 possible -- the kernel needs to initialize itself and its data
 structures before it can run any other code.  If it's simply a
 requirement that the premain code be executed before the library has
 any opportunity to run any other initialization code, then it might
 be possible.

There is no policy requirement to call FINGERPRINT_premain() at any
particular point prior to FIPS_mode_set().  There may be practical
problems, of course, if the integrity check is sabotaged.

> ...

 Legally speaking (and this is primarily coming from the Free Software
 Foundation's pages), the license of OpenSSL prevents the
 distribution of a GPL'd software that links directly to it (in a
 monolithic sense), unless the copyright owner of the GPL-licensed
 software adds an explicit exemption for OpenSSL's "obnoxious BSD
 advertising clause" requirement.  This legal issue essentially makes
 it a non-starter in the monolithic kernel concept currently
 discussed.

Good point about the licensing implications, I didn't address that topic at all.

> So, if the reason for adding the crypto to a kernel module was to
> support a userspace application one could speculate that the
> application could be FIPS validated independently of that kernel
> and hence that kernel module.  If the reason was to claim FIPS
> validation for the entire kernel then you have a much bigger
> problem because of the other existing crypto in the kernel.

 This would be a VERY interesting mechanism to bring into the mainline
 Linux kernel -- the ability to set a sysparm so that any call to any
 of the crypto implementations will be redirected to the FIPS module
 imported from OpenSSL.

I've had several discussions over the past few years with interested parties about FIPS validation for the kernel crypto (not using OpenSSL, but validating the current crypto). I do think it would be possible. So far the requisite interest level isn't there to make it happen.

 However, there's an additional quandary in this concept: the FIPS
 validation for OpenSSL is explicitly for a "single-user system". This
 specifically means that any system with multiple users is in
 violation of the security policy, and thus not running in a validated
 mode.

Eh, the "single user" business is an odd one. It doesn't (depending on who in the CMPV you ask, and when!) necessarily mean "user" in the sense us code hackers think. Note for instance the reference in section 6.1 of the IG (Implementation Guidance): "... When a crypto module is implemented in a server environment, the server application is the user of the cryptographic module. The server application makes the calls to the cryptographic module. Therefore, the server application is the single user of the cryptographic module, even when the server application is serving multiple clients."

A little reflection shows the absurdity of the notions that a) FIPS validated modules can only be run on "single user mode" systems (in the usual sense), b) the U.S. government mandates the use of only FIPS validated crypto on all government systems, and c) nowadays crypto is everywhere, in the most common of applications.

The fact is that the CMVP has never coherently reconciled the AS06.04 requirement with respect to modern general purpose multitasking, demand paged virtual memory computers as actually used in the real world. I'm working through that very issue on a pending validation right now, but I don't expect a resolution beyond that one module.

 ...

 The CMVP was never set up to handle people wanting to do weird stuff
 with cryptographic modules for which the source code is available.
 Then again, it was never set up to handle open source in any manner
 anyway.

Actually it's arguably not really set up to deal with software of *any* kind on general purpose computers, open or closed source. FIPS 140 originated at a time when cryptography was done in dedicated hardware devices. It's a pretty strained fit to today's computing environment. FIPS 140-3 is supposed to less of a mismatch.

-Steve M.

--
Steve Marquess
Open Source Software institute
[email protected]

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [email protected]
Automated List Manager                           [email protected]

Reply via email to