Pseudo Zufallsgeneratoren und Simulationen Pseudo-Zufallszahlen, Hash, Grafik

Hans Krailsheimer (1888-1958): "Talente finden Lösungen, Genies entdecken Probleme."


Modelle und Simulationen Einführendes

Ein Modell ist ein "wirklichkeitsnahes" Abbild eines "realen" Systems . Ein System ist als Teil eines umfassenden Ganzen stets auch ein Teilsystem. Zu den Teilstrukturen eines System gehören eingebettete Substrukturen und deren Modellierungen. Kein "Super-Modell" kann die gesamte, alles umfassende Wirklichkeit abgeschlossen und vollständig abbilden ( siehe z.B. Fraktale ).

In diesem Sinn entspricht in der Informatik die objektorientierte Programmierung eine Modellierung von Hardware. Die Systemtheorie beinhaltet die Analyse von Strukturen, Dynamiken/Wechselwirkungen/Funktionen und möchte das Systemverhalten aufgrund von Modellbeschreibungen simulieren/vorhersagen/austesten, wie z.B. die Probabilistische Testtheorie .

In gewisser Weise können Pseudo-Zufallszahlen das "Unvorhersehbare zufällig simulieren".

Eigene Projekt-Ideen Einführendes

Es sind eigene Algorithmen für Zufallszahlen zu entwerfen und und mehrere robuste Pseudo- Zufallszahlengeneratoren , zu entwickeln ( Plagiate sind out ).

Pseudo-Zufallszahlen sind auch ein wesentlicher Bestandteil von Sicherheitsarchitekturen und werden nachfolgend in dieser Veranstaltung benötigt. Pseudo-Zufallszahlen werden gebraucht für Strings, Texte, /dev/random als zeichen-orientierte virtuelle Gerätedatei, Nonces, One-Pad, Password, Time, Erzeugung kryptographischer Schlüssel, Hash, List Randomizer, "aus Quanten-Zufällen", Integer, Sequence, DNA Protein Sequence, Sets, Gaussian, Stochastik, zentrale Grenzwertsatz, Color-Code, Audio-Noise, Pregenerated Files, Geographic-Coordinate, usw. Siehe z.B. Sicherheit+Kryptologie und ECMAScript-Beispiele zu Zufallszahlen .

Komplexe Simulationen brauchen i.a. viele/vielschichtige Eingabewerte. Beliebige Werte aus kontinuierlichen Zahlenbereichen können ( näherungsweise ) mit Pseudo-Zufallszahlen durchgeführt werden.

- Generatoren für kryptologisch sichere Pseudozufallszahlen ( de.wikipedia ) basieren z.B. auf mathematisch "unknackbaren" Problemen oder/und auf sicheren Hash-Funktionen oder/und auf Block- oder Stromverschlüsselungen.

Was ist konkret zu tun? Was soll gemacht werden?

Liegt hinreichendes Wissen zu den folgenden Punkten vor:

  1. Einlesen in die unterschiedlichen Stärken/Schwächen/Anwnedungsbereiche von Zufallszahlengeneratoren und Hashfunktionen , Kryptologische Hashfunktion.
  2. Einlesen in HTML- Canvas- Grafik ( HTML-Element ).
  3. Die selbst entwickelten Zufallszahlen-Generatoren sollen für die Simulationen praxisrelevanter Aufgabe taugen und sind grafisch ( mit Canvas ) zu visualisieren, zu testen.
Hinweise ( Zufallszahlen ) aus Zahlen-Intervallen

ECMAScript verwendet intern stets 64 Bit Fließkommazahlen ( double, IEEE 754 ). Browser-ECMAScript hat eigebaute Pseudo-Zufallsfunktion Math.random() meist ohne Argument und es gibt i.a. keine "Seeds" für eine determinierte Folge von gewünschten Zufallszahlen. Ein Aufruf von Math.random() liefert eine positive Zahl ( 0 <= Zahl < 1 ) zurück. Die erzeugten Pseudo-Zufallszahlen haben unterschiedliche Gleichverteilungen und sind abhängig von den Browser-Imlementierungen.

Für die Entwicklung von "self-made" Generatoren für Zufallszahlen können die folgenden Bemerkungen hilfreich sein.

In gewisser Weise können Zufallszahlen das "Unvorhersehbare zufällig simulieren" ( siehe z.B. de.wikipedia Zufallszahlengeneratoren ). Zufallszahlen werden generiert z.B. für:

Strings, Texte, /dev/random als zeichen-orientierte virtuelle Gerätedatei, Nonces, One-Pad, Password,
Time, Erzeugung kryptographischer Schlüssel, Hash, List Randomizer, "aus Quanten-Zufällen",
Integer, Sequence, DNA Protein Sequence, Sets, Gaussian, Stochastik, zentrale Grenzwertsatz,
Color-Code, Audio-Noise, Pregenerated Files, Geographic-Coordinate, usw.

Mögliche Problemstellungen für die self-made-App sind:

Hinweise ( Zeichen ) aus Unicode-Blöcken

Die Yi-Silbenzeichen des Unicodes sind:

ꀀꀁꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌꀍꀎꀏꀐꀑꀒꀓꀔꀕꀖꀗꀘꀙꀚꀛꀜꀝꀞꀟꀠꀡꀢꀣꀤꀥꀦꀧꀨꀩꀪꀫꀬꀭꀮ
ꀯꀰꀱꀲꀳꀴꀵꀶꀷꀸꀹꀺꀻꀼꀽꀾꀿꁀꁁꁂꁃꁄꁅꁆꁇꁈꁉꁊꁋꁌꁍꁎꁏꁐꁑꁒꁓꁔꁕꁖꁗꁘꁙꁚꁛꁜꁝ
ꁞꁟꁠꁡꁢꁣꁤꁥꁦꁧꁨꁩꁪꁫꁬꁭꁮꁯꁰꁱꁲꁳꁴꁵꁶꁷꁸꁹꁺꁻꁼꁽꁾꁿꂀꂁꂂꂃꂄꂅꂆꂇꂈꂉꂊꂋꂌ
ꂍꂎꂏꂐꂑꂒꂓꂔꂕꂖꂗꂘꂙꂚꂛꂜꂝꂞꂟꂠꂡꂢꂣꂤꂥꂦꂧꂨꂩꂪꂫꂬꂭꂮꂯꂰꂱꂲꂳꂴꂵꂶꂷꂸꂹꂺꂻ

Eine Zufallsfunktion kann z.B. 600 zufällige Yi-Silbenzeichen aus dem Yi-Unicode-Block auswählen und als Zeichen-Block mit 10 Zeilen und 60 Zeichen je Zeile darstellen. Die Yi-Silbenzeichen könnten eine "Geheimschrift" verwendet werden ( falls invertierbar ). Zufällige Yi-Silbenzeichen sind z.B.:

ꁴꌦꄬꃩꃌꉐꉫꎀꎈꋨꊠꉙꂀꎸꇐꂛꎰꈝꊐꏿꁾꂀꄐꊑꄠꀞꁆꈀꎀꍤꎠꉶꅰꀡꊰꁀꁌꂍꈀꈣꊩꑤꌐꊇꌁꅐꆣꐸꌐꁷꀾꋐꆗꌃꄠ꒎ꍒꀠ
ꂞꐑꁀꂆꄰꂕꎺꅠꃊꄰꍥꋚꃀꑄꌀꌰꀊꅐꊳꎯꃀꀴꃈꋠꅲꆻꑐꊳꎳꎀꈨꑐꉃꐀꁐꀉꎰꄽꅰꌁꋬꌠꂎꃳꐰꐉꄠꎮꂐꈯꃱꐠꁞꑐꎣꄠꀆꎁꂀꌸ
ꁰꄤꊉꐰꎵꂚꀐꄗꄠꎎꐀꑀꄼꁰꍑꉢꈐꍷꃒꌰꏭꋐꍻꎇꄠꄎꄠꎞꏀꁴꅰꏁꁼꑐꌃꁒꏰꆹꋐꉃꈽꂠꐦꌚꀐꃻꉠꋶꐐꋇꋐꃋꈷꋐꋫꍝꅐꆓꆠ
ꐶꈓꃠꍒꇷꇠꑂꑉꌰꎅꄀꋰꅘꇐꋛꉻꀐꑗꏿꆰꋹꈃꉠꍂꑀꇈꁠꁚꇽꊀꄤꎫꃐꎫꋴꋰꆹꃠꏂꄊꒀꐘꌞꋰꎻꇺꌰꈕꅙꏰꅉꌁꁰꌁꂰꌭꈪꑰꆱꄀ
ꏐꀰꋥꂐꉟꂀꍀꇀꌤꀠꀮꐦꉐꃧꐜꆠꄆꏰꂹꄄꊰꀻꃻꏠꃒꈠꉞꂀꃖꉄꐠꀾꇍꀠꅮꌰꁅꈘꍀꐼꄽꊀꎈꃹꅐꐃꉉꁠꆪꑐꉓꁏꉠꐊꎠꋐꑛꅾꅠꁪ
ꇏꄰꂵꀐꆇꉝꋠꆒꀏꋐꁛꃠꆂꇶꉐꋛꅚꉠꉺꏱꇰꅡꋾꌐꑷꆠꂦꐹꉀꃬꍠꍚꎠꀦꍲꂐꀏꀃꐠꍐꃮꂰꇹꀞꌠꐎꍵꒀꁼꂶꎰꉭꑣꆀꑨꎼꂀꐈꑓꎠ
ꅦꄭꊐꄯꊗꅰꄹꏰꌷꁒꍀꆌꎌꊠꎶꄐꂗꉠꈊꇐꄻꊅꋠꇒꃰꉥꉣꉐꉳꄰꐅꈰꎕꍐꅣꁃꀰꒅꑱꀠꏮꐢꃐꃣꎰꐍꇀꅴꃐꃋꈠꄞꊍꋠꇢꃰꄉꎠꍶꌛ
ꈰꀥꈽꐠꂎꄤꄺꒀꍨꄭꏠꌒꀃꆐꌃꄅꏐꄛꀀꊰꀐꊇꎌꀠꋎꈮꍀꀜꁞꐀꇀꁂꉀꊜꍠꍚꊀꆘꊀꏈꈠꊞꆭꍠꍪꎠꐖꃸꇠꐒꆮꐰꄥꑹꊠꄖꐃꆠꉆ
ꅰꄡꃀꆔꂌꅐꂳꀎꄰꆕꉠꅚꌀꎬꁀꌌꌰꊅꂾꑀꂪꐀꑠꑊꂊꅰꊩꎻꇀꉄꎮꋠꆢꃐꆛꅸꁀꂌꅊꊐꃯꅾꉀꒌꂷꃰꈹꃰꋩꐐꏧꅀꉜꀐꍿꂮꀐꍷꐩꁀ
ꌌꈠꁮꁠꋚꈡꁀꇜꀠꄀꃐꍟꃀꅔꁀꐼꋖꁀꉜꉸꈀꍐꂳꆰꎍꐃꍠꁺꌨꎐꑿꌇꃠꃲꐍꍸꃌꌰꐅꂈꅀꂼꄕꄘꏻꏀꍄꇀꇔꀀꂰꏸꄠꋞꋖꊀꂈꋒꉰꊁ
// Code: 
function zuf_zeichen_tab(min, max, anz) {
  var i, num, s = '';
  for( i=0; i < anz; i += 1 ) {
    if((i % 60) === 0) { s += '<br />'; }
    num = Math.floor(Math.random() * (max - min + 1) + min);
    s += String.fromCharCode(num); 
  } return s;
}

teste ( mehrfach klicken ): zuf_zeichen_tab(41000,42124,600) lösche




Hinweise ( zum Einlesen ) mit Code

ECMAScript-Beispiele zu Zufallszahlen .

Hinweise ( Hash, Datum, Zufallszitate ) ...

... http://en.wikipedia.org/wiki/Numerical_Recipes ... https://www.random.org/widgets/integers/ ... Colour Scheme ...

// UNGETESTET UND OHNE GEWÄHR ...
function zufall_datum(a, b) {
   var intervall_weite = b – a + 1; 
   var z = new Date().getTime();
   z = Math.floor(z / 10);
   z %= intervall_weite;  // 0 <= z < intervall_weite
   z += a;                // a <= z < b
   return z;
}
// UNGETESTET UND OHNE GEWÄHR ...
function pad(number, length) {
  var str = '' + number;
  while (str.length < length){ str = '0' + str; }
  return str;
}
// UNGETESTET UND OHNE GEWÄHR ...
function Comma(SS) {
  var T = "", S = String(SS), L = S.length - 1, C, j;
  for (j = 0; j <= L; j++) { T += (C = S.charAt(j));
      if ((j < L) && ((L - j) % 3 == 0) && (C != "-")) { T += ","; }
  } return T;
}
// UNGETESTET UND OHNE GEWÄHR ...
// Bsp: wrapping at 2^32 mit 16-bit operationen
function safe_add(x, y) {
  var msw, lsw = (x & 0xFFFF) + (y & 0xFFFF);
  msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}
Hinweise ( Primzahlen ) Darstellungen Basen 2-36

Die ersten 258 Primzahlen:

var prims = [ // 258 Primzahlen
1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 
29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 
71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 
127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 
263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 
419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 
577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 
739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 
911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 
1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 
1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 
1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 
1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621];

var von=11, bis=21, prim, bas, r = ["<table border><tr><th>"]; 

for( i = von; i < bis; i += 1 ) { prim = prims[i];
  for( bas = 2; bas < 37; bas += 1 ) {
    r.push( prim.toString(bas) + '<sub>'+bas+'</sub>' );
  } r.push("\n</th><th>\n");
} r = r.join("<br />") +  "</th></tr></table>"; 
alert(r);
Ausgabe von bin_str zu den Basen 2 ... 36:

111112
10113
1334
1115
516
437
378
349
3110
2911
2712
2513
2314
2115
1f16
1e17
1d18
1c19
1b20
1a21
1922
1823
1724
1625
1526
1427
1328
1229
1130
1031
v32
v33
v34
v35
v36

1001012
11013
2114
1225
1016
527
458
419
3710
3411
3112
2b13
2914
2715
2516
2317
2118
1i19
1h20
1g21
1f22
1e23
1d24
1c25
1b26
1a27
1928
1829
1730
1631
1532
1433
1334
1235
1136

1010012
11123
2214
1315
1056
567
518
459
4110
3811
3512
3213
2d14
2b15
2916
2717
2518
2319
2120
1k21
1j22
1i23
1h24
1g25
1f26
1e27
1d28
1c29
1b30
1a31
1932
1833
1734
1635
1536

1010112
11213
2234
1335
1116
617
538
479
4310
3a11
3712
3413
3114
2d15
2b16
2917
2718
2519
2320
2121
1l22
1k23
1j24
1i25
1h26
1g27
1f28
1e29
1d30
1c31
1b32
1a33
1934
1835
1736

1011112
12023
2334
1425
1156
657
578
529
4710
4311
3b12
3813
3514
3215
2f16
2d17
2b18
2919
2720
2521
2322
2123
1n24
1m25
1l26
1k27
1j28
1i29
1h30
1g31
1f32
1e33
1d34
1c35
1b36

1101012
12223
3114
2035
1256
1047
658
589
5310
4911
4512
4113
3b14
3815
3516
3217
2h18
2f19
2d20
2b21
2922
2723
2524
2325
2126
1q27
1p28
1o29
1n30
1m31
1l32
1k33
1j34
1i35
1h36

1110112
20123
3234
2145
1356
1137
738
659
5910
5411
4b12
4713
4314
3e15
3b16
3817
3518
3219
2j20
2h21
2f22
2d23
2b24
2925
2726
2527
2328
2129
1t30
1s31
1r32
1q33
1p34
1o35
1n36

1111012
20213
3314
2215
1416
1157
758
679
6110
5611
5112
4913
4514
4115
3d16
3a17
3718
3419
3120
2j21
2h22
2f23
2d24
2b25
2926
2727
2528
2329
2130
1u31
1t32
1s33
1r34
1q35
1p36

10000112
21113
10034
2325
1516
1247
1038
749
6710
6111
5712
5213
4b14
4715
4316
3g17
3d18
3a19
3720
3421
3122
2l23
2j24
2h25
2f26
2d27
2b28
2929
2730
2531
2332
2133
1x34
1w35
1v36

10001112
21223
10134
2415
1556
1317
1078
789
7110
6511
5b12
5613
5114
4b15
4716
4317
3h18
3e19
3b20
3821
3522
3223
2n24
2l25
2j26
2h27
2f28
2d29
2b30
2931
2732
2533
2334
2135
1z36
Hinweise ( String-Basen ) UTF nach byte-Str und hex-Folge

Nützliche Funktionen ( auch für später ).

Plagiate sind out!
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermine So 12.00 Uhr