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:
ReseedCnt
is set to zero during initializiation.- When reading the seed file,
ReseedCnt
is untouched. - When generating random data,
ReseedCnt
is incremented when enough entropy is available inPool[0]
and 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.'