Aufgabe 8 ( Ver- und Ent-Schlüsseln ) Kryptologie

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.

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. Dies ist der gedankliche Hintergrund dieser Lehraufgabe. Gedanken-Beispiel: Wie können als Ergebnis dieser Übung E-Mail Verschlüsselungen ( Client zu Client ) mit Self-Made-Algorithmen gemacht werden? Hier die Kurzfassung der Aufgabenstellung:

Es sollen mehrere kleine, robuste ( auch historische ) Algorithmen zum Ver- und Entschlüsseln von UTF-8 Texten entworfen, in ECMAScript codiert und in einem Toolchen getestet werden. Die Algorithmen zum Ver- und Ent-Schlüsseln sind "self-made". Plagiate sind "out". Zu jedem Algorithmus wird angegeben, welche Angriffe erwartet werden, wie z.B. Ciphertext-only-Angriffen und ggf. Known-Plaintext-Angriffe. Das Toolchen erhält den Namen "Ver- und Entschlüsselungen".


Vorbetrachtungen Tummelplatz Internet

Das weltweite Internet ist 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 ).

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

Siehe 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

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


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

Viel Freude bei der Ausarbeitung!
Letzter Abgabetermine So 12.00 Uhr