Skip to content

Commit 59c992d

Browse files
authored
Merge pull request #260 from kaleb-himes/KH-DRBG-and-v6v7updates
Add DRBG_CONT_FIPS_E to FAQ + v6,v7 delta start
2 parents fdcc540 + 431b5c3 commit 59c992d

2 files changed

Lines changed: 79 additions & 5 deletions

File tree

wolfSSL-FIPS-FAQ/src/section01.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
This page lists some of the most common issues and questions that are recieved by our wolfSSL security experts, along with their responses. This FAQ is useful for solving general questions that pertain to building/implementing wolfSSL FIPS. If this page does not provide an answer to your question, please feel free to check the wolfSSL Manual, or contact us at support@wolfssl.com.
44

5-
Last Updated: 8 Dec 2025
5+
Last Updated: 30 Mar 2026
66

77
## Questions
88

@@ -18,10 +18,12 @@ Last Updated: 8 Dec 2025
1818
1. [Will my applications that are linked agaist the 140-2 module still work with the 140-3 module?](./section02.md#will-my-app-for-1402-still-work-with-1403)
1919
2. [The wc_SetSeed_Cb() callback and the TLS Layer:](./section02.md#wc-setseed-and-tls)
2020
3. [The wc_SetSeed_Cb() callback and a custom seed generation function:](./section02.md#wc-setseed-and-custom-genseed)
21-
4. [Threading consideration for all CASTs():](./section02.md#threading-and-casts)
22-
5. [wc_SetSeedCb() a bit unique with relation to CAST's:](./section02.md#setseedcb-and-casts)
23-
6. [Key Access Management](./section02.md#key-access-management)
24-
7. [wc_SetSeedCb() a bit unique with relation to CAST's:](./section02.md#setseedcb-and-casts)
21+
4. [The POST](./section02.md#the-post)
22+
5. [Threading consideration for all CASTs():](./section02.md#threading-and-casts)
23+
6. [wc_SetSeedCb() a bit unique with relation to CAST's:](./section02.md#setseedcb-and-casts)
24+
7. [Key Access Management](./section02.md#key-access-management)
2525
1. [API's that require UNLOCK before first use (should also be re-LOCKED after use):](./section02.md#apis-to-unlock)
26+
6. [Moving from v5 to v6 or even v7, what's new?](./section02.md#moving-from-v5-to-v6-or-even-v7-whats-new)
27+
7. [Long-running application(s) & DRBG_CONT_FIPS_E or RNG_FAILURE_E errors](./section02.md#long-running-applications-drbg_cont_fips_e-or-rng_failure_e-errors)
2628

2729

wolfSSL-FIPS-FAQ/src/section02.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,3 +397,75 @@ v7.0.0 (upcoming)
397397
* Will have some additional services listed here for Post Quantum key material
398398
```
399399

400+
## Moving from v5 to v6 or even v7, what's new?
401+
402+
v6 offers new algorithms not available in v5:
403+
```
404+
* SRTP-KDF
405+
* AES-XTS (256, 512)
406+
* AES-GCM Streaming mode of operation!
407+
* AES-CFB (1, 8, 128)
408+
* AES-KW
409+
* PBKDF2
410+
* RSA, ECC, DH FIPS 186-5 upgrade from 186-4!
411+
* ED25519
412+
* ED448
413+
* SHAKE128
414+
* SHAKE256
415+
* Optional ESV SP800-90B certifiable entropy source w/ SHA3 conditioning function
416+
```
417+
418+
In addition to v5 and v6 algorithms, v7 offers new algorithms for PQ and NSA 2.0 suite considerations!
419+
```
420+
* ML-KEM
421+
* ML-DSA
422+
* SLH-DSA
423+
* LMS (verify only)
424+
* XMSS (verify only)
425+
* SHA512-DRBG (+ Option to run-time disable SHA256-DRBG for NSA 2.0 suite)
426+
* SHA512-based integrity check (no SHA256 use by default for NSA 2.0 suite)
427+
* SHA512/224 & SHA512/256 truncated variants
428+
* RSA, ECC, DH getting additional hash modes for SHAKE and SHA512 variants
429+
* Optional ESV SP800-90B certifiable entropy source w/ SHA3 conditioning function
430+
```
431+
432+
## Long-running application(s) & DRBG_CONT_FIPS_E or RNG_FAILURE_E errors...
433+
After millions of calls to wc_InitRng or wc_RNG_GenerateBlock I see these DRBG errors and then
434+
all subsequent wolfCrypt API calls just return FIPS_NOT_ALLOWED_E. What is happening and how do I resolve this?
435+
436+
A: This is expected behavior related to the DRBG continuous health test (CRNGT) used in the
437+
FIPS module. The legacy CRNGT has a false-positive rate of roughly 1 in every 134 million
438+
invocations. For long-running applications that never power cycle, a false positive will
439+
eventually occur. When it does the DRBG enters an error state and the module will not allow
440+
any further cryptographic operations that depend on a DRBG. This is required by SP 800-90A Rev. 1.
441+
442+
So the module is behaving correctly.
443+
444+
Best practices to mitigate this in long-running applications:
445+
446+
1. Initialize the WC_RNG instance once globally and protect it with a mutex rather than
447+
creating and destroying a new WC_RNG for each operation in every thread.
448+
Initializing and freeing the RNG on every call dramatically increases the
449+
rate at which you will encounter a false positive (the CRNGT runs during
450+
wc_InitRng, so fewer calls to wc_InitRng means fewer opportunities to hit
451+
a false positive).
452+
453+
2. If a DRBG continuous test failure does occur, the application can recover by restarting
454+
the executable (or the process using the wolfCrypt shared library). On a modern OS,
455+
unloading and reloading the shared object is equivalent to a power cycle of the module
456+
from the FIPS perspective. A full device power cycle is NOT required when using a shared object.
457+
458+
3. wolfSSL strongly recommends that persistent connections be shut down and a new
459+
handshake performed at least once every 24 to 48 hours. Re-negotiating ephemeral keys
460+
every 8 - 10 minutes (complete shutdown and fresh handshake) is ideal, do
461+
not leave a TLS/DTLS session active for 24, 48, 72... hours or more, this will
462+
increase your chances of hitting a false positive as well.
463+
464+
NOTE: The upcoming v7.0.0 FIPS module will replace the legacy CRNGT with the newer
465+
Repetition Count Test (RCT) and Adaptive Proportion Test (APT) as defined in SP800-90B.
466+
These tests are more mathematically robust and will significantly reduce the false-positive
467+
rate, alleviating this issue for long-lived applications. However, because any change inside
468+
the FIPS boundary requires re-validation, as such these newer tests cannot be back-ported to older validated
469+
modules (e.g. v5.x or v6.x). Customers running an older module version will need to use the
470+
mitigation strategies above until they migrate to the v7.0.0 module once it is validated.
471+

0 commit comments

Comments
 (0)