August 2013 Archive

Gesalzene Hashes werden oft zur sicheren Speicherung von Passwörtern verwendet. Nun gut - das Verfahren ist zu mindestens sicherer als die Verwendung ungesalzener Hashes.

Crypt::SaltedHash von Sascha Kiefer bzw. Gerda Shank ist eine einfach zu bedienende Bibliothek zum Erzeugen und Validieren gesalzener Hashes.

 

Beispiel: Salted Passwort Hash erzeugen

Das folgende Beispiel erzeugt einen gesalzenen Hash für ein Klartextpasswort:

#!/usr/bin/perl
use strict;
use warnings;

use Crypt::SaltedHash;

my $csh = Crypt::SaltedHash->new( algorithm => 'SHA-1' );

my $cleartext = 'secret';

$csh->add( $cleartext );

my $salted = $csh->generate;

print "Salted: $salted\n";

Das Programm erzeugt folgende Ausgabe:

Salted: {SSHA}9GnzDgL3ChgeupyOkQtSrN/0/v8sGBf3 

 

Beispiel: Salted Passwort Hash validieren

Die Methode validate kann einen vorgegebenen gesalzenen Hash validieren:

#!/usr/bin/perl
use strict;
use warnings;

use Crypt::SaltedHash;

my $csh = Crypt::SaltedHash->new( algorithm => 'SHA-1' );

my $cleartext = 'secret';

my $salted = '{SSHA}9GnzDgL3ChgeupyOkQtSrN/0/v8sGBf3';

my $valid = Crypt::SaltedHash->validate( $salted, $cleartext );

if ($valid) {
    print "OK\n";
} else {
    print "Not OK\n";
}

 

Crypt::SaltedHash kann natürlich auch die gesalzenen Hashes, die mit anderen Programmen, z.B. slappasswd, dem OpenLDAP Passwort Tool, erzeugt wurden, validieren.

Für das folgende Beispiel habe ich das Klartextpasswort 123456 ein paar Mal durch slappasswd laufen lassen, um die gesalzenen Hashes zu erzeugen.

#!/usr/bin/perl
use strict;
use warnings;

use Crypt::SaltedHash;

my $csh = Crypt::SaltedHash->new( algorithm => 'SHA-1' );

#$ slappasswd -s 123456

my @salted = qw!
  {SSHA}jppWV0DCxDJeOtaSS434nv5WewNYZSCS
  {SSHA}ilJ95JAFKS4TgDbjRkcYrBMBRp+4mmCE
  {SSHA}vrPil747oBHVgriDBbE+04XAs6BhXis0
  {SSHA}ew3Xf1C9vK+H0kNeJ12Gc1M4fpbT41+x
  {SSHA}9bRacd1WzrrUTiav7QBkMrxHtKTbjhpi
  {SSHA}4m91OtOLhIfL+xDlfO/L5YdYaABKF60U
  {SSHA}b+8sUhnuy6gnmlpf5BD58pww8NiQDZ3S
  {SSHA}SeN6Yubt+pFOfTYDPPQ8JVp7MSfBkr1l
  {SSHA}oSX0fmh8wNPGaJgEGQHY28RMiawsmraB
  {SSHA}K4+dl7hft3VY7gfjPOdz8OOyXflbxA1f
  {SSHA}7X/z6qeaDP6NpKQM3PYUQrERTTTj+VPD
  !;

my $cleartext = '123456';

foreach my $salted (@salted) {

    my $valid = Crypt::SaltedHash->validate( $salted, $cleartext );
    if ($valid) {
        print "OK ($salted)\n";
    } else {
        print "Not OK ($salted)\n";
    }
}

Das Programm erzeugt folgende Ausgabe:

OK ({SSHA}jppWV0DCxDJeOtaSS434nv5WewNYZSCS)
OK ({SSHA}ilJ95JAFKS4TgDbjRkcYrBMBRp+4mmCE)
OK ({SSHA}vrPil747oBHVgriDBbE+04XAs6BhXis0)
OK ({SSHA}ew3Xf1C9vK+H0kNeJ12Gc1M4fpbT41+x)
OK ({SSHA}9bRacd1WzrrUTiav7QBkMrxHtKTbjhpi)
OK ({SSHA}4m91OtOLhIfL+xDlfO/L5YdYaABKF60U)
OK ({SSHA}b+8sUhnuy6gnmlpf5BD58pww8NiQDZ3S)
OK ({SSHA}SeN6Yubt+pFOfTYDPPQ8JVp7MSfBkr1l)
OK ({SSHA}oSX0fmh8wNPGaJgEGQHY28RMiawsmraB)
OK ({SSHA}K4+dl7hft3VY7gfjPOdz8OOyXflbxA1f)
OK ({SSHA}7X/z6qeaDP6NpKQM3PYUQrERTTTj+VPD)

 

Sicherheitshinweis

Das Salt wird zusammen mit dem Hash (dem gehashten Passwort) in einem String gespeichert und kann, z.B. über die Methoden salt_bin oder salt_hex, jederzeit ausgelesen werden.

Gesalzene Hashes erschweren einen Wörterbuchangriff auf Passwörter, macht diesen aber nicht unmöglich.

 

Siehe auch

 

Über dieses Archiv

Diese Seite enthält alle Einträge von Perl HowTo von neu nach alt.

Juli 2013 ist das vorherige Archiv.

Dezember 2013 ist das nächste Archiv.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.