xr232random 1.0.5

Programmbeispiele

Einführendes Beispiel

'xrbeispiel.c' ist ein vollständiges Programmbeispiel zur Abfrage von Zufallszahlen über den Gerätetreiber xr232random.

/* xrbeispiel.c - 100 Zahlen von /dev/xr232random0
 * Autor:      Jochen Brenner
 * Erstellt:   26. Februar 2008
 */

#include <stdio.h>      // printf()
#include <fcntl.h>      // open()

int main( int argc, char **argv )
{
        int fd, i;
        unsigned char ch;

        fd = open("/dev/xr232random0", O_RDONLY);
        if (fd < 0) {
                fprintf(stderr, "Problem.\n");
                return -1;
        }

        for (i = 0; i < 100; i++) {
                read(fd, &ch, 1);
                printf("%4d", (int) ch);
        }

        close(fd);

        return 0;
}

Übersetzen und Auführen von xrbeispiel.c:

linux~/ # make xrbeispiel
linux~/ # ./xrbeispiel
166 ...

Steuern der Hardware

Es gibt einige wenige Befehle zum Steuern der Hardware via ioctl. Folgendes Beispiel 'xrbaudrate.c' demonstriert das Lesen und Setzen der Baudrate.

/* xrbaudrate.c -  Baudrate setzen/lesen via /dev/xr232random0
 * Autor:      Jochen Brenner
 * Erstellt:   26. Februar 2008
 */

#include <stdio.h>      // printf(), perror()
#include <fcntl.h>      // open()
#include <sys/ioctl.h>  // for ioctl()

#define XR232_SET_BAUDRATE  1
#define XR232_GET_BAUDRATE  2

int main( int argc, char **argv )
{
        int fd, res, baudrate;
        unsigned char ch;

        fd = open("/dev/xr232random0", O_RDONLY);
        if (fd < 0) {
                perror("Open");
                return -1;
        }

        // Baudrate auf 57600 Baud setzen
        res = ioctl(fd, XR232_SET_BAUDRATE, 57600);
        if (res < 0) {
                perror("Set Baudrate");
                close(fd);
                return -1;
        }

        // Eingestellte Baudrate ermitteln
        res = ioctl(fd, XR232_GET_BAUDRATE, &baudrate);
        if (res < 0) {
                perror("Get Baudrate");
                close(fd);
                return -1;
        }
        printf("%d Baud.\n", baudrate); // Ausgabe: 57600

        close(fd);

        return 0;
}

Hilfsprogramm xrutil.c

Das Hilfsprogamm xrutil liegt dem Archiv bei. Mit diesem Utility können sämtliche Funktionen des xr232random Gerätetreibers gesetzt und erfragt werden, desweiteren können Zufallszahlen in verschiedenen Variationen (Binär, Dezimal, Hexadezimal, etc.) auf der Standardausgabe ausgegeben werden. Der parameterlose Aufruf './zutil' gibt eine Kurzübersicht, ein Aufruf von'./zutil -h' eine detaillierte Beschreibung der einzelnen Parameter.

Hilfsprogramm xrstat.c

xrstat liegt ebenfalls dem Archiv bei. Es ermittelt Zufallszahlen und druckt diese Live in Form eines Häufigkeitsdiagramms am Bildschirm aus. Für die Bildschirmausgabe wird das Paket 'ncurses' benötigt. Per Default werden jeweils 4 Werte aus dem gesamten Wertebereich 0..255 zu einem Balken zusammengefasst (interpoliert via Durchschnitt, Minimum oder Maximum). Sofern innerhalb der grafischen Umgebung das Konsolenfenster breiter gezogen werden kann, und evt. die Schriftart verkleinert wird, kann durch die M-Taste der 'Massstab' auf 1:1 gesetzt werden, so dass jeder Balken genau die entsprechenden Einheit interpretiert. Folgender Screenshot zeigt eine Beispielgrafik.

Screenshot XR-232 Statistic

Das Proc-Pseudofile

Beim Start des Gerätetreibers wird ein Proc-Pseudofile angelegt. Beim Auslesen durch 'cat /proc/xr232random' wird für jedes benutze Device eine sehr rudimentäre Statistik ausgegeben, nämlich die Anzahl der binär gezählten 0en und 1en. Der Ratio gibt einen Eindruck über das Verhältnis: läuft dieser gegen 1, kann von einer gleichverteilten Zufallsfolge ausgegangen werden. Weicht der Wert deutlich von 1 ab (also deutlich < 0.9 oder > 1.1), sind im Datenstrom eine zu hohe Anzahl 0en (wenn < 1) bzw. 1en (wenn > 1) enthalten; die Zahlenfolge ist dann sicher nicht gleichverteilt und die Ursachen (Schaltungsfehler, EM-Strahlung?) sollten geklärt werden. Wie bei Pseudo-Files üblich, kann dieses zu jederzeit ausgelesen werden.

XR232 Einsatzbeispiel aus der Praxis: Apache-SSL Webserver

Um beim Start des Apache-Webservers, oder auch bei der Initiierung jeder SSL-Verbindung die typischen Probleme beim Erzeugen echter Entropie zu vermeiden, kann nach erfolgter Installation des Gerätetreibers xr232random die Apache Konfiguration angepasst werden:

# Auszug httpd.conf
...
SSLRandomFile file /dev/xr232random0 1024
SSLRandomFilePerConnection file /dev/xr232random0 1024
...

Vgl. SSL-Konfiguration des Apache Webservers unter: apache-ssl.org