Einzelnen Beitrag anzeigen
Alt 26.01.09, 19:39   #9 (permalink)
Elderan
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
naja du musst selber beurteilen, wie viel Zeit du hast bzw. investieren möchtest. Sich in das Thema einzuarbeitet dauert schon etwas, das ist nicht von heute auf morgen erledigt.

Und du solltest (noch) nicht hinterfragen, warum ein Algorithmus etwas genau in dieser Reihnfolge oder genau diese Operation macht. Dies zu verstehen ist extrem schwierig und man braucht unheimlich viel Know How in der Kryptoanalyse (das Analysieren von Algorithmen), welches man erst nach Jahren erhalten kann.

Wie AES o.ä. aufgebaut ist sollte man so akzeptieren. Da haben sich viele Leute sehr lange Gedanken gemacht.


Also AES ist eigentlich relativ leicht zu erklären, schau dir mal ein paar Weblinks von Wikipedia an.
Manche Beschreibungen beschreiben es sehr anschaulich, andere wiederum beschreiben es sehr mathematisch, welches deutlich über Schulniveu hinausgeht.
Aber diese hohe Mathematik braucht man eigentlich nicht.

Die Grundlage von AES ist eigentlich ein zwei dimensionales Byte-Array. Da du 16 Byte Blöcke ergibt sich also ein 4x4 Byte Array. Dieses kannst du auch so direkt in Java umsetzen.
Auf dieses zwei dimensionale Byte Array werden nun verschiedene Operationen (ShiftRow, MixColumn etc.) angewendet. Mal werden alle Werte in dem Byte Array durch andere ersetzt (in der Art 00 => AF, 01 => 1F, ..., FF => 05), mal werden Zeilen/Spalten verschoben etc.

Wenn man diese 2-dim Byte Array erstmal hat, ist der Rest relativ leicht, sofern man eine halbwegs verständliche Anleitung findet.


Ansonsten kann man auch noch XTEA (Blockchiffre) oder RC4 (Stromchiffre) verwenden.
Diese sind in der Implementierung wirklich super schlank und man kommt mit sehr wenigen Zeilen hin.

Der Counter Mode ist eigentlich auch ganz einfach.
Die beiden Parteien müssen sich auf einen Key einigen und dann einen (nicht geheimen) Startwert aushandeln, der aber nur 1 mal verwendet werden sollten.
Dazu könnten beide Parteien z.B. eine 128 Bit lange Zufallszahl erzeugen und dem anderen senden. Der Startwert ist dann die XOR-Verknüpfung beider Startwerte.

Verschlüsseln geht dann, indem man den Startwert verschlüsselt. Das Ergebnis nutzt man dann als Streamchipher. Man bekommt ja einen 128 Bit Wert als Geheimtext, dieser Geheimtext XOR Klartext stellt dann den Geheimtext dar den man sendet.
Beim Entschlüsseln das gleiche.
Erst den Startwert verschlüsseln, dann die ankommenden Daten XOR Verschlüsselter_Startwert.

Danach erhöht man den Startwert um 1.


Du solltest aber bedenken, dass du zwei Ströme zwischen zwei Clients hast. Einmal von Client A nach Client B und einmal von Client B nach Client A.
Dort ein und den selben Wert für den Counter zu haben geht nicht. Man muss also zwei (unterschiedliche) Counter haben.


Ansonsten kenn ich mich mit Java nicht so aus, aber dort es kein Problem sein einen eigenen gesicherten Netzwerkstream zu schreiben.
Einfach von NetworkStream (oder wie auch immer es in Java heißt) erben und die entsprechenden Methoden überschreiben.
Elderan ist offline   Mit Zitat antworten
 

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