[HOWTO] Skein für PHP

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

[HOWTO] Skein für PHP

Postby Mr. S » 21. February 2009 17:40

Skein hat bestimmt noch niemand gehört, also was ist skein? Skein ist ein Hashalgorithmus wie auch MD5 oder SHA. MD5 ist mit 16 Byte Hashcode (32 Hex-Zeichen) mittlerweile viel zu klein und lässt sich mit vorgefertigten Rainbow-Tabellen knacken. Auch bei SHA wurden mittlerweile Schwachstellen gefunden. Das National Institute of Standards and Technology (NIST) hat daher einen Wettbewerb für ein neues Hashverfahren ausgeschrieben.

Mehr zu dem Thema unter: http://www.heise.de/newsticker/Olympiad ... ung/133300

Skein ist der Hashalgorithmus von Niels Ferguson, Stefan Lucks, Bruce Schneier, Doug Whiting, Mihir Bellare, Tadayoshi Kohno, Jon Callas und Jesse Walker. Bruce Schneier hat in der Vergangenheit schon die bekannten Verschlüsselungsverfahren Blowfish und Twofish entwickelt.

Mehr zu skein unter: http://www.schneier.com/skein.html und http://www.skein-hash.info/

Unter http://www.skein-hash.info/downloads findet man auch eine skein-PHP-Erweiterung zum Download (aktuell: php-skein-hash-0.8.tar.gz). Der Download von mir weiter unten in diesem Posting enthält eine aktualisierte Version des Quellcodes. Unter Linux kann man den Source-Code direkt downloaden und mit den Standardbefehlen zum erstellen von PHP-Erweiterungen kompilieren:
Code: Select all
phpize
./configure --enable-skein
make
make install

Für Windows biete ich bereits kompilierte Dateien an. Um skein zu installieren einfach die Datei php_skein.dll aus Release_TS in das extension-Verzeichnis entpacken. Ebenso enthalten ist der Source-Code und Projektdateien für Visual Studio. Wer skein selber kompilieren möchte muss sich zuerst von der PHP-Seite den offiziellen Sourcecode laden.

Zum Schluss muss man nur noch die Erweiterung in der PHP.ini aktivieren. Dazu einfach
Code: Select all
extension=php_skein.dll
bzw.
Code: Select all
extension=skein.so
zur php.ini hinzufügen, speichern und den Apache neustarten.
Zum Testen braucht man nur eine kleine Testdatei anlegen:
Code: Select all
<?php
echo skein_hash_hex("XAMPP");
?>

Das Ergebnis sieht dann wie folgt aus:
Code: Select all
2a724aa0ce464caea0fb8f0c65419b5db84b6d37b96ff49b6dd4a2b8f3c7508e95d1336ff4a8477da247dc03ef7310d5410749be85275f4a2aeea729e12d18f1


Download der DLL und des Sourcecodes für Visual Studio: http://rapidshare.com/files/434829679/p ... -win32.zip
Sollte die DLL nicht funktionieren muss ggf. erst noch das Microsoft Visual C++ 2010 Redistributable Package installiert werden.

UPDATE 04.12.2010
Vielen Dank an bratkartoffel! Ich habe die Änderung übernommen und außerdem die Skein-Implementation gegen die aktuelle (Oktober 2010) ausgetauscht. Im Download befindet sich der Source-Code und die kompilierte PHP-Erweiterung für XAMPP 1.7.3 (Windows).
Last edited by Mr. S on 04. December 2010 13:06, edited 1 time in total.
Mr. S
 
Posts: 10
Joined: 02. February 2009 16:55
Operating System: Win7x64

Re: [HOWTO] Skein für PHP

Postby bratkartoffel » 03. December 2010 15:01

Hallo,

ich hatte bei mir einen komischen Bug und nach längerer Suche konnte ich diesen endlich beseitigen. Das Patchfile ist am Ende dieses Posts zu finden.
Das Problem war, dass die mit skein_hash_hex() erzeugten Hashes ungültige Zeichen enthielten und somit nicht stimmten. Wenn ich mit Hilfe der Funktion bin2hex(skein_hash()) arbeitete, dann passte alles.
Beispiel:
Code: Select all
Vorher:
bin2hex(skein_hash("test"))  => 67aa6d6c5145fcbe3b009d1e1ac75d1edcc82858531f786d0efa88251892ef2d6db6c513f294b93c5dae46e1931c36d858d90af2ed0dafa74967733399d1c21f
skein_hash_hex("test")       => 67na6d6c5145ce3b00id1e1a075d1e.c082858531f786d0eae82518i28f2d6d605132i493c5dne4681i31c36.858.90a28d0dnfn749677333i9.1021f
bin2hex(skein_hash("XAMPP")) => 5ece16597b3b048a837d344e4ed9a646a16e8afe6f81d45ab883635f6c3e1b7da3793bf692991ab4dec3533dd12dd30a5389e77cefa6900a9214ab70849c3b20
skein_hash_hex("XAMPP")      => 5e0e16597b3b04eae37d344e4e.9n646n16eeae6fe1.45a8e3635f6c3e1b7dn3793b6i2i91a4.e03533d.12d.30a53e9877c8fn6i00ai214nb70e4ic3b20

Nachher:
bin2hex(skein_hash("test"))  => 67aa6d6c5145fcbe3b009d1e1ac75d1edcc82858531f786d0efa88251892ef2d6db6c513f294b93c5dae46e1931c36d858d90af2ed0dafa74967733399d1c21f
skein_hash_hex("test")       => 67aa6d6c5145fcbe3b009d1e1ac75d1edcc82858531f786d0efa88251892ef2d6db6c513f294b93c5dae46e1931c36d858d90af2ed0dafa74967733399d1c21f
bin2hex(skein_hash("XAMPP")) => 5ece16597b3b048a837d344e4ed9a646a16e8afe6f81d45ab883635f6c3e1b7da3793bf692991ab4dec3533dd12dd30a5389e77cefa6900a9214ab70849c3b20
skein_hash_hex("XAMPP")      => 5ece16597b3b048a837d344e4ed9a646a16e8afe6f81d45ab883635f6c3e1b7da3793bf692991ab4dec3533dd12dd30a5389e77cefa6900a9214ab70849c3b20


Konnte den Fehler finden und mit einer kleinen Änderung am Quelltext dann auch entfernen. Frank Denis habe ich bereits angeschrieben, mal schauen ob er den Patch demnächst aufnimmt und eine neue Version hochlädt.
Patch:
Code: Select all
--- php-skein-hash-0.8/php_skein.c   2008-10-31 18:05:10.000000000 +0100
+++ php-skein-hash-0.8-1/php_skein.c   2010-12-03 14:57:10.000000000 +0100
@@ -180,7 +180,7 @@
         abort();
     }
     do {
-        *resptr++ = hexits[hash[j] >> 4];
+        *resptr++ = hexits[(hash[j] & 0xf0) >> 4];
         *resptr++ = hexits[hash[j] & 0x0f];
     } while (++j < real_hash_size);
     *resptr = 0;


Grüße
BK
bratkartoffel
 


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 33 guests