Neues in der Kategorie Kryptographie

Crypt::Cracklib von Dan Sully verhindert bzw. erschwert die Verwendung zu einfacher Passwörter.

Dazu führt Crypt::Cracklib eine Wörterbuch Attacke auf das Passwort durch und prüft auch die Verteilung der Zeichen, die Länge der Zeichenkette und die Groß- und Kleinschreibung.

Crypt::Cracklib sollte verwendet werden, wenn der Benutzer sein Passwort selbst festlegen kann.

 

Beispiel fascist_check

Die automatisch exportierte Funktion fascist_check() liefert folgende Zeichenketten, die Begründung für ein zu schwaches Passwort, zurück (in Klammern die deutsche Lokalisierung):

  • it is based on a dictionary word (Es basiert auf einem Wörterbucheintrag)
  • it is based on a (reversed) dictionary word (Es basiert auf einem (umgekehrten) Wörterbucheintrag)
  • it is WAY too short! (Es ist VIEL zu kurz!)
  • it is too short ((Es ist zu kurz)
  • it does not contain enough DIFFERENT characters (Es enthält nicht genug unterschiedliche Zeichen)
  • it is all whitespace
  • it is too simplistic/systematic (Es ist zu einfach/systematisch)
  • it looks like a National Insurance number (Es schaut nach Versicherungsnummer aus)

Falls das Password gut genug ist, wird ok zurück geliefert.

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

use Crypt::Cracklib;

my @passwords = qw/123456 Schatzi abc
                   z6IvPlOx6H oWOYNZI$bP
                   geheym aaa2$ss iztahcS
		   FH153436A /;

foreach my $password (@passwords) {

    if ( fascist_check($password) eq 'ok' ) {
       print "Passwort $password ist OK.\n";
    }
    else {
        print "Ooops - Passwort $password: ",  fascist_check($password) , " !!!\n";
    }
}

Das Programm erzeugt folgende Ausgabe:

Ooops - Passwort 123456: Es ist zu einfach/systematisch !!!
Ooops - Passwort Schatzi: Es basiert auf einem Wörterbucheintrag !!!
Ooops - Passwort abc: Es ist VIEL zu kurz !!!
Passwort z6IvPlOx6H ist OK.
Passwort oWOYNZI$bP ist OK.
Ooops - Passwort geheym: Es basiert auf einem Wörterbucheintrag !!!
Ooops - Passwort aaa2$ss: Es enthält nicht genug unterschiedliche Zeichen !!!
Ooops - Passwort iztahcS: Es basiert auf einem (umgekehrten) Wörterbucheintrag !!!
Ooops - Passwort FH153436A: Es schaut nach Versicherungsnummer aus !!!

 

Siehe auch

In der Informatik ist eine Prüfsumme (engl.: checksum) eine einfache Maßnahme zur Gewährleistung von Datenintegrität bei der Datenübermittlung oder -speicherung. Sie wird hauptsächlich bei der Datensicherung und bei der Datenübertragung verwendet. (Quelle: Wikipedia: Prüfsumme.)

Nachfolgend finden Sie ein paar Beispiele zur Erstellung von Prüfsummen über Dateien.

Prüfsummen mit Bordmitteln erstellen

Hier bietet sich unpack() an.

#!/usr/bin/perl
use warnings;
use strict;
use Fcntl;  # Standardmodul
{	
        local undef $/;  # Slurp-Mode - Nur in diesem Block

        my $file = '/path/to/some/file';

        sysopen(FH, $file, O_RDONLY) or die $!;
	binmode(FH);
			# Die ganze Datei in den Hauptspeicher einlesen
	my $CompleteFile = <FH>;

	close(FH) or die $!;

	my $checksum;

		# Berechnet die gleiche Prüfsumme wie sum für System V
	$checksum = unpack ("%32C*", $CompleteFile) % 32767;
	print "System V: ", $checksum , "\n";

		# 16-bit Prüfsumme berechnen
	$checksum = unpack ("%16C*", $CompleteFile);
	print "16-bit: ", $checksum , "\n";
		
		# 32-bit Prüfsumme berechnen
	$checksum = unpack ("%32C*", $CompleteFile);
	print "32-bit: ", $checksum , "\n";
}
exit();

Diese Methode setzt voraus, dass die Daten bzw. Dateien in den Hauptspeicher passen. Vorteil dieser Methode: Sie funktioniert überall, wo Perl funktioniert.

CRC-32 Prüfsummen mit String::CRC32 erstellen

String::CRC32 von Sönke J. Peters kann CRC32-Prüfsummen von Zeichenketten und Dateien erzeugen. String::CRC32 erzeugt die gleichen CRC Prüfsummen wie ZModem, PKZip und entsprechende andere Programme.

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

use String::CRC32;

my $file = '/path/to/some/file';

sysopen(FH, $file, O_RDONLY) or die $!;

binmode(FH);

my $crc = crc32(*FH);

close(FH) or die $!;

print "CRC32: ", $crc , "\n";

String::CRC32 ist in XS implementiert und läuft sehr schnell. Auch hier gilt, dass die Daten in den Hauptspeicher passen müssen.

CRC32 Prüfsummen mit Digest::CRC erstellen

Digest::CRC von Oliver Maul implementiert das Digest-Interface und kann CRC8-, CRC16-, CRC32- und CRC64-Prüfsummen erstellen.

#!/usr/bin/perl
use warnings;
use strict;
use Fcntl;  # Standardmodul
# OO style
use Digest::CRC;

my $file = '/path/to/some/file';
sysopen(FH, $file, O_RDONLY) or die $!;
binmode(FH);

my $ctx = Digest::CRC->new(type=>"crc32");
$ctx->addfile(*FH);
my $digest = $ctx->digest;
print "CRC32: ", $digest , "\n";
$digest = $ctx->hexdigest;
print "CRC32 (HEX): ", $digest , "\n";
close(FH) or die $!;

Die Datei muss hier nicht in den Hauptspeicher passen, addfile kann auch mit Dateien umgehen, die größer sind als der verfügbare Hauptspeicher.

Siehe auch

Net::Random von David Cantrell ermöglicht es, Zufallszahlen via Internet zu beziehen. Es ist eigentlich als Notfalllösung gedacht, falls keine oder keine geeigneten Zufallszahlen zur Verfügung stehen.

Net::Random nutzt dazu random.org bzw. www.fourmilab.ch als Quelle für Zufallszahlen. Beide Quellen geben an, das ihre Zufallszahlen "truly random" sind. Das sind immerhin bessere Zufallszahlen, als einige Betriebssysteme liefern.

Für kryptographische Zwecke würde ich jedoch keine Zufallszahlen via Internet beziehen.

Beispiel:

#!/usr/bin/perl
use strict;
use warnings;
use Net::Random;    

my $rand = Net::Random->new(     
  # use random.org randomness source,           
        src => 'random.org',
         # src => 'fourmilab.ch',
         # and return results from 1 to 2000
        min => 1,
        max => 2000
    );

my  @numbers = ();  

# Fehler werden über warnings gemeldet
eval {
 local $SIG{__WARN__} = sub {die 'WARN: '.shift};
        # get 5 numbers
  @numbers = $rand->get(5) 
};

# Fehlerbehandlung
if ( $@ ) {
 warn "Fehler: $@";
 die $@;
}
 


foreach my $number  ( sort { $a <=> $b }  @numbers ) {
     print "$number\n";
}
__END__

Über dieses Archiv

Diese Seite enthält aktuelle Einträge der Kategorie Kryptographie.

IDE ist die vorherige Kategorie.

Linux ist die nächste Kategorie.

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

Fachzeitschriften

Blog Roll