2020
März
09
2020

Entropie und Zufallszahlen

Auch wenn es intuitiv nicht logisch scheint, spielt der "Zufall" in der heutigen IT eine zentrale Rolle, insbesondere im Bereich der Sicherheit. Die besondere Stärke von Computern liegt allerdings im kompletten Gegenteil, nämlich in exakten und nachvollziehbaren Berechnungen. Um dennoch guten Zufall zu erzeugen, gibt es daher eine Reihe von speziellen Mechanismen – auch bei cloudscale.ch.

Wieso Zufall?

Viele Computerspiele erhalten ihren Reiz dadurch, dass der nächste Zug des Computers nicht vorhersehbar, sondern scheinbar zufällig ist. Nebst diesem unterhaltsamen Aspekt von "Zufall" hängt jedoch auch die Sicherheit Ihrer Daten und Systeme davon ab: Datenverschlüsselung – z.B. bei HTTPS oder SSH – basiert auf mathematischen Verfahren; diese sind aber darauf angewiesen, dass ein potenzieller Angreifer den benutzten Schlüssel nicht erraten oder aus anderen Daten herleiten kann.

Dazu nötige Zufallswerte/-zahlen errechnet ein sog. "Pseudo Random Number Generator" (PRNG) mithilfe von speziellen Algorithmen aus möglichst unvorhersehbaren Input-Werten. Der PRNG im Linux-Kernel bezieht diese Entropie ("Unordnung") aus verschiedenen Quellen wie z.B. Mausbewegungen und Netzwerk-Traffic. Ausgegeben werden die Zufallszahlen bspw. über /dev/urandom und /dev/random.

Zusätzliche Entropie-Quellen

Eine Reihe von möglichen Entropie-Quellen (wie z.B. Mausbewegungen) fällt bei virtualisierten Cloud-Servern naturgemäss weg. Insbesondere beim ersten Start kann es eine Weile dauern, bis aus den wenigen vorhandenen Quellen genügend Entropie gesammelt wurde, um den PRNG zu initialisieren. Server von cloudscale.ch können daher seit Kurzem auch die rdrand-Funktion nutzen, über welche viele moderne CPUs Zufallszahlen generieren können. Ebenfalls neu verfügbar ist das Virtio-Device /dev/hwrng, das Zufallszahlen bereitstellt, die auf unseren physischen Compute-Hosts generiert wurden.

Beide dieser neuen Entropie-Quellen sind unabhängig davon, dass Ihr Server selber bereits genügend Entropie sammeln konnte, und können helfen, den PRNG des Servers schneller zu initialisieren. Ob der Server rdrand und /dev/hwrng tatsächlich erkennt und nutzt, hängt im Einzelfall jedoch von der verwendeten Linux-Distribution und deren Kernel ab; prüfen Sie bei Bedarf die Optionen CONFIG_RANDOM_TRUST_CPU und CONFIG_HW_RANDOM_VIRTIO Ihres Kernels – je nach Distribution bspw. in der Datei /boot/config-*.

Profitieren Sie automatisch von mehr Entropie

Immer mehr Linux-Distributionen enthalten Software, die den Systemaufruf getrandom() nutzt. Dieser Aufruf und davon abhängige Dienste wie SSH warten nach dem Systemstart, bis der PRNG des Servers initialisiert wurde, was teilweise zu langen Verzögerungen führen kann. Server bei cloudscale.ch sind von solchen Wartezeiten jedoch nicht betroffen: Dank rdrand und /dev/hwrng steht die nötige Entropie innert kürzester Zeit bereit, so dass auch Dienste, die Zufallszahlen benötigen, sofort gestartet werden können.

Auch mit bestehenden Servern können Sie bei cloudscale.ch die neuen Entropie-Quellen anzapfen. Schalten Sie Ihren Server dazu einfach einmal komplett aus, und starten Sie ihn anschliessend wieder. Nach dem Neustart steht Ihnen die rdrand-Funktion der CPU zur Verfügung, was Sie mit folgendem Kommando überprüfen können:

$ grep rdrand /proc/cpuinfo
flags		: [...] rdrand [...]

Unterstützt Ihr konkretes Betriebssystem auch das hwrng Virtio-Device, wird es Ihnen mit folgendem Kommando angezeigt:

$ cat /sys/devices/virtual/misc/hw_random/rng_available
virtio_rng.0

Obwohl im IT-Alltag kaum je ein Thema, ist "Zufall" ein unentbehrlicher Bestandteil für unzählige Vorgänge – insbesondere im Kontext der Sicherheit. Bei cloudscale.ch sorgen wir dafür, dass Ihre Server gleich vom Start weg immer genug Zufall generieren können.

Gute Server sind kein Zufall!
Ihr cloudscale.ch-Team

Zurück zur Übersicht