Computerphilosophie Marc Ruef | 13.05.2008 Aussenstehende messen dem Computer starre Mechanismen bei. Ein Computer hat zu funktionieren. Das Werkzeug aus Metall ist kalt und emotionslos. Dem will ich nicht widersprechen. Wahrscheinlich bin ich gar einer der wenigen, der noch nie eine emotionale Bindung zu Hardware entwickeln konnte. Noch nicht einmal die von mir gespielten Musikinstrumente habe ich lieb. Das einzige, was ich an ihnen liebe, ist ihr Klang. Mehr nicht. Dennoch bin ich der Meinung, dass der Computer sehr viel Philosophie in sich birgt. Im Manuskript für mein neues Buch widmete ich mich in Kapitel 12 verschiedenen Aspekten dieser. So war dort das Halte- und Entscheidungsproblem von zentraler Wichtigkeit. So sei ein Programm gegeben, dass ein anderes Programm daraufhin überprüft, ob es jemals zu einem Ende kommt. Die Funktion dessen kann der Einfachheit halber als haltetest() beschrieben werden. Was passiert denn nun aber, wenn ein Aufruf der Form haltetest(haltetest()) erfolgt. Also haltetest() als Argument mit sich selber initiiert wird? Kann dieser Programmaufruf entscheiden, ob er selber zu einem Ende kommt? Computer stecken voller solcher philosophischer Aspekte, die bei näherer Betrachtung viel mehr mit der Realität zu tun haben, weder so mancher wahrhaben möchte. Wer sich ein bisschen intensiver mit Computersicherheit beschäftigt, mag es herauszuposaunen, dass es soetwas wie 100 %ige Sicherheit nicht gibt. Dem will ich aber als Philosoph widersprechen. Der klassische Computer ist ein deterministisches Gebilde, in dem lediglich eine endliche Anzahl an Zuständen abgebildet werden kann. Ein Bit kann schliesslich nur die Positionen 0 und 1 einnehmen. Zwei Bits hingegen 2^2 = {00, 01, 10, 11} usw. Ist man nun in der Lage, für jeden Zustand aller möglichen Zustände zu bestimmen, ob dieser eine Unsicherheit für das Computersystem bedeutet, könnte man zum Schluss sagen, ob das System 100 % sicher ist. Diese These funktioniert in der Theorie wunderbar. In der Praxis hingegen weniger. So weisen moderne Festplatten mit mehreren hundert Gigabyte eine nur schwer zu prüfende Anzahl an Gesamtzuständen auf. Hinzu kommt, dass ebenfalls die flüchtigen Speicher in RAM, der CPU und auf dem Bus berücksichtigt werden müssen. Ein Test würde wohl millionen Jahre brauchen. Das ist nicht mehr wirtschaftlich. Hinzu kommt die Problematik des "Glücks", wie es von der Quantenphysik propagiert wird. So könnte durch einen mehr oder weniger nachweisbaren kosmischen Zufall ein Bit von einer Sekunde von einem 0 auf ein 1 ändern. In der Praxis wäre der Computer also nicht mehr deterministisch veranlagt und damit die Absolutheit der finalen Aussage in ihren Grundzügen erschüttert. Und da Computer schlussendlich auch noch von Menschen administriert und benutzt werden, muss dem Determinismus oder wenigstens der empirisch beobachtbaren Messbarkeit abgeschworen werden. Ein Computer im Alltag ist wohl nie 100 %ig sicher. Hier kommen wir zum nächsten Problem. Seit jeher kann ich mich für formale Systeme begeistern. Durch die ihnen auferlegte Logik wird es scheinbar möglich, komplexe Probleme in objektiver Weise zu betrachten. Die unschöne Subjektivität, die ihnen die Berechenbarkeit rauben, wird damit fortgestossen. Dies klingt alles wunderbar, doch ist sie nur in gewissem Mass auf die Praxis anwendbar. Wie soll zum Beispiel in einem formalen System, das der praxisnahen Computersicherheit gerecht werden will, der Faktor Mensch berücksichtigt werden? Statistische Erhebungen können dabei helfen, wie gross die Wahrscheinlichkeit ist, dass jemand auf ein Phishing-Mail hereinfällt. Kommt es dann aber wirklich draufan, sind undeterministische Faktoren wie persönliches Empfinden und behavioristische Einflüsse massgeblich an der Reaktion beteiligt. In die gleiche Kerbe schlägt grundsätzlich die Frage nach der Messbarkeit. Ist ein Webserver, der auf dem Standardport tcp/80 (http) läuft, irgendwie unsicherer, weder wenn er auf einem unpopulären Port wie tcp/13995 laufen würde? Voraussichtlich ja, denn die meisten Scanning-Utilities werden ausschliesslich mit dem Standardport oder den bekannten Alternativen (z.B. tcp/81 oder tcp/8000) umgehen und deshalb die unbekannte Belegung gar nicht als solche erkennen können. Derlei Einflüsse können aber auch gar keinen Einfluss auf die Sicherheit der Umgebung haben. Ein anderes Problem, mit dem ich mich immerwieder konfrontiert sehe, ist die Frage nach der Beeinflussbarkeit. Bei einem direkten Angriff auf ein Computersystem wird es unabdingbar, dass ich dieses in irgendeiner Weise - meistens über das Netzwerk - beeinflussen kann. Ich schicke also ein TCP-Segment, das vom Zielsystem in der mir nützlichen Weise verarbeitet wird. Wenn nun ein Computersystem durch eine Firewall-System geschützt wird, kann ich dann noch immer ersteres unmittelbar beeinflussen? Sollte das Firewall-Element mein Paket ohne Veränderungen weiterschicken, kann man wohl von einer direkten Beeinflussung reden. Aber ist es noch immer das gleiche Paket? Oder hat die Firewall eigentlich nur eine Kopie dessen weitergereicht? Dieser Aspekt führt immerwieder zu Diskussionen, die ihrerseits zu keinem Ende führen wollen.