Ausprogrammierte Paranoia

Sicherheitswahn kann ansteckend sein!

Bestimmt ist jeder von Ihnen schon einmal mit dem Zug gefahren. Ein meistens sehr angenehmes Verkehrsmittel, weil es vergleichsweise planbar und pünktlich ist, im Vergleich zum Bus und Flugzeug einen hohen Reisekomfort bietet und insgesamt sehr sicher ist.

Woher kommt dieser Sicherheit? Zum einen natürlich daher, dass der Zug auf „seiner“ Schiene unterwegs ist. Ein eigener Verkehrsweg, der fast komplett der Kontrolle der Bahn unterliegt (von lebensmüden Menschen am Gleis, bekloppten Autofahren an Bahnübergängen und ein paar Tieren mal abgesehen). Zum anderen aber daher, dass Entwickler bei der Bahn einem Sicherheitswahn verfallen sind, der nur noch von dem der Luft- und Raumfahrt übertroffen wird.

Ich hatte die zweifelhafte Freude, für einige Jahre bei einem großen Hersteller von Bahntechnik als externer Entwickler beschäftigt zu sein und muss sagen, dass dieser Sicherheitswahn, diese Paranoia, absolut ansteckend ist. Alles, aber auch alles, was bei der Bahntechnik entwickelt wird, muss vor allem eines sein: Sicher!

„Sicher“ bedeutet in diesem Zusammenhang, dass jedes System, egal, ob Hardware, Software oder eine Kombination daraus, einen sehr hohen Aufwand treibt, um Fehler in der Entwicklung zu vermeiden und einen noch höheren Aufwand treibt, um Fehler im Betrieb zu erkennen und darauf so zu reagieren, dass das System in einen definierten, sicheren Zustand zurückfällt. Bei der Bahn heißt das in Regel: Im Zweifelsfall gibt es eine Notbremsung. Ein Zug, der steht, kann keinen Schaden anrichten.

„Sicher“ bedeutet im Gegensatz nicht, dass das System zuverlässig und dauerhaft arbeitet. Lieber steht der Zug, als dass er sich unkontrolliert (oder unkontrollierbar) bewegt. Wichtiger als effizienter Code ist Code, der Fehler schon vom Design her erkennt und verlässlich definierte Fehlerzustände einnimmt.

Man lernt, dass auch solche Fehler als möglich anzunehmen sind, die eigentlich nie auftreten und bei normalen Programmen völlig vernachlässigt werden. Zum Beispiel, dass sich der Inhalt einer Speicherzelle einfach mal willkürlich ändert. Oder dass ein Sprung willkürlich an eine falsche Stelle im Code erfolgt.

Was folgert daraus? Da man willkürliche Datenfehler und Sprünge technisch nicht wirklich abfangen kann, greift man zur Redundanz. Jedes System wird doppelt ausgelegt, so dass zwei (am besten unterschiedliche) Hardware-Systeme parallel laufen und sich ständig gegenseitig abfragen, ob sie sich beide im gleichen Zustand befinden. Sind sie sich mal nicht einig, wird sofort der sichere Zustand eingenommen – Notbremsung!

Ganz verrückt wird es, wenn versucht wird, ein solches doppeltes Hardwaresystem zu vermeiden. Nun muss die Software selbst dafür sorgen, dass willkürliche Fehler mit hoher Wahrscheinlich erkannt werden. Die skurrilste Lösung dafür ist die sogenannte „diversifizierte Programmierung“. Alles, was irgendwie sicherheitsrelevant ist, wird doppelt programmiert und läuft parallel.

Einer der beiden Tasks muss alles „anders herum“ machen als der andere. Dazu werden alle Daten binär invers und mit umgekehrter Bitreihenfolge abgelegt, was ein gewaltiger Aufwand ist, denn jegliche Form der Datenmanipulation muss „von Hand“ gemacht bzw. als spezifische Klassen ausprogrammiert werden. Alle Datenstrukturen werden anders herum sortiert, selbst Felder und Liste müssen anders herum abgelegt werden. Und dann werden diese Daten auch noch regelmäßig (alle paar Millisekunden) miteinander verglichen, und zwar von beiden Tasks überkreuz. Tritt hierbei eine Abweichung zutage – zack! Notbremsung!

Was habe ich daraus gelernt? Vor allem eines: Fehler können auftreten. Auch unwahrscheinliche Fehler werden auftreten. Und ein erster Schritt in Richtung zuverlässiger Programmierung ist sichere Programmierung. Nur darf man das in normalen System nicht übertreiben, denn bei Programmen wie unserem CAD-System ist auch Effizienz wichtig. Trotzdem darf man nie die möglichen Fehler (seitens der Daten oder der Benutzer) vernachlässigen und sollte immer einen sicheren Zustand erreichen.

Ein bisschen Paranoia schadet nicht!

[EOF]

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s