I am trying to understand how the Fortuna PRNG should be seeded correctly for the first time.
Let's assume that we do have a large-enough seed file available, but not any entropy sources during first boot. To my understanding, I would:
- initialize the PRNG (section 9.5.4)
- load the seed file (section 9.6.2)
- produce random numbers (section 9.5.5)
The last step would produce an error: the check on the end of the pseudo-code in section 9.5.5 would assert that
ReseedCnt is zero: PRNG not seeded yet.
When I track the usage of
ReseedCnt, I observe the following:
ReseedCntis set to zero during initializiation.
- When reading the seed file,
- When generating random data,
ReseedCntis incremented when enough entropy is available in
Pooland enough time has passed (not the case during first boot).
So, is the paper missing some steps on what to do in this situation? Section 9.6.6 about first boot explicitly states: 'Having an outside source of randomness to create the first seed file is probably the best solution.'