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.

6.3 Open<strong>SSL</strong>-Basisfunktionalität 355<br />

19 /* ein evtl. vorhandenes Seed-File laden */<br />

20 num = RAND_load_file( SEED_FILE , 1024 );<br />

21 printf( "%d Bytes aus %s bezogen.\n", num, SEED_FILE );<br />

22<br />

23 /* Entropy Gathering Daemon (EGD) einbeziehen */<br />

24 num = RAND_egd( EGD_SOCKET );<br />

25 printf( "%d Bytes aus %s bezogen.\n", num, EGD_SOCKET );<br />

26<br />

27 if( ! RAND_status() ) /* PRNG jetzt ok? */<br />

28 {<br />

29 printf( "Fehler bei der PRNG-Initialisierung.\n" );<br />

30 exit( EXIT_FAILURE );<br />

31 }<br />

32 }<br />

33<br />

34 /* Hier würde das eigentliche <strong>SSL</strong>-Programm beginnen */<br />

35<br />

36 /* Zum Schluß: Status des PRNG in Seed-File sichern ... */<br />

37 if( ! prng_ok ) /* falls ursprünglich uninitialisiert */<br />

38 {<br />

39 num = RAND_write_file( SEED_FILE );<br />

40 if( num < 0 )<br />

41 printf( "Achtung: Inhalt von %s fragwürdig!\n",<br />

42 SEED_FILE );<br />

43 else<br />

44 printf( "%d Bytes in %s geschrieben.\n", num,<br />

45 SEED_FILE );<br />

46 }<br />

47 }<br />

15–25<br />

27–31<br />

36–46<br />

Sofern der PRNG noch nicht initialisiert ist, muß das Programm diese Aufgabe<br />

selbst übernehmen. Als erstes werden <strong>mit</strong>tels RAND_load_file() 1024 Bytes<br />

aus der zuvor spezifizierten Seed-Datei entnommen. Sollte die angegebene<br />

Datei nicht existieren oder für das Programm nicht lesbar sein, so kann die<br />

Funktion natürlich auch keine Startwerte in den Pseudozufallszahlengenerator<br />

einspeisen. Zur Kontrolle wird die Anzahl der erfolgreich übernommenen<br />

Bytes protokolliert. Anschließend wird der Entropy Gathering Dæmon <strong>mit</strong>tels<br />

RAND_egd() über die festgelegte Socket-Schnittstelle kontaktiert <strong>und</strong> die<br />

Anzahl der zur PRNG-Initialisierung herangezogenen Bytes ausgegeben.<br />

Am Ende der Seed-Phase wird zur Kontrolle nochmals der Zustand des Pseudozufallszahlengenerators<br />

überprüft. Ist der PRNG immer noch nicht ordnungsgemäß<br />

initialisiert, weil etwa keine Seed-Datei vorhanden war <strong>und</strong> auch<br />

der EGD nicht kontaktiert werden konnte, so bricht das Beispielprogramm<br />

die Verarbeitung <strong>mit</strong> einer entsprechenden Fehlermeldung ab.<br />

Un<strong>mit</strong>telbar vor dem Programmende wird vom vorgestellten Beispielprogramm<br />

noch eine neue Seed-Datei erstellt. Mittels RAND_write_file() wird

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!