Forum
Tipps
News
Menu-Icon

Sicherheit bei Verschlüsselungsverfahren (Brute Force)

Hi,

ich bin gerade dabei ein Verschlüsselungsalgorithmus zu erstellen für
PHP. Dabei werden alle Zeichen eines Textes ähnlich wie beim Cäsar-Code in der Ascii-Tabelle verschoben.

Man wählt zunächst ein Passwort und dann wird von der Position eines Zeiches in der Ascii Tabelle die Stelle abgezogen, die ein jeweiliges Zeichen des Textes hat.

Also im Passwort kommt z.B. ein t vor, das hat in der Ascii Tabelle die Position 116. Wenn nun im Text z.B. ein A vorkommt (Position 65), dann wird in den verschlüsselten String nur 51 geschrieben (116-51). Bisher werden auch negative Zahlen übernommen.

Abhängig von der Länge des Passworts wird dann jeweils das nächste Zeichen des zu verschlüsselnden Texts genommen und das nächste Zeichen des Passworts und wiederrum "verschlüssel" bzw. verschoben:

	
function 
encrypt($str$pw)
	
{
	
	

	
	
$keys = array();
	

	
	
for(
$a 0$a 128$a++)
	
	
{
	
	

	
	
	
for(
$b 0$b strlen($pw); $b++)
	
	
	
{
	
	
	

	
	
	
	
if(
substr($pw$b1)==chr($a))
	
	
	
	
{
	
	
	
	
	
$keys[$b] = $a;
	
	
	
	
}
	
	
	
}
	
	
}
	
	

	
	
$str2 "";
	
	
$i2 0;
	
	
$i 0;
	
	

	
	
while(
$i strlen($str))
	
	
{
	
	
	

	
	
	
if(
$i2 > (count($keys)-1))
	
	
	
{
	
	
	
	
$i2 0;
	
	
	
}
	
	
	

	
	
	
for(
$x 0$x 128$x++)
	
	
	
{
	
	
	
	
if(
substr($str$i1)==chr($x))
	
	
	
	
{
	
	
	
	
	
$str2 .= ($keys[$i2]-$x).'#';
	
	
	
	
}
	
	
	
}
	
	
	

	
	
	
$i2++;
	
	
	
$i++;
	
	
	

	
	
}
	
	

	
	
return 
$str2;
	
	

	
}


Standardgemäß wird dann ein 64-Bit Passwort (also mit 64 Zeichen) aus a-Z, 0-9 erstellt (Sonderzeichen lassen sich auch mit einfügen).

Nur wie sicher ist so eine Verschlüsselung. Lässt sich ohne viel Programmieraufwand der Originaltext auch herauslesen ohne das Passwort z.B. mit der Brute-Fore-Method auszuprobieren?

Mir ist klar, dass so ein Algorithmus nicht unbedingt "sicher" ist, aber wo genau ist da die Angriffsfläche? Ein 64-Bit Key mit der Brute-Fore-Methode auszuprobieren dauert ja ein paar Tage bis Monate mit jeweils 128 bzw. 255 Zeichen im Ascii-Format.

Die Programmiersprache ist ja erstmal nebensächlich, es geht jetzt mal nur um den verschlüsselten Code. Mal ein Beispiel:

Dies ist ein Text hab ich verschlüsselt mit dem generierten Passwort 0xNytHjaNvsN1bbjuC7JFXAx7cL5iTeJLP1MbXx9t0x8JuHPKUdFRS9yrXI6kyfs.

Das kommt dabei heraus (die einzelnen Zahlen getrennt durch ein '#', damit man später besser "decodieren" kann):

-20#15#-23#6#84#-33#-9#-19#46#17#10#-32#17#14#-3#-14#1

Natürlich ist dabei praktisch gesehen das Passwort nur so "effizient" wie der Text lang ist, denn die vollen 64 Zeichen des Passworts kommen ja gar nicht zum Einsatz.
« Letzte Änderung: 04.09.06, 21:45:01 von Der olle Schwoebel »

Antworten zu Sicherheit bei Verschlüsselungsverfahren (Brute Force):

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Moin moin,

ich würde mal spekulieren, dass die Verschlüsselung schon relativ sicher ist, zumal eine Dekodierung ohne das Passwort ja praktisch nur durch Ausprobieren zu bewerkstelligen ist. Hab jetzt Deinen Code nicht durchgeschaut, aber gehe ich richtig in der Annahme, dass Dein Text nur 64 Zeichen lang sein darf, wenn Dein Passwort 64 Zeichen hat (das sind dann übrigens 64 Byte ;) )? Weil das ja dann relativ unpraktisch ist, wenn Du längere Texte hast.

Hatte kürzlich allerdings mal eine modifizierte Version des Cäsar-Codes fürs Studium programmieren müssen, die Dich in diesem Zusammenhang vielleicht interessieren könnte.
Dabei wird der Text mit Pseudozufallszahlen verschlüsselt, also Zahlen, die zufällig erscheinen, sich aber anhand einiger Parameter (-> Schlüssel) berechnen lassen.

Prinzip dabei: Du brauchst einen Primärschlüssel (Dein Passwort) und 3 Sekundärschlüssel (die dürfen bekannt sein, können auch direkt fest im Programm hardgecodet sein oder in einer Datei gespeichert).
Dein Primärsclüssel ist x(0), also Dein erster "Zufallswert". Nun berechnen sich alle folgenden Zufallswerte rekursiv nach der Vorschrift:

x(n+1) = (a*x(n) + b) modulo m

Dabei kommt dann wie gesagt die nächste Zufallszahl raus.

Am Beispiel:

x(0)=10, a=2, b=3, m=4

Also ist:
x(1) = (2*10 + 3) mod 4 = 3
x(2) = (2*3 + 3) mod 4 = 1
x(3) = (2*1 + 3) mod 4 = 1
usw.
je nachdem, wie Du Deine Schlüssel wählst, können (und sollen eigentlich auch) sehr große Werte für x rauskommen, Du brauchst ja aber nur ein Byte für die ASCII-Kodierung, also musst Du dann noch das letze Byte "separieren" mit verschluesselungsByte = x(n) & 255 (UND-Verknüpfung)

So, jetzt hast Du schonmal die Folge der Pseudo-Zufallszahlen und jetzt kommt das (meiner Meinung nach cleverste am Algorithmus): Um nun Dein Zeichen zu verschlüsseln verknüpfst Du Deinen Original-Buchstaben mit einem exklusiven Oder (XOR) mit dem entsprechenden Zufallsbyte. Das clevere dabei ist, dass Du dann nämlich für Codierung und Decodierung den selben Algortihmus verwenden kannst, da sich das XOR dann sozusagen aufhebt.

Auch dazu ein Beispiel:

Du hast bspsweise eine 100, die Du mit 60 codierst, also

1100100
xor
0111100
=
1011000 = 88

nun zum Decodieren das Gleiche, also 88 xor 60

1011000
xor
0111100
=
1100100 = 100

Tada, alles wieder beim Alten.

Puh, soweit, so gut. Wenn Du Code brauchst, ich habs hier irgendwo als Java-App rumliegen.

Gruß Spawn


« Zeiterfassunghi, bräuchte ne anleitung für visual basic »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
PHP
PHP steht für Personal Home Page und ist eine Skriptsprache die meist verwendet wird zur dynamischen Erzeugen von Internetseiten. PHP zeichnet sich durch die weite D...

Alphanumerische Zeichen
Alphanumerische Zeichen: Damit sind bestimmte Zeichenkombinationen gemeint, die aus Zahlen und einigen Buchstaben bestehen können. Während die Zeichenfolge "123...

ASCII
ASCII (American Standart Code for Information Interchange) ist ein 7-Bit-Zeichencode, der 128 verschiedene Zeichen darstellen kann. Diese 128 Zeichen umfassen die englisc...