Java Abgewandelte symmetrische Verschlüsselung zum Ausschluss von Brut-Force

tuxIt!

Cadet 3rd Year
Dabei seit
Sep. 2010
Beiträge
42
Hallöle,

ich will in Java einen Inhalt mit einem symmetrischen Verschlüsselungsverfahren anhand eines Passwortes verschlüsseln. Und nun soll bei der Entschlüsselungen bei JEDEM gegeben Passwort (auch falschen) ein Inhalt zurückgegeben werden. Aber nur bei dem richtigen Passwort werden die echten Inhalte zurückgegeben. Somit werden Wörterbuchattaken ausgeschlossen.

Folgende Fragen habe ich zu diesem Thema:
* Wie nennt man das auf schlau? Bzw. wie kann ich unter Google nach diesen Sachen suchen?
* Kennt jemand vielleicht ein Paar Links zu Tutorials oder HowTos oder Codestücken?
* Welche Tipps o.ä. habt Ihr für mich, dass ich das realisieren kann?

Ich freue mich auf Antworten :D,
tuxIt!
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
Die Frage ist einfach was du verschlüsseln willst und wie man erkennt ob die Daten korrekt entschlüsselt wurden.

Verschlüsselungsverfahren egal ob symmetrisch oder asymmetrisch produzieren nämlich immer eine Message bei der Dekodierung, egal ob richtiges Passwort oder falsches.
Das manche Software dir sagt, dass das Passwort falsch ist kann diese auch nur weil nochmal extra das Passwort gespeichert wird oder an die Message eine bestimmte Byte-Sequenz angehängt wird um eine Dekompression auf Richtigkeit zu prüfen.
 

tuxIt!

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Sep. 2010
Beiträge
42
Also schon mal vielen Dank für die vielen Antworten!

Die Frage ist einfach was du verschlüsseln willst und wie man erkennt ob die Daten korrekt entschlüsselt wurden.
Es geht einfach um Strings mit Zeichenkombinationen (=Passwörter). Und nur der Nutzer erkennt "praktisch" das richtige Passwort (=ich plane da noch eine bessere Technik zur Erkennung, dass man das richtige Passwort zur Entschlüsselung eingegeben hat). Wenn ein Hacker daher kommt und eine Brute-Force Programm darauf ansetzt, dann hat er pech, denn für jedes eingegebene Passwort bekommt er ein entschlüsseltes Passwort. Aber ob das stimmt kann ihm keiner sagen. Versteht Ihr jetzt mein Vorhaben?

Verschlüsselungsverfahren egal ob symmetrisch oder asymmetrisch produzieren nämlich immer eine Message bei der Dekodierung, egal ob richtiges Passwort oder falsches.
Das habe ich mir auch gedacht. Wenn ich aber unter Java mit "javax.crypto.*" einen Text mit DES verschlüssele und dann mit einem anderen Passwort versuche zu entschlüsseln, dann kommt "null" heraus ...

Das manche Software dir sagt, dass das Passwort falsch ist kann diese auch nur weil nochmal extra das Passwort gespeichert wird oder an die Message eine bestimmte Byte-Sequenz angehängt wird um eine Dekompression auf Richtigkeit zu prüfen.
Also kann ich nicht die Java-internen Algorithmen nutzen, sondern muss einen externen benutzen. Kennt jemand da irgendeine Library?

Gruß,
tuxIt!

EDIT: Eins wollte ich noch sagen: ich kenne mich in dem Thema Kryptographie aus! (D.h. ich kenne die Prinzipien von symmetrischer/assymmetrischer Verschlüsselung) Es geht mir nur um diesen Sonderfall, den ich beschrieben habe ...
 
Zuletzt bearbeitet:

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Brute Force vereitelt man mit geeigneter Schlüssellänge und sicheren Schlüsseln. Nicht mit so Flickschusterei.
Im Zweifelsfall schwächt man den Algorithmus substanziell und Brute Force ist gar nicht mehr nötig.

Solche Algorithmen wurden von Experten entwickelt, die sich dabei was gedacht haben. Sie zu ändern, weil
man als Laie meint es besser zu wissen, ist eine sehr sehr schlechte Idee.

€: Wenn die von Java mitgelieferten Algorithmen nicht deinen Ansprüchen entsprechen, implementier dir
einen anerkannten Algorithmus selbst. AES böte sich an. Die Spezifikation gibt es hier:
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
Ich habe den auch einmal in C implementiert. Vielleicht kannst du die Implementierung ja nach Java portieren:
http://incertum.net/~sirdzstic/src/stuff/rijndael.c

Auch speichert man Passwörter sinnvollerweise als Hashes. Keine Ahnung was du da machst mit Passwort
mit Passwort verschlüsseln, aber das gibt für mich gar keinen Sinn.
 
Zuletzt bearbeitet:

tuxIt!

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Sep. 2010
Beiträge
42
Ich habe versucht das hier nach Java und als OpenSource-Software zu portieren. Und da ist diese Idee um Brute-Force-Attaken unwirksam zu machen.

Gruß,
tuxIt!
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
*gg*
Das sagt mir doch was, da hatte da Frauenhofer bei uns am Fachbereich nach Entwicklern gesucht.


Also auch wenn ich deren Implementierung nicht kenne, kann ich dir garantieren, dass dein Ansatz nicht funktioniert. Wenn du mit einem normalen (a)symmetrischen Kryptoverfahren eine Nachricht mit dem falschen Key decodierst bekommst du Datenmüll. Du bekommst also einfach eine Menge von Bytes, diese können mit ASCII interpretiert printable oder non-printable (Steuerzeichen) sein.
Wenn du nun also die PIN für ne Kreditkartennummer falsch dekodieren würdest, könnte da rauskommen ".4d\r", und da glaubt dir niemand dass dies die PIN ist.
Du musst dir also viel eher eine Idee einfallen lassen wie bei solch einem Verfahren korrekterweise immer das richtige Ausgabealphabet entsteht (nur Zahlen) und dabei auch nicht die kryptografischen Ideen bricht.

Alles andere als eine leichte Aufgabe.
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Das zu lösen fällt mir spontan keine sinnvolle Methode ein. Man könnte bei einem falschen Passwort das
Ergebnis der Entschlüsselung als Seed für einen PRNG benutzen, so dass bei dem selben falschen Passwort
immer das selbe falsche Ergebnis angezeigt wird. Das hilft aber auch nicht weiter, wenn ein Angreifer sich
die verschlüsselten Daten selbst beschafft (was trivial ist) und dann versucht diese per Brute Force zu öffnen
(wobei er natürlich nicht von der Software verarscht wird. Denn die Software, die die Daten entschlüsselt,
kann er ja selbst schreiben).
 
Top