WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 06.08.2003, 08:24   #1
Atze
Veteran
 
Registriert seit: 06.08.2002
Alter: 38
Beiträge: 363


Standard C++ Entschlüsseler bauen. Was mache ich falsch???

Hallo.

Ich werkel seit geraumer Zeit daran, mein Entschlüssler zu programmieren. Der Verschlüssler funktioniert perfekt, aber der Entschlüssler ist bei mir leider immer ohne den gewünschten Erfolg gelaufen. Das Problem ist, er arbeitet nicht richtig, was mache ich falsch???


Verschlüssler:

#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

char* cencrypt(char* in, char key='5')
{
char lchar = 0;
int length = strlen(in);
char* out = new char[length+1];

for(int i=0;i<length;i++)
{
out[i] = in[i] + key + (lchar % key);
lchar = in[i];
}

out[length] = 0;
return out;
}

int main()
{
char eingabe[255] = {0};

int i = 0,x = 0,schluessel = 0;
div_t weiter;

cout<<"Codierung"<<endl;
cout<<"Bitte Ihren Text (max. 255 Zeichen) :";
cin.getline(eingabe,255);
cout << "\n Der verschluesselte Text lautet : \n\n";

char *enc = cencrypt(eingabe);

cout << enc << endl;
ofstream ofs ("converted.txt");
ofs << enc <<endl;


delete [] enc;

}



Entschlüssler:

#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;
char* cencrypt(char* in, char key='5')
{
char lchar = 0;
int length = strlen(in);
char* out = new char[length-1];

for(int i=0;i<length;i++)
{
out[i] = in[i] - key - (lchar % key); //Überall,wo ein + stand, steht jetzt ein Minus, um den Code imzurechnen.
lchar = in[i];
}

out[length] = 0;
return out;
}

int main()
{
char eingabe[255] = {0};

int i = 0,x = 0,schluessel = 0;
div_t weiter;
ifstream in ("converted.txt");
cout << "\n Der verschluesselte Text lautet : \n\n";
in.getline(eingabe,255);
char *enc = cencrypt(eingabe);

cout << enc << endl;
delete [] enc;
while ('a');
}


Bitte, bitte helft mir, ich komme daran seit ca. 3 Monaten nicht weiter.


Vielen Dank für eure Antworten im vorraus.

mfg Atze
____________________________________
Der Weg vom Pils

Liebe geht durch den Magen, Pils durch die Blase

Atze ist offline   Mit Zitat antworten
Alt 06.08.2003, 11:42   #2
Irmi
Senior Member
 
Registriert seit: 15.09.2002
Beiträge: 141


Standard

Ich sehe ein Problem beim Entschlüsseln:

strlen(in);

Du kannst "strlen" nicht anwenden, da ein 0Byte mitteln im Geheimtext stehen kann. Da würde der String abgeschnitten werden. Ich nehme an, das ist das Problem?

Bau Dir einen Header, wo Du die Größe des Blockes verschlüsselt festlegst, oder verschlüsslte immer in gleich großen Blöcken, da gibt es mehrere Möglichkeiten.
Was willst Du eigentlich genau damit verschlüsseln? Vielleicht kannst Du einen fertigen Algo verwenden. Der angewandte ist nicht besonders sicher - nur ein 8Bit-Schlüssel

Christian Irmler,
www.webCrypt.at
Irmi ist offline   Mit Zitat antworten
Alt 06.08.2003, 12:51   #3
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

Verschlüsselung läuft über XOR:

Schreibe eine Datei mit 1011 Byte zufällig erzeugter Zahlen (Bytes mit Datentyp unsigned char) xorkey.dat

Öffne die Datei xorkey.dat lies die 1011 Byte in einen Buffer und verschlüssele den Text so:

Ergebnis_Zeichen= Datentrom_Zeichen ^ (=XOR Operator) XOR_Buffer_Zeichen;

nach 1011 Bytes wird der Zeiger auf den XORKEY Buffer wieder auf den Anfang des Buffers gesetzt und der weitere Datenstrom ver- bzw. entschlüsselt.

D.h. Decodierung und Encodierung ist ein Algorithmus.

Kikakater
kikakater ist offline   Mit Zitat antworten
Alt 06.08.2003, 13:55   #4
Irmi
Senior Member
 
Registriert seit: 15.09.2002
Beiträge: 141


Standard

Das ist nicht besonders sicher, wenn der Schlüssel in einer Datei abgelegt wird. Ein richtiger Alogrhythmus wird dabei auch nicht verwendet. Es werden lediglich die einzelnen Bytes anhand der öffentlichen Bytes im File verxort.
Das ist ein Fressen für jeden Hacker. Das ist in Kürze geknackt.

Oft hört man "XOR-Codierung" ist nicht sicher. XOR ist kein Codierungsverfahren, es dient lediglich dazu Werte zu verändern. Es gibt auch keine Plus-Codierung oder Multiplikations-Codierung. Das sind alles nur Möglichkeiten die Werte zu verändern. Addition ist genauso eine Möglichkeit wie XOR. Von einem Verschlüsselungsalgorhythmus spricht man erst, wenn tatsächlich mathematische Funktionen angewandt werden, um die Werte danach mit XOR, Addition, Subtraktion, Multiplaktion, usw. zu verändern.

Zweiwegverschlüsselung ist ein sehr heikles Thema. Nicht so wie in der Einwegverschlüsselung, wo man durch Checksummen einen Hash erzeugt der die eigentlichen Informationen nicht mehr enthält, sind bei Zweiwegverschlüsselung immer alle Daten vorhanden, nur in einem anderen Muster. Es gibt in der Zweiwegverschlüsselung nur eine einzige Möglichkeit, um wirklich sicher zu verschlüsseln. Das ist die Verwendung eines "Onetimepads". Es muss ein Schlüssel erzeugt werden, der max. nur 1 mal pro Verschlüsselung verwendet werden. Es darf kein Zusammenhang zwischen dem Public- und Private-Key bestehen.
Wir beschäftigen uns schon jahrelang mit Kryptologie, im Speziellen mit Kryptographie, also der Verschlüsselung von "Klartext" in "Geheimtext" und der Decodierung - da steckt einiges dahinter.

[Werbung on]
Ich weiss ja nicht wie sicher Deine Daten verschlüsselt werden sollen, aber auf www.wenCrypt.at bieten wir sichere Algorhythmen an - auch ASP-Lösungen für Webprojekte.
[Werbung off]

Wäre evtl. auch wirtschaftlicher für Dein Projekt. Denn wenn Du bereits 3 Monate an diesen beiden Funktionen arbeitest, wird es sicher noch einiges an Zeit brauchen, bis ein sicheres Verfahren damit möglich ist.

Man muss einfach abwägen, wie sicher die Daten zu verschlüsseln sind. Nicht immer ist Top-Sicherheit notwendig. Wenn es allerdings um vertrauliche Daten geht, sollte man aber lieber nichts riskieren...
____________________________________
Liebe Grüße,
Christian
Irmi ist offline   Mit Zitat antworten
Alt 06.08.2003, 13:58   #5
Irmi
Senior Member
 
Registriert seit: 15.09.2002
Beiträge: 141


Standard

Vertippt: www.webCrypt.at
____________________________________
Liebe Grüße,
Christian
Irmi ist offline   Mit Zitat antworten
Alt 06.08.2003, 14:13   #6
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

Der XOR Schlüssel findet auf einer Diskette oder einem USB Stick Platz, kann per PGP RSA verschlüsselt werden und man kann statt einem XOR Schlüssel mehrere verwenden. Wie gesagt RSA ist da ein Weg um Sicherheit zu erhalten.

Ergebnis= Daten_Zeichen ^ Xor1buffer_Zeichen ^ Xor2buffer_Zeichen ^ Xor3buffer_Zeichen;

Kurz vor dem Entschlüsseln führt man erst die RSA Entschlüsselung der XOR Keys 1 bis 3 durch und löscht die Schlüssel nach dem Entschlüsselungs bzw. Verschlüsselungsvorgang der Nutzdatennachricht im Speicher.

Das sollte die Sicherheit bieten, die Du meinst.

Über die Email Adresse wandert die Public Key verschlüsselte XOR1-3 Keybytefolge + die Nutzdaten und alles ist sicher aufgehoben. Die Daten sind zeitsparend verschlüsselt, die eigentlichen Keys bzw. der eigentliche Key sind gut gesichert durch RSA 256 bit oder mehr. Wenn die Daten selbst per RSA verschlüsselt würden kostet das dann wesentlich mehr Zeit als ein simpler XOR Befehl und bietet nicht mehr Sicherheit. Da ich den Klartext mit zufälligen Bytes exklusiv verodere, ist ein völliges Verwischen der Nachricht zuverlässig gegeben. Besser als mit jedem RSA Verfahren. Es kommt auf die Länge des XOR Keys an, selbst wenn der Zufallsgenerator nicht gerade zufällig genug arbeitet ist dies nicht entscheidend, da wie gesagt mehrere XOR Keys Verwendung finden können, deren Länge tunlichst ungerade ist, größer als 512 Bytes und vielleicht sogar eine Primzahl. Die Sicherheit wird von senkrecht (RSA) zu diagonal ~ horizontal + senkrecht (XOR, XOR Länge, XOR Key(s) RSA verschlüsselt).

mfg Kikakater
kikakater ist offline   Mit Zitat antworten
Alt 06.08.2003, 14:58   #7
Irmi
Senior Member
 
Registriert seit: 15.09.2002
Beiträge: 141


Standard

Zitat:
Da ich den Klartext mit zufälligen Bytes exklusiv verodere, ist ein völliges Verwischen der Nachricht zuverlässig gegeben.
Das ist genau der Punkt. In der Kryptoanalyse muss man auch berücksichtigen, dass diverse Muster erkannt werden, die in jedem "System" herrschen.
Nehmen wir als "System" die Deutsche Sprache. Es gibt gewisse Regeln. Der Vokal "e" folgt fast immer nach einem Konsonanten, nicht nur das, lt. Statistik sogar am häufigsten nach ein paar bestimmten (nur als Beispiel). Es sind immer Muster zu erkennen. Auch in GIF-Files (Header, Palette am Ende des Files, usw.) oder sonstigen Daten. Diese Muster sind bei normalem "verxoren" z.B. linear vorhanden, bei weiterführender Verxorung (wie in Deinem Beispiel) ist der Klartext zwar noch verschleierter geworden, aber die Muster sind nach wie vor enthalten, zwar nicht mehr linear, aber der Geheimtext ist durch Kryptoanalyse zu entschlüsseln.
Ein 256Bit-Schlüssel bietet nicht die gewünschte Sicherheit. Ein Bruteforceangriff kann den Hacker hier ungemein helfen. Der Schlüssel muss so groß wie der Klartext sein. Das ist das Prinzip des Onetimepad. Das Onetimepad-Verfahren ist die einzige Möglichkeit wirklich sicher zweiweg zu verschlüsseln.

Sagen wir mal so: Ein Onetimepad-Algorhythmus ist absolut sicher, da es keine Muster mehr gibt. Man kann keinerlei Rückschlüsse mehr ziehen. Trotzdem gibt es wie immer Hürden die es zu überwinden gilt, damit auch die Anwendung sicher ist. Dass z.B. die Eingabe/Erzeugung von Keys nicht abgehört werden kann, die Sourcecodes nicht mit einem Debugger entsprechend manipuliert werden können um sich einen Vorteil zu verschaffen (evtl. Code mitloggen, usw. bei gecrackten Versionen, usw.). Aber wenn wir rein den Algo bertrachten, ist nichts so sicher wie Onetimepad. XOR ist kein Verschlüsselungsalgorhythmus. Jeden Algo kann man mit XOR anwenden. XOR ist nichts anderes als die Werte zu ändern. Ob ich da jetzt Addition, Subtraktion, Multiplikation, Potenz oder XOR verwende ist völlig egal.

Aber wie gesagt muss man abwägen wie sicher die zu verschlüsselten Daten sein sollen. Wenn da nur die Geburtstage von einem Schachclub verschlüsselt werden sollen, braucht man sich sicher nicht solche Gedanken zu machen als wenn man einen Algorhythmus für die Transaktionen einer Bank entwickelt
____________________________________
Liebe Grüße,
Christian
Irmi ist offline   Mit Zitat antworten
Alt 06.08.2003, 15:00   #8
Irmi
Senior Member
 
Registriert seit: 15.09.2002
Beiträge: 141


Standard

@kikakater:
Ich muss dazusagen, dass das jetzt natürlich schon sehr extrem ist

Für die meisten Anwendungen würde Dein Vorschlag ausreichen. Ich wollte nur verdeutlichen, wo die Schwachstellen liegen, wenn es um wirklich wichtige, vertrauliche Daten geht.

Dein Lösungsansatz ist sicher okay, obwohl ich trotzdem noch einen Algo einbauen würde - im Moment wird ja nur verxort...
____________________________________
Liebe Grüße,
Christian
Irmi ist offline   Mit Zitat antworten
Alt 06.08.2003, 16:21   #9
Atze
Veteran
 
Registriert seit: 06.08.2002
Alter: 38
Beiträge: 363


Standard

Hallo.

Naja, es soll nicht soo hypersicher wie mit PGP sein. Leider binn ich zu dumm, ein funktionierendes Entschlüsselungsprogramm zu schreiben. Ich hoffe, ihr seid mir nicht böse, wenn ich nach einem Quelltext frage, womit ich die Dateien, die ich mit meinem Programm geschrieben habe, wieder entschlüsseln kann.



Vilen Dank im Vorraus.


mfg Atze
____________________________________
Der Weg vom Pils

Liebe geht durch den Magen, Pils durch die Blase

Atze ist offline   Mit Zitat antworten
Alt 06.08.2003, 16:38   #10
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

Zitat:
Original geschrieben von Irmi
Dein Lösungsansatz ist sicher okay, obwohl ich trotzdem noch einen Algo einbauen würde - im Moment wird ja nur verxort...
Nicht nur verxort, sondern der XOR Schlüssel ist RSA verschlüsselt.

Wie will man je feststellen, wo ein "e" in einer Nachricht kommt, speziell wenn ich eine ZIP Datei, die komprimiert ist, mit Textdateien als Inhalt verschlüssele.

Es heißt auch nicht Dekodieren/Enkodieren sondern Entschlüsseln/Verschlüsseln oder Decrypt/Encrypt, mein "Fehler".

Wenn man wie gesagt mehrere XORKeys verwendet mit unterschiedlichen Längen, so ist nach 1011 Bytes ein Auseinanderlaufen der Synchronität der XOR Keys gegeben. Wenn ich einen Klartext mit "abcde..." habe und ab dem 1012.Byte der Klartext sich komplett wiederholt so ist durch mehrere (Wankel-) XOR Keys ein Verschieben festzustellen und die weitere Nachricht wird völlig anders verschlüsselt.

<- Das Zungenzeigen bezieht sich auf den Satz: Gib der Technik keine Chance ...
kikakater ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:36 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag