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