05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

354 6 Netzwerkprogrammierung <strong>mit</strong> <strong>SSL</strong><br />

1–7<br />

9–13<br />

Schließlich kann der momentane Zustand des Open<strong>SSL</strong>-eigenen PRNGs <strong>mit</strong><br />

dem Funktionenpaar RAND_write_file() <strong>und</strong> RAND_load_file() in einer<br />

Datei gespeichert <strong>und</strong> zu einem späteren Zeitpunkt wieder geladen werden.<br />

RAND_write_file() schreibt insgesamt 1024 Zufallsbytes“ in die Datei file<br />

”<br />

<strong>und</strong> gibt die Anzahl der erfolgreich ausgegebenen Bytes zurück. War der<br />

PRNG beim Aufruf von RAND_write_file() noch nicht ordnungsgemäß initialisiert,<br />

gibt die Funktion dagegen den Wert -1 zurück. RAND_load_file()<br />

liest maximal max_bytes Bytes aus der Datei file zur Initialisierung des<br />

Pseudozufallszahlengenerators ein <strong>und</strong> gibt die Anzahl der erfolgreich eingelesenen<br />

Bytes zurück. Hat max_bytes den Wert -1, so liest die Funktion gleich<br />

die gesamte Datei ein.<br />

Das nachfolgende Programmbeispiel testet, ob der Open<strong>SSL</strong>-eigene Pseudozufallszahlengenerator<br />

bereits ordnungsgemäß initialisiert ist. Auf <strong>Unix</strong>-<br />

Systemen <strong>mit</strong> einer geeigneten Gerätedatei für Pseudozufallszahlen sollte dies<br />

von Haus aus der Fall sein. Andernfalls versucht das Programm aus Beispiel<br />

6.5, den PRNG <strong>mit</strong> den nötigen Startwerten zu versorgen.<br />

Die Startwerte sollen aus zwei Quellen stammen: Ein Teil der Werte soll einer<br />

(hoffentlich zuvor angelegten) Seed-Datei entnommen werden, der andere<br />

Teil soll von einem Entropy Gathering Dæmon besorgt werden. Nachdem die<br />

einschlägigen Header-Dateien eingeb<strong>und</strong>en wurden, werden deshalb zunächst<br />

die beiden Pfade zur Seed-Datei <strong>und</strong> zum EGD-Socket festgelegt.<br />

Zu Beginn des Hauptprogramms wird der Zustand des Pseudozufallszahlengenerators<br />

getestet. Ist der PRNG bereits implizit initialisiert, so kehrt die<br />

RAND_status()-Funktion <strong>mit</strong> dem Rückgabewert 1 zurück.<br />

1 #include <br />

2 #include <br />

Beispiel 6.5. openssl-rand-seed.c<br />

3<br />

4 #include <br />

5<br />

6 #define SEED_FILE "/var/tmp/my.seed"<br />

7 #define EGD_SOCKET "/var/run/egd-pool"<br />

8<br />

9 int main( int argc, char *argv[] )<br />

10 {<br />

11 int num, prng_ok;<br />

12<br />

13 prng_ok = RAND_status(); /* PRNG bereits initialisiert? */<br />

14<br />

15 if( ! prng_ok ) /* Falls nicht: selbst initialisieren! */<br />

16 {<br />

17 printf( "Der PRNG muß noch initialisiert werden.\n" );<br />

18

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!