xref: /openssl/doc/man7/OSSL_PROVIDER-FIPS.pod (revision 39dc3c0f)
1=pod
2
3=head1 NAME
4
5OSSL_PROVIDER-FIPS - OpenSSL FIPS provider
6
7=head1 DESCRIPTION
8
9The OpenSSL FIPS provider is a special provider that conforms to the Federal
10Information Processing Standards (FIPS) specified in FIPS 140-3. This 'module'
11contains an approved set of cryptographic algorithms that is validated by an
12accredited testing laboratory.
13
14=head2 Properties
15
16The implementations in this provider specifically have these properties
17defined:
18
19=over 4
20
21=item "provider=fips"
22
23=item "fips=yes"
24
25=back
26
27It may be used in a property query string with fetching functions such as
28L<EVP_MD_fetch(3)> or L<EVP_CIPHER_fetch(3)>, as well as with other
29functions that take a property query string, such as
30L<EVP_PKEY_CTX_new_from_name(3)>.
31
32To be FIPS compliant, it is mandatory to include C<fips=yes> as
33part of all property queries.  This ensures that only FIPS approved
34implementations are used for cryptographic operations.  The C<fips=yes>
35query may also include other non-crypto support operations that
36are not in the FIPS provider, such as asymmetric key encoders, see
37L<OSSL_PROVIDER-default(7)/Asymmetric Key Management>.
38
39It is not mandatory to include C<provider=fips> as part of your property
40query.  Including C<provider=fips> in your property query guarantees
41that the OpenSSL FIPS provider is used for cryptographic operations
42rather than other FIPS capable providers.
43
44=head2 Provider parameters
45
46See L<provider-base(7)/Provider parameters> for a list of base parameters.
47Additionally the OpenSSL FIPS provider also supports the following gettable
48parameters:
49
50=over 4
51
52=item "security-checks" (B<OSSL_OSSL_PROV_PARAM_SECURITY_CHECKS>) <unsigned integer>
53
54For further information refer to the L<openssl-fipsinstall(1)> option
55B<-no_security_checks>.
56
57=back
58
59=head1 OPERATIONS AND ALGORITHMS
60
61The OpenSSL FIPS provider supports these operations and algorithms:
62
63=head2 Hashing Algorithms / Message Digests
64
65=over 4
66
67=item SHA1, see L<EVP_MD-SHA1(7)>
68
69=item SHA2, see L<EVP_MD-SHA2(7)>
70
71=item SHA3, see L<EVP_MD-SHA3(7)>
72
73=item KECCAK-KMAC, see L<EVP_MD-KECCAK-KMAC(7)>
74
75=item SHAKE, see L<EVP_MD-SHAKE(7)>
76
77=back
78
79=head2 Symmetric Ciphers
80
81=over 4
82
83=item AES, see L<EVP_CIPHER-AES(7)>
84
85=item 3DES, see L<EVP_CIPHER-DES(7)>
86
87This is an unapproved algorithm.
88
89=back
90
91=head2 Message Authentication Code (MAC)
92
93=over 4
94
95=item CMAC, see L<EVP_MAC-CMAC(7)>
96
97=item GMAC, see L<EVP_MAC-GMAC(7)>
98
99=item HMAC, see L<EVP_MAC-HMAC(7)>
100
101=item KMAC, see L<EVP_MAC-KMAC(7)>
102
103=back
104
105=head2 Key Derivation Function (KDF)
106
107=over 4
108
109=item HKDF, see L<EVP_KDF-HKDF(7)>
110
111=item TLS13-KDF, see L<EVP_KDF-TLS13_KDF(7)>
112
113=item SSKDF, see L<EVP_KDF-SS(7)>
114
115=item PBKDF2, see L<EVP_KDF-PBKDF2(7)>
116
117=item SSHKDF, see L<EVP_KDF-SSHKDF(7)>
118
119=item TLS1-PRF, see L<EVP_KDF-TLS1_PRF(7)>
120
121=item KBKDF, see L<EVP_KDF-KB(7)>
122
123=item X942KDF-ASN1, see L<EVP_KDF-X942-ASN1(7)>
124
125=item X942KDF-CONCAT, see L<EVP_KDF-X942-CONCAT(7)>
126
127=item X963KDF, see L<EVP_KDF-X963(7)>
128
129=back
130
131=head2 Key Exchange
132
133=over 4
134
135=item DH, see L<EVP_KEYEXCH-DH(7)>
136
137=item ECDH, see L<EVP_KEYEXCH-ECDH(7)>
138
139=item X25519, see L<EVP_KEYEXCH-X25519(7)>
140
141=item X448, see L<EVP_KEYEXCH-X448(7)>
142
143=item TLS1-PRF
144
145=item HKDF
146
147=back
148
149=head2 Asymmetric Signature
150
151=over 4
152
153=item RSA, see L<EVP_SIGNATURE-RSA(7)>
154
155The B<X931> padding mode "OSSL_PKEY_RSA_PAD_MODE_X931" is no longer supported
156for signature generation, but may be used for verification for legacy use cases.
157(This is a FIPS 140-3 requirement)
158
159=item DSA, see L<EVP_SIGNATURE-DSA(7)>
160
161=item ED25519, see L<EVP_SIGNATURE-ED25519(7)>
162
163=item ED448, see L<EVP_SIGNATURE-ED448(7)>
164
165=item ECDSA, see L<EVP_SIGNATURE-ECDSA(7)>
166
167=item HMAC, see L<EVP_SIGNATURE-HMAC(7)>
168
169=item CMAC, see L<EVP_SIGNATURE-CMAC(7)>
170
171=back
172
173=head2 Asymmetric Cipher
174
175=over 4
176
177=item RSA, see L<EVP_ASYM_CIPHER-RSA(7)>
178
179=back
180
181=head2 Asymmetric Key Encapsulation
182
183=over 4
184
185=item RSA, see L<EVP_KEM-RSA(7)>
186
187=back
188
189=head2 Asymmetric Key Management
190
191=over 4
192
193=item DH, see L<EVP_KEYMGMT-DH(7)>
194
195=item DHX, see L<EVP_KEYMGMT-DHX(7)>
196
197=item DSA, see L<EVP_KEYMGMT-DSA(7)>
198
199=item RSA, see L<EVP_KEYMGMT-RSA(7)>
200
201=item RSA-PSS
202
203=item EC, see L<EVP_KEYMGMT-EC(7)>
204
205=item X25519, see L<EVP_KEYMGMT-X25519(7)>
206
207This is an unapproved algorithm.
208
209=item X448, see L<EVP_KEYMGMT-X448(7)>
210
211This is an unapproved algorithm.
212
213=item ED25519, see L<EVP_KEYMGMT-ED25519(7)>
214
215This is an unapproved algorithm.
216
217=item ED448, see L<EVP_KEYMGMT-ED448(7)>
218
219This is an unapproved algorithm.
220
221=item TLS1-PRF
222
223=item HKDF
224
225=item HMAC, see L<EVP_KEYMGMT-HMAC(7)>
226
227=item CMAC, see L<EVP_KEYMGMT-CMAC(7)>
228
229=back
230
231=head2 Random Number Generation
232
233=over 4
234
235=item CRNG-TEST, see L<EVP_RAND-CRNG-TEST(7)>
236
237=item CTR-DRBG, see L<EVP_RAND-CTR-DRBG(7)>
238
239=item HASH-DRBG, see L<EVP_RAND-HASH-DRBG(7)>
240
241=item HMAC-DRBG, see L<EVP_RAND-HMAC-DRBG(7)>
242
243=item TEST-RAND, see L<EVP_RAND-TEST-RAND(7)>
244
245TEST-RAND is an unapproved algorithm.
246
247=back
248
249=head1 SELF TESTING
250
251One of the requirements for the FIPS module is self testing. An optional callback
252mechanism is available to return information to the user using
253L<OSSL_SELF_TEST_set_callback(3)>.
254
255The parameters passed to the callback are described in L<OSSL_SELF_TEST_new(3)>
256
257The OpenSSL FIPS module uses the following mechanism to provide information
258about the self tests as they run.
259This is useful for debugging if a self test is failing.
260The callback also allows forcing any self test to fail, in order to check that
261it operates correctly on failure.
262Note that all self tests run even if a self test failure occurs.
263
264The FIPS module passes the following type(s) to OSSL_SELF_TEST_onbegin().
265
266=over 4
267
268=item "Module_Integrity" (B<OSSL_SELF_TEST_TYPE_MODULE_INTEGRITY>)
269
270Uses HMAC SHA256 on the module file to validate that the module has not been
271modified. The integrity value is compared to a value written to a configuration
272file during installation.
273
274=item "Install_Integrity" (B<OSSL_SELF_TEST_TYPE_INSTALL_INTEGRITY>)
275
276Uses HMAC SHA256 on a fixed string to validate that the installation process
277has already been performed and the self test KATS have already been tested,
278The integrity value is compared to a value written to a configuration
279file after successfully running the self tests during installation.
280
281=item "KAT_Cipher" (B<OSSL_SELF_TEST_TYPE_KAT_CIPHER>)
282
283Known answer test for a symmetric cipher.
284
285=item "KAT_AsymmetricCipher" (B<OSSL_SELF_TEST_TYPE_KAT_ASYM_CIPHER>)
286
287Known answer test for a asymmetric cipher.
288
289=item "KAT_Digest" (B<OSSL_SELF_TEST_TYPE_KAT_DIGEST>)
290
291Known answer test for a digest.
292
293=item "KAT_Signature" (B<OSSL_SELF_TEST_TYPE_KAT_SIGNATURE>)
294
295Known answer test for a signature.
296
297=item "PCT_Signature" (B<OSSL_SELF_TEST_TYPE_PCT_SIGNATURE>)
298
299Pairwise Consistency check for a signature.
300
301=item "KAT_KDF" (B<OSSL_SELF_TEST_TYPE_KAT_KDF>)
302
303Known answer test for a key derivation function.
304
305=item "KAT_KA" (B<OSSL_SELF_TEST_TYPE_KAT_KA>)
306
307Known answer test for key agreement.
308
309=item "DRBG" (B<OSSL_SELF_TEST_TYPE_DRBG>)
310
311Known answer test for a Deterministic Random Bit Generator.
312
313=item "Conditional_PCT" (B<OSSL_SELF_TEST_TYPE_PCT>)
314
315Conditional test that is run during the generation of key pairs.
316
317=item "Continuous_RNG_Test" (B<OSSL_SELF_TEST_TYPE_CRNG>)
318
319Continuous random number generator test.
320
321=back
322
323The "Module_Integrity" self test is always run at startup.
324The "Install_Integrity" self test is used to check if the self tests have
325already been run at installation time. If they have already run then the
326self tests are not run on subsequent startups.
327All other self test categories are run once at installation time, except for the
328"Pairwise_Consistency_Test".
329
330There is only one instance of the "Module_Integrity" and "Install_Integrity"
331self tests. All other self tests may have multiple instances.
332
333
334The FIPS module passes the following descriptions(s) to OSSL_SELF_TEST_onbegin().
335
336=over 4
337
338=item "HMAC" (B<OSSL_SELF_TEST_DESC_INTEGRITY_HMAC>)
339
340"Module_Integrity" and "Install_Integrity" use this.
341
342=item "RSA" (B<OSSL_SELF_TEST_DESC_PCT_RSA_PKCS1>)
343
344=item "RSA" (B<OSSL_SELF_TEST_DESC_PCT_RSA>)
345
346=item "ECDSA" (B<OSSL_SELF_TEST_DESC_PCT_ECDSA>)
347
348=item "EDDSA" (B<OSSL_SELF_TEST_DESC_PCT_EDDSA>)
349
350=item "DSA" (B<OSSL_SELF_TEST_DESC_PCT_DSA>)
351
352Key generation tests used with the "Pairwise_Consistency_Test" type.
353
354=item "RSA_Encrypt" (B<OSSL_SELF_TEST_DESC_ASYM_RSA_ENC>)
355
356=item "RSA_Decrypt" (B<OSSL_SELF_TEST_DESC_ASYM_RSA_DEC>)
357
358"KAT_AsymmetricCipher" uses this to indicate an encrypt or decrypt KAT.
359
360=item "AES_GCM" (B<OSSL_SELF_TEST_DESC_CIPHER_AES_GCM>)
361
362=item "AES_ECB_Decrypt" (B<OSSL_SELF_TEST_DESC_CIPHER_AES_ECB>)
363
364=item "TDES" (B<OSSL_SELF_TEST_DESC_CIPHER_TDES>)
365
366Symmetric cipher tests used with the "KAT_Cipher" type.
367
368=item "SHA1" (B<OSSL_SELF_TEST_DESC_MD_SHA1>)
369
370=item "SHA2" (B<OSSL_SELF_TEST_DESC_MD_SHA2>)
371
372=item "SHA3" (B<OSSL_SELF_TEST_DESC_MD_SHA3>)
373
374Digest tests used with the "KAT_Digest" type.
375
376=item "DSA" (B<OSSL_SELF_TEST_DESC_SIGN_DSA>)
377
378=item "RSA" (B<OSSL_SELF_TEST_DESC_SIGN_RSA>)
379
380=item "ECDSA" (B<OSSL_SELF_TEST_DESC_SIGN_ECDSA>)
381
382=item "EDDSA" (B<OSSL_SELF_TEST_DESC_SIGN_EDDSA>)
383
384Signature tests used with the "KAT_Signature" type.
385
386=item "ECDH" (B<OSSL_SELF_TEST_DESC_KA_ECDH>)
387
388=item "DH" (B<OSSL_SELF_TEST_DESC_KA_DH>)
389
390Key agreement tests used with the "KAT_KA" type.
391
392=item "HKDF" (B<OSSL_SELF_TEST_DESC_KDF_HKDF>)
393
394=item "TLS13_KDF_EXTRACT" (B<OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT>)
395
396=item "TLS13_KDF_EXPAND" (B<OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND>)
397
398=item "SSKDF" (B<OSSL_SELF_TEST_DESC_KDF_SSKDF>)
399
400=item "X963KDF" (B<OSSL_SELF_TEST_DESC_KDF_X963KDF>)
401
402=item "X942KDF" (B<OSSL_SELF_TEST_DESC_KDF_X942KDF>)
403
404=item "PBKDF2" (B<OSSL_SELF_TEST_DESC_KDF_PBKDF2>)
405
406=item "SSHKDF" (B<OSSL_SELF_TEST_DESC_KDF_SSHKDF>)
407
408=item "TLS12_PRF" (B<OSSL_SELF_TEST_DESC_KDF_TLS12_PRF>)
409
410=item "KBKDF" (B<OSSL_SELF_TEST_DESC_KDF_KBKDF>)
411
412Key Derivation Function tests used with the "KAT_KDF" type.
413
414=item "CTR" (B<OSSL_SELF_TEST_DESC_DRBG_CTR>)
415
416=item "HASH" (B<OSSL_SELF_TEST_DESC_DRBG_HASH>)
417
418=item "HMAC" (B<OSSL_SELF_TEST_DESC_DRBG_HMAC>)
419
420DRBG tests used with the "DRBG" type.
421
422=item "RNG" (B<OSSL_SELF_TEST_DESC_RNG>)
423
424"Continuous_RNG_Test" uses this.
425
426=back
427
428=head1 EXAMPLES
429
430A simple self test callback is shown below for illustrative purposes.
431
432  #include <openssl/self_test.h>
433
434  static OSSL_CALLBACK self_test_cb;
435
436  static int self_test_cb(const OSSL_PARAM params[], void *arg)
437  {
438    int ret = 0;
439    const OSSL_PARAM *p = NULL;
440    const char *phase = NULL, *type = NULL, *desc = NULL;
441
442    p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_PHASE);
443    if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
444        goto err;
445    phase = (const char *)p->data;
446
447    p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_DESC);
448    if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
449        goto err;
450    desc = (const char *)p->data;
451
452    p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_TYPE);
453    if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
454        goto err;
455    type = (const char *)p->data;
456
457    /* Do some logging */
458    if (strcmp(phase, OSSL_SELF_TEST_PHASE_START) == 0)
459        BIO_printf(bio_out, "%s : (%s) : ", desc, type);
460    if (strcmp(phase, OSSL_SELF_TEST_PHASE_PASS) == 0
461            || strcmp(phase, OSSL_SELF_TEST_PHASE_FAIL) == 0)
462        BIO_printf(bio_out, "%s\n", phase);
463
464    /* Corrupt the SHA1 self test during the 'corrupt' phase by returning 0 */
465    if (strcmp(phase, OSSL_SELF_TEST_PHASE_CORRUPT) == 0
466            && strcmp(desc, OSSL_SELF_TEST_DESC_MD_SHA1) == 0) {
467        BIO_printf(bio_out, "%s %s", phase, desc);
468        return 0;
469    }
470    ret = 1;
471  err:
472    return ret;
473  }
474
475=head1 NOTES
476
477Some released versions of OpenSSL do not include a validated
478FIPS provider.  To determine which versions have undergone
479the validation process, please refer to the
480L<OpenSSL Downloads page|https://www.openssl.org/source/>.  If you
481require FIPS-approved functionality, it is essential to build your FIPS
482provider using one of the validated versions listed there.  Normally,
483it is possible to utilize a FIPS provider constructed from one of the
484validated versions alongside F<libcrypto> and F<libssl> compiled from any
485release within the same major release series.  This flexibility enables
486you to address bug fixes and CVEs that fall outside the FIPS boundary.
487
488The FIPS provider in OpenSSL 3.1 includes some non-FIPS validated algorithms,
489consequently the property query C<fips=yes> is mandatory for applications that
490want to operate in a FIPS approved manner.  The algorithms are:
491
492=over 4
493
494=item Triple DES ECB
495
496=item Triple DES CBC
497
498=item EdDSA
499
500=back
501
502=head1 SEE ALSO
503
504L<openssl-fipsinstall(1)>,
505L<fips_config(5)>,
506L<OSSL_SELF_TEST_set_callback(3)>,
507L<OSSL_SELF_TEST_new(3)>,
508L<OSSL_PARAM(3)>,
509L<openssl-core.h(7)>,
510L<openssl-core_dispatch.h(7)>,
511L<provider(7)>,
512L<https://www.openssl.org/source/>
513
514=head1 HISTORY
515
516This functionality was added in OpenSSL 3.0.
517
518=head1 COPYRIGHT
519
520Copyright 2019-2024 The OpenSSL Project Authors. All Rights Reserved.
521
522Licensed under the Apache License 2.0 (the "License").  You may not use
523this file except in compliance with the License.  You can obtain a copy
524in the file LICENSE in the source distribution or at
525L<https://www.openssl.org/source/license.html>.
526
527=cut
528