java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Blogs > XHelp

Bewerten

Krypto - Trillian

"Krypto - Trillian" bei Mister Wong speichern "Krypto - Trillian" bei YiGG.de speichern "Krypto - Trillian" bei Google speichern "Krypto - Trillian" bei del.icio.us speichern
Veröffentlicht: 24.11.2010 um 04:35 von XHelp
Aktualisiert: 24.02.2011 um 16:18 von XHelp (Fehlendes Modulo in Zeile 21)

Mein zweiter Blogeintrag hat wieder nicht viel mit Java zu tun. Das Thema kann man aber ziemlich allgemein betrachten: es handelt sich um Verschlüsselung. Du hast bestimmt schon mal irgendein Programm geschrieben, wo es notwendig war, ein Passwort zu speichern. Die große Frage ist aber: wie und wo. Mit diesen Fragen steht man nicht allein da: diese Frage stellt sich früher oder später jeder Entwickler. Browser, FTP Client, Instant Messenger, selbst das Betriebssystem arbeiten mit Passwörtern. Nun, da in jeder Kategorie bereits die eine oder andere Anwendung existiert haben sich scheinbar andere Leute vor uns darüber Gedanken gemacht. Das ist genau das, worum es in dieser Blogreihe gehen wird: Gedanken anderer.
Im Laufe der Zeit sammelten sich bei mir Verschlüsselungsalgorithmen von dem einen oder anderem Programm. Ein Paar davon werde ich hier beschreiben. Bei Artikeln dieser Thematik kriegt man öfters den Satz zu lesen „Der folgende Inhalt dient einzig und allein dem Informationszweck. Durch Missbrauch dieser Information machst du dich strafbar.“ Nun, vermutlich macht dieser Satz aus der rechtlichen Sicht Sinn, deswegen erwähne ich ihn hier auch.

Im ersten Eintrag wird es um Trillian gehen. Trillian ist ein Mutliprotokoll Messenger von Cerulean Studios. Vor einer Weile war er mein Lieblingsmessenger, deswegen fange ich mit ihm an (außerdem ist der Algo ziemlich leicht nachzuvollziehen). Mittlerweile ist Trillian bei der Version 5 angekommen, allerdings bin ich bei 2.0 ausgestiegen, deswegen weiß ich nicht, bis welcher Version die Verschlüsselung unverändert blieb. Das hier beschriebene Verfahren wurde mindestens in den Versionen 0.X und 1.X eingesetzt.

Trillian speichert seine Daten in ini Dateien im Programmverzeichnis. Picken wir uns z.B. ICQ bzw. AIM raus. Die uns interessierende Datei ist also:
Code:
%trillianVerzeichnis%\users\%benutzername%\aim.ini
Jede Sektion in der INI Datei stellt ein Account dar. Diese Sektionen beinhalten AIM-spezifische Einstellungen, aber uns interessiert in erster Linie das Kennwort. Für uns relevanter Teil könnte also wie folgt aussehen:
Code:
[profile 0]
name = 12345
password = A743D2B069F1EA
(komischerweise überrascht es ziemlich viele Leute, deswegen sei hier kurz erwähnt: ja, es gibt wirklich 5stellige UINs)
Dein Adlerblick hat es richtig erkannt: Hexzahlen. Jedes Zeichen des Kennworts wird durch 2-stellige Hexzahl kodiert. Hier sind es 14 Zeichen, also hat unser PW 7 Zeichen:

HEXDEXBIN
A716710100111
4306701000011
D221011010010
B017610110000
6910501101001
F124111110001
EA23411101010

Trillian verwendet eine einfache XOR-Verschlüsselung. Der „Trick“ dabei ist, dass jede Stelle des Kennworts mit einer anderen konstanten Zahl verknüpft wird. Die Werte sind dabei:

StelleDECHEXBIN
1243F311110011
20382600100110
31298110000001
4196C411000100
50573900111001
61348610000110
7219DB11011011
81469210010010

In unserem Beispiel ist die 1. Stelle die Zahl 167:
Code:
    10100111 (167)
XOR
    11110011 (243)
=
    01010100
Dies ist die Zahl 84 . Laut der ASCII Tabelle steht diese Zahl für das Zeichen T . Wenn man diesem Schema folgt, dann bekommt man als Ergebnis: TeStPw1 .
Das war‘s auch zu dem Verschlüsselungsverfahren von Trillian. Wenn du etwas Spektakuläres erwartet hast, bist du jetzt vermutlich enttäuscht. Aber ist wirklich etwas Spektakuläres notwendig?

So was wie „den ultimativen Verschlüsselungsalgo“ gibt es nicht. Früher oder später wird man irgendwo im Programm das ganze selber entschlüsseln müssen und das ist die Stelle, wo jemand, mit mehr oder weniger Mühe, ablesen kann wie es passiert. Jemanden, der keine Ahnung hat, wird auch so eine XOR Verschlüsselung abschrecken. Jemanden, der viel Ahnung hat, wird auch ein ausgeklügelter Algorithmus nicht erschüttern. Ganz davon mal abgesehen, dass von dir erstellte Software erst mal einen gewissen Bekanntheitsgrad erreichen muss, bevor sich die Leute ans Entschlüsseln dransetzen. Aber nichts desto trotz: jeder Schutz fällt früher oder später. Ein gutes Beispiel ist in diesem Zusammenhang Skype. Das große Geheimnis war die Verschlüsselung des Traffics. Ohne ihn zu kennen ist es logischerweise nicht möglich selber das Protokoll zu implementieren und so einen eigenen Client schreiben. Skype hat sich tapfer geschlagen, aber der Algo wurde dennoch geknackt und Mitte des Jahres veröffentlicht…. Aber das ist ein ganz andere Geschichte…
Damit die Existenzberechtigung dieses Beitrages in einem Java Forum nicht ganz so fraglich ist, hier noch die Implementierung des Algos in Java:
Java Code: Quelltext in neuem Fenster öffnen
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
public class TrillianCrypt {
    private final static byte[] XOR = new byte[] { (byte) 243, 38, (byte) 129,
            (byte) 196, 57, (byte) 134, (byte) 219, (byte) 146 };
 
    public static String encrypt(String plain) {
        String pw = "";
        for (int i = 0; i < plain.length(); i++) {
            byte b = (byte) (plain.charAt(i) ^ (XOR[i % 8] & 0xFF));
            pw += b < 16 ? "0" + Integer.toHexString(b & 0xFF) : Integer.toHexString(b & 0xFF);
        }
        return pw.toUpperCase();
    }
 
    public static String decrypt(String pw) {
        if (pw.length() % 2 != 0) {
            throw new IllegalArgumentException("Not a valid password!");
        }
        String plain = "";
        for (int i = 0; i < pw.length() / 2; i++) {
            int b = Integer.valueOf(pw.substring(i * 2, i * 2 + 2), 16);
            plain += (char) (b ^ (XOR[i%8] & 0xFF));
        }
        return plain;
    }
 
    public static void main(String[] args) {
        System.out.println(decrypt("A743D2B069F1EA"));
        System.out.println(encrypt("TeStPw1"));
    }
}
Kategorie: Kryptographie
Hits 1037 Kommentare 0
« Zurück     Startseite des Blogs     Nächste »
Kommentare 0

Kommentare

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de