Hans Krailsheimer (1888-1958): "Talente finden Lösungen, Genies entdecken Probleme."
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.
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.
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?
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.
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.
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" ).
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.
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.
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
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 |
"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
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 ):
function byte_chrs_from_utf8_str(utf8) { var byte_chrs = ''; try { byte_chrs = unescape(encodeURIComponent(utf8)); } catch (e) { } return byte_chrs; } function utf8_str_from_byte_chrs(byte_chrs) { var utf8 = ''; try { utf8 = decodeURIComponent(escape(byte_chrs)); } catch (e) {utf8 = ''; } return utf8; }
// Bsp: hex_chars_from_utf8_str("äöüÄÖÜß") liefert "c3a4c3b6c3bcc384c396c39cc39f" function hex_chars_from_utf8_str(utf8) { var i, c, byte_chrs = byte_chrs_from_utf8_str(utf8), hex_chars = ""; for (i = 0; i < byte_chrs.length; i += 1) { c = byte_chrs.charCodeAt(i).toString(16); if (c.length == 2) { hex_chars += c; } else if (c.length == 1) { hex_chars += "0" + c; } } return hex_chars; } // Bsp: utf8_str_from_hex_chrs("c3a4c3b6c3bcc384c396c39cc39f") liefert "äöüÄÖÜß" function utf8_str_from_hex_chrs(hex_chrs) { var byte_chrs = hex_chrs.replace(/([0-9a-f]{2})/g, function (a,c) { return String.fromCharCode(parseInt(c,16));}); return utf8_str_from_byte_chrs(byte_chrs); }
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?
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={ "&": "&", "<": "<", ">": ">" };
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 ):
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 ).
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"?
function zuf_float( min, max ) { return min + (max - min) * rnd(); } function zuf_int ( min, max ) { return Math.floor( min + (max - min + 1) * rnd() ); } function zuf_char ( min, max ) { return String.fromCharCode( zuf_int(min, max) ); }
var dez_num = 69069, // 69069 = 3·7·11·13·23
bin_str = dez_num.toString(2),
bin_num = parseInt(bin_str,2);
// liefert dez_num = 69069,
// liefert bin_str = 10000110111001101,
// liefert bin_num = 69069
Beispiel für ein Addieren ( number-wrapping bei 2^32 ) mit 16-bit Operationen ( Microcontroller ):
function safe_add(x, y) { var msw, lsw = (x & 0xFFFF) + (y & 0xFFFF); msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); }
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
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); }); }
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; }
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>"); } //====================================================
Bitte den Quellcode anschauen ( x = 69069 * x + seed >>> 0 ) und andere Eingaben testen. Wie steht es mit den Zeichenhäufigkeiten?
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
var utf8_bsp =
byte_chrs_from_utf8_str(utf8_bsp) =
hex_chars_from_utf8_str(utf8_bsp) =
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:
Plagiate sind out!
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermine So 12.00 Uhr