crypt_r(3) Passwort- und Datenverschlüsselung

Other Alias

crypt

Ü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

Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
SchnittstelleAttributWert
crypt() Multithread-FähigkeitMT-Unsafe race:crypt
crypt_r() Multithread-FähigkeitMT-Safe

KONFORM ZU

crypt(): POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. 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).

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.06 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <[email protected]> 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 <[email protected]>.