После просмотра Руководство по внедрению программного обеспечения для цифровых генераторов цифровых данных (DRNG), у меня есть несколько вопросов о том, что происходит с внутренним состоянием генератора при вызове RDRAND
. К сожалению, ответы, похоже, не содержатся в руководстве.
-
В соответствии с руководством внутри DRNG есть четыре 128-битных буфера, которые служат для случайных бит для
RDRAND
для слива.RDRAND
сам будет предоставлять 16, 32 или 64 бит случайных данных в зависимости от ширины регистра назначения:rdrand ax ; put 16 random bits in ax rdrand eax ; put 32 random bits in eax rdrand rax ; put 64 random bits in rax
Будет ли использование более крупных регистров назначения сбросить эти 128-битные буферы быстрее? Например, если мне нужно всего 2 бита случайности, я должен решить проблему использования 16-битного регистра в 64-битном регистре? Разве это повлияет на пропускную способность DRNG? Я хотел бы избежать потребления большего количества случайности, чем это необходимо.
-
В руководстве говорится, что флаг переноса будет установлен после выполнения
RDRAND
:CF = 1 Destination register valid. Non-zero random value available at time of execution. Result placed in register. CF = 0 Destination register all zeros. Random value not available at time of execution. May be retried.
Что означает "недоступно"? Могут ли случайные данные быть недоступными, потому что
RDRAND
invocations слишком быстро исчерпали эти 128-битные буферы? Или недоступно означает, что DRNG не выполняет свои проверки работоспособности и не может генерировать новые данные? В принципе, я пытаюсь понять, может ли CF = 0 произойти только потому, что буферы случаются (временно) пустые, когда вызываетсяRDRAND
.
Примечание. Я рассмотрел ответы на этот вопрос о пропускной способности и задержке RDRAND, но я искать другую информацию.
Спасибо!