Konrad Zuse ( 22.06.1910 Berlin - 18.12.1995 in Fulda ):
Die Gefahr, dass der Computer so wird wie der Mensch,
ist nicht so groß wie die Gefahr,
dass der Mensch so wird wie der Computer.
Browser werden zu Allzweckwerkzeugen und für Internet-Apps verwendet. Wie können Internet-Ressourcen ( end to end ) verschlüsselt werden? Hier die Kurzfassung der Aufgabenstellung:
Es sollen mehrere kleine, robuste ( auch historische ) Algorithmen zum Ver- und Entschlüsseln von UTF-8 Texten ( plain-Text, HTML, SVG, XML, usw. ) entworfen, in ECMAScript codiert und in einem Toolchen getestet werden. Diese Algorithmen zum Ver- und Ent-Schlüsseln sind "self-made". Plagiate sind "out". Zu jedem Algorithmus wird in der Aktivitäten-Liste angegeben, welche Angriffe erwartet werden, wie z.B. Ciphertext-only-Angriffen und ggf. Known-Plaintext-Angriffe, usw. Später sollen diese Algorithmen auch für die JSON-Übertragungen von AJAX-Daten ( Text-Content z.B. nach Crypt-Methode A und Metadaten z.B. nach Crypt-Methode B ) verwendet werden. Das Toolchen erhält den Namen "Crypt-Seite-erstellen" und dient dem Ver- und Entschlüsseln von Webseiten ( Ressourcenverschlüsselung ).
Die Kryptologie ist eine 'alte Wissenschaft vom Verborgenen' Siehe z.B. Wikipedia: Kryptologie , Kryptographie . Im Internet gibt es hierzu zahlreiche Tutorials siehe z.B. Kryptologie. Hier sind einige Fragen zur Eigenerkundung Kryptologie
Die Kryptologie hängt zusammen mit der Kryptografie, Kryptanalyse, Informationssicherheit , Verschlüsselungsverfahren, digitale Signaturen, Identifikationsprotokolle, kryptografische Hashfunktionen, Geheimnisteilung, elektronische Wahlverfahren, elektronisches Geld, usw. beschäftigt.
Diese Aufgabe besteht darin, ein Tool "Erstelle HTML-Seite mit verschlüsselten Quelltext" zu entwickeln. Das Tool soll den Der body-Qulltext einer HTML-Seite soll verschlüsselt sein. Die erstellte verschlüsselt Seite kann wie eine normale HTML-Seite gespeichert und im Netz übertragen werden. Ein Leser braucht ein gültiges Passwort, das in der Seite eingegeben wird, damit die Seite lesbar ist.
Wird als Ausgangsstring z.B. der HTML-body (ohne das body-Tag) verwendet, so kann ein Toolchen die Verschlüsselung mit einem Passwort durchführen und die HTML-Seite mit dem Header (einschließlich der Funktionen zum entschlüsseln) erzeugen (siehe z.B. geschützte Seite präparieren ). Wie können die statischen, lesbaren Darstellungen der Header-Funktionen (einfach) verschlüsselt werden?
Was meint der Begriff Identität? Was ist ein Identitätsdiebstahl? In der Logik bezeichnet Identität das Prinzip der Ununterscheidbarkeit. In der Mathematik gibt die "Identische Abbildung" genau die Argumente zurück. Im Alltag bezeichnet Identität ausgewählte Eigenschaften und Eigentümlichkeiten, die die Identität mit Hilfe von Attributen festlegen sollen. Zu jedem Menschen gehört eine biologische Identität (de.wikipedia Genom ) und der Genetischer Code .
Was ist "Sicherheit"? Sicherheit ist ein fasettenreicher Begriff. Sicherheit umfaßt z.B. Technische Aspekte, Sicherheitstechniken, Angriffssicherheit, Betriebssicherheit, Systemsicherheit, und auch individuelle/zwischenmenschliche/kollektive/wirtschaftliche Sicherheiten.
Siehe auch Geheim-Vertraulich-Intern-Öffentlich .
Authentifizierung möchte das "von wem" zusichern. Integrität möchte die "Unveränderbarkeit" zusichern. Verbindlichkeit möchte die "Unabstreitbarkeit" zusichern. Vertraulichkeit möchte das "unbefugte Verbreiten von Geheimen" verhindern.
Wer ist die "verbürgende Vertrauensautorität" ( propritär?, staatlich?, ... ) ? Zertifizierungsstellen und Zertifikate ( engl. CA = Certification Authority ). Zertifizierung und Stichworte, wie Gütesiegel‚ Gütezeichen oder Qualitätssiegel, Prüfzeichen oder Prüfsiegel. Siehe z.B. Prüfsiegel Zur Verbesserung der Informationssicherheit kann eine internationale Zertifizierung von Informationssystemen beitragen. Ein "sichers System" möchte die interne/externe Integrität und Konsistenz bewahren und unzulässige System-Modifikationen durch autorisierte/unautorisierte Anwender verhindern. Oft werden die folgenden Zustände unterschieden:
Geheim Vertraulich
↑ nicht nach oben schreiben ↓ nicht nach unten lesen
Intern Öffentlich
In der CHARTA DER GRUNDRECHTE DER EUROPÄISCHEN UNION (2000/C 364/01), dort im Artikel 8 steht:
Schutz personenbezogener Daten (1) Jede Person hat das Recht auf Schutz der sie betreffenden personenbezogenen Daten. (2) Diese Daten dürfen nur nach Treu und Glauben für festgelegte Zwecke und mit Einwilligung der betroffenen Person oder auf einer sonstigen gesetzlich geregelten legitimen Grundlage verarbeitet werden. Jede Person hat das Recht, Auskunft über die sie betreffenden erhobenen Daten zu erhalten und die Berichtigung der Daten zu erwirken.
Einführend wird eine ungewünschte Attacke gezeigt. Diese einfache Attacke kann in den Sicherheitsgrenzen des Browsers z.B. seitenübergreifende Cookies, tracking Cookies, localStore, Rückmeldungen per AJAX usw. benutzen.
Ein Link auf eine Seite, wie etwa die folgende Seite, würde dem Betrachter eine nicht vorhanden Seite ("hängenden Link") zeigen, was tatsächlich passiert, bleibt dem Betrachter verborgen. Siehe auch Laden-von-ECMAScript-Code .
<html><body> <p> 404 File not found <script>...</script> </p> </body></html>
H. Stanley Judd: The ultimate security is your understanding of reality.
Bei weltweiten Datenströmen und verteilten Datenspeicherungen gibt es undurchaubare, nationale Zuständigkeiten und fehlende Rechtsicherheiten. Multinationale Cloud-Security scheinen unlokalisierbar und zeigen irgendwie in ein weltweites, unduchschaubar-pfadiges Internet. Ein zentrale ( Software-) Herausforderung bei "Big-Data" sind die Transformationen zwischen "Nativ-stored Data", "Linked Data" und "Semantic Web". Hier eine grobe Schätzung ( 2014 ) zu Big Data :
Subnets IPs google.com 285 000 1 561 000 bing.com 67 000 163 000 ask.com 55 000 115 000 altavista.com 52 000 97 000 search.msn.com 21 000 34 000 myweb2.search.yahoo.com 29 000 62 000 search.twitter.com 38 000 87 000 search.ebay.com 17 000 28 000 freefind.com 12 000 20 000 dogpile.com 20 000 29 000
Bei einem weltweiten Datenaufkommen von ca. 1 Mrd. Gigabyte jeden Tag ( 2013 )
ist das weltweite Internet ein unübersichtlicher Tummelplatz für Nutzware und Schadware
(siehe z.B.
Informationssicherheit
).
Die Sicherheit in internationalen Netzen fordern eine hohe Sicherheit bei Browsern.
Informationssicherheit möchte
Hier einige Hinweise zur Informationssicherheit (Gremien, Organisationen, ECMAScript, JONSP): Geheim-Vertraulich-Intern-Öffentlich , Informationssicherheit (toter-Weblink) , Informationssicherheit (Organisationen) , Sicherheit (Gremien-und-Organisationen) , Online-Tracker , Laden-von-ECMAScript-Code , Was-meint-JSONP
Ggf. können auch die folgenden Weblinks Ideen zum Ver- und Entschlüsseln liefern: Kryptologie ( Einführung ) , clientseitige Experimente mit Zeichen , Crypt-Seite-erstellen . Zur Wiederholung können die folgenden Hinweise nützlich sein: Internet ( Gefährdungen ) , Kryptologie ( Einführung ) , Internet-FAQ's , Informatonssicherheit ( Self-Assessments ).
Kryptologie ("Lehre vom Verborgenen") besteht aus Kryptographie und Kryptoanalyse. Kryptographie beschäftigt sich mit der Konstruktion von Chiffren ("Verbergendes Schreiben"), Kryptoanalyse mit dem Brechen von Chiffren ("Untersuchung des Verborgenen"). Der Sprachgebrauch ist uneinheitlich. Die Begriffe "Code" und "Chiffre", und ebenso "Codierung/Verschlüsselung" und "Chiffrierung", sowie "Rückumwandlung" und "Dechiffrierung" werden oft nebeneinander (überdeckend) verwendet.
Das Web entwickelt sich von rein statischen Seiten hin zu Web-Applikationen. Das Acronym RIA ( Begriff Rich Internet Application, deutsch: reichhaltige Internet-Anwendung) beschreibt eine Anwendung, die Internet-Techniken benutzt und eine intuitive Benutzeroberfläche hat. RIA braucht Programmlogik auf dem Client. Im Web dienen Formulare der Dateneingabe. Formulareingaben können geprüft, übertragene Daten verschlüsselt werden. Webanwendungen können JavaScript, AJAX, JOSONP, Java Applets, Flash-Animationen, ActiveX-Plugins und mehr enthalten.
Siehe Liste von Kryptografie-Algorithmen und ( intern ) Zufallszahlen
Siehe mozilla.org Bitwise Operatoren .
Um eine UTF-8 Zeichenfolge in eine Bytefolge (und umgekehrt) zu wandeln, können die eingebauten Funktionen escape(), unescape(), encodeURIComponent(), decodeURIComponent() verwendet werden, etwa
// UTF-8 function byte_chrs_from_utf8_str(utf8) { var byte_chrs = ''; try { byte_chrs = window.unescape(window.encodeURIComponent(utf8)); } catch (e) { window.alert('ERR: byte_chrs_from_utf8_str utf8'); } return byte_chrs; } function utf8_str_from_byte_chrs(byte_chrs) { var utf8 = ''; try { utf8 = window.decodeURIComponent(window.escape(byte_chrs)); } catch (e) { window.alert('ERR: utf8_str_from_byte_chrs bytes'); } return utf8; } // Base64 function str_mit_base64_chars_von(str_mit_byte_chrs) {return btoa(str_mit_byte_chrs);} function str_mit_byte_chrs_von(str_mit_base64_chars) {return atob(str_mit_base64_chars);} // Hex 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; } 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); }
Als Ausgangspunkt für Ver- und Entschlüsselungen von UTF-8-Klartexten kann die nachfolgende Funktion my_crypt(mod, str, key_utf8) verwendet werden:
function my_crypt(mod, str, key_utf8) { var i, ii, j, jj, nn, cc, zz, k8, r, k, kl, s = []; key_utf8 = key_utf8 || 'äöü+'; k8 = window.unescape(encodeURIComponent(key_utf8)); kl = k8.length; switch (mod) { case "encode": // wandelt utf-8 nach str aus 8-Bit-char xx str = window.unescape(encodeURIComponent(str)); break; case "decode": // wandle xx in str aus 8-Bit-char cc = str; str = ''; for (i = 0; i < cc.length - 1; i += 2) { str += String.fromCharCode(parseInt(cc.slice(i, i + 2), 16)); } break; default: return ''; } for (i = 0; i < 256; i += 1) { s[i] = i; } j = 0; for (i = 0; i < 256; i += 1) { ii = i % kl; j = (j + s[i] + k8.charCodeAt(ii)) % 256; zz = s[i]; s[i] = s[j]; s[j] = zz; } ii = jj = nn = 0; r = ''; for (i = 0; i < str.length; i += 1) { ii = (ii + 1) % 256; jj = (jj + s[ii]) % 256; zz = s[ii]; s[ii] = s[jj]; s[jj] = zz; zz = s[(s[ii] + s[jj]) % 256]; cc = str.charCodeAt(i) % 256; nn = (cc ^ zz) % 256; switch (mod) { case "encode": r += ('00' + nn.toString(16)).slice(-2); break; case "decode": r += String.fromCharCode(nn); break; default: return ''; } } if (mod === "decode") { try { r = decodeURIComponent(window.escape(r)); } catch (e3) { return ''; } } return r; }
Wie kann eine Paßwort-Erweiterung mit Hash-Code gemacht werden?
Ein Passwort (und Teile davon) können zahlreiche Hash-Werte liefern, die das ursprüngliche Passwort "verkomplizierend erweitern" können. Ist das ursprüngliche Passwort unbekannt, so ist es auch das "verkomplizierte".
Nachfolgend eine einfache kryptografische Hash-Funktion, die zu einem String s einen Hash-Wert liefert. base kann 2,3,4,...,32 sein. Die Funktion kann für die einfache "Verhashung" von Text-Content, Datumsstempel, Metatdaten, Formularen oder anderer Formelement-Werte verwendet werden.
function myhash(s, base) { var i, h, g, c; base = base || 10; s = s.replace(/\r/g, ''); if (!s || s === "") {return 0;} else { 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); } }
Was gehört zum Grundwissen? Bei HTML-Quelltext geht es um Zeichen. Heute ist ein lateinischer Zeichensatz oft nicht ausreichend (Internationalisierung). Deshalb wird ein UTF-8-Unicode-Zeichensatz unterstellt. Ein UTF-8-Unicode-Zeichen kann aus einer kodierte Bytefolge von bis zu 4 Byte bestehen.
Was gehört zum Grundwissen und kann experimentell aufgefrischt werden? Bitte zunächst mit dem mit Tool'chen experimentiert.
Zunächst kann einen Teststring in den Editor kopiert werden (Menü-Punkt MCT-erstellen text-Muster) und dann kann dieser Unicode-String im Editor z.B. in der folgenden Reihenfolge manipuliert werden:
"Vorwärts-Transformation":
Erzeugen sie bitte von Hand die Rückwärtstransformation, so daß wieder der orginal-String erscheint.
Mit dem Entwurf eines Erstellungstoolchen kann eine 'geschützte Seite' erstellt und angesehen werden.
Wie kann ein eigener Verschlüsselungs/Entschlüsselungs-Algorithmus entwickelt werden? Ein "perfekter" Algorithmus braucht umfangreiche mathematische Kenntnisse. Ein erster Versuch (wie nachfolgend) wird bei Crypt-Seite-erstellen verwendet. Der key-String wird byteweise und ggf. mehrfach auf den src-String gelegt. Aufeinanderfallende Bytes von key und str werden byteweise (=zeichenweise) mit XOR verknüpft. Jedes Byte einer Byte-Zeichen-Kette str wird "zyklisch" mit dem Byte von key verknüpft (XOR). Achtung! (str_char XOR str_char) liefert 0, d.h. kein gültiges Zeichen.
function encrypt_string(str, key) { // nur fuer 8-Bit-Zeichen var i, j, key_char, str_char, r = "", str_len = str.length, key_len = key.length; if (key_len < 1) { key = "test"; } for ( i = 0; i < str_len; i += 1) { str_char = str.charCodeAt(i); key_char = key.charCodeAt(i % key_len); if (str_char != key_char) { str_char ^= key_char; } r += String.fromCharCode(str_char); } return r; }
Hier eine (ungeprüfte) Idee für einen verbesserten Algorithmus encrypt_string_ex(src, key, n). Anstelle einer i-Schleife werden 2 Schleifen verwendet. Die ii-Schleife macht einen Index-Versatz. Nach jeder Rotation wird dieser "neue" key-String erneut auf den (nicht-rotierten) src-String gelegt und zeichenweise mit XOR verknüpft.
// NICHT GEPRÜFT! function encrypt_string_ex(src, key, n) { // nur fuer 8-Bit-Zeichen var lk = key.length, ls = src.length, nn = Math.abs(n), c, ii, i, j, k, r; // Vermutung: nn muss wohl kleiner als key.length-1 sein for (ii=0; ii < nn; ii += 1) { r = ""; for (i=0; i < ls; i += 1) { c = src.charCodeAt(i); j = ((i+ii) % lk) & 0xff; k = (key.charCodeAt(j) >>> nn)+(j&1); c = (c ^ k) & 0xff; r += String.fromCharCode(c); } src = r; } return src; }
Ein Passwort (und Teile davon) können zahlreiche Hash-Werte liefern, die das ursprüngliche Passwort "verkomplizierend erweitern" können. Ist das ursprüngliche Passwort unbekannt, so ist es auch das "verkomplizierte".
Nachfolgend eine einfache Hash-Funktion, die zu einem String s einen Hash-Wert liefert. base kann 2,3,4,...,32 sein.
function myhash(s, base) { var i, h, g, c; base = base || 10; s = s.replace(/\r/g, ''); if (!s || s === "") {return 0;} else { 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); } }
Einige Multiple-Choice-Fragen als Self-Assessments-Möglichkeit zu
Informatonssicherheit,
Ubiquitous-Pervasive-Computing,
Kryptologie ( allgemein ):
Informatonssicherheit
Ubiquitous-Pervasive-Computing
Kryptologie ( allgemein )
Trusted Computing System
Recht ( allgemein )
Einige ( externe/interne ) Weblinks: Internet ( Gefährdungen ) , Internet-FAQ's , Kryptologie ( Einführung ) , Kryptologisches_Verfahren , Klassische Kryptologie , kryptologische Verfahren und Protokolle , Verschlüsselungsverfahren , Blockverschlüsselung , Homophone Verschlüsselung , Hypertext Transfer Protocol Secure , WPA2 , Stromverschlüsselung , RC4 , Linear rückgekkoppeltes Schieberegister , Comparison Of Stream Ciphers , One-Time-Pad , Informationssicherheit , Authentifizierung , Integrität , Verbindlichkeit , Vertraulichkeit , Zertifizierung , Prüfsiegel , Sicherheit , Zertifizierung von Informationssystemen
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermine So 12.00 Uhr