crypt(3X) crypt(3X)
NAME
crypt, setkey, encrypt, descrypt, dessetkey, desencrypt,
runsetkey, runcrypt, cryptclose - Verschlüsselungsfunktionen für
Paßwörter und Dateien
SYNTAX
cc [option ...] datei ... -lcrypt
#include <crypt.h>
char *crypt(const char *key, const char *salt);
void setkey(const char *key);
void encrypt(char *block, int flag);
char *descrypt(const char *key, const char *salt);
void dessetkey(const char *key);
void desencrypt(char *block, int flag);
int runsetkey(int *p, const char *key);
int runcrypt(long offset, char *buffer, unsigned int count,
int *p);
int cryptclose(int *p);
BESCHREIBUNG
descrypt() ist die Paßwort-Verschlüsselungsfunktion. Sie beruht auf
einem Einweg-Hash-Algorithmus mit Variationen, die (unter anderem) die
Verwendung von Hardware-Implementierungen für Schlüsselsuchverfahren
verhindern sollen.
key ist das eingegebene Paßwort eines Benutzers. salt ist eine Zei-
chenkette der Länge zwei aus [a-zA-Z0-9./]. Diese Zeichenkette wird
zur Veränderung des Verschlüsselungsalgorithmus auf eine von 4096
Arten verwendet; danach wird das Paßwort als Schlüssel zum wieder-
holten Verschlüsseln einer konstanten Zeichenkette benutzt. Der
jeweils zurückgegebene Wert zeigt auf das verschlüsselte Paßwort. Die
ersten beiden Zeichen sind gleich salt.
Die Funktionen dessetkey() und desencrypt() ermöglichen den Zugriff
auf den aktuellen Verschlüsselungsalgorithmus. Das Argument von
dessetkey() ist ein Zeichenfeld mit einer Länge von 64, das nur die
Zeichen mit den numerischen Werten 0 und 1 enthält. Bei einer Auftei-
lung dieser Zeichenkette in Gruppen von je 8 wird das niederwertige
Bit in jeder Gruppe ignoriert; hieraus ergibt sich ein Schlüssel mit
56 Bits, der eingetragen wird. Dies ist dann der Schlüssel, der von
dem Algorithmus zum Verschlüsseln der Zeichenkette block bei der Funk-
tion desencrypt verwendet wird.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
crypt(3X) crypt(3X)
Das Argument für desencrypt() ist ein Zeichenfeld der Länge 64, das
nur die Zeichen mit den numerischen Werten 0 und 1 enthält. Das Argu-
mentfeld wird anstelle eines ähnlichen Feldes geändert und repräsen-
tiert dabei die Bits des Arguments, nachdem es unter Verwendung des
von dessetkey() gesetzten Schlüssels der Hash-Funktion des Arguments
unterworfen worden ist. Wenn flag gleich Null ist, wird das Argument
verschlüsselt, sonst wird es entschlüsselt.
Beachten Sie, daß die Entschlüsselung in der internationalen Version
von crypt(3X) nicht zur Verfügung steht. Die internationale Version
ist Teil des C-Entwicklungssystems, und die Inlandversion ist Teil des
Sicherheitspakets. Wenn versucht wird, die Entschlüsselung mit der
internationalen Version von desencrypt() aufzurufen, wird eine Feh-
lermeldung ausgegeben.
crypt(), setkey() und encrypt() sind Benutzerprogramme, die je nachdem
descrypt(), dessetkey() und desencrypt() aufrufen.
Die Routinen runsetkey() und runcrypt() sind für Applikationen [wie
ed(1) und vi(1)] gedacht, die Verschlüsselungsfähigkeiten benötigen,
die mit crypt(1) auf Benutzerebene kompatibel sein sollen.
runsetkey() erstellt eine bidirektionale Pipe-Verbindung zu crypt(),
wobei key als Paßwort-Argument verwendet wird. runsetkey() nimmt
einen Block Zeichen und transformiert mit crypt(1) den Klartext oder
Chiffriertext in Chiffriertext bzw. Klartext. offset ist die relative
Byte-Position, gerechnet vom Beginn der Datei an, von der der durch
buffer zur Verfügung gestellte Textblock stammt. count ist die Anzahl
der Zeichen in buffer, und p ist ein Feld, das Verweise auf eine
Tabelle von Ein- und Ausgabedatei-Streams enthält. Wenn die Verschlüs-
selung beendet ist, wird cryptclose() verwendet, um die Verbindung
mit crypt(1) zu beenden.
runsetkey() gibt als Ergebnis den Wert -1 zurück, wenn eine Verbin-
dung mit crypt(1) nicht aufgebaut werden kann. Das passiert bei inter-
nationalen Versionen des Reliant UNIX Systems, auf denen crypt(1)
nicht verfügbar ist. Wenn an runsetkey() ein leerer Schlüssel überge-
ben wird, wird 0 zurückgegeben und sonst 1. runcrypt() gibt -1
zurück, wenn es von der Pipe, die an crypt() angehängt ist, nicht
lesen oder nicht auf sie schreiben kann. Sonst wird 0 zurückgegeben.
ERGEBNIS
In der internationalen Version von crypt(3X) wird ein Wert von 1 für
flag beim Aufruf von desencrypt() nicht akzeptiert. errno wird in
diesem Falle auf den Wert ENOSYS gesetzt, um anzuzeigen, daß die Funk-
tionalität nicht verfügbar ist.
HINWEISE
Der Rückgabewert in crypt() zeigt auf Daten der Speicherklasse static,
die bei jedem Aufruf überschrieben werden.
SIEHE AUCH
crypt(1), login(1), passwd(1), getpass(3C), passwd(4).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98