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
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
KONFORM ZU
crypt(): POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. crypt_r() ist eine GNU-Erweiterung.
ANMERKUNGEN
Verfügbarkeit
in Glibc
Die Funktionen crypt(), encrypt(3) und
setkey(3) sind Teil der POSIX.1-2008 XSI Options
Group for Encryption und sind optional. Falls die
Schnittstelle nicht verfügbar ist, dann ist die
symbolische Konstante _XOPEN_CRYPT entweder nicht
definiert oder auf -1 definiert und die Verfügbarkeit
kann zur Laufzeit mit sysconf(3) überprüft
werden. Dies kann der Fall sein, falls die nachgelagerte
Distribution vom Glibc Crypt auf libxcrypt
umgestiegen ist. Bei der Neuübersetzung von Anwendungen
in solchen Distributionen muss der Programmierer erkennen,
falls _XOPEN_CRYPT nicht verfügbar ist und
<crypt.h> für die Funktionsprototypen
einschließen; ansonsten ist libxcrypt ein
ABI-kompatibler Austauschersatz.
Funktionalitäten
in Glibc
Die Glibc-Version dieser Funktion unterstützt weitere
Verschlüsselungsalgorithmen.
Wenn salt eine Zeichenkette ist, die mit den Zeichen »$id$« beginnt, denen eine optional mit »$« abgeschlossene Zeichenkette folgt, hat das Ergebnis die Form:
$id$salt$encrypted
id identifiziert die anstelle von DES verwandte Verschlüsselungsmethode und legt fest, wie der Rest der Passwortzeichenkette interpretiert wird. Die folgenden Werte von id werden unterstützt:
Daher enthalten $5$salt$encrypted und $6$salt$encrypted das mit auf SHA-256 respektive SHA-512 basierenden Funktionen verschlüsselte Passwort.
»salt« steht für die bis zu 16 Zeichen, die »$id$« im Salt folgen. Der »encrypted«-Teil der Passwortzeichenkette entspricht dem tatsächlich berechneten Passwort. Die Länge dieser Zeichenkette ist festgelegt:
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).
Seit Glibc 2.7 unterstützen die SHA-256- und SHA-512-Implementierungen eine benutzerdefinierte Anzahl an Hash-Runden, standardmäßig 5000. Falls die Zeichen »$id« in dem Salt von »rounds=xxx$« gefolgt werden, wobei xxx eine Ganzzahl ist, hat das Ergbnis die Form:
$id$rounds=yyy$salt$encrypted
Hierbei ist yyy die Anzahl der tatsächlich eingesetzten Hash-Runden. Die Anzahl der verwandten Runden ist tatsächlich 1000, falls xxx kleiner als 1000 ist, 999999999, falls xxx größer als 999999999 ist; andernfalls ist sie mit xxx identisch.
SIEHE AUCH
login(1), passwd(1), encrypt(3), getpass(3), passwd(5)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.16 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 <Martin.E.Schauer [AT] gmx.de> und Helge Kreutzmann <debian [AT] helgefjell.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 [AT] lists.org>.