Provided by: manpages-de-dev_4.27.0-1_all bug

BEZEICHNUNG

       crypt, crypt_r, crypt_rn, crypt_ra — Hashen von Passphrasen

BIBLIOTHEK

       Crypt Library (libcrypt, -lcrypt)

ÜBERSICHT

       <crypt.h>  char  *  crypt(const char *phrase, const char *einstellung) char * crypt_r(const char *phrase,
       const char *einstellung,     struct crypt_data *daten)      char      *      crypt_rn(const char *phrase,
       const char *einstellung,   struct crypt_data *daten,   int größe)   char  *  crypt_ra(const char *phrase,
       const char *einstellung, void **daten, int *größe)

BESCHREIBUNG

       Die Funktionen crypt, crypt_r, crypt_rn und crypt_ra führen einen nicht umkehrbaren »Hash« der phrase mit
       einer »Hash-Methode« zur Speicherung in  der  Systempasswortdatenbank  (shadow(5))  durch.  Das  Ergebnis
       dieser  Aktion  wird  »gehashte  Passphrase«  oder  einfach nur »Hash« genannt. Die Hash-Methoden sind in
       crypt(5) beschrieben.

       einstellung steuert, welche Hash-Methode verwandt werden soll und stellt auch verschiedene Parameter  für
       die  ausgewählte  Methode bereit, am wichtigsten ein zufälliges »salt«, das sicherstellt, dass keine zwei
       Hashes identisch sind, selbst falls die Zeichenketten phrase identisch sind.

       Das Argument daten von crypt_r ist eine Struktur des Typs  struct  crypt_data.  Sie  hat  mindestens  die
       folgenden Felder:

             struct crypt_data {
                 char output[CRYPT_OUTPUT_SIZE];
                 char setting[CRYPT_OUTPUT_SIZE];
                 char input[CRYPT_MAX_PASSPHRASE_SIZE];
                 char initialized;
             };

       Wird  von  crypt_r  erfolgreich  zurückgekehrt,  dann wird die gehashte Passphrase in output gespeichert.
       Anwendungsprogrammierer werden  ermutigt  (es  ist  aber  nicht  verpflichtend),  die  Felder  input  und
       einstellung  zu verwenden, um die Zeichenketten zu speichern, die sie als input phrase und einstellung an
       crypt_r übergeben. Dies erleichtert es, sämtliche sensitiven Daten zu  löschen,  wenn  diese  nicht  mehr
       benötigt werden.

       Das  Feld initialized muss auf Null gesetzt werden, bevor erstmalig ein Objekt struct crypt_data in einem
       Aufruf an crypt_r() verwandt wird. Wir empfehlen vor dem ersten Einsatz, das gesamte Objekt mit Nullen zu
       überschreiben, nicht nur initialized und die dokumentierten  Felder.  (Natürlich  sollte  dies  erfolgen,
       bevor Sie etwas in einstellung und input speichern.)

       Das  Argument daten von crypt_rn sollte auch auf ein Objekt struct crypt_data zeigen und größe sollte die
       Größe dieses Objektes sein, nach einem Cast auf int. Wird dies zusammen mit crypt_rn verwandt, dann  muss
       das  gesamte  Objekt  daten  (außer  den Feldern input und einstellung) vor dem ersten Einsatz mit Nullen
       überschrieben werden; dies ist nicht nur eine Empfehlung, wie bei  crypt_r.  Abgesehen  davon  haben  die
       Felder die gleichen Zwecke wie bei crypt_r.

       Beim  ersten  Aufruf  von  crypt_ra sollte daten die Adresse einer Variablen void *, die auf NULL gesetzt
       ist, sein, und größe sollte die Adresse einer Variablen int sein, die auf Null gesetzt ist. crypt_ra wird
       mittels malloc(3) ein Objekt struct crypt_data reservieren und initialisieren und seine Adresse und Größe
       in die Variablen schreiben, auf  die  daten  und  größe  zeigen.  Dies  kann  in  nachfolgenden  Aufrufen
       wiederverwertet  werden.  Nachdem die Anwendung mit dem Hashen von Passwörtern fertig ist, sollte sie das
       Objekt struct crypt_data mittels free(3) freigeben.

RÜCKGABEWERTE

       Nach erfolgreichem Abschluss liefern  crypt,  crypt_r,  crypt_rn  und  crypt_ra  einen  Zeiger  auf  eine
       Zeichenkette  zurück,  die  sowohl  die gehashte Passphrase als auch die Einstellungen, die zur Kodierung
       verwandt wurden, enthält. Diese Zeichenkette kann direkt als einstellung in anderen Aufrufen  von  crypt,
       crypt_r,  crypt_rn  und  crypt_ra  und  als  prefix  in  Aufrufen von crypt_gensalt, crypt_gensalt_rn und
       crypt_gensalt_ra  verwandt  werden.  Sie  wird  komplett  in  ASCII  darstellbar  sein  und  wird   keine
       Leerraumzeichen  oder  die  Zeichen  »:«,  »;«,  »*«,  »!« oder »\« enthalten. Siehe crypt(5) für weitere
       Details über das Format der gehashten Passphrasen.

       crypt legt sein Ergebnis in einem statischen Speicherbereich ab, der bei nachfolgenden Aufrufen von crypt
       überschrieben wird. Es ist nicht sicher, crypt aus verschiedenen Threads simultan aufzurufen.

       crypt_r, crypt_rn und crypt_ra legen ihr Ergebnis in dem Feld output ihres Arguments  daten  ab.  Es  ist
       sicher,  sie  aus  mehreren Threads simultan aufzurufen, solange separate daten -Objekte für jeden Thread
       verwandt werden.

       Im Fehlerfall schreiben crypt_r, crypt_rn und crypt_ra einen ungültigen Hash in  das  Feld  output  ihres
       Arguments  daten  und  crypt  schreibt  einen ungültigen Hash in seinen statischen Speicherbereich. Diese
       Zeichenkette wird kürzer als 13 Zeichen sein und mit einem »*« beginnen und  bei  Vergleichen  nicht  mit
       einstellung übereinstimmen.

       Im  Fehlerfall liefern crypt_rn und crypt_ra einen Nullzeiger zurück. crypt_r und crypt können auch einen
       Nullzeiger zurückliefern oder sie können einen Zeiger auf einen ungültigen Hash  zurückliefern,  abhängig
       davon,   wie   Libcrypt  konfiguriert  wurde.  (Die  Option,  einen  Zeiger  auf  einen  ungültigen  Hash
       zurückzuliefern, dient  der  Kompatibilität  zu  alten  Anwendungen,  die  annehmen,  dass  crypt  keinen
       Nullzeiger zurückliefern kann. Siehe “HINWEISE ZUR PORTABILITÄT” weiter unten.)

       Alle vier Funktionen setzen beim Fehlschlag errno. Wenn die Funktionen erfolgreich sind, ist der Wert von
       errno nicht spezifiziert und Sie können sich auf ihn nicht verlassen.

FEHLER

       EINVAL             einstellung ist ungültig oder es wurde eine nicht unterstützte Hash-Methode erbeten.

       ERANGE             phrase  ist  zu lang (mehr als CRYPT_MAX_PASSPHRASE_SIZE Zeichen; einige Hash-Methoden
                          könnten niedrigere Begrenzungen haben).
                          Nur crypt_rn: größe ist zu klein für die durch einstellung erbetene Hash-Methode.

       ENOMEM             Interner Zwischenspeicher konnte nicht reserviert werden.
                          Nur crypt_ra: Speicher für daten konnte nicht reserviert werden.

       ENOSYS oder EOPNOTSUPP
                          Das Hashen der Passphrase wird auf dieser Plattform überhaupt nicht  unterstützt  oder
                          die  in  einstellung  erbetene  Hash-Methode wird nicht unterstützt. Diese Fehlercodes
                          werden  von  dieser  Libcrypt-Version  nicht  verwandt,  könnten  aber   auf   anderen
                          Plattformen beobachtet werden.

HINWEISE ZUR PORTABILITÄT

       crypt ist Teil von POSIX, aber crypt_r, crypt_rn und crypt_ra kommen in keinem der Standards vor.

       POSIX  legt  keine  Hash-Methode  fest  und  verlangt  nicht, dass gehashte Passphrasen zwischen Systemen
       portierbar sind. In der Praxis sind gehashte Passphrasen portierbar, solange beide Systeme die  verwandte
       Hash-Methode  unterstützen.  Allerdings  unterscheidet  sich  die  Gruppe der unterstützten Hash-Methoden
       zwischen Systemen deutlich.

       Das Verhalten von crypt bei  Fehlern  ist  nicht  gut  standardisiert.  Einige  Implementierungen  können
       schlicht  nicht  fehlschlagen  (außer  durch Absturz des Programms), andere liefern einen Nullzeiger oder
       eine bestimmte Zeichenkette zurück. Die meisten Implementierungen setzen errno nicht, andere wiederum tun
       dies. POSIX legt fest, dass ein Nullzeiger zurückgeliefert und errno gesetzt werden  soll,  es  definiert
       aber  nur  einen  möglichen  Fehler,  ENOSYS, falls crypt überhaupt nicht unterstützt wird. Einige ältere
       Anwendungen sind nicht in der Lage, mit durch crypt zurückgelieferten Nullzeigern umzugehen. Das oben für
       diese Implementierung beschriebene Verhalten, d.h. das Setzen  von  errno  und  dem  Zurückliefern  eines
       ungültigen  Hashes,  der sich von einstellung unterscheidet, wurde gewählt, um diese Anwendungen zu einem
       Fehlschlag zu bewegen, wenn ein Fehler auftritt.

       Aufgrund historischer Einschränkungen zum Export von kryptographischer Software aus  den  USA  ist  crypt
       eine  optionale  POSIX-Komponente.  Anwendungen  sollten  daher darauf vorbereitet sein, dass crypt nicht
       verfügbar ist oder zur Laufzeit einen Fehler zurückliefern ( errno auf ENOSYS setzen).

       POSIX spezifiziert, dass crypt in <unistd.h> deklariert  ist,  aber  nur  falls  das  Makro  _XOPEN_CRYPT
       definiert  ist  und  einen  Wert  größer oder gleich Null hat. Da Libcrypt nicht <unistd.h> bereitstellt,
       deklariert es stattdessen crypt, crypt_r, crypt_rn und crypt_ra in <crypt.h> .

       Auf einer Minderzahl an Systemen (insbesondere neueren  Versionen  von  Solaris)  verwendet  crypt  einen
       Thread-sicheren  statischen  Speicherpuffer,  wodurch es sicher ist, es von mehreren Threads aus simultan
       aufzurufen, aber nicht  verhindert,  dass  jeder  Aufruf  innerhalb  eines  Threads  die  Ergebnisse  des
       vorherigen Aufrufs überschreibt.

FEHLER

       Im  Fehlerfall liefern einige Implementierungen von crypt einen ungültigen Hash zurück, der an einem nur-
       lesbaren Ort gespeichert oder nur einmal initialisiert wird, was bedeutet, dass es nur sicher  ist,  dass
       der Puffer gelöscht wird, auf den vom Rückgabewert von crypt gezeigt wird, wenn kein Fehler auftrat.

       struct  crypt_data  könnte recht groß sein (32 kB in dieser Implementierung von Libcrypt; mehr als 128 kB
       in einigen anderen Implementierungen). Dies ist groß genug, so dass es nicht ratsam sein  könnte,  dieses
       auf dem Stack zu reservieren.

       Einige neu entwickelte Hash-Methoden benötigen noch mehr Zwischenspeicher, aber die Schnittstelle crypt_r
       ermöglicht  es,  die  Größe von struct crypt_data zu ändern, ohne die Binärkompatibilität zu brechen. Die
       Schnittstelle crypt_rn könnte größere Reservierungen für bestimmte  Hash-Methoden  berücksichtigen,  aber
       der  Aufrufende  von crypt_rn hat keine Möglichkeit zu erkennen, wieviel Speicher reserviert werden muss.
       crypt_ra erledigt die Reservierung selbst, aber kann malloc(3) nur ein einziges Mal aufrufen.

ATTRIBUTE

       Siehe attributes (7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
       ┌─────────────────────────────┬───────────────────────┬────────────────────────┐
       │ SchnittstelleAttributWert                   │
       ├─────────────────────────────┼───────────────────────┼────────────────────────┤
       │ crypt                       │ Multithread-Fähigkeit │ MT-Unsicher race:crypt │
       ├─────────────────────────────┼───────────────────────┼────────────────────────┤
       │ crypt_r, crypt_rn, crypt_ra │ Multithread-Fähigkeit │ MT-Sicher              │
       └─────────────────────────────┴───────────────────────┴────────────────────────┘

GESCHICHTE

       Eine Rotor-basierende Funktion crypt erschien in Version 6 AT&T UNIX. Das »traditionelle«, DES-basierende
       crypt erschien erstmalig in Version 7 AT&T UNIX.

       crypt_r entstammt der GNU-C-Bibliothek. Es gibt auch eine Funktion crypt_r unter HP-UX und  MKS  Toolkit,
       allerdings unterscheiden sich deren Prototyp und Semantik.

       crypt_rn und crypt_ra entstammen dem Openwall-Projekt.

SIEHE AUCH

       crypt_gensalt(3),   getpass(3),   getpwent(3),   shadow(3),  login(1),  passwd(1),  crypt(5),  passwd(5),
       shadow(5), pam(8)

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>
       und Helge Kreutzmann <debian@helgefjell.de> erstellt.

       Diese Übersetzung ist  Freie  Dokumentation;  lesen  Sie  die  GNU  General  Public  License  Version  3:
       https://www.gnu.org/licenses/gpl-3.0.html  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  die
       Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org .

Openwall-Projekt                                11. Oktober 2017                                        CRYPT(3)