PM Encryption und PHP 5.2.3

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

PM Encryption und PHP 5.2.3

Beitrag von Dungeonwatcher »

Moin! :cool:

Seit einigen Wochen suche ich zu folgendem Problem erfolglos eine Lösung. :(

Ich habe den "Private Message Encryption and Decryption" Mod im Einsatz, welcher nach diversen Fehlerkorrekturen nun auch fast perfekt funktioniert.

Nach der Umstellung von PHP 5.2.0 auf 5.2.3 funktioniert er jedoch nicht mehr. Alte unter PHP 5.2.0 verschlüsselte PNs werden nur unvollständig entschlüsselt und neue PNs werden zwar ver- aber nicht mehr entschlüsselt. Es gibt aber auch keinerlei Fehlermeldung. ^6

Im PHP ChangLog zur Version 5.2.2 habe ich dieses gefunden:
Fixed bug #40999 (mcrypt_create_iv() not using random seed).
bzw. zur Version 5.2.1

dies
Fixed bug #35496 (Crash in mcrypt_generic()/mdecrypt_generic() without proper init).
Allerdings werde ich nicht so recht schlau daraus. ^6


Frage an die hiesigen Profis:
Wie muss folgender Code geändert werden?

Code: Alles auswählen

if ( $decrypt )
		{
			$cipher_alg = MCRYPT_RIJNDAEL_256;
			$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
			$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
			$key = "This is a very secret key";
			$decrypted_message = str_replace("<b>Um diese verschl&uuml;sselte Nachricht zu lesen, gebe das Passwort unten rechts ein und klicke dann auf den Button \"Nachricht entschl&uuml;sseln\":</b>\n\n", "", $private_message);
			$decrypted_message = str_replace("<br />", "", $decrypted_message);
			$decrypted_message = trim(mcrypt_decrypt($cipher_alg, $encryption_key, pack("H*", $decrypted_message), MCRYPT_MODE_CFB, "$iv"));
			$decrypted_message = stripslashes($decrypted_message);
			$private_message = str_replace("\r\n", "<br />", $decrypted_message);
			$decrypted_message = str_replace("\"", """, $decrypted_message);
			$decrypted_message = stripslashes($decrypted_message);
		}
bzw.

Code: Alles auswählen

if ($encrypt)
				{
					$cipher_alg = MCRYPT_RIJNDAEL_256;
					$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
					$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
					$key = "This is a very secret key";
					$encrypted_message = str_replace("\\\"", "\"", $privmsg_message);
					$encrypted_message = str_replace("\\'", "'", $encrypted_message);
					$encrypted_message = str_replace("\\\\", "\\", $encrypted_message);
					$encrypted_message = bin2hex(mcrypt_encrypt($cipher_alg, $encryption_key, $encrypted_message, MCRYPT_MODE_CFB, "$iv"));
					$encrypted_message = wordwrap($encrypted_message, 80, "<br />", 1);
					$encrypted_message = "<b>Um diese verschl&uuml;sselte Nachricht zu lesen, gebe das Passwort unten rechts ein und klicke dann auf den Button \"Nachricht entschl&uuml;sseln\":</b>\n\n" . $encrypted_message;
					$sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text)
						VALUES ($privmsg_sent_id, '" . $bbcode_uid . "', '" . $encrypted_message . "')";
				}
Bye
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wenn die IV-Funktion jetzt Zufallszahlen verwendet, sollte der Schlüssel ohne erstellt werden, um die alten Nachrichten lesen zu können.
Also anstelle

Code: Alles auswählen

$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
halt

Code: Alles auswählen

$iv = mcrypt_create_iv($iv_size);
Zumindest nach meinem Verständnis.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi großer Meister! :anbet :cool:

Du hast mal wieder bestens verstanden. Das Verschlüsseln neuer PNs klappt schonmal bestens. Wie es mit den alten PNs ausschaut erfahre ich heute Abend von meiner unfreiwilligen Betatesterin. :)

Nur ein Schönheitsfehler gibt es jetzt wieder, denn diese Zeilen werden jetzt bemängelt:
PHP Warning: mcrypt_create_iv(): Cannot open source device in E:\WEBSERVER\htdocs\Forum\privmsg.php on line 684

PHP Warning: mcrypt_decrypt():The IV parameter must be as long as the blocksize in E:\WEBSERVER\htdocs\Forum\privmsg.php on line 688

PHP Warning: mcrypt_create_iv() : Cannot open source device in E:\WEBSERVER\htdocs\Forum\privmsg.php on line 1497

PHP Warning: mcrypt_encrypt(): The IV parameter must be as long as the blocksize in E:\WEBSERVER\htdocs\Forum\privmsg.php on line 1502
Das betrifft die geänderte Zeile 5 und 9 bzw. 5 und 10.
Zuletzt geändert von Dungeonwatcher am Fr 28.Sep, 2007 16:59, insgesamt 3-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

War Qutsch, was ich erzählt habe:
Die Zufallsangabe muss schon rein, ABER vorher muss der Zufallsgenerator zurückgesetzt werden.
Also so:

Code: Alles auswählen

srand((double) microtime() * 1000000);
und das vor die Zeile

Code: Alles auswählen

$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
(diese also wieder mit MCRYPT_RAND verwenden).
Ansonsten kann es eben zu Problemen kommen, gerade auch bei den alten PNs.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hmmm, nun wird zwar weiterhin verschlüsselt, aber wieder nur noch unvollständig entschlüsselt. Dafür gibt es aber keine PHP Fehlermeldung mehr. ^6

Ich suche seit 'ner knappen Stunde im großen Netz der Netze ein passendes Beispiel, nur irgendwie bin ich zu blind. :(
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Hm, da bin ich aktuell nun auch überfragt.
Das sich ein Bug nach dem Fix auch so noch eklatant negativ auswirken kann...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten