8. Aufgabe ( self-made Ver-/Entschlüsselungen )

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 vermehrt zu Allzweckwerkzeugen mit verbesserten Methoden und "zusichernden" Einstellungen. Browser werden vermehrt für Internet-Apps verwendet. Eine "unlokalisierbare, fraktale" Cloud-Security verweist auf ein "weites, unübersichtliches, pfadloses Internet". Dies ist der gedankliche Hintergrund dieser Lehraufgabe. Hier die Kurzfassung der Aufgabe:

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. Zu jedem Algorithmus wird angegeben, welche Angriffe erwartet werden, wie z.B. Ciphertext-only-Angriffen und ggf. Known-Plaintext-Angriffe. Kryptologie ( Einführung ) , clientseitige Experimente mit Zeichen ,    Crypt-Seite-erstellen  

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.

Einige Vorbetrachtungen ... Was ist im Internet sicher?

Das Web entwicklt sich von einem rein statischen Seitenlieferanten hin zu einem Ausliefern von Clienseitigen 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.

Webanwendungen können JavaScript, AJAX, JOSONP, Java Applets, Flash-Animationen, ActiveX-Plugins und mehr enthalten.

Zur Vorbereitung des gesamten Kryptographie-Projektes können die folgenden Hinweise nützlich sein: Internet ( Gefährdungen ) , Internet-FAQ's , Kryptologie ( Einführung ) , de.wikipedia: Kryptologisches_Verfahren (Kategorien), Klassische Kryptologie (Kategorien), kryptologische Verfahren und Protokolle (Kategorien), Verschlüsselungsverfahren , Blockverschlüsselung (wie DES, Camellia, RC2, 3DES, FEAL, RC6, AES, Blowfish, Serpent, IDEA, Twofish, Skipjack, CAST, MARS, TEA, XTEA), Homophone Verschlüsselung , Hypertext Transfer Protocol Secure , WPA2 , Stromverschlüsselung wie z.B. RC4 ( HTTPS, SSH 1, WEP, WPA, ... ), Linear rückgekkoppeltes Schieberegister en.wikipedia: Comparison Of Stream Ciphers , One-Time-Pad

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.

Textuelle Informationen sind in Strings unterschiedlicher Art codiert. Die Kenntnis von Strings, deren Aufbau, deren Funktionen ist mehr oder minder spezifisch. Deshalb kann ein Toolchen sinnvoll sein, das sowohl ECMAString- als auch PHP-Funktionen ausführen und untersuchen kann.

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

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

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

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.

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.

<html><body>

<p> 404 File not found 
    <script>...</script>
</p> 

</body></html>
Hinweise zur UTF-8/Bytefolge Codierung UTF-8 und Bytefolge

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 encode_utf8(str) {
  try { str = unescape(encodeURIComponent(str)); 
  } catch (e1) { /*win.alert('ERR: encode_utf8()');*/ }
  return str;
}
function decode_utf8(str) {
  try { str = decodeURIComponent(escape(str)); 
      } catch (e2) { /*win.alert('ERR: decode_utf8()');*/ }
  return str;
}

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? Siehe z.B. en.wikipedia Cryptographic hash function

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

Viel Freude bei der Ausarbeitung!
Letzter Abgabetermine So 12.00 Uhr