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

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


Projekt-Kurzfassung Übersicht

In diesem Projekt geht es um das Entwickeln und Testen von selfmade-App-Komponenten. Diese Komponenten werden später für die praxistaugliche Client-Server-Apps benötigt. Die Komponenten werden in experimenteller Weise entwickeln und protkolliert. Es werden konkrete Brauchbarkeitstests durchgeführt. Die selbst entwickelten Demos sollen leicht benutzbar und vielseitig verwendbar sein.

Was soll gemacht werden? In diesem Projekt geht es um das Entwickeln und Testen von zahlreichen selfmade-App-Komponenten. Zahlreiche Hinweise sind weiter unten. Mehr in der Veranstaltung.

  1. selfmade-App-Komponenten, die für zahlreiche Client-Server-Apps gebraucht werden, wie z.B. Unicode-Repräsentationen, Zufallsalgorithmen, Self-made Hash-Algorithmen, selfmade App-Komponenten für End-to-End-Ver-/Ent-Schlüsselungen Unicode-Zeichen Transformationen , Auswahl .
  2. Self-made System für Häufikeitsanalysen von Informationen.
  3. Self-made Pseudo-Zufallsgeneratoren mit grafischer Darstellung, Probabilistische Simulationen
  4. Self-made Hash-Algorithmen mit grafischer Darstellungen
  5. Self-made kryptographischen Ver-/Entschlüsselungsmethoden mit P2P-Webseitenverschlüsselung
  6. Die selbst entwickelten Demos für die Kryptographie-App sollen natürlich leicht benutzbar sein.
  7. Alle Teilmengen und Sachverhalte sollen anschaulich visualisiert werden.
    Die entwickelten Verfahren und Methoden sollen getestet und grafisch simuliert werden.
  8. Es werden grafischen Visualisierungen erstellt, die die Methoden veranschaulichen.

Projekt-Hinweise ( Zufall, Hash, Ver-/Ent-Schlüsselungen ) … Was entwickeln?

Es werden eigene Hash-Algorithmen, Ver-/Ent-Schlüsselungsalgorithmen entwickelt und getestet. Plagiate sind out. Es werden Komponenten entwickelt und getestet, die Textarea-Content ver-/entschlüsselen und eine geschützte Web-Seite erstellen kann.

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.

Die Komponenten für das nachfolgende Projekt werden ein Senden/Empfangen mit AJAX und serverseitiger Speicherung beinhalten. Das obj kann in JSON gewandelt und mit localStorage gespeichert und mit AJAX clint-server-seitig wechselseitig übertragen werden.

In diesem Projekt geht es um das Entwickeln und Testen von zahlreichen selfmade-App-Komponenten. Weitere Hinweise weiter unten.

Wie gehts los? Mehr in der Veranstaltung. Hier ein Anfang mit groben, unvollständigen Ideen , Experimenten, Entwicklungen und eigenen Ideen z.B. für crypt-seite-erstellen , für Unicode-Zeichen Transformationen , für Zeichen Auswahl .

Mehr in der Veranstaltung.



Projekt-Einführung( Poetik ) Technologische Ebenbilder?

Neue Ideen können nicht "von der Stange weg" gekauft werden. Zu neue Ideen gehört ein erweiterter Raum des bisherigen Denkens. So versucht z.B. die 3sat.de Bionik ( Wissenschaft ), erfolgreiche Konzepte aus der Evolution mit modernen Medthoden und Techniken innovative zu verknüpfen. In vielschichtiger Weise können evolutionäre Mechanismen ( Variation, Selektion, Fitnessfunktion ) zu digitalen Ähnlichkeitsmustern führen.

Wie können im Umfeld von selfmade-App-Komponenten und technologischen Ähnlichkeiten Begriffe von Variation, Selektion und Retention innovativ gedacht werden? Was deuten Variation, Selektion und Retention bei "digitalen Datenfriedhöfen"?

 Variation 
   entspricht wechselseitigen Prozessen 
   mit unvorhersehbaren Änderungen.
 Selektion 
   entspricht Mechanismen, die besser angepaßte 
   Komponenten bedingt bevorzugen (Fitnessfunktion).
 Retention 
   Fähigkeit von Diensten (Software oder Webdienste), 
   Nutzer zu regelmäßigem Gebrauch zu animieren und
   Nutzer nachhaltig zu binden. 

Hat Literatur in irgend einer Weise mit uneinsichtig Verborgenem zu tun? Hat Poetik 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"?

 Kristian Kraljić: 
 Sie können Programmieren mit Poesie vergleichen,
 Eine harmonische Schrift ist ein Stück Kreativität, 
 welche immer bleibt.

Neue Ideen können nicht "von der Stange weg" gekauft werden. Zu neue Ideen gehört ein erweiterter Raum des bisherigen Denkens. 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 .

 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.

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.

Projekt-Einführung( Mythologie ) Ägyptische Mythologie

Historische Mythologien können vielschichtig interpretiert werden. 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.

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" ).



Historische Mythologien
können vielschichtig
interpretiert werden.


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.



Projekt-Einführung ( allgemein, Ontologie,Mensch und Sinne ) … Web-Cryptography-API

Seit es Menschen gibt, gibt es das "Unzugängliches, Uneinsichtiges, Verborgenes". 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? Siehe z.B. Ontologie und Mensch und Sinne .

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  obenlesen 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.



Projekt-Einführung ( Webtechnologien, Ver-/Entschlüsseln ) … Web-Cryptography-API

Das "Netz" wandelt sich.

Transport-Verschlüssselungen sind von Ressourcen-Verschlüssselungen zu unterscheiden.
Ende-zu-Ende-Verschlüsselungen sind von Punkt-zu-Punkt-Verschlüsselungen zu unterscheiden.

Bei einer Ende-zu-Ende-Verschlüsselung ( E2EE = end-to-end encryption ) werden die verschlüsselten Daten über alle Übertragungsstationen hinweg übertragen ( OpenPGP und S/MIME bei E-Mail, Signal-Protokolle, OTR und OMEMO bei Chat, ZRTP/SRTP ).
Bei der Punkt-zu-Punkt-Verschlüsselung (P2PE = point-to-point encryption) wird die Übertragungsstrecke ( Teilstrecke ) zwischen zwei Netzkomponenten verschlüsselt.

Siehe z.B. de.wikipedia Session Initiation Protocol , MS Verschlüsselungshierarchie , Security Encryption Overview ( Azure )

Das Internet wandelt sich. Die "Encrypted Media Extensions" (EME) war seit Jahren eine umkämpfte Technik. Das Digitale-Rechte-Kontroll-Management (DRM) wird in Hardware und Software offiziell verankert. Dadurch können Copyright-Ansprüche weltweit und flächendeckend besser durchsetzt werden. Hier Weblinks zu Heise-Artikel ( 2017 ) Browser-Kopierschutzstandard , What s A pp ( Test-Hinter-den-Kulissen ),
Hier w3.org-Weblinks HTML 5.1 ( W3C Recommendation 3 October 2017 ), HTML 5.2 ( W3C Proposed Recommendation, 02 November 2017 ), WebCryptoAPI , ietf.org RFC7518

Zu einem Web-Cryptography-API gehören Operationen, wie z.B.

  encrypt,     decrypt,   sign,      verify,   
  deriveBits,  wrapKey,   unwrapKey, generateKey, 
  importKey,   exportKey, get key length
Algorithm name encrypt decrypt sign verify digest generateKey deriveKey deriveBits importKey exportKey wrapKey unwrapKey
RSASSA-PKCS1-v1_5
RSA-PSS
RSA-OAEP
ECDSA
ECDH
AES-CTR
AES-CBC
AES-GCM
AES-KW
HMAC
SHA-1
SHA-256
SHA-384
SHA-512
HKDF
PBKDF2


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

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.

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



Beispiel: Primzahlen und Zahlenbasis für self-made-Algorithmen

Wie können die ersten 258 Primzahlen in der Basen 2, 3, 4, ...,8, 9, 10,..., 16, ..., 32, ... 36 dargestellt werden?

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


Beispiel: Numerik ( nativ vs. ECMAScript ) interne Zahlen/Zeichen-Darstellungen

"int-nativ-Systeme": Eine Multiplikation c*30 kann auf einem "int-nativ-System" durch schnelle Shift-Operationen gemacht werden, denn

 c * 30 = ( c * 16 - c ) * 2

 c * 30 = ( c * 2^4 - c ) * 2^1

 c * 30 = ( c << 4 - c ) << 1

Wie erfolgen bei Ecmascript die internen Verarbeitungen? Wie erfolgt die Weitergabe zu den bitweisen Operatoren?

Bitweise Operatoren ( Bitwise logical operators ) werden auf Sequenzen aus 32 bit angewandt. Intern verwendet Ecmascript das ( nativ Hardware-Zahlen-Format ) double. Durch diese internen Umwandlungen werden bitweise Operatoren bei Ecmascript "langsamer". Ab ECMAScript 6 können ( nicht bei allen Browsern ) auch "getypte Zahlen" verwendet werden. Siehe z.B. mozilla.org Bitwise Operatoren , Methoden Index .

 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 

 Zahlreiche Primzahlen ergeben sich mit

 var mop = [ 1 + c*30,  7 + c*30, 11 + c*30, 13 + c*30, 
            17 + c*30, 19 + c*30, 23 + c*30, 29 + c*30 ]; 
 // mop.length = 8

 Z.B. liefert c = 2183 für w = 29 + c*30; 
 den Wert  w_max = (29 + 2183*30) = 65519


Beispiel: Umwandlungen mit String-Basen UTF-8 nach Byte-Str und HEX-Folge

Bei diesem Projekt sollen UTF-8 Strings verwendet werden, die für die weitere Verarbeitung in HEX-Zeichen ( "0", "1","2","3", ..., "9", "a","b","c","d","e","f" ) umgewandelt werden. Für die Ver-/Entschlüsselung werden HEX-Zeichen verwendet. Für Client-Server- Übertragungen ( AJAX, POST ) werden alle Daten in ein JSON-Objekt mit den JSON.stringify(HEX-Zeichen) getan. Analog die Server-Client-Übertragungen.

Hier einige Hilfsfunktionen ( siehe Seiten-Quelltext ):





Beispiel: Teste Zeichen-Häufigkeiten 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)
Beispiel: Crypt-Einstieg (  Lehrbeispiel   ) self_simple_cryp

a) Die Funktion txt2htm(s) wandelt Code, der die Zeichen "&", "<", ">" enthalten kann, in den zugehörigen html-Quelltext. Die folgende Art mit innere Closer-Funktion ist für ähnliche Nutzung vielfältig erweiterbar.

function txt2htm(s) { 
  var o={ "&": "&amp;",  "<": "&lt;",  ">": "&gt;" }; 
  return s.replace(/[&<>]/gm,function(c) { return o[c]; }); 
}

b) Wir verwenden Unicode-Zeichen ( UTF-8 ). Das i-te Zeichen in einem UTF-8-String s ist s.charAt(i) und die Unicode-Nummer des i-te Zeichens ist s.charCodeAt(i). Es sei c = s.charCodeAt(i).
Welcher String ergibt sich für ein zeichenweises-xor von 43 mit s? Etwa ( c^43 || c ) ...
Welcher String ergibt sich für ein zeichenweises-xor von 13 mit s? Etwa ( c^13 || c ) ...

c) Die Funktion var crypt_str = self_simple_cryp(utf8, pw, qw) macht mit den beiden Passwörtern pw und qw aus dem String utf8 einen verschlüsselten Sting crypt_str. Ein erneuter Funktioonsaufruf utf8 = self_simple_cryp(crypt_str, pw, qw) macht wieder den wieder den ursprünglichen Ausgangsstring utf8.
Prinzip:

 function self_simple_cryp(utf8, pw, qw) { 
   var i, c, p, sLen = utf8.length,
   kLen = qw.length, k = kLen,
   pLen = pw.length, j = pLen, r = [];

   for (i = 0; i < sLen; i += 1) {
     j = j + 1; if (j >= pLen) { j = 0; }
     k = k + 1; if (k >= kLen) { k = 0; }
     p = pw.charCodeAt(j); p = (p ^ qw.charCodeAt(k)) || p;
     c = utf8.charCodeAt(i); c = (p ^ c) || c;
     r.push(String.fromCharCode(c));
   } return r.join("");
 }

Beispiel ( mit Sicherheit gegen Code-Injektion ):



Beispiel: Pseudo-Zufallsgeneatoren Hinweise

In gewisser Weise können Zufallszahlen das "Unvorhersehbare zufällig simulieren" ( siehe z.B. Zufallszahlen , 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: 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(anzZeichen, idxAuswahlGruppe) { 
   var i, n, len, r = "",
   a = ["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
        "✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡"
        // ...
   ];
   anzZeichen = anzZeichen || 5;
   idxAuswahlGruppe = idxAuswahlGruppe || 0; 
   s = a[idxAuswahlGruppe]; 
   len = s.length;

   for (i = 0; i < anzZeichen; i += 1) {
     n = Math.floor(Math.random() * len);
     r += s.charAt(n);
   } return r;
 }

Teste Zufall-Passwort-Generierung:

idxAuswahlGruppe = 0 mit der Anzahl von Zeichen : 5 10 20   

idxAuswahlGruppe = 1 mit anderm Unicode-Block :   5 10 20   

idxAuswahlGruppe = 2 mit anderm Unicode-Block :   5 10 20   

idxAuswahlGruppe = 3 mit anderm Unicode-Block :   5 10 20   


Beispiel: Generiere Zufalls GUID

Zu Identifizierungsnummern gehört eine innere Struktur. Die Strukturierung erlaubt Abgrenzungen und plausibilitätsprüfungen. Eine "Session" kann eine "sessionId" verwenden. Hier kommen lediglich Beispiele. Wie können Zufallszahlen pseudo GUID's generieren?

 function zufalls_genUID_simple() {"use strict";
   function s4() {
     var rnd = Math.floor((1 + Math.random())*0x10000);
     return rnd.toString(16).substring(1);
   } return s4()+s4()+"-"+s4()+"-"+s4()+"-"+s4()+"-"+s4()+s4()+s4();
 }
 function generiere_zuf_UID() {"use strict";
   var r, v, muster = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
   return muster.replace(/[xy]/g, function (c) {
     r = Math.random() * 16 | 0;
     v = (c === "x") ? r : (r & 3 | 8);
     return v.toString(16);
   }); 
 }

Beispiel: Hash-Funktion ( Java ) multiply-and-add

Java verwendet für den hash-code einen "simple multiply-and-add algorithm" gemäß
hash-wert = s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1];


 function hash_code_simple( s ) {
 var  i, c, h = 0, len = s.length;
 for (i = 0; i < len; i += 1){
   c = s.charCodeAt(i);
   h = 31 * h + s.charCodeAt(i);
   h = h >>> 0;
 } return h;
}


Beispiel: Hash-String mit Zufallszahlen Wie geht das?

Hash-String mit Zufallszahlen: Zunächst ein einfaches, übersichtliches Verfahren, das den Faktor 69069 verwendet:

 function pseudo_hash_str1(utf8) { "use strict";
   var i, d, t, c = 0, r = "", 
   len = utf8.length - 1;
   for (i = len; i >= 0; i -= 1) {
        t = utf8.charCodeAt(len - i);
        c += utf8.charCodeAt(len - i);
        c += utf8.charCodeAt(i);
        d = 69069 * c + t >>> 0;
        r += d.toString(16);
   } return r;
 } 
 //====================================================
 function pseudo_hash_str2(utf8) { "use strict";
   var i, c, s, h = 0, r = [];
   for (i = 0; i < utf8.length; i += 1) {
        c = utf8.charCodeAt(i);
        if (h > 0xffffff) { h = h & 0xfffff; }
         h = (31 * h + c) >>> 0;
         s = h.toString(16);
         s = s.substr(1, 5);
         r.push(s);
   } return r.join("<br>");
 }
 //====================================================
  function pseudo_hash_str3(utf8) {  "use strict";
   var i, c, s, base = 16, r = [];
   for (i = utf8.length - 1; i >= 0; i -= 1) {
        c = utf8.charCodeAt(i);
        c ^= c << 13;
        c ^= c >> 17;
        c ^= c << 5;
        s = c.toString(base);
        s = s.substr(1, 5);
        r.push(s);
   } return r.join("<br>");
 }
 //====================================================
Beispiel: Zufallspasswort mit Unicode-Zeichen Math.random() Browser-abhängig
UTF8-String: Zahlenbasis ( 2...36)

Bitte den Quellcode anschauen ( x = 69069 * x + seed >>> 0 ) und andere Eingaben testen. Wie steht es mit den Zeichenhäufigkeiten?



Beispiel: xor_shift(seed) DEMO

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

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 .

 // Prinzip etwa:
 function xor_shift(seed) {
   //x: seed, max_val: Math.pow(2, 31),
   this.x ^= this.x << 13;
   this.x ^= this.x >> 17;
   this.x ^= this.x << 5;
   return Math.abs(this.x / this.max_val);
 }

Teste : Zeichne auf Canvas seed: 0x82827
"schwarz" dot_count: 100,
"rot", dot_count: 10000,
"grün", dot_count: 10000
"blau", dot_count: 2500, farbe: "#004"/"#449"/"#00a"/"#aaf"

"grau", seed:1, volle_breite:true, dot_count: 20000



Test-Beispiel mit UTF-8-String:

var utf8_bsp =

byte_chrs_from_utf8_str(utf8_bsp) =

hex_chars_from_utf8_str(utf8_bsp) =



Beispiel: Self-Made-Hash-Funktion Wie?

Sicher erscheinende kryptologischer Hashfunktionen können standardisiert werden. Mit einer digitalen Signatur kann die Integrität einer Nachricht zugesichert werden. Siehe z.B. de.wikipedia Secure Hash Algorithm

Welcher "optimalen digitalen Fingerabdrücke" gehören zu

Je nach Anwendung können unterschiedliche Hashfunktionen verwendet werden, siehe z.B.. Hashtabelle . 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

Notwendige Erfordernisse hängen legen die erforderliche Merkmalen fest. Wie kann ein einfacher "Self-Made-Hash-Algorithmus" gemacht werden?

Beispiel:

Mögliche Primzahl-Kandidaten sind ( n = 0, 1, 2, 3, ... ): Lediglich ein Experiment:

1 + k*30; 7 + k*30; 11 + k*30; 13 + k*30; 17 + k*30; 19 + k*30; 23 + k*30; 29 + k*30

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