Ankündigung

Einklappen
Keine Ankündigung bisher.

mcrypt Probleme auf Produktionsserver

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mcrypt Probleme auf Produktionsserver

    Hallo Forum,

    ich verwende die mcrypt-Extension (Version 2.5.6), um Cookies zu verschlüsseln.
    Als Cypher benutze ich "blowfish" und als Mode "cfb".
    Auf meinem lokalen Testserver (XAMPP) hat noch alles wunderbar funktioniert. Ich habe mir dann vor kurzem bei all-inkl.com einen Testaccount angelegt. Leider treten dort vereinzelte Probleme mit dem Auslesen der verschlüsselten Cookies auf, die nicht reproduzierbar sind. Die Cookies werden manchmal überhaupt nicht ausgelesen. Die mcrypt-Version ist auf beiden Servern die gleiche. Auch die PHP-Versionen sind identisch.

    Den Quellcode der Encryption-Klasse haben ich dem Buch Professionelle PHP 5-Programmierung von George Schlossnagle unverändert entnommen.

    PHP-Code:
    class Encryption
    {
        private static 
    $cypher 'blowfish';
        private static 
    $mode   'cfb';
        private static 
    $key    'secret';
        
        
        public function 
    encrypt($plaintext)
        {
            
    $td mcrypt_module_open(self::$cypher''self::$mode'');
            
    $iv mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
            
    mcrypt_generic_init($tdself::$key$iv);
            
    $crypttext mcrypt_generic($td$plaintext);
            
    mcrypt_generic_deinit($td);
            
            return 
    $iv.$crypttext;
        }
        
        
        public function 
    decrypt($crypttext)
        {
            
    $td mcrypt_module_open(self::$cypher''self::$mode'');
            
    $iv_size mcrypt_enc_get_iv_size($td);
            
    $iv substr($crypttext0$iv_size);
            
    $crypttext substr($crypttext$iv_size);
            
    $plaintext "";
            
            if(
    $iv) {
                
    mcrypt_generic_init($tdself::$key$iv);
                
    $plaintext mdecrypt_generic($td$crypttext);
                
    mcrypt_generic_deinit($td);
            }
            
            return 
    $plaintext;
        }

    Hier für alle Fälle die Ausgabe von phpinfo() des all-inkl-Testaccounts

    Ich kann mir absolut nicht erklären warum diese Fehler auftreten. Der all-inkl-Support ist zwar sehr gut, bei diesem Problem konnte mir jedoch nicht geholfen werden. Könnt Ihr es vielleicht?

  • #2
    Hat sonst vielleicht jemand eine Idee zu einer alternativen Verschlüsselungsmethode?

    Kommentar


    • #3
      Wenn die Entschlüsselung schief geht, speicher den Cookiewert mal in einer Datei ab zur genaueren Analyse.

      Kommentar


      • #4
        Also ich nutze für die Verschlüsselung von Cookies XTEA.

        XTEA - Wikipedia, the free encyclopedia

        Bei der Erstellung des Cookies (im Administrationsbereich) wird ja für die Verschlüsselung ein 16 Byte großer, 8-stelliger Key erzeugt, welcher mit Hilfe der User-ID in einer Sessiontabelle gespeichert wird. Ein zweites Cookie enthält die User-ID. Im XTEA verschlüsseltem Cookie wird die MD5-Hashsumme des bereits "verhashtem" Passwortes + Müll verschlüsselt. So ist es also auch nicht über Rainbowtables möglich die Passwörter zu rekonstruieren.

        Bei der Abfrage im Script wird dann anhand der User-ID im Cookie der Key zum entschlüsseln des Cookies aus der Datenbank entnommen und entschlüsselt. So kann man dann den Inhalt weiter durch diverse Funktionen überprüfen.

        Der überreichte Inhalt an das Cookie sähe in dem beschriebenen Fall so aus:
        xtea_encrypt(md5(md5("Passwort"."wirrwarrirgendwas ")), key)

        Kommentar


        • #5
          md5(md5())? Ob das sicher die Sicherheitheit erhöht? Und was willst Du damit vor wem schützen?

          Kommentar


          • #6
            Zitat von Sven Beitrag anzeigen
            ein 1 Byte großer, 8-stelliger Key
            Wie funktioniert das? Wurde das Byte neu definiert? Mit 1 Byte kann man genau ein Zeichen (in der ASCII-Kodierung) darstellen. Ein 8-stelliger Key, der in einem Byte gespeichert ist, würde einer 8-stelligen Abfolge von 0 und 1 entsprechen => 2^8 = 256 mögliche Keys, was definitiv ziemlich wenig ist....
            Hab mal auf deinem Link zu Wikipedia nachgeschaut und da steht was von 128 Bit = 16 Byte => 2^128 = ~3.4 * 10^38 Möglichkeiten. Damit siehts dann schon besser aus *klugscheiss*

            Kommentar


            • #7
              Zitat von Montellese Beitrag anzeigen
              da steht was von 128 Bit = 16 Byte => 2^128 = ~3.4 * 10^38 Möglichkeiten. Damit siehts dann schon besser aus *klugscheiss*
              Richtig :P War aber auch schon spät und ich hatte da wohl noch zu viele Byte im Kopf aus dem anderem Thread.

              Kommentar

              Lädt...
              X