[openssl-users] FIPS Linux kernel documentation ?

Jakob Bohm jb-openssl at wisemo.com
Thu Mar 26 21:44:51 UTC 2015


On 26/03/2015 22:29, Steve Marquess wrote:
> On 03/26/2015 01:41 PM, Jakob Bohm wrote:
>> On 26/03/2015 16:56, Steve Marquess wrote:
>>> On 03/26/2015 11:30 AM, John Foley wrote:
>>>> We looked at this very briefly a couple of years ago.  In theory, there
>>>> may be a way to achieve the goal as a loadable kernel module (a.k.a.
>>>> device driver).  The idea would be to have a kernel module that provides
>>>> crypto support.  This kernel module would be the FIPS object module,
>>>> with the FIPS boundary drawn around the kernel module.  This would be
>>>> loaded at run time like any other device driver when FIPS mode needed to
>>>> be enabled.
>>>>
>>>> There is likely some kernel work required to allow the ciphers in the
>>>> kernel module to be injected into the crypto flow within the kernel.
>>>> The other issue is getting the kernel to automatically run the FIPS
>>>> integrity test on the module at load time.
>>> We looked at it in quite a bit of detail about two years ago also, to
>>> the point of developing a formal proposal for a prospective sponsor.
>>>
>>> Yes, a loadable module is the way to go. We had worked out how to do the
>>> POST at module load (including an actual implementation).
>>>
>>> But, as with any open source based FIPS validation it would have been
>>> expensive and risky, and the end result would still have been fossilized
>>> code that would always be a painfully awkward fit in the Linux
>>> ecosystem. We'd still consider tackling that, with financial
>>> sponsorship, but we have no prospects for such.
>>>
>>> -Steve M.
>>>
>> Hypothetically speaking, would it be possible to use the
>> OpenSSL FIPS module with an appropriate "outside the boundary"
>> kernel module wrapper around it to form "yet another platform"
>> for one of the validation numbers?
> Possibly. The approach we tentatively settled on was to keep and
> validate the existing kernel crypto code (non OpenSSL!) with the cruft
> to satisfy FIPS 140-2 (the POST, and also the test suite software for
> the algorithm testing). The hard part isn't the crypto code; it's
> everything else. By keeping the existing interoperable crypto API we'd
> get the most bank for the buck.
>
>> Technically, the kernel module wrapper would interact with the
>> same blob "API" that a FIPS-enabled OpenSSL uses, so there
>> would be little or no change to FIPS module build and "security
>> guide" for such additional kernel mode platforms.  "Inside the
>> boundary" changes would be needed only to the extent that the
>> FIPS blob makes direct system calls, since the kernel is not a
>> normal POSIX-like environment when seen from a kernel mode
>> module.
> This could work if you weren't worried about compatibility with existing
> kernel crypto usage. The current OpenSSL FIPS module code would still
> need non-trivial massaging though.
The point would be that the wrapper takes calls in the
existing Linux kernel form and then implement each such
call in terms of the functionality exposed by the
existing OpenSSL FIPS blob.  For instance if the Linux
kernel has an API that sets up and performs AES CBC
encryption, this would get mapped to OpenSSL FIPS blob
calls that do AES CBC encryption.  This is all
facilitated by the existing ability of the Linux kernel
to support multiple implementations of each needed
primitive.
>> If the CMVP bureaucracy insists on a specific kernel version
>> for the platform number, this should be one of the "Long Term
>> Support" kernel releases to maximize longevity (assuming that
>> regular OS patching within a version number is still accepted
>> as "same platform").
> Worse: it would need to be validated on every "Operational Environment"
> (OE): meaning every Linux distribution: Debian N.M for every N and M,
> Fedora N.M, Ubuntu N.M, CentOS N.M, ...
As the (unpatched upstream) kernel does not rely on the
distribution above it, the platform would not include the
user mode.  This is similar to how a validation for running
inside the core of a virtualization platform such as VMWare
ESXi 5.1 or RedHat N.M libvirt/kvm does not include the
guest OS in the platform for its validation.

Of cause using the validation on a Vendor patched kernel
such as "RedHat N.M patched Linux kernel 3.2" or "Debian 7.8
patched Linux kernel 3.2" would obviously be a different
platform than "kernel.org vanilla Linux kernel 3.2".


Enjoy

Jakob
-- 
Jakob Bohm, CIO, Partner, WiseMo A/S.  http://www.wisemo.com
Transformervej 29, 2860 Søborg, Denmark.  Direct +45 31 13 16 10
This public discussion message is non-binding and may contain errors.
WiseMo - Remote Service Management for PCs, Phones and Embedded

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mta.openssl.org/pipermail/openssl-users/attachments/20150326/b0412769/attachment.html>


More information about the openssl-users mailing list