
lrand48
lrand48 ist eine Funktion aus der Programmiersprache C, die eine zufällig wirkende Zahl zwischen 0 und 2³¹−1 erzeugt. Sie gehört zur Familie der linearen Kongruenzgeneratoren und wird in älteren Unix-Programmen häufig eingesetzt.
lrand48 ist eine Funktion, die in C-Programmen eine scheinbar zufällige Ganzzahl liefert. „Scheinbar zufällig“ bedeutet: Die Zahl sieht zufällig aus, entsteht aber nach einer festen mathematischen Formel. Solche Verfahren nennt man Pseudozufallsgeneratoren — „pseudo“ kommt vom griechischen Wort für falsch oder vorgespiegelt. lrand48 gibt dabei immer eine Zahl zwischen 0 und 2³¹−1 (also 2.147.483.647) zurück, niemals eine negative Zahl. Die Funktion stammt aus dem POSIX-Standard, einem gemeinsamen Regelwerk für Unix-artige Betriebssysteme wie Linux oder macOS.
lrand48 als Baustein für reproduzierbare Zufälligkeit
Viele Programme brauchen Zahlen, die sich nicht vorhersagen lassen: Spiele, Simulationen, Kryptografie. Echter Zufall ist für einen Computer schwer zu erzeugen, weil er immer deterministisch arbeitet — dasselbe Eingangssignal ergibt dieselbe Ausgabe. Pseudozufallsgeneratoren lösen das praktisch: Sie liefern Zahlenfolgen, die statistisch gut verteilt sind und für die meisten Zwecke ausreichen.
Ein besonderer Vorteil ist die Reproduzierbarkeit. Startet man lrand48 mit demselben Startwert (dem sogenannten Seed), erhält man exakt dieselbe Zahlenfolge — jedes Mal. Das klingt zunächst wie ein Nachteil, ist aber für Tests und Simulationen wertvoll: Man kann ein Experiment haargenau wiederholen und überprüfen, ob das Programm sich korrekt verhält.
Das lineare Kongruenzverfahren hinter der Funktion
lrand48 arbeitet mit einem Verfahren namens linearer Kongruenzgenerator. Die Idee ist simpel: Man nimmt den letzten Zustand, multipliziert ihn mit einer festen großen Zahl, addiert eine weitere feste Zahl und nimmt dann den Rest einer Division. Das Ergebnis ist der neue Zustand — und gleichzeitig die nächste „Zufallszahl“. Die 48 im Namen bezieht sich auf die interne Zustandsgröße: Der Generator verwaltet intern einen 48-Bit-Wert, also eine Zahl mit 48 Stellen im Binärsystem.
Verwandte Funktionen aus derselben Familie sind srand48, das den Startwert setzt, drand48, das eine Kommazahl zwischen 0 und 1 liefert, und mrand48, das auch negative Zahlen zurückgeben kann. Sie alle teilen denselben internen Zustand. lrand48 liefert immer nichtnegative Werte, was es besonders einfach macht, damit Indizes oder Positionen zu berechnen — zum Beispiel eine zufällige Stelle in einer Liste.
Ein bekannter Schwachpunkt: Der interne Zustand mit 48 Bit ist für heutige Maßstäbe sehr klein. Ein Angreifer kann die gesamte Folge berechnen, sobald er ein paar Ausgabewerte kennt. Für Kryptografie — also dort, wo echte Sicherheit gefragt ist — ist lrand48 deshalb ungeeignet.
lrand48 in älteren Systemen und wissenschaftlichem Code
lrand48 taucht vor allem in älterem Code auf: in Unix-Programmen der 1980er und 1990er Jahre, in wissenschaftlichen Simulationen und in Lehrbüchern zur Systemprogrammierung. Wer heute Code-Beiträge in Open-Source-Projekten liest, stößt gelegentlich auf lrand48 in Teilen, die seit Jahrzehnten unverändert geblieben sind.
In modernen C-Projekten wird lrand48 meist durch neuere Alternativen ersetzt. Auf Linux steht etwa getrandom zur Verfügung, das echten Zufall aus Betriebssystemquellen zieht. Für portable Programme ohne Sicherheitsanspruch ist rand aus der C-Standardbibliothek verbreitet. Dennoch ist lrand48 kein reines Museumsstück: Der POSIX-Standard schreibt es bis heute vor, weshalb es auf praktisch jedem Linux- oder macOS-System verfügbar ist.
In Tech-News begegnet man lrand48 am ehesten, wenn Sicherheitsforscher alte Software analysieren und zeigen, wie Angreifer den Pseudozufallsgenerator eines Programms vorhergesagt haben, um es zu kompromittieren. Solche Berichte machen deutlich, warum die Wahl des richtigen Zufallsgenerators keine Kleinigkeit ist.