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