Echter Zufall mit iTSC-counter

Sep 18, 2026 Last reply: 1 week ago 93 Replies
Jump to replies (93)

Mittels einer Assembler-Funktion rdtsc(), die ich schon lange besitze, habe ich nun einen Generator für echte Zufallszahlen entwickelt.



formatting link
Ausgabe: =========================================================================== 00000276457408345376 00000276457428358754 00000276457431266902 00000276457435366459 00000276457448473547 00000276457451206089 00000276457454226781 00000276457457223742 00000276457460060553 00000276457474314196 00000276457477764702 00000276457485946076 00000276457489986581 00000276457500216563 00000276457560363833 00000276457566068760 00000276457571709045 00000276457594841516 00000276457618375542 00000276457628372033 00000276457634496509 00000276457641473652 00000276457662760413 00000276457667772505 ===========================================================================



In Prozessoren amd64 befindet sich ein 64-bit-Counter, der von einer Taktfrequenz im Giga-Hertz-Bereich angetrieben wird. Der verändert sich durch die Zeitdauer von nur einem Funktionsaufruf bereits um Millionen in seinem Zählerstand.



Mindestens die 4/5 Ziffern von rechts können als random verwendet werden. Oft sind bereits 1- bis 2-stellige Zahlen in geringerer Anzahl nützlich.



Das Kommando nimmt ein Argument entgegen: Die Anzahl von ausgegebenen Zahlen. Voreingestellt ist die Anzahl 8.



Am 19.09.2026 um 01:59 schrieb Helmut Schellong:

Kompliziert! Warum benutzt Du keinen Maschinenbefehl?

retry_loop: RDRAND rax JNC retry_loop

RDRAND grift auf den internen, hardwarebasierten Zufallszahlengenerator zurück, der echtes thermisches Rauschen als Quelle benutzt.

:)

Etwas mehr Mühe sollte man sich schon machen:

formatting link

Was Du für einen diebischen Spaß daran hast, Probleme zu lösen die vor Dir schon zehntausendmal gelöst wurden und auf denen ganze akademische Karrieren fußen. Was musst Du von Dir überzeugt sein, dass Du Dir einbildest, sowas besser zu machen als jemand der sich schon sein ganzes fachliches Leben mit dem Thema beschäftigt, auf Konferenzen fährt und dort mit anderen Experten in dem Thema spricht etc bla.

Hast Du nichts zu tun an dem Du mehr Freude hättest als nochmal ein Rad zu erfinden?

Wie kann man eine Assembler-Funktion "besitzen"?

/ralph

Am 19.09.2026 um 10:26 schrieb Ralph Aichinger:

Man hat eine .a-Datei mit der Implementierung der genannten Funktion auf Platte?

Ber "Ich besitze schon lange memcpy()" nd

Leo Baumann wrote on 19.09.2026 04:32:

Neuere Prozessoren haben diese Instruktion, und auch eine für AES. Das kenne ich seit langer Zeit. Ich habe aber erst seit 2023 einen geeigneten Prozessor.

Und ich werde mein Kommando randtsc noch erweitern, zu einem Test- und Experimentier-Tool. Ich bin gerade dabei - wird heute fertig.

Du gehst von Absichten von mir aus, die ich jedoch gar nicht habe. Du weißt auch nicht, was ich mit dem kleinen Kommando so alles vorhabe.

Zwischen Besitz und Eigentum besteht ein semantischer Unterschied:

Tatsächliche Herrschaft über eine Sache. Rechtliche Herrschaft über eine Sache.

Im Alltagsleben gilt meist beides gleichzeitig.

Am 19.09.2026 um 13:54 schrieb Helmut Schellong:

nasmsection .text global get_rdrand_64

;

--------------------------------------------------------------------------- ; get_rdrand_64 ; Gibt eine 64-Bit-Hardware-Zufallszahl zurück. ; C-Prototyp: uint64_t get_rdrand_64(int *success); ; ; Input: RDI = Zeiger auf eine Status-Variable (success) ; Output: RAX = Die generierte Zufallszahl (0 bei Fehler) ;

--------------------------------------------------------------------------- get_rdrand_64: mov ecx, 10 ; Maximale Anzahl der Versuche (Retry-Counter)

.loop_rdrand: rdrand rax ; Versuche, 64-Bit-Zufall in RAX zu laden jc .success ; Wenn Carry-Flag (CF) = 1, war es erfolgreich -> Springe zu .success

pause ; Dem Prozessor eine kurze Pause gönnen (Strom sparen / Thread freigeben) loop .loop_rdrand ; ECX dekrementieren, wenn > 0, Schleife wiederholen

.fail: mov qword [rdi], 0 ; Setze *success = 0 (Fehlgeschlagen) xor rax, rax ; RAX auf 0 setzen ret

.success: mov qword [rdi], 1 ; Setze *success = 1 (Erfolgreich) ; Die Zufallszahl befindet sich bereits in RAX und wird zurückgegeben ret

Leo Baumann wrote on 19.09.2026 16:03:

Wo sind denn hier ausgegebene Zufallszahlen? Das wäre interessant.

Am 19.09.2026 um 20:41 schrieb Helmut Schellong:

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Am 19.09.2026 um 20:41 schrieb Helmut Schellong:

Die Zufallszahl befindet sich im 64 Bit-Register rax ...

Am 19.09.2026 um 20:41 schrieb Helmut Schellong:

Eine echte Zufallszahl wird erzeugt ausgegeben ...

formatting link

:)

Leo Baumann wrote on 20.09.2026 03:29:

Bei mir zur Zeit: ========================================================================================== 00000434797.998.004819 00000434797298404819 00000434797.999.114544 00000000000001509725 00000434797.006.779857 00000000000006765313 00000434797.008.889137 00000000000001509280 00000434797.110.229638 00000000000002540501 00000434797.113.441574 00000000000002911936 00000434797.115.006951 00000000000002265377 00000434797.118.999352 00000000000002192401 00000434797.221.773032 00000000000002973680 00000434797.223.779397 00000000000002306365 00000434797.227.777027 00000000000004397630 00000434797.774.883382 00000000000046406355 00000434797.775.441642 00000000000001758260 00000434797.882.776957 00000000000006835315 00000434797.886.440935 00000000000003263978 00000434797.889.221818 00000000000003780883 00000434797.994.556808 00000000000004634990 00000434797.997.448440 00000000000002891632 00000434797.001.992328 00000000000003843888 00000434797.005.444617 00000000000004452289 00000434797.110.000581 00000000000005055964 00000434797.113.665882 00000000000003165301 00000434797.116.443807 00000000000002477925 00000434797.440.880347 00000000000024536540 00000434797.881.006763 00000000000040726416 ==========================================================================================

Finde ich interessant. Bei Pseudo-Zahlen nicht zu sehen.

Helmut Schellong wrote on 19.09.2026 20:41:

formatting link
großes Update
formatting link
Bitstrom-Ausgabe 100000 Byte 'randtsc 25 12 100000 14 zdat'

======================================================================================= 00000434797.998.004819 00000434797298404819 00000434797.999.114544 00000000000001509725 00000434797.006.779857 00000000000006765313 00000434797.008.889137 00000000000001509280 00000434797.110.229638 00000000000002540501 00000434797.113.441574 00000000000002911936 00000434797.115.006951 00000000000002265377 00000434797.118.999352 00000000000002192401 00000434797.221.773032 00000000000002973680 00000434797.223.779397 00000000000002306365 00000434797.227.777027 00000000000004397630 00000434797.774.883382 00000000000046406355 00000434797.775.441642 00000000000001758260 00000434797.882.776957 00000000000006835315 00000434797.886.440935 00000000000003263978 00000434797.889.221818 00000000000003780883 00000434797.994.556808 00000000000004634990 00000434797.997.448440 00000000000002891632 00000434797.001.992328 00000000000003843888 00000434797.005.444617 00000000000004452289 00000434797.110.000581 00000000000005055964 00000434797.113.665882 00000000000003165301 00000434797.116.443807 00000000000002477925 00000434797.440.880347 00000000000024536540 00000434797.881.006763 00000000000040726416 =======================================================================================

Am 20.09.2026 um 03:29 schrieb Leo Baumann:

Gibt jetzt 10 echte Zufallszahlen aus ...

:)

Helmut Schellong wrote on 20.09.2026 12:06:

[...]
formatting link
============================================================================================================== 00000467768.226.449218 0000046776862.7749218 00000467768.228.660459 0000000000000.5511241 00000467768.331.889204 0000000000000.2228745 00000467768.445.446952 0000000000001.6657748 00000467768.448.551214 0000000000000.6604262 00000467768.551.336931 0000000000000.1185717 00000467768.555.667214 0000000000000.2230283 00000467768.559.991653 0000000000000.3324439 00000467768.995.331112 0000000000003.0039459 00000467768.330.444428 0000000000003.0013316 00000467768.337.885287 0000000000000.6640859 00000467768.441.778427 0000000000000.7793140 00000467768.446.550447 0000000000000.3372020 00000467768.552.555410 0000000000000.9904963 00000467768.553.335631 0000000000000.1180221 00000467768.558.114689 0000000000000.8879058 00000467768.880.223667 0000000000002.8808978 00000467768.119.338248 0000000000003.2214581 00000467768.226.665237 0000000000000.5526989 00000467768.332.114346 0000000000000.1149109 00000467768.337.558841 0000000000000.0044495 00000467768.441.774822 0000000000000.5515981 00000467768.447.449692 0000000000000.1174870 00000467768.552.665570 0000000000000.6615878 00000467768.558.000909 0000000000000.8835339 ============================================================================================================== bish -c "hx -t7 -n2000 zdat" 0b+000 0a 56 12 cf 39 13 ea 38 e2 fc ee 41 36 2f 8a d5 .V..9..8...A6/.. 0b+016 c4 37 07 8d c8 b3 39 c1 ff 01 68 c1 06 c9 69 62 .7....9...h...ib 0b+032 b7 35 3c 18 d9 47 fa 76 4e 82 39 e7 c1 35 10 72 .5<..G.vN.9..5.r 0b+048 6b fa 05 b9 5d 9f ee 5b 7f 6a fa bb b8 fa 9c 33 k...]..[.j.....3 0b+064 cd 7d 7e 6e db e4 5c 2e 2a 16 b4 22 dd b9 04 5e .}~n..\.*.."...^ 0b+080 10 67 fb 59 f9 19 d0 ee 09 f3 84 1f fd 99 ad 43 .g.Y...........C 0b+096 d6 77 a0 42 81 d8 a5 65 24 86 55 46 6f ba 4e d7 .w.B...e$.UFo.N. 0b+112 3b 3a fd b9 17 1a 57 9f 96 cb 83 5d f8 7e 6c 90 ;:....W....].~l. 0b+128 66 65 42 97 26 ec 17 f9 67 e7 2c c4 f8 55 ef 9c feB.&...g.,..U.. 0b+144 b3 9a ed 2e 8c 8c b6 e7 56 35 a9 95 cb b3 1e b2 ........V5...... 0b+160 3a ee d6 2d 0b 2e 8a 80 14 82 0c 34 b3 21 60 77 :..-.......4.!`w 0b+176 f0 bc d2 47 49 20 d5 2b 97 7f cc 36 77 ab 7a e6 ...GI .+...6w.z. 0b+192 47 0e bd a0 0c ec d6 11 8a 94 60 32 4e d5 75 59 G.........`2N.uY 0b+208 0b 74 7b ee 47 13 c8 1b 29 fd 90 2e e8 40 ad f9 .t{.G...)....@.. 0b+224 df 5a d5 a4 89 e2 e7 fd cb 83 18 d8 91 3d 56 72 .Z...........=Vr 0b+240 1a b0 ca 1d 23 7f 17 ee 6c c5 f1 17 d3 c2 a0 00 ....#...l....... 0b+256 d7 b3 81 9f a2 c1 f4 76 d0 3a 37 4d 90 63 28 29 .......v.:7M.c() 0b+272 93 71 1e a8 ad f8 5d 6f 56 ae 16 05 c2 dc 3e 7f .q....]oV.....>. 0b+288 4d 09 81 42 10 23 c7 00 d1 7a 14 56 94 d2 63 fe M..B.#...z.V..c. 0b+304 c0 81 3f bb 0c 15 39 7a ab 81 38 37 2e ef a3 81 ..?...9z..87.... 0b+320 a2 00 18 62 40 f3 37 42 aa f9 06 fa f2 8a 38 86 ...b@.7B......8. 0b+336 cf 36 4b ca 85 8b 1b b5 cc ca 54 c9 35 cc 97 bf .6K.......T.5... 0b+352 91 b3 72 c9 04 8c b9 ee 5a 74 7a e4 13 ef 4b 65 ..r.....Ztz...Ke 0b+368 11 b1 d8 f2 7e 4c 85 2e 54 33 9f e1 25 75 75 f7 ....~L..T3..%uu. 0b+384 d1 53 ce f6 53 d1 35 0b 7c 4b c4 f8 36 67 8b a1 .S..S.5.|K..6g.. 0b+400 83 ed 28 17 d2 de 2c bf 73 da 8d 51 fe db 91 ce ..(...,.s..Q.... 0b+416 2b a2 84 fc 01 21 03 fb 06 8a 6f 57 45 3a 7d f4 +....!....oWE:}. 0b+432 1d e0 27 25 ca da 25 4c 87 97 a2 24 59 10 8f bd ..'%..%L...$Y... 0b+448 d7 cb 7a a9 45 f3 55 5f 59 c1 bb 22 e6 b9 fc 50 ..z.E.U_Y.."...P 0b+464 d9 16 08 ec 09 79 c2 cd 46 83 15 71 9e 44 8a d9 .....y..F..q.D.. 0b+480 2f 8a 21 75 5d a0 4a 06 28 41 6c d9 26 57 6f 12 /.!u].J.(Al.&Wo. 0b+496 47 e1 fa 05 f6 24 68 db 05 85 e7 80 4c f7 06 1a G....$h.....L... 1b+000 03 72 83 fd 38 bf aa 96 6b f1 af b0 c6 c5 e3 69 .r..8...k......i 1b+016 b6 2f e8 d5 c4 4b f6 58 a4 45 33 8d e2 f2 d6 43 ./...K.X.E3....C 1b+032 18 9e 69 66 e8 8e 71 b9 61 c8 62 86 4d ea a8 1b ..if..q.a.b.M... 1b+048 59 c3 88 d6 4f bf 00 86 0e a7 64 df 20 e7 80 84 Y...O.....d. ... ==============================================================================================================

Hi Helmut,

Und das soll ein Nachweis für gute Zufallszahlen sein? Wie wäre es mit schlüssigen mathematischen Nachweisen? Wenigstens mit ein bisschen statistischen Belegen, wie Verteilungskurven, Point-Caré Plots oder vergleichbarem?

Marte

Marte Schwarz wrote on 20.09.2026 22:38:

Nein, das soll _kein_ Nachweis für gute Zufallszahlen sein! Warum sollte es?

Aber ich sagte mehrmals, daß ich fähig bin, mir innerhalb von Sekunden bis Minuten einen zutreffenden Eindruck zu verschaffen. Ich muß dazu lediglich gut aufbereitete Daten optisch überfliegen, sichten.

Und mein erster Eindruck sieht recht gut aus. Ich bin folglich eher optimistisch als pessimistisch.

Ich bin im Moment noch mit der Entwicklung befaßt! Eine erste sehr kleine Start-Version des Kommandos habe ich vorgestern nutzbar gehabt.

Ich werde beizeiten den NIST-Test durchführen. Dazu brauche ich die heutige Ausbaustufe.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required