Mehrfache XOR Verschlüsselung

AndiixAndii

Mitglied
Hi!

Ich wollte mal fragen, wie sicher eine mehrfache XOR-Verschlüsselung ist.
Die einfache XOR-Verschlüsselung soll ja nicht sehr sicher sein.
Aber wenn man den Text mehrmals mit verschiedenen Schlüsseln verschlüsselt, wie sieht es dann aus?

Hier mal mein Sourcecode:
Java:
    public static String crypt(String text, char key) {
        StringBuilder s = new StringBuilder(text);
        for(int i = 0; i < s.length(); i++) {
            s.setCharAt(i, (char)(s.charAt(i) ^ key));
        }
        return s.toString();
    }
    
    public static String crypt(String text, String key) {
        if(key.length() == 1) return crypt(text, key.charAt(0));
        StringBuilder s = new StringBuilder(text);
        for(int i = 0, j = 0; i < s.length(); i++, j++) {
            s.setCharAt(i, (char)(s.charAt(i) ^ key.charAt(j)));
            if(j == key.length() - 1) j = 0;
        }
        return s.toString();
    }
    
    public static String encrypt(String text, String[] key) {
        for(int i = 0; i < key.length; i++) {
            text = crypt(text, key[i]);
        }
        return text;
    }
    
    public static String decrypt(String text, String[] key) {
        List<String> rkey = Arrays.asList(key);
        Collections.reverse(rkey);
        return encrypt(text, rkey.toArray(new String[0]));
    }

Also die erste crypt Methode verschlüsselt den Text XOR mit einem einzigen Zeichen.
Die überladene crypt Methode verschlüsselt den Text XOR mit einem String, wenn der am Ende ist, fangt der Algorithmus damit wieder von vorne an.
Die encrypt Methode verschlüsselt den Text nacheinander mit verschiedenen String aus einem Array.
Die decrypt Methode entschlüsselt den Text mit encrypt mit dem umgedrehten Schlüsselarray.
Durch das mehrfache Verschlüsseln kann man mit Klartext XOR verschlüsselter Text nicht mehr den Key herausfinden.

Wie sicher ist dieser Mehrfach-XOR-Algorithmus?

LG!
 

arilou

Bekanntes Mitglied
Bei Verschlüsselung mittels XOR sollte der Schlüssel immer länger als der zu verschlüsselnde Text sein.
Außerdem sollte er ausreichend "konfus" sein, also z.B. nicht mehrere 0-Bytes am Stück enthalten.
Wenn diese beiden Punkte gegeben sind, ist ein mehrfaches Verschlüsseln genauso sicher (oder unsicher) wie ein einmaliges - bringt also nichts.
 

Wino

Neues Mitglied
der Schlüssel soll eine Zufallsfolge sein, die einer Gleichverteilung (weißes Rauschen) entspricht und länger ist als der zu verschl. Text. Da keine Muster erkennbar sein werden, hilft nur ein Ausprobieren aller Möglichkeiten. Bei einem Text von einigen Tausend Zeichen, wünsche ich ein langes Leben! Es ist mit einemPC heutiger Bauart einfach nicht möglich, behaupte ich!
 

KonradN

Super-Moderator
Mitarbeiter
der Schlüssel soll eine Zufallsfolge sein, die einer Gleichverteilung (weißes Rauschen) entspricht und länger ist als der zu verschl. Text. Da keine Muster erkennbar sein werden, hilft nur ein Ausprobieren aller Möglichkeiten. Bei einem Text von einigen Tausend Zeichen, wünsche ich ein langes Leben! Es ist mit einemPC heutiger Bauart einfach nicht möglich, behaupte ich!
Zum einen ist der Thread schon > 7 Jahre alt ...

Und zu den gewünschten Mustern kommt es, wenn Du den Schlüssel mehrfach verwendest. Sprich: Du verschlüsselst Nachrichten von Dir an einen Dritte und diese nachrichten werden abgefangen. Dann hat man das Muster und das sogar sehr deutlich, da ja Ende der einen Nachricht und Anfang der nächsten Nachricht gut erkennbar ist.
 

Wino

Neues Mitglied
Zum einen ist der Thread schon > 7 Jahre alt ...

Und zu den gewünschten Mustern kommt es, wenn Du den Schlüssel mehrfach verwendest. Sprich: Du verschlüsselst Nachrichten von Dir an einen Dritte und diese nachrichten werden abgefangen. Dann hat man das Muster und das sogar sehr deutlich, da ja Ende der einen Nachricht und Anfang der nächsten Nachricht gut erkennbar ist.
nur einmal verwenden: ich habe einen sehr langen (1MB z.B.) generiert und nutze den ersten Teil nicht mehr, muss also dem Empfänger auf sicherem Weg die 1MB gegeben haben und nur den Offset mitteilen!
 

KonradN

Super-Moderator
Mitarbeiter
nur einmal verwenden: ich habe einen sehr langen (1MB z.B.) generiert und nutze den ersten Teil nicht mehr, muss also dem Empfänger auf sicherem Weg die 1MB gegeben haben und nur den Offset mitteilen!
Dir ist die Verschlüsselungsmethode selbst zu unsicher und versuchst daher durch zusätzliche Maßnahmen die Verschlüsselung zu stärken?

Wenn der Offset als erstes mitgegeben wird, dann ist es Security by Obscurity. Ansonsten hast Du unnötig hohe Aufwände um z.B. den Offset sicher zu übertragen.

Dieses "sicher" und "unsicher" ist immer relativ zu sehen. Und daher muss sich diese Verschlüsselung mit anderen Verschlüsselungen messen und da liegen dann halt doch Welten dazwischen :)
 

Robert Zenz

Top Contributor
Kurze Zwischenfrage ohne den ganzen Thread gelesen zu haben: Wieso keine asymmetrische Verschluesselung?

Wenn man ohnehin einen "Empfaenger" hat welcher den Schluessel kennen muss, dann waere es doch viel besser wenn man gleich ein etabliertes asymmetrisches Format verwendet, wie zum Beispiel RSA. Hat zusaetzlich den Vorteil dass niemand den Absender nachahmen kann, die Schluessel kann man rotieren, und wenn jemals jemand RSA bricht, dann schalten wir ohnehin das Internet ab fuer ein paar Jahre, also ist dann auch nicht relevant.
 

KonradN

Super-Moderator
Mitarbeiter
ohne den ganzen Thread gelesen zu haben

Es wurde im Thread eigentlich nur betrachtet, ob eine mehrfache xor Verschlüsselung die Sicherheit erhöhen würde und das ist ja nicht der Fall. Nur eben wurde die - ursprünglich als unsicher bezeichnete - xor Verschlüsselung als sicher bezeichnet (Das war mein Verständnis der neuen Aussage) und das ist ja de Facto nicht der Fall.

Konkrete Alternativen wurden aber nicht benannt, denn das war (zumindest noch) nicht Thema :)
 
Y

yfons123

Gast
so als neben anmerkung

eine sicherheits system ist nicht sicher nur weil der andere nicht weis wie es funktioniert

da gabs mal ein zitat das ich nicht merh ganz genau weis was im prinzip ausgesagt hat
"ein sicherheits system muss durch die art wie es funktioniert sicher sein und nicht dadurch dass niemand weis wie es funktioniert"

zb die ssh verbindung auf linux , da weis jeder wie es funktioniert weil jeder den code sehen kann aber durch die art und wesie wie das ding funktioneirt das macht es sicher
 

KonradN

Super-Moderator
Mitarbeiter
Wenn man den Thread gerade eh neu belebt hat, dann ist die Anfangsfrage auch einfach zu beantworten mit einer mehr mathematischen Sicht auf das Problem:

Ich habe Daten D und die Keys K1 und K2.

Dann kann ich jetzt verschlüsseln:
D xor K1 xor K2

Ich könnte jetzt einen Key K' erstellen aus K1 und K2:
K' := K1 xor K2

Da gilt: (D xor K1) xor K2 = D xor (K1 xor K2)
kann man nun also einfach schreiben: D xor K'

Das wäre sowas wie eine mathematische Herleitung. Wenn ich also eine Kommunikation entschlüsseln will, dessen Key(s) ich nicht kenne, dann müsste ich nicht die Schlüssel K1, K2, ...Kn knacken müssen sondern man knackt weiterhin nur einen Key, für den dann gelten würde: K' = K1 xor K2 xor .... xor Kn

Aber die eigentliche Themenstellung ist ja schon lange nicht mehr aktuell ... aber es ging mir halt auch eben so durch den Kopf.
 

HerrKPunkt

Neues Mitglied
da gabs mal ein zitat das ich nicht merh ganz genau weis was im prinzip ausgesagt hat
"ein sicherheits system muss durch die art wie es funktioniert sicher sein und nicht dadurch dass niemand weis wie es funktioniert"
Hallo, Du meinst wohl Kerkhoffs Prinzip. Hier wird davon gesprochen, dass die Sicherheit nur von der Kenntnis des Schlüssels abhängt, nicht von der Kenntnis der Verschlüsselung.

Was XOR angeht, ist dies grundsätzlich der Fall. Jedes Bit das man findet kann war mit 50 %iger Wahrscheinlichkeit vorher eine 0 (oder 1 :)). XOR ist somit erstmal sicher. Die Aussagen, dass ein guter Schlüssel nicht mehrere 0en am Stück enthalten sollte ist für mich nicht nachvollziehbar. Echte Zufallszahlen sind zufällig, dass heißt es kann auch eine Sequenz geben, bei der 100 0en hintereinander im Schlüssel stehen. Solange der Schlüssel nur Sender und Empfänger bekannt ist, stellt dies keine Schwachstelle dar.
 

HerrKPunkt

Neues Mitglied
Kurze Zwischenfrage ohne den ganzen Thread gelesen zu haben: Wieso keine asymmetrische Verschluesselung?

Wenn man ohnehin einen "Empfaenger" hat welcher den Schluessel kennen muss, dann waere es doch viel besser wenn man gleich ein etabliertes asymmetrisches Format verwendet, wie zum Beispiel RSA. Hat zusaetzlich den Vorteil dass niemand den Absender nachahmen kann, die Schluessel kann man rotieren, und wenn jemals jemand RSA bricht, dann schalten wir ohnehin das Internet ab fuer ein paar Jahre, also ist dann auch nicht relevant.
Da gäbe es wahrscheinlich viele Gründe:

  1. Weil der Threat-Eröffner sich für XOR interessiert :)
  2. Symmetrische Verfahren benötigen (nach meiner Kenntnis) deutlich kleinere Schlüssel und weniger Rechenleistung (letzteres ist relevant, ein KByte Speicher würde sich schon finden lassen)
  3. Moderne Verfahren nutzen teilweise hybride (via asymmetrischem Verfahren wird ein symmetrischer Schlüssel ver-/ entschlüsselt). Das ermöglicht z.B. mehrere verschiedene (authentische) Zugriffe auf das gleiche Chiffrat (z.B. eine verschlüsselte Festplatte oder ein Schlüsselsafe) und wird (imho) auch für die Kommunikation mit Webservern genutzt.
  4. Asymmetrische Verfahren hängen genauso von der Kenntnis des Schlüssels ab. Ein Man-In-The-Middle kann auch übermittelte öffentliche Schlüssel austauschen. Deshalb gibt es PKI, bei denen man sich vortrefflich streiten kann ob zentrale Stellen vertrauenswürdig sind (Security approved by NSA oder auch die Qualitätssicherung türkischer Google-Suchen durch den Staat, denke zu beidem gab es mal Artikel in bekannten Nachrichten). Das gleiche bei self-sovereign Identity, auch hier müssen wir überlegen wo der "Vertrauensanker" herkommt. Sicher sind wir nur, wenn der Schlüssel authentisch zwischen Sender und Empfänger ausgetauscht wurde - bei symmetrischen Verfahren gilt noch, dass der Schlüssel sonst keinem bekannt sein darf. Für alle Algorithmen gilt natürlich auch, dass das Verfahren noch wirksam sein muss und sich nicht (in akzeptabler) Zeit die Verschlüsselung knacken lässt. Das Wichtigste: Sicherheit ist ein äußerst flüchtiger Zustand, frei von nicht vertretbaren Risiken (aber ein bisschen Restrisiko müssen wir immer vertreten).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
S OOP Mehrfache Vererbung von abstrakten Klassen Allgemeine Java-Themen 7
Daniel_L Mehrfache Ausführung desselben Threads/Tasks verhindern? Allgemeine Java-Themen 4
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
X Verschlüsselung Allgemeine Java-Themen 18
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
R Verschlüsselung falsch Allgemeine Java-Themen 3
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
D AES Verschlüsselung / Wirklich AES 128-Bit? Allgemeine Java-Themen 4
I Best Practice Verschlüsselung mit SALT Allgemeine Java-Themen 4
Thallius Moderne sichere synchrone Verschlüsselung mit Java? Allgemeine Java-Themen 3
Ananaskirsche Verschlüsselung mit AES Allgemeine Java-Themen 4
E Verschlüsselung Allgemeine Java-Themen 4
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
S Key (für AES-Verschlüsselung) aus String Allgemeine Java-Themen 4
M Serialisierung & Verschlüsselung Allgemeine Java-Themen 2
K Problem mit Salted - Verschlüsselung Allgemeine Java-Themen 4
Z Java E-Mail Client mit End-to-End-Verschlüsselung Allgemeine Java-Themen 4
J Verschlüsselung von Text? Allgemeine Java-Themen 2
K Vigenere- Verschlüsselung Allgemeine Java-Themen 13
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
T AES-Verschlüsselung mit eigenem 256 Bit Schlüssel Allgemeine Java-Themen 12
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
G AES Verschlüsselung nur bis 63 Zeichen Länge Allgemeine Java-Themen 2
M Verschlüsselung mit Cipher Allgemeine Java-Themen 5
B XOR Verschlüsselung Allgemeine Java-Themen 7
S Framework für symetrische und asymetrische Verschlüsselung Allgemeine Java-Themen 3
lumo Verschlüsselung Allgemeine Java-Themen 2
H Verschlüsselung mit Blowfish Allgemeine Java-Themen 14
C Interpreter-Fehler AES verschlüsselung mit MD5 key Allgemeine Java-Themen 6
S AES Verschlüsselung - File Headers korrupt Allgemeine Java-Themen 10
A Datei, UTF-8, NTRU-Verschlüsselung Allgemeine Java-Themen 3
B "Verschlüsselung" mit Passwort (XOR bzw. Modulo) Allgemeine Java-Themen 7
B String Verschlüsselung Allgemeine Java-Themen 6
M Verschlüsselung anwenden Allgemeine Java-Themen 6
J Verschlüsselung Allgemeine Java-Themen 22
T MD5 Verschlüsselung Nullen fehlen? Allgemeine Java-Themen 2
L [Exception] RSA Verschlüsselung. Allgemeine Java-Themen 16
C javamail signatur und verschlüsselung Allgemeine Java-Themen 2
R 128 Bit Verschlüsselung/Entschlüsselung in Java? Allgemeine Java-Themen 6
F RSA-Verschlüsselung Allgemeine Java-Themen 4
S Verschlüsselung in Java Allgemeine Java-Themen 2
G Interessant! Verschlüsselung in Java, Charset in der JVM? Allgemeine Java-Themen 14
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T Verschlüsselung von Dateien Allgemeine Java-Themen 8
S Verschlüsselung - IllegalBlockSizeException Allgemeine Java-Themen 3
G Problem mit RSA Verschlüsselung bei .net und Java Allgemeine Java-Themen 1
D Caesar und Vigenère Verschlüsselung Allgemeine Java-Themen 2
alexpetri Verschlüsselung Allgemeine Java-Themen 13
@ [Sicherheit] Speicherung von Keys für Verschlüsselung Allgemeine Java-Themen 4
P Verschlüsselung in PHP -> Entschlüsselung in Java Allgemeine Java-Themen 2
Lazybone Caeser Verschlüsselung Allgemeine Java-Themen 6
S Verschlüsselung mit Cipher Allgemeine Java-Themen 8
S Verschlüsselung Allgemeine Java-Themen 15
J Problem mit Dateien/XOR-Verschlüsselung Allgemeine Java-Themen 5
G RSA-Verschlüsselung Allgemeine Java-Themen 1
P HMACMD5- Verschlüsselung entschlüsseln Allgemeine Java-Themen 2
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J Probleme bei XOR verschlüsselung ! Allgemeine Java-Themen 5
G Verschlüsselung in Java Allgemeine Java-Themen 9
M RSA Verschlüsselung Allgemeine Java-Themen 7
J Verschlüsselung von Daten Allgemeine Java-Themen 21

Ähnliche Java Themen

Neue Themen


Oben