Hackerboard WikiHaboBlog

[HaBo]

 
Cryptography & Encryption Ver- und Entschlüsselung, Algorithmen, Kryptoanalyse ? Kryptographie in der Praxis. Blowfish, Triple-DES, XOR u.a.

Eigenen Algorhytmus testen

Diskussion: Eigenen Algorhytmus testen im Forum Cryptography & Encryption, in der Kategorie Security Area; Hallo liebe Foren Gemeinde, ich habe ich habe ein Programm geschrieben, das beliebeigen Text verschlüsselt. Dazu verwendet es einen von ...

Antwort
Alt 31.12.09, 17:33   #1 (permalink)
 
Registriert seit: 31.12.09
FlySOft Leistung: Facit NTK
Likes: 0
Standard Eigenen Algorhytmus testen


Hallo liebe Foren Gemeinde,
ich habe ich habe ein Programm geschrieben, das beliebeigen Text verschlüsselt. Dazu verwendet es einen von mir geschriebenen Algorhytmus.

Hier ist der Verschlüsselte Text;

Code:
0ySEo{C6Rnât"oy_RJUnuo5DG1RSZÁ:H!PA%FUCWÓx"IFÉR5êGéz3rCÊy3NqÊjXêPzD7OAÂDRIF:EHWvÚz%qB$LR0sÚxYGú
Der Quellcode (#):
Code:
        private const string possibleChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!\"§$%&/()=?.:-_,;áéíóúÁÉÍÓÚâêîôûÂÊÎÔÛäöü+*~'#[]{}\\<>| _";

        public static string CryptText(string text, string password, int keyLength)
        {
            if (password == "")
                password = "Standard";
            string crypted = string.Empty;
            char[] key = new char[keyLength];
            char[] pass = password.ToCharArray();
            int seed = DateTime.Now.Minute * 60000 + DateTime.Now.Second * 1000 + DateTime.Now.Millisecond;
            Random rand = new Random(seed);
            for (int i = 0; i < keyLength; i++)
            {
                key[i] = getChar(rand.Next(0, possibleChars.Length - 1));
            }

            for (int i = 0; i < keyLength; i++)
            {
                crypted += CryptChar(key[i], password[i % password.Length]);
            }

            //Text verschlüsseln
            for (int i = 0; i < text.Length; i++)
            {
                char c1 = CryptChar(pass[i % pass.Length], text[i]);
                crypted += CryptChar(c1, key[i % keyLength]);
            }

            return crypted;
        }

        private static char CryptChar(char c1, char c2)
        {
            if (possibleChars.Contains(c1) && possibleChars.Contains(c2))
            {
                int c1ID = 0;
                int c2ID = 0;
                for (int i = 0; i < possibleChars.Length; i++)
                {
                    if (possibleChars[i] == c1)
                        c1ID = i;
                    if (possibleChars[i] == c2)
                        c2ID = i;
                }
                return getChar(c1ID + c2ID);
            }
            return '_';
        }

        private static char getChar(int id)
        {
            if (id >= 0)
            {
                return possibleChars[id % (possibleChars.Length - 1)];
            }
            else
            {
                return possibleChars[(possibleChars.Length - 1) + id];
            }
        }
Es währe nett, wenn ihr mir die Schwachstellen des Algos nennen könntet.

Download:
http://www.megaupload.com/?d=CMZOJ6R8

Mirror:
http://rapidshare.com/files/32846478...elung.exe.html

Wenn ihr einen Fehler findet, sagt es bitte.
Und wenn es hilft: Der Schlüssel ist 5 Stellen lang, das Passwort ist 8 stellen lang.
Viele grüsse,
FlySoft
FlySOft ist offline   Mit Zitat antworten
Alt 31.12.09, 22:50   #2 (permalink)
 
Benutzerbild von rami
 
Registriert seit: 09.02.08
rami Leistung: Facit NTK
rami eine Nachricht über ICQ schicken rami eine Nachricht über Skype™ schicken
Likes: 0
Standard

Designschwachstelle: Es werden nicht alle Zeichen unterstützt. Kannst du das nicht irgendwie über Unicode-Zeichencodes lösen?
__________________
rami ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 01.01.10, 11:28   #3 (permalink)
Themenstarter
 
Registriert seit: 31.12.09
FlySOft Leistung: Facit NTK
Likes: 0
Standard

Ich werde das mal Probieren, und sehen, wo ich in C# eine Liste mit darstellbaren Zeichen finde...
FlySOft ist offline   Mit Zitat antworten
Alt 03.01.10, 11:54   #4 (permalink)
 
Registriert seit: 03.01.10
serious-cool Leistung: Facit NTK
Likes: 0
Standard

Hi,
vorweg kenn ich zwar die Sprache deiner Implementierung nicht, aber mir fällt auf dass du eine Art Substitutions Chiffrierung verwendest. Diese ist schon von Haus aus nicht sicher. Nimm dir mal ca. 200 Chriffren und wende eine Häufigkeitsanalyse darauf an. Dauert von Hand keine 20 min und deine Chiffrierung ist gebrochen. Ich rate dir für Heimanwendungen eher zum OTP (One Time Pad) oder zu einer Feistel Chiffre. Gruß
serious-cool ist offline   Mit Zitat antworten
Alt 03.01.10, 22:09   #5 (permalink)
 
Registriert seit: 20.07.06
Darkslide Leistung: Facit NTK
Likes: 18
Standard

Ja weil es auch so einfach ist unmengen Zufallszahlen mittels eine TRNG zu erzeugen...
Darkslide ist offline   Mit Zitat antworten
Alt 04.01.10, 00:32   #6 (permalink)
 
Registriert seit: 03.01.10
serious-cool Leistung: Facit NTK
Likes: 0
Standard

jupp, Linear Feedback Shift Register, siehe GSM und andere Handy Netze... Aber selbst ein PRNG ist besser als eine Substitution. Für halbwegs ordentliche Dinge gibt es AES Klassen in so ziemlich jeder Sprache.
serious-cool ist offline   Mit Zitat antworten
Alt 04.01.10, 16:41   #7 (permalink)
 
Registriert seit: 20.07.06
Darkslide Leistung: Facit NTK
Likes: 18
Standard

du weißt schon, das ein PRNG ala LFSR nicht sicher ist, da man dies ohne Probleme mit nem Gaußverfahren innerhalb von Minuten brechen kann, wenn man die ersten 2(m-1) Bits hat?Wenn du schon was empfiehlst dann gleich was richtiges und keine halben Sachen.
Darkslide ist offline   Mit Zitat antworten
Alt 04.01.10, 17:32   #8 (permalink)
 
Registriert seit: 03.01.10
serious-cool Leistung: Facit NTK
Likes: 0
Standard

Es ist mir bekannt dass sich bei bekanntem x0 bis x2m-1 lässt sich der LFSR berechnen lässt, wobei m gleich der Anzahl an FlipFlops mit Schalter oder vergleichbares und x Klartext Bits ist.
FlySOft wollte etwas zu seinem Algo hören, ich habe ihm eine Schwachstelle gezeigt. Eine Grudsatz Disskussion zu RNGs ala LFSR und LCG ist glaube ich hier nicht gewünscht. Außerdem wissen wir nichts über die geplante Anwendung von FlySofts Algo. Deshalb ist der OTP als Vorlage durchaus noch im Rennen. Auf Feist und AES habe ich ebenfalls schon verwiesen.
serious-cool ist offline   Mit Zitat antworten
Alt 08.01.10, 15:15   #9 (permalink)
 
Registriert seit: 31.12.05
Vlad_ Leistung: Facit NTK
Vlad_ eine Nachricht über ICQ schicken
Likes: 0
Standard

Deine zufallszahlen sind nicht dafür geeignet. nimm mal SecureRandom oder BigInteger's integrierten Algorithmus. Das ist doch Java oder?
Vlad_ ist offline   Mit Zitat antworten
Alt 09.01.10, 14:11   #10 (permalink)
Themenstarter
 
Registriert seit: 31.12.09
FlySOft Leistung: Facit NTK
Likes: 0
Standard

Nö, das ist C#.
Mir ist überigens selber der Bug aufgefallen, der das entschlüsseln sehr einfach möglich macht. Wenn die ersten paar zeichen vom Passort stimmen, also der Key korrekt entschlüsselt wird, und das passwort die richtige länge hat, dann lässt sich der Rest sehr leichtrausfinden. Wenn man z.B. einen Teil der Nachricht kennt, lässt sich jedes Zeichen ausprobieren und dadurch das Passwort erraten bzw. entschlüsseln.

FlySoft

Geändert von FlySOft (09.01.10 um 14:21 Uhr)
FlySOft ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Security Area » Cryptography & Encryption » Eigenen Algorhytmus testen
Themen-Optionen
Ansicht

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.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61