CRYPT(3)

BEZEICHNUNG
crypt, crypt_r - Passwort- und Datenverschlüsselung

ÜBERSICHT
#define _XOPEN_SOURCE       /* siehe feature_test_macros(7) */
#include <unistd.h>

char *crypt(const char *key, const char *salt);

#define _GNU_SOURCE         /* Siehe feature_test_macros(7) */
#include <crypt.h>

char *crypt_r(const char *key, const char *salt,
              struct crypt_data *data);

Linken Sie mit der Option -lcrypt.

BESCHREIBUNG
crypt() ist die Funktion für die Verschlüsselung von Passwörtern. Sie beruht auf dem »Data Encryption«-Standardalgorithmus. Dieser wurde abgewandelt, um (unter anderem) vom Einsatz von Hardware-Implementierungen von Schlüsselsuchen abzuschrecken.

key ist das vom Benutzer eingegebene Passwort.

salt ist eine aus zwei Zeichen bestehende Zeichenkette aus dem Zeichenvorrat [a-zA-Z0-9./]. Diese Zeichenkette wird dafür verwendet, den Algorithmus auf eine von 4096 unterschiedliche Arten zu beeinflussen.

Aus den untersten sieben Bit jedes der ersten acht Zeichen von key wird ein 56-Bit-Schlüssel erzeugt. Dieser 56-Bit-Schlüssel wird verwendet, um wiederholt eine konstante Zeichenkette zu verschlüsseln (üblicherweise eine Zeichenkette aus lauter Nullen). Der zurückgegebene Wert zeigt auf das verschlüsselte Passwort, eine Reihe von 13 druckbaren ASCII-Zeichen. (Die ersten beiden Zeichen repräsentieren den Salt selbst.) Der Rückgabewert zeigt auf statische Daten, deren Inhalt bei jedem Aufruf überschrieben wird.

Warnung: Der Schlüsselraum besteht aus 2**56 gleich 7.2*10^16 möglichen Werten. Eine vollständige Durchsuchung dieses Schlüsselraums ist mit massiv parallelen Computern möglich. Es ist Software wie beispielsweise crack(1) verfügbar und durchsucht den Teil, der gewöhnlich von Menschen für Passwörter benutzt wird. Daher sollten Passwörter wenigstens übliche Namen und Wörter vermeiden. Die Verwendung eines passwd(1)-Programms, das automatisch während der Eingabe auf leicht zu knackende Passwörter prüft, wird empfohlen.

Der DES-Algorithmus selbst hat ein paar Eigenarten, mit denen die Verwendung von crypt(3) für etwas Anderes als Passwortverschlüsselung eine sehr schlechte Wahl wird. Wenn Sie vorhaben, die crypt()-Schnittstelle für ein kryptografisches Projekt zu verwenden, tun Sie es nicht: Holen Sie sich ein gutes Buch über Verschlüsselung und eine der weitläufig verfügbaren DES-Bibliotheken. crypt_r() ist eine ablaufinvariante Version von crypt(). Die Struktur, auf die data zeigt, wird für die Speicherung von Ergebnisdaten und Buchhaltungsinformationen verwendet. Der Aufrufende sollte die Struktur lediglich bereitstellen und data->initialized auf Null setzen, bevor crypt_r() erstmalig aufgerufen wird.

RÜCKGABEWERT
Bei Erfolg wird ein Zeiger auf das verschlüsselte Passwort zurückgegeben. Tritt ein Fehler auf, ist der Rückgabewert NULL.

FEHLER

EINVAL
    salt hat das falsche Format.

ENOSYS
    Die Funktion crypt() wurde nicht implementiert, wahrscheinlich wegen Export-Beschränkungen der USA.

EPERM
    /proc/sys/crypto/fips_enabled hat einen von Null verschiedenen Wert und es wurde versucht, einen schwachen Verschlüsselungstyp wie DES zu verwenden.

ATTRIBUTE

  Multithreading (siehe pthreads(7))
Die Funktion crypt() ist nicht multithread-fähig.

Die Funktion crypt_r() ist multithread-fähig.

KONFORM ZU
crypt(): SVr4, 4.3BSD, POSIX.1-2001. crypt_r() ist eine GNU-Erweiterung.

ANMERKUNGEN

  Anmerkungen zur Glibc
Die Glibc2-Version dieser Funktion unterstützt weitere Verschlüsselungsalgorithmen. Wenn salt eine Zeichenkette ist, die mit den Zeichen »$id$« beginnt, denen eine mit »$« abgeschlossene Zeichenkette folgt:
    $id$salt$encrypted
dann identifiziert id anstelle des DES-Programms die Verschlüsselungsmethode und legt fest, wie der Rest der Passwortzeichenkette interpretiert wird. Die folgenden Werte von id werden unterstützt:
    ID | Methode
    1 | MD5
    2a | Blowfish (nicht im Hauptentwicklungszweig der Glibc;
    | in einigen Linux-Distributionen hinzugefügt)
    5 | SHA-256 (seit Glibc 2.7)
    6 | SHA-512 (seit Glibc 2.7)
Also ist $5$salt$encrypted ein SHA-256-codiertes Passwort und $6$salt$encrypted ist ein SHA-512-codiertes. »salt« steht für die bis zu 16 Zeichen, die »$id$« im Salt folgen. Der verschlüsselte Teil der Passwortzeichenkette entspricht dem tatsächlich berechneten Passwort. Die Länge dieser Zeichenkette ist festgelegt:
MD5 | 22 Zeichen
SHA-256 | 43 Zeichen
SHA-512 | 86 Zeichen
Die Zeichen in »salt« und »encrypted« werden aus dem Vorrat [a-zA-Z0-9./] gewählt. In den MD5- und SHA-Implementierungen ist der gesamte key signifikant (anstelle nur der ersten acht Byte bei DES).

SIEHE AUCH
login(1), passwd(1), encrypt(3), getpass(3), passwd(5)

KOLOPHON
This page is part of release 3.80 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.