Crypt::SaltedHash - eine einfach zu bedienende Bibliothek zum Erzeugen und Validieren gesalzener Hashes

Veröffentlicht von Thomas Fahle am (Permalink)

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

 

Weitere Posts