Nach Kant entspricht Wahrscheinlichkeit einem Fürwahrhalten: Zur Lehre von der Gewissheit unsers Erkenntnisses gehört auch, die Lehre von der Erkenntniss des Wahrscheinlichen, das als eine Annäherung zur Gewissheit anzusehen ist.
Was ist Gewißheit? Was ist Sicherheit? Zur Datensicherheit gehören die Begriffe Vertraulichkeit (Confidentiality), Authentifizierung (Authentication), Integrität (Integrity), Verbindlichkeit (Commitment), Identität (Identity) und die Begriffe geheim (secret), vertraulich (confidential), intern (internal), öffentlich (public).
Bei "Cloud Storage" werden Anforderungen "non-proprietärer-Art" an "Protected Document Exchange" gestellt. Eine End-to-End-Verschlüsselung soll sicher sein, auch wenn kein SSL-Kommunikationskanal verfügbar ist.
Die "self-made"-App kann helfen "geschützte HTML5-Web-Seiten" zu erstellen, die als Internet-Ressourcen ( End to End ) verschlüsselt werden, selbst dann, wenn kein SSL-Kommunikationskanal verfügbar ist. Es wird eine robuste "self-made"-App entwickelt und getestet, die lokal-offline "geschützte HTML5-Seiten" erstellen kann. Zum Entschlüsseln und Anzeigen der Seite wird beim Aufruf das geheime Passwort abgefragt.
Eine "self-made"-Erstellungs-App für verschlüsselte Ressourcen ist zu entwickeln. Die App kann/soll "self-made"-Software-Komponenten verwenden, wie z.B.
Das Ergebnis sieht grob etwa so aus: crypt-seite-erstellen . Hier ist ein Anfang für das Experimentieren.
Zum Schutz personenbezogener Daten in der EU gehört der Artikel 8 ( CHARTA DER GRUNDRECHTE DER EUROPÄISCHEN UNION 2000/C 364/01). Dort 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.
Browser werden heute ( 2015 ) zu "Allzweckwerkzeugen" für dynamische Web-Sites und Internet-Apps. Bei Cloud Storage werden "abhörsichere" und "non-proprietäre" Anforderungen an "Protected Document Exchange" gestellt ( Industrie- und Werkspionage ). ein Virtueller Marktplatz, Elektronischer Handel, Internethandel, Online-Handel, Portale, Shopping-Apps, E-Commerce (en.wikipedia, Timeline) benötigen krypthografiche Methoden. Oft werden 2015 unterstützt: RSA encrypt/decrypt (PKCS#1 v1.5, OAEP, and PSS), AES-CBC and GCM encrypt/decrypt, SHA-256/384/512, HMAC with supported hash functions, PRNG (AES-CTR based) specified by NIST, ECDH, ECDSA, and KDF (Concat mode).
Internet-Ressourcen sollen möglichst End to End verschlüsselt werden, insbesondere, wenn kein SSL-Kommunikationskanal verfügbar ist.
Bei W3C ist ein Web Cryptography API - Entwurf ( W3C Candidate Recommendation 11 December 2014 ), Algorithm Overview verfügbar.
interface CryptoKey { readonly attribute KeyType type; // "public", "private" and "secret". readonly attribute boolean extractable; readonly attribute object algorithm; readonly attribute object usages; // "encrypt", "decrypt", "sign", "verify", // "deriveKey", "deriveBits", "wrapKey" and "unwrapKey" };
Brauchbare ECMAScript-Funktionen für Unicode-Zeichenketten und Ordinalzahlen der Zeichen:
char_base36 = dez_num.toString(36) char_base2 = dez_num.toString(2) int_num_base36 = parseInt(str, 36) int_num_base16 = parseInt(str, 16) int_num_base10 = parseInt(str, 10) int_num_base2 = parseInt(str, 2) unicode_num = str.charCodeAt(idx) unicode_str = String.fromCharCode(unicode_nums)
Wie können UTF-8-Texte in einen Byte-String oder eine hex-Zeichenfolge gewandelt werden?
Übergang von byte_chrs nach hex-String
// 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; }
Übergang von hex-String nach byte_chrs
// 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); }
xor ist eine bitweise Verknüpfung. Zu einem Byte-Zeichen gehört ein UTF-8-Unicode-Wert kleiner als 256. Was ergibt sich, wenn "Walter" zeichenweise xor mit "+" verknüpft wird?
Byte-Zeichen-weise xor-Verknüpfung von "Walter" und "+": xor-mit hex bin dez 43 ergibt W = 57 01010111 ^ 00101011 = 01111100 = | a = 61 01100001 ^ 00101011 = 01001010 = J l = 6c 01101100 ^ 00101011 = 01000111 = G t = 74 01110100 ^ 00101011 = 01011111 = _ e = 65 01100101 ^ 00101011 = 01001110 = N r = 72 01110010 ^ 00101011 = 01011001 = Y
In der modernen Krypthografie sind Shift und xor-Verknüpfungen ( wegen den Symetrie-Eigenschaften ) wesentlich. Bsp.:
// Bsp: wrapping at 2^32 mit 16-bit operationen function safe_add(x, y) { var msw, lsw = (x & 0xFFFF) + (y & 0xFFFF); msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); }
Siehe z.B. Extended_Tiny_Encryption_Algorithm: Extended_Tiny_Encryption_Algorithm (wikipedia ) IJGDC/vol7_no5/4 ( .pdf ).
Ist key ein String von min 5 Byte-Chars und str ein String von Byte-Chars, so kann eine zeichenweise xor-Faltung gemacht werden, etwa wie folgt
key_len = key.length; if (!key_len || key_len < 5) { key = "test"; } for ( i = 0; i < str.length; i += 1) { byte_char = str.charCodeAt(i); key_char = key.charCodeAt(i % key_len); if (byte_char !== key_char) { byte_char ^= key_char; } r += String.fromCharCode(byte_char); }
In gleicher Weise kann Verschlüsselt und Entschlüsselt werden. key soll eine hinreiched lange Byte-Zeichenkette sein. Ein krytografisch sicherer one-time pads mit etwa 0.6 * str.length liefert ein krytografisch sicheres Ergebnis.
Hinweise kommen in der Veranstaltung ... Wie kann aus einem "relativ kurzen" User-Passwort mit Hilfe eines Hash-Algorithmus ein generateKeys ( relativ lange Zeichenkette ) entstehen?
Wenn der verschlüsselte Text lediglich aus hex-Ziffern besteht, so kann ein generateKey aus hex-Ziffern sinnvoll sein. Achtung! Es wird lediglich ein experimentelles Vorgehen gezeigt - keine endgültige Lösung ...
Test 1 anschauen.
<script> // Test 1 liefert ... var i, j, k, kk, r = [ ], len = 16, cn, pw = " "; for( k = pw.length-1; k >= 0; k -= 1) { cn = pw.charCodeAt(k); for( i = 0; i < len; i += 1 ) { for( j = len-1; j >= 0; j -= 1){ kk = cn*(i+1)*(j+1) % (len+1) - 1; r.push( Math.abs(kk) ); } r.push( "\n"); } } alert(r); </script>
Test 1 ergibt die Ausgabe:
1,3,5,7,9,11,13,15,0,2,4,6,8,10,12,14, ,3,7,11,15,2,6,10,14,1,5,9,13,0,4,8,12, ,5,11,0,6,12,1,7,13,2,8,14,3,9,15,4,10, ,7,15,6,14,5,13,4,12,3,11,2,10,1,9,0,8, ,9,2,12,5,15,8,1,11,4,14,7,0,10,3,13,6, ,11,6,1,13,8,3,15,10,5,0,12,7,2,14,9,4, ,13,10,7,4,1,15,12,9,6,3,0,14,11,8,5,2, ,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0, ,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, ,2,5,8,11,14,0,3,6,9,12,15,1,4,7,10,13, ,4,9,14,2,7,12,0,5,10,15,3,8,13,1,6,11, ,6,13,3,10,0,7,14,4,11,1,8,15,5,12,2,9, ,8,0,9,1,10,2,11,3,12,4,13,5,14,6,15,7, ,10,4,15,9,3,14,8,2,13,7,1,12,6,0,11,5, ,12,8,4,0,13,9,5,1,14,10,6,2,15,11,7,3, ,14,12,10,8,6,4,2,0,15,13,11,9,7,5,3,1,
Test 2 anschauen ( NOCH NICHT PERFEKT! ).
<script> var prims = [1201,1223,1249,1279,1297,1307,1367,1381,1427,1439,1459,1483,1489,1511,1559,1601], len = prims.length, i, j, k, ii, jj, kk, cn,old = 1, r = [ ], hex = "0123456789abcdef".split(''), pw = "AA"; for( k = pw.length-1; k >= 0; k -= 1) { cn = pw.charCodeAt(k) % 256; cn = ( (cn << 2) * (cn >> 3) + 1 ); for( i = 0; i < len; i += 1){ for( j = len-1; j >= 0; j -= 1){ kk = (old * cn * prims[i] * prims[j]) % len; ii = len-kk-1; jj = prims[ii]; prims[ii] = prims[kk]; prims[kk] = jj; r.push( hex[kk] ); } r.push( "\n"); } old = 199*cn; } alert(r); </script>
Test 2 ergibt die Ausgabe ( WIE VERBESSERN? ):
1,7,7,1,b,3,f,3,5,7,3,b,1,1,7,1, ,7,1,1,9,d,d,1,3,5,9,d,7,9,1,1,7, ,7,1,7,7,d,3,7,5,3,f,3,1,1,1,7,1, ,1,7,7,f,b,b,7,5,3,1,5,f,1,f,9,f, ,1,7,7,1,b,9,d,7,7,5,9,9,5,d,d,b, ,3,5,b,5,3,1,5,7,7,5,9,1,d,3,5,b, ,7,1,1,9,5,5,9,5,3,1,5,7,9,f,9,7, ,5,3,3,5,7,9,5,f,9,5,1,3,3,3,5,3, ,5,3,3,5,7,1,d,9,f,d,9,3,3,3,5,3, ,f,9,1,7,d,5,1,3,5,9,5,f,f,9,1,7, ,b,d,d,5,3,9,d,9,f,d,1,1,d,3,5,b, ,b,7,7,f,1,b,d,1,7,5,9,b,1,7,7,1, ,f,9,f,1,f,d,9,b,d,9,5,f,f,9,9,f, ,1,7,1,f,b,b,7,5,3,f,b,b,f,7,7,1, ,7,1,7,7,d,5,1,5,3,9,d,7,7,1,1,7, ,1,7,1,f,b,3,f,3,5,7,3,b,f,7,7,1, ,7,1,7,7,d,d,9,5,3,9,d,7,7,7,1,7, ,1,7,7,f,b,3,f,3,5,7,3,b,f,1,7,1, ,7,1,1,7,d,b,f,3,5,7,b,1,1,7,7,1, ,7,1,7,9,d,5,1,3,b,7,b,9,7,9,f,9, ,7,1,1,7,d,d,9,3,5,9,d,7,7,1,1,7, ,d,b,b,3,f,7,3,1,7,b,f,f,d,b,b,d, ,1,7,7,f,1,3,f,3,5,7,3,b,f,1,7,1, ,3,5,5,d,1,1,d,9,f,d,9,3,d,3,5,3, ,5,3,3,5,7,9,5,f,9,5,1,3,3,3,5,3, ,9,7,7,1,b,b,7,3,5,f,b,b,1,1,7,1, ,5,b,b,3,f,f,b,1,7,3,7,f,d,b,b,d, ,7,1,1,9,7,d,9,3,5,9,d,d,9,1,1,7, ,7,1,7,7,7,5,1,5,3,7,3,d,9,7,1,7, ,1,7,7,1,1,3,f,5,3,7,3,b,1,1,7,1, ,1,7,7,f,b,b,f,5,3,7,b,b,f,1,7,1, ,7,1,1,7,d,5,9,3,5,9,d,7,7,7,1,7
Idee: Byte-Zeichen-Code werden mit charCodeAt geholt und nach Primzahlen transformiert. Diese Primzahlen liefern die "verschüsselten" Zeichen aus unterschiedlichen Alphabeten. Stärken? Schwächen? Erweiterungen? ... Zahlen-Beispiel
i = 0 1 2 3 4 5 s1 = W a l t e r s1.charCodeAt(i) = 87 97 108 116 101 114 String.fromCharCode(prims1[s1.charCodeAt(i)]) s2 = ǁ ǽ ɑ ʁ ȣ ɫ String.fromCharCode(prims2[s2.charCodeAt(i)]) s3 = W a l t e r
Wie wird das etwa programmiert? Etwa:
var i, r = [], quelltext = "Walter"; // Verschlüsseln: for (i = 0; i < s.length; i += 1) { r.push(String.fromCharCode(prims1["" + quelltext.charCodeAt(i)])); } verschl = r.join(""); // verschl = "ǁǽɑʁȣɫ"; var r = [], verschl = "ǁǽɑʁȣɫ"; // Entschlüsseln: for (i = 0; i < verschl.length; i += 1) { r.push(String.fromCharCode(prims2[verschl.charCodeAt(i)])); } r = r.join(""); //r = "Walter";
Wie sehen die Objekte prims1 und prims2 aus?
// etwa: var prims1 = { 1: 2, 2: 3, 3: 5, 4: 7, 5: 11, 6: 13, 7: 17, 8: 19, 9: 23, 10: 29, 11: 31, 12: 37, 13: 41, 14: 43, 15: 47, 16: 53, 17: 59, 18: 61, 19: 67, 20: 71, 21: 73, 22: 79, 23: 83, 24: 89, 25: 97, 26: 101, 27: 103, 28: 107, 29: 109, 30: 113, 31: 127, 32: 131, 33: 137, 34: 139, 35: 149, 36: 151, 37: 157, 38: 163, 39: 167, 40: 173, 41: 179, 42: 181, 43: 191, 44: 193, 45: 197, 46: 199, 47: 211, 48: 223, 49: 227, 50: 229, 51: 233, 52: 239, 53: 241, 54: 251, 55: 257, 56: 263, 57: 269, 58: 271, 59: 277, 60: 281, 61: 283, 62: 293, 63: 307, 64: 311, 65: 313, 66: 317, 67: 331, 68: 337, 69: 347, 70: 349, 71: 353, 72: 359, 73: 367, 74: 373, 75: 379, 76: 383, 77: 389, 78: 397, 79: 401, 80: 409, 81: 419, 82: 421, 83: 431, 84: 433, 85: 439, 86: 443, 87: 449, 88: 457, 89: 461, 90: 463, 91: 467, 92: 479, 93: 487, 94: 491, 95: 499, 96: 503, 97: 509, 98: 521, 99: 523, 100: 541, 101: 547, 102: 557, 103: 563, 104: 569, 105: 571, 106: 577, 107: 587, 108: 593, 109: 599, 110: 601, 111: 607, 112: 613, 113: 617, 114: 619, 115: 631, 116: 641, 117: 643, 118: 647, 119: 653, 120: 659, 121: 661, 122: 673, 123: 677, 124: 683, 125: 691, 126: 701, 127: 709, 128: 719, 129: 727, 130: 733, 131: 739, 132: 743, 133: 751, 134: 757, 135: 761, 136: 769, 137: 773, 138: 787, 139: 797, 140: 809, 141: 811, 142: 821, 143: 823, 144: 827, 145: 829, 146: 839, 147: 853, 148: 857, 149: 859, 150: 863, 151: 877, 152: 881, 153: 883, 154: 887, 155: 907, 156: 911, 157: 919, 158: 929, 159: 937, 160: 941, 161: 947, 162: 953, 163: 967, 164: 971, 165: 977, 166: 983, 167: 991, 168: 997, 169: 1009, 170: 1013, 171: 1019, 172: 1021, 173: 1031, 174: 1033, 175: 1039, 176: 1049, 177: 1051, 178: 1061, 179: 1063, 180: 1069, 181: 1087, 182: 1091, 183: 1093, 184: 1097, 185: 1103, 186: 1109, 187: 1117, 188: 1123, 189: 1129, 190: 1151, 191: 1153, 192: 1163, 193: 1171, 194: 1181, 195: 1187, 196: 1193, 197: 1201, 198: 1213, 199: 1217, 200: 1223, 201: 1229, 202: 1231, 203: 1237, 204: 1249, 205: 1259, 206: 1277, 207: 1279, 208: 1283, 209: 1289, 210: 1291, 211: 1297, 212: 1301, 213: 1303, 214: 1307, 215: 1319, 216: 1321, 217: 1327, 218: 1361, 219: 1367, 220: 1373, 221: 1381, 222: 1399, 223: 1409, 224: 1423, 225: 1427, 226: 1429, 227: 1433, 228: 1439, 229: 1447, 230: 1451, 231: 1453, 232: 1459, 233: 1471, 234: 1481, 235: 1483, 236: 1487, 237: 1489, 238: 1493, 239: 1499, 240: 1511, 241: 1523, 242: 1531, 243: 1543, 244: 1549, 245: 1553, 246: 1559, 247: 1567, 248: 1571, 249: 1579, 250: 1583, 251: 1597, 252: 1601, 253: 1607, 254: 1609, 255: 1613, 256: 1619, 257: 1621 }; var prims2 = { 2: 1, 3: 2, 5: 3, 7: 4, 11: 5, 13: 6, 17: 7, 19: 8, 23: 9, 29: 10, 31: 11, 37: 12, 41: 13, 43: 14, 47: 15, 53: 16, 59: 17, 61: 18, 67: 19, 71: 20, 73: 21, 79: 22, 83: 23, 89: 24, 97: 25, 101: 26, 103: 27, 107: 28, 109: 29, 113: 30, 127: 31, 131: 32, 137: 33, 139: 34, 149: 35, 151: 36, 157: 37, 163: 38, 167: 39, 173: 40, 179: 41, 181: 42, 191: 43, 193: 44, 197: 45, 199: 46, 211: 47, 223: 48, 227: 49, 229: 50, 233: 51, 239: 52, 241: 53, 251: 54, 257: 55, 263: 56, 269: 57, 271: 58, 277: 59, 281: 60, 283: 61, 293: 62, 307: 63, 311: 64, 313: 65, 317: 66, 331: 67, 337: 68, 347: 69, 349: 70, 353: 71, 359: 72, 367: 73, 373: 74, 379: 75, 383: 76, 389: 77, 397: 78, 401: 79, 409: 80, 419: 81, 421: 82, 431: 83, 433: 84, 439: 85, 443: 86, 449: 87, 457: 88, 461: 89, 463: 90, 467: 91, 479: 92, 487: 93, 491: 94, 499: 95, 503: 96, 509: 97, 521: 98, 523: 99, 541: 100, 547: 101, 557: 102, 563: 103, 569: 104, 571: 105, 577: 106, 587: 107, 593: 108, 599: 109, 601: 110, 607: 111, 613: 112, 617: 113, 619: 114, 631: 115, 641: 116, 643: 117, 647: 118, 653: 119, 659: 120, 661: 121, 673: 122, 677: 123, 683: 124, 691: 125, 701: 126, 709: 127, 719: 128, 727: 129, 733: 130, 739: 131, 743: 132, 751: 133, 757: 134, 761: 135, 769: 136, 773: 137, 787: 138, 797: 139, 809: 140, 811: 141, 821: 142, 823: 143, 827: 144, 829: 145, 839: 146, 853: 147, 857: 148, 859: 149, 863: 150, 877: 151, 881: 152, 883: 153, 887: 154, 907: 155, 911: 156, 919: 157, 929: 158, 937: 159, 941: 160, 947: 161, 953: 162, 967: 163, 971: 164, 977: 165, 983: 166, 991: 167, 997: 168, 1009: 169, 1013: 170, 1019: 171, 1021: 172, 1031: 173, 1033: 174, 1039: 175, 1049: 176, 1051: 177, 1061: 178, 1063: 179, 1069: 180, 1087: 181, 1091: 182, 1093: 183, 1097: 184, 1103: 185, 1109: 186, 1117: 187, 1123: 188, 1129: 189, 1151: 190, 1153: 191, 1163: 192, 1171: 193, 1181: 194, 1187: 195, 1193: 196, 1201: 197, 1213: 198, 1217: 199, 1223: 200, 1229: 201, 1231: 202, 1237: 203, 1249: 204, 1259: 205, 1277: 206, 1279: 207, 1283: 208, 1289: 209, 1291: 210, 1297: 211, 1301: 212, 1303: 213, 1307: 214, 1319: 215, 1321: 216, 1327: 217, 1361: 218, 1367: 219, 1373: 220, 1381: 221, 1399: 222, 1409: 223, 1423: 224, 1427: 225, 1429: 226, 1433: 227, 1439: 228, 1447: 229, 1451: 230, 1453: 231, 1459: 232, 1471: 233, 1481: 234, 1483: 235, 1487: 236, 1489: 237, 1493: 238, 1499: 239, 1511: 240, 1523: 241, 1531: 242, 1543: 243, 1549: 244, 1553: 245, 1559: 246, 1567: 247, 1571: 248, 1579: 249, 1583: 250, 1597: 251, 1601: 252, 1607: 253, 1609: 254, 1613: 255, 1619: 256, 1621: 257 };
Plagiate sind out!
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermin
So nach Pfingsten 12.00 Uhr