Verwendung von PHP mcrypt mit Rijndael / AES

8

Ich versuche, einige Textnachrichten mit mcrypt von PHP und der Chiffre Rijndael zu verschlüsseln, aber ich bin nicht sicher über den MCRYPT_MODE_modename (laut PHP Handbuch sind diese verfügbar "ecb", "cbc", "cfb", "ofb "," nofb "oder" streamen "aber ich lese da sind eigentlich noch ein paar mehr). Ich habe keine Ahnung, was jeder tut oder wie man sie benutzt.

Ich habe zwei Dinge gelesen, dass der ECB-Modus nicht benutzt werden sollte und MCRYPT_RAND auch nicht. Sie haben nicht erklärt warum. Für den ECB-Modus schätze ich, dass es immer dieselbe verschlüsselte Ausgabe für den gleichen Klartext erzeugt (vielleicht könnte das für einen Angriff verwendet werden), keine Ahnung von MCRYPT_RAND (erwähnt von @azz hier ).

Meine Frage ist, welcher Mcrypt-Modus sollte ich verwenden, und es wäre toll, ein Beispiel für PHP-Code mit zu sehen, weil alle Beispiele, die ich gefunden habe, ECB verwenden. Die Zeichenfolgen, die ich verschlüsseln möchte, enthalten nur ASCII-Text und variable Länge, nicht größer als 500 Zeichen.

    
riviraz 19.06.2011, 02:45
quelle

2 Antworten

16

ecb ist das einfachste und hat Schwächen, daher wird es nicht empfohlen ( Ссылка ). cbc gilt als deutlich stärker als ecb. Einige der anderen sind möglicherweise stärker als cbc, aber sie sind alle stream bezogen, so cbc sollte Ihren Bedürfnissen entsprechen.

Von ... Ссылка ...

  • MCRYPT_MODE_ECB (elektronisches Codebuch) eignet sich für zufällige Daten, z. B. zum Verschlüsseln anderer Schlüssel. Da die Daten kurz und zufällig sind, wirken sich die Nachteile der EZB negativ aus.
  • MCRYPT_MODE_CBC (Cipher Block Chaining) eignet sich besonders zur Verschlüsselung von Dateien, bei denen die Sicherheit gegenüber ECB deutlich erhöht ist.
  • MCRYPT_MODE_CFB (Chiffre-Feedback) ist der beste Modus zum Verschlüsseln von Bytestreams, bei denen einzelne Bytes verschlüsselt werden müssen.
  • MCRYPT_MODE_OFB (Ausgangsrückmeldung, in 8bit) ist vergleichbar mit CFB, kann aber in Anwendungen verwendet werden, bei denen eine Fehlerausbreitung nicht toleriert werden kann. Es ist unsicher (weil es im 8bit-Modus arbeitet), daher ist es nicht empfehlenswert, es zu benutzen.
  • MCRYPT_MODE_NOFB (Output-Feedback, in nbit) ist vergleichbar mit OFB, aber sicherer, weil es auf der Blockgröße des Algorithmus operiert.
  • MCRYPT_MODE_STREAM ist ein zusätzlicher Modus, der einige Stream-Algorithmen wie "WAKE" oder "RC4" enthält.

Ich bin mir nicht sicher, warum MCRYPT_RAND empfohlen wird, aber es kann sein, dass der System-Zufallszahlengenerator auf vielen Systemen nicht als wirklich zufällig betrachtet wird. Es gibt nur zwei Alternativen, die je nach System und PHP-Version möglicherweise nicht verfügbar sind. Von ... Ссылка ...

  • Die IV-Quelle kann MCRYPT_RAND (System-Zufallszahlengenerator), MCRYPT_DEV_RANDOM (liest Daten von / dev / random) und MCRYPT_DEV_URANDOM (liest Daten von / dev / urandom) sein. Vor 5.3.0 war MCRYPT_RAND der einzige, der unter Windows unterstützt wurde.

Der folgende Code ist nur ein kurzes Beispiel. Es funktioniert, aber ich kann seine Stärke nicht bestätigen.

%Vor%     
Night Owl 19.06.2011, 04:46
quelle
2

Der ECB-Modus ist nicht sicher, weil er keine Zufälligkeit in die verschlüsselten Daten einführt. Das bedeutet im Grunde, dass Sie die gleichen Muster der Eingabe in der Ausgabe sehen werden (zB sehen Sie das Bild hier ) Es ist eine "verschlüsselte" Version von Tux, das Logo von Linux.

Der MT_RAND wird nicht als sicher angesehen, da er den Zufallszahlengenerator des Betriebssystems verwendet (die Funktion rand() von PHP).

Für Kryptographiezwecke ist es besser, MCRYPT_DEV_RANDOM (liest Daten von / dev / random) oder MCRYPT_DEV_URANDOM (liest Daten von / dev / urandom) zu verwenden.

Die am häufigsten verwendeten und sichersten Verschlüsselungsmodi, die mit Mcrypt verfügbar sind, sind der CBC- und der CTR-Modus. Sie eignen sich für allgemeine Anwendungsfälle. Es ist immer besser, Verschlüsselung + Authentifizierung zu verwenden (d. H. Verschlüsseln und authentifizieren mit HMAC). Zum Beispiel wird der CBC-Modus ohne Authentifizierung durch den Padding-Oracle-Angriff beeinträchtigt.

    
Enrico 10.06.2012 07:14
quelle