Zufall, Hash, Ver-/Ent-Schlüsselungen ✪ ☀ ► ▼ ▲ ⇨ ⇩ ↥ ↧ ▲ △ ▶ ▷


In diesem Projekt geht es um Self-made Pseudo-Zufallsgeneratoren
Ebenso geht es um Self-made Hash-Algorithmen und um
Self-made kryptographische Ver-/Entschlüsselungsmethoden.
Die entwickelten Verfahren und Methoden sollen grafisch simuliert werden.


Projekt-Einführung ( allgemein ) … um was geht es?

Seit es Menschen gibt, gibt es das "Unzugängliche, Uneinsichtige, Verborgene". Dem Menschen werden zahlreiche Attribute zugeschrieben, u.a. "der Mensch ist ein Wesen voller Geheimnisse". Wer kann sich selbst vollständig erkennen? Wie sich selbst im eignen Geheimnis ganz durchschauen?

Es geht u.a. um Self-made Pseudo-Zufallsgeneratoren. Was ist ein Zufall ( wissenschaftlich betrachtet )?
Demokrit meint etwa:

Epikur und die Quantenmechanik behaupten etwa:

Johann Wolfgang von Goethe schreibt:

Mitmenschliche Kommunikation kann Informationen übertragen. Bei geschützten Kommunikationen haben Dritte keinen Zugang zu den übertragenen Informationen. Ein "abhörsicheres System" möchte die interne/externe Integrität und Konsistenz bewahren und unzulässige Modifikationen der Übertragung verhindern.

Für Text-Transformationen und Text-Abbildungen und für Ver-/Entschlüsselungsverfahren gibt es ein vielschichtiges Spektrum von Methoden. Wenn ein Teil der Methoden verborgen bleibt, so können selbst "einfachste und scheinbar abwegige" Methoden innovatives Potential haben. Oft werden die folgenden Zustände unterschieden:

  Geheim 
  Vertraulich 
     ↓  … darf nicht nach unten schreiben 
     ↑  … darf nicht von oben lesen
  Intern 
  Öffentlich 

Doch was hat dies mit der Zufall, Hash, Ver-/Ent-Schlüsselungen, Kryptologie und den Client-Server-Technologien zu tun?


Konrad Zuse :
Nur zu oft ist der Erfinder der faustische Idealist, der die Welt verbessern möchte, aber an den harten Realitäten scheitert. Will er seine Ideen durchsetzen, muß er sich mit Mächten einlassen, deren Realitätssinn schärfer und ausgeprägter ist. In der heutigen Zeit sind solche Mächte, ohne daß ich damit ein Werturteil aussprechen möchte, vornehmlich Militärs und Manager. […] Nach meiner Erfahrung sind die Chancen des Einzelnen, sich gegen solches Paktieren zu wehren, gering


Es geht um das Entwickeln, Erstellen und Testen einer App ( Plagiate sind out ). Die zu entwickelnde App


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


Pseudo-Zufallsgeneatoren Hinweise

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:

Zunächst sind eigene Algorithmen für Zufallszahlen zu erstellen und zu visualisieren. Unterschiedliche Stärken/Schwächen/Anwnedungsbereiche wie z.B. Sicherheit+Kryptologie , Liste von Zufallszahlengeneratoren ( Wikipedia ).

Beispiel: Zufallszahlen-Bereiche zuf(min,max)

Für die Entwicklung von "self-made" Generatoren für Zufallszahlen können die folgenden Bemerkungen hilfreich sein. Browser verwenden keinen einheitliche random-Algorithmus. Ein self-made-Algorithmus rnd() ermöglich mehr Kontrolle. Wie startet rnd()? Was meint "seed"?


Beispiel: xor_shift(seed) xor ...

Die selbst entwickelten Zufallszahlen-Generatoren sind grafisch zu testen und zu visualisieren. Ein selbst entwickelter Zufallszahlen-Generatoren ist für die Simulationen einer praxisrelevanten Aufgabe zu verwenden.

Die App soll natürlich leicht benutzbar sein. Die App soll auch der anschaulichen Visualisierung des Sachverhaltes dienen.

Hinweis: Pseudo-Zufallszahlen sind auch ein wesentlicher Bestandteil von Sicherheitsarchitekturen und werden für das nachfolgende ESA-Projekt benötigt. Siehe z.B. Sicherheit+Kryptologie und ECMAScript-Beispiele zu Zufallszahlen .

function xor_shift(seed) {
return {// init mit var xor_shift_obj = xor_shift(534567);
x: seed, max_val: Math.pow(2, 31),
rnd: function () {
this.x ^= this.x << 13;
this.x ^= this.x >> 17;
this.x ^= this.x << 5;
//if ((Math.abs(this.x / this.max_val)) >= 1) { 
//     console.log(Math.abs(this.x / this.max_val)); 
//}
return Math.abs(this.x / this.max_val);
}
};
}

Teste : Zeichne auf Canvas
xor_shift(10,xor_shift_obj) xor_shift(10, xor_shift_test,"#a0a")
xor_shift(1000,xor_shift_obj) xor_shift(1000, xor_shift_test,"#0a0")
xor_shift(10000,xor_shift_obj) xor_shift(10000, xor_shift_test,"#a00")


Beispiel: Hinweise ( String-Basen ) UTF nach byte-Str und hex-Folge

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

Beispiel: Base64 und UTF-8 Transformationen

Achtung! window.btoa() akzeptiert lediglich Zeichen von U+0000 bis U+00FF, d.h. UTF-8-Unicode muss zunächst in Byte-Code ewandelt werden. Siehe z.B. String-Manipulationen dort [Zeichen-Wandlungen]

function utf8_to_b64(utf8) {  var byte_chrs, b64 = '';
  try { byte_chrs =  unescape( encodeURIComponent(utf8)); 
        b64 = btoa(byte_chrs);
} catch (e) { alert('ERR: utf8_to_b64(utf8)' + e); } return b64;
}
function b64_to_utf8(b64) {  var utf8 = '', b64;
  try { b64 = atob(b64); 
        utf8 = decodeURIComponent(escape(b64));
  } catch (e) { utf8 = ''; alert('ERR: b64_to_utf8(b64)' + e); } 
  return utf8;
}
Beispiel: Self-Made-Hash-Funktion Wie?

Je nach Anwendung können unterschiedliche Hashfunktionen verwendet werden. Kriterien für eine gute Hashfunktion sind vielfach:

- Geringe Kollisionens-Wahrscheinlichkeit
- Möglichst Gleichverteilung der Hashwerte
- Geringe Speicherbedarf des Hashwertes
- "Chaos-Zersteuung", d.h. ändert sich 1 Eingabe-Bit, 
so sollen sich möglichst 50% der Hash-Bits ändern
- Alle Hashwerte sollen unmöglich sein
- Hash-Funktion soll schnell berechenbar sein
Beispiel: Zufallspasswort mit Unicode-Zeichen Math.random() Browser-abhängig

var a=[] enthalte die benötigten Unicode-Blöcke und nc ist die Anzahl der Zeichen des erzeugten Passwortes. Achtung! Wegen unterschiedlicher random()-Algorithmen ist Math.random() abhängig vom verwendeten Browser.

function zufall_passwort (nc, nr) { 
var i, n, len,
a = [ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
"✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡..."], r = "";
nc = nc || 5;
nr = nr || 0;
s = a[nr]; len = s.length;
for( i=0; i < nc; i += 1 ) {
n = Math.floor(  Math.random() * len );
r +=  s.charAt(n);
} return r;
}

Teste Zufall-Passwort-Generierung mit der Anzahl von Zeichen : 5 10 20

Teste Zufall-Passwort-Generierung mit anderm Unicode-Block :   5 10 20

Beispiel: Hash-String mit Zufallszahlen Wie geht das?

Zunächst ein einfaches, übersichtliches Verfahren, das den Faktor 69069 verwendet:

function pseudo_hash_str(s, max) {
  var i, d, c = 0, len = s.length-1, a = s.charCodeAt(len-1), r=""; 
  s = "äöüß" + s; max = max||36; 
  for ( i = len; i >= 0; i -= 1 ) {
        c += s.charCodeAt(i);
        d = 69069 * c  + a >>> 0; 
        r += d.toString(36); if(r.length > max){return r;}
  } return r;
}

Der Aufruf alert([pseudo_hash_str("AA"), pseudo_hash_str("AAA"), pseudo_hash_str("AAAA"), pseudo_hash_str("AAAAA") ].join('\n') ); liefert die Ergebnisstrings ( Base 36 ).

s = "AA"    liefert "a46dbjhpeb"
s = "AAA"   liefert "ad24tkh8gbturhb"
s = "AAAA"  liefert "964lwjj6owtnd0e130w1e"
s = "AAAAA" liefert "2o85qbucptm7estwbl4b15p45b"
Beispiel: Hash-String in unterschidlichen Basen Wie geht das?

Für num.toString(base) kann base = 2,3,...36 verwendet werden.

function myhash(s, base) {
 var i, h, g, c; 
 base = base || 10; 
 s = s.replace(/\r/g, ''); if (!s || s === "") { return 0; }
 h = 0; g = 0;
 for (i = s.length - 1; i >= 0; i -= 1) {
   c = parseInt(s.charCodeAt(i), 10);
   h = ((h << 6) & 0xfffffff) + c + (c << 14);
   if ((g = h & 0xfe00000) !== 0) { h = (h ^ (g >> 21)); }
 } return h.toString(base);
 }
Beispiel: Primzahlen für self-made

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

Mögliche Primzahl-Kandidaten sind ( n = 0, 1, 2, 3, ... ): 1 + n*30; 7 + n*30; 11 + n*30; 13 + n*30; 17 + n*30; 19 + n*30; 23 + n*30; 29 + n*30

Literarische Motivation, textuelle Einführung uneinsichtig Verborgenes

Hat Literatur in irgend einer Weise mit Kryptologie zu tun? Falls ja, wie verbirgt sich dann z.B. im Unicode und Gedicht von William Blake dieses "Vorder-/Hinter-/Tief-Gründige"? Auf welchen Ebenen kann Ver-/Entschlüsselt werden? Wodurch/Wohinein transformieren und interagieren sichere Methoden? Wie können/werden lyrische Versmaße verwendet?

Dōgen Zenji ( 1200 - 1253 ) sagt es so:

Studieren bedeutet,
sich selbst studieren.
sich selbst studieren bedeutet,
sich selbst vergessen.
Sich selbst vergessen bedeutet,
in Harmonie zu sein mit allem, 
was uns umgibt.

William Blake ( 1757 - 1827 ) sagt es so:

Um eine Welt in einem Sandkorn zu sehen
Und einen Himmel in einer Feldblume,
Halt Unendlichkeit in deiner flachen Hand
Und Ewigkeit in einer Stunde ...
Man verführt uns, einer Lüge zu glauben
Wenn wir mit dem Auge sehen, nicht durch es hindurch,
In einer Nacht wurde es geboren,
Um in einer Nacht zu verlöschen,
Als die Seele in Lichtstrahlen schlief.

"Offensichtlich" scheint in ewiger unentschlüsselbarer Dunkelheit kaum Licht zu sein
und in vollkommer Erhellung kaum methodisch-objektivierbare Dunkelheit.

Friedrich Schiller
( im Brief an Goethe vom 24. November 1797 ):
Man sollte wirklich alles, was sich über das Gemeine erheben muss,
in Versen wenigstens anfänglich konzipieren,
denn das Platte kommt nirgends so ins Licht,
als wenn es in gebundener Schreibart ausgesprochen wird.

Wie gehen die Wandlungen mit textuellen Mustern bei Informationen und mit Hilfe von geschachtelten Ver- und Entschlüsselungsverfahren? Welche partielle Entitäten-Vielfalt ist angemessen? Wer ver-/entschlüsselt, womit, wie, wohinein? Wer interessiert sich für das Verborgene? Für welche Zwecke mit welchen Aufwandt?

In der Poetik entspricht ein Vers (lateinisch versus, umwenden) einer Reihe metrisch gegliederter Rhythmen. Eine Verschriftung von Rhythmen kann wie eine Struktur beim Ver-/Ent-Schlüsseln betrachtet werden Monometer, Dimeter, Trimeter, Tetrameter, Pentameter, Hexameter, usw. Was ermöglichen andere Sprachen, Alphabete, Metren, usw? Siehe z.B. Sanskrit .

Ver-/Entschlüsseln ( Mythologie ) end to end

Aus der ägyptischen Mythologie stammt das folgende Beispiel. Die Herrscherin wollte einem fernen König eine geheime Botschaft zukommen lassen. Wie? Hierzu wurde ein Sklave ausgewählt, gewaschen, gekleidet. Dem Sklaven wurden die Haare abgeschnitten und er lernte für unterschiedliche Situationen sein angepasstes Verhalten. Der Arbeitsablauf bei Maniküre beinhaltete eine ästetisch ansprechende Tätovierung von Geheimzeichen auf der Kopfhaut. Nachdem die Haare nachgewachsen und angemessen gestylt waren, wurde der Sklave auf den Weg geschickt. Der Weg zum Ziel kann Umwege, Haltepunkte haben. Der Weg zum Ziel kann unbekannte Gefährdungen, mangelde Orientierung und hoheitliche Kontrollen enthalten. Im Ziel angekommen wurde der Skave gebadet, gekleidet und die Haare geschnitten und vom Herrscher "in-privat-audienz" empfangen. Nach der Audienz "verschwand" der Sklave.

Historische Mythologien können bedingt auch modern interpretiert werden: Wege bei Datenautobahnen, Geräte-"Hoheiten" und Hardware-"Hoheiten" bei Glasfaserkabeln/Landkabeln/Seekabeln, Internet-based development, Server, Peering-Points, DNS, Big Data , multinational-distibuted Cloud computing , bedarfsgerechte Anmietung und Bezug von Speicherkapazitäten/Rechenleistungen/Anwendungen über das Internet, buckets-containers, Cloud storages "terabytes in size", usw.

Zum ( ursprünglichen ) Internet-Netzgerüst gehören: Backbone, Arpanet, NSFNet-Backbone 1986, MILNET-Netz, dezentralisiertes Routing, NAP = Network Access Point. Zu den Provider-"Hoheiten" und (kommerziellen/staatlichen) Internetdienstanbietern ( ISPs ) gehören Streckenführung, Leitweglenkung, Verkehrsführung ( proprietäre/staatliche Routing-"Hoheiten" ).

Wie baut eine Spinne ein Netz? Der Kinderfilm ( WDR-Maus 2013 ) "Wie baut die Spinne ihr Netz" zeigt den Netz-Aufbau ( Hardware ) durch eine Netztbauerin. Eine Spinne will sich von den im Netz gefangenen Insekten ernähren.

Teste Zeichen-Häufigkeiten Dichte, Verteilungsfunktion

Anders als in dem Beispiel aus der ägyptischen Mythologie wird heute ( 2015 ) bei "Big-Date-Monopolisierungsbestrebungen" auch versucht, das "universellste-super-stärkste Ver-/Ent-Schlüsselungsverfahren anzupreisen und "für alle kostenfrei-günstig" anzubieten und systematisch einzusetzen. Also: Was ist anders, wenn vorrangig in Folgen, Abfolgen und Zusammenhängen gedacht wird? Hier beispielhaft ein grober Versuch mit Literatur und Häufigkeiten ... Welcher "digitale Fingerabdruck" gehört zu einer Literaurstelle, zu einem Autor, zu einer Sprachkultur?

Zeichen-Häufigkeiten (sortiert)

Projekt-Hinweise end to end

Es werden 2 Ver-/Ent-Schlüsselungsalgorithmen entwickelt und getestet. Plagiate sind out. Es wird eine App entwickelt und getestet, die Textarea-Content ver-/entschlüsselen und eine geschützte Web-Seite erstellen kann. Transport-Verschlüssselungen sind von Ressourcen-Verschlüssselungen zu unterscheiden. Für die Texte und Passwörter soll die zu erstellende App ein ECMAScript-Objekt var obj= { hash_pw1: ..., hash_pw2: ..., encrypt_ta:..., decrypt_ta: ....} verwenden, das mindestens 2 PW aus unterschiedlichen Kontexten nutzt und sowohl partielle Anteile als auch als Ganzes die Ver-/Entschlüsselungen aufnimmt. Das obj wird in JSON-String transformiert.

Das nachfolgende Projekt wird ein Senden/Empfangen mit AJAX und serverseitiger Speicherung beinhalten. Hier wird lediglich das obj in JSON gewandelt und mit localStorage gespeichert.

Weitere Hinweise für eigene Ideen. crypt-seite-erstellen Mehr in der Veranstaltung.

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