Citat:
RDSEED returnerar ibland noll när den inte borde göra det.
Och det beror i sin tur på att programmeraren har troligen varit lat och inte kollat
CF, dvs Carry Flag. Den ska vara 1 när det finns ett nytt slumptal i registret.
Är CF noll så ska resten av siffrorna också vara noll.
Och den måste vänta tills att CF ställs på 1 igen.
Det är just denna flagga som inte har kollats när man upprepat anropet tillräckligt många gånger.
Här finns en beskrivning:
https://www.felixcloutier.com/x86/rdseed
RDSEED är en hårdvarubaserad slumptalsgenerator.
Här finns en annan artikel som påpekar det att många slumptalsgeneratorer hämtar
sin entropi från någon hårdvarukälla. Det kan vara tex musrörelser, mikrofonbruset etc.
Men i vissa fall så när man kör en VM så om allt är virtualiserat så körs instruktionerna
så snabbt att hårdvarudelarna inte hinner bygga upp någon entropi.
Därmed riskerar vissa slumptalsserier att bli upprepningsbara:
https://nanovms.com/dev/tutorials/virtio-rng-inside-nanos
Och det beror i sin tur på att programmeraren har troligen varit lat och inte kollat
CF, dvs Carry Flag. Den ska vara 1 när det finns ett nytt slumptal i registret.
Är CF noll så ska resten av siffrorna också vara noll.
Och den måste vänta tills att CF ställs på 1 igen.
Det är just denna flagga som inte har kollats när man upprepat anropet tillräckligt många gånger.
Här finns en beskrivning:
https://www.felixcloutier.com/x86/rdseed
Man ombeds att använda 64 bitars versionen av RDSEED istället.
Detta gäller dock inte AMD tillsvidare:
En av de nyare kretsarna fungerar genom en liten pärla av ett radioaktivt ämne Americium-241 som alstrar slumpmässiga pulser. Dessa blir till ett slumpmässigt bitmönster.
Ytterligare beskrivning här:
https://iopscience.iop.org/article/10.1088/1402-4896/ad0811
RDSEED är en hårdvarubaserad slumptalsgenerator.
Här finns en annan artikel som påpekar det att många slumptalsgeneratorer hämtar
sin entropi från någon hårdvarukälla. Det kan vara tex musrörelser, mikrofonbruset etc.
Men i vissa fall så när man kör en VM så om allt är virtualiserat så körs instruktionerna
så snabbt att hårdvarudelarna inte hinner bygga upp någon entropi.
Därmed riskerar vissa slumptalsserier att bli upprepningsbara:
https://nanovms.com/dev/tutorials/virtio-rng-inside-nanos
Det går ju alltid skylla på någon annan, när man inte har ett fungerande system, liksom varför designar man ens en instruktion som inte ger förväntat resultat? De hade lätt kunnat designa så instruktionen aldrig returnerade innan den var färdig, det här är bara en idiotursäkt.
