Ver- und Ent-Schlüsseln ( Kryptologie ) Datenschutz

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


Kryptologie Einführendes

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?

"Geheim, Vertraulich, Intern, Öffentlich" Was ist sicher/unsicher?

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

Schutz personenbezogener Daten in EU Wie geht das organisatorisch-technisch?

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.
Sichere Informationen? Ist RIA, ARIA, JSONP, XSS sicher?

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>
Tummelplatz Internet Big Data

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 ( Repetition ) Public-Web-Sicherheit?

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.

Beispiel: Kryptologie und Zufallszahlen interner Link

Siehe Liste von Kryptografie-Algorithmen und ( intern ) Zufallszahlen

Beispiel: ECMAScript und Bitwise Operatoren a & b, a | b, a ^ b, ~ a, a << b, a >> b, a >>> b

Siehe mozilla.org Bitwise Operatoren .

Beispiel: UTF-8-Zeichen als Byte-Folge verschlüsseln Crypt-Seite-erstellen

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);
}




Beispiel: Teste einen Algorithmus Crypt-Seite-erstellen

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;
}

Teste my_crypt(mod, str, key_utf8)

1. UTF-8-Klartext eingeben


2. UTF-8-Passwort eingeben: 

3.  (Verschlüsselten Text als xx-Hex-Folge anzeigen ↓)


4.  (Entschlüsselten UTF-8-Text anzeigen ↓)


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);
  }
}
Basisiwwissen und Anschauung "Zeichensalat"?

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":

  1. unter dem Menü-Punkt "Bearbeiten Zeichenoperationen Transformat"
    [encode_utf8] auswählen (macht aus utf-8-Zeichenstring einen Byte-String) Bitte die geänderten Unicode-Zeichen im unteren Editor anschauen.
  2. Mit [Transformat] die Stringlänge des oberen Texteditors anzeigen. Editor-Content unten und oben vertauschen und mit [Transformat] die Stringlänge des encode_utf8-Textes anzeigen.
  3. Mit Generieren [xor43-Verschlüsselung] auswählen und anwenden.
  4. (Editoren-Tausch ↑↓) und unter [Transformat]
    [encode_base64] auswählen (macht aus einem Byte-String einen base64-String)

Erzeugen sie bitte von Hand die Rückwärtstransformation, so daß wieder der orginal-String erscheint.

Wie sieht eine 'geschützte Seite' etwa aus? Gibt es einen Entwurf?

Mit dem Entwurf eines Erstellungstoolchen kann eine 'geschützte Seite' erstellt und angesehen werden.

"Selfmade" Verschlüsselungsalgorithmus Ist dieser Algorithmus sicher?

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;
}
Hash-Code Wozu?

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);
  }
}
Gibt es hierzu Self-Assessments? einige MCT-Fragen ...

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 Weblinks externe und interne

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