Juhu, endlich mal wieder ein Software-Release meinerseits: The Humanoid Random Number Generator. Ich zitiere mal die README, die zufälligerweise den selben Text enthält, wie die Seite, auf die der obige Link führt. Englischsprachige Inhalte folgen.
Motivation
One of the key features of modern computational systems is their ability to generate random numbers. Mathematicians and engineers have been and are still working out complex algorithms and hardware extensions to improve the entropy of random number generators (RNGs) by adding incalculable momentums to the deterministic chain of computer processing. On Linux systems, unpredictable hardware interrupts like HID events are fed to an entropy pool inside the kernel, which serves as the source of /dev/random and /dev/urandom. Quantum physicians have even manufactured PCI cards to allow the use of real physical randomness by analyzing radioactive decay or sending photons to a semi-transparent mirror and detecting the through-passing particles, as a further stage in this basic principle.
Especially in cryptography, indeterministic random numbers are needed to guarantee an adequate security. Predictable encryption keys undermine every attempt in creating a trustworthy environment inside the wide and rude spheres of the internet.
But still, there are circumstances in which it just doesn’t matter. Imagine the following situation: You are sitting in front of your computer and just can’t decide which MP3 to listen to. You want to listen to music, that’s all. You turn on “random” mode and press play. Seriously, you don’t give a f**k whether the song playing was chosen by the latest non-deterministic RNG algorithm or by the preference of some lazy programmer. This is the point, where hrng steps in.
Idea
The main principle of the Humanoid Random Number Generator (hrng) is the absence of randomness. Masses of human beings cannot act randomly, with “randomly” meaning “unpredictably”: they tend to imitate and do whatever The Others do. The imitation of third-party behaviour is unreasonable and with reason being the fundamental part of every scientific research that aims at being reproducible, absence of reason leads to irreproducible and therefore random results. Oh, wait a second. We just found out that unreasonable behaviour actually IS random. So is imitation.
If imitation is random, one can simply take the behaviour of another human being and imitate it to generate a random event. To you, I am one of these other humans, and I advise you to take 255 as your preferred random number.
Concept
The Humanoid Random Number Generator always returns 255.
Installation and Usage
Before using hrng, you have to unzip and compile it.
$ tar xzvf hrng-1.0.tar.gz
$ cd hrng-1.0/
$ make hrng
If you want to, you can copy the binary in a folder inside your $PATH (e.g. /usr/local/bin/).
# cp hrng /usr/local/bin/
That’s it! You can now enjoy the possibilites of the Humanoid Random Number Generator by running
hrng [-h] [N]
-h Prints the usage information
N Specifies the amount of random numbers to generate
(default: infinite)
Have fun!
Ich habe sogar einen Direkt-Download-Link ausfindig machen können: Klick.
Inspiriert von einer Meldung bei Heise (Datenschützer stoppt das Speichern von IP-Adressen) habe ich heute selbst den Schritt gemacht, von der Speicherung personenbezogener Daten in den Log-Files von blog.diozaka.org und diozaka.org abzusehen. Mich interessiert nicht, wer meine Webseite besucht, sondern vielmehr, was der Besucher sich anguckt, daher (Achtung: die weiteren Ausführungen könnten Nerd-Sprache enthalten) logge ich in Zukunft nur noch Datum und Zeitpunkt eines Zugriffs, die erste Zeile des empfangenen HTTP-Requests (z.B. “GET /rss.php HTTP/1.1″), sowie Response-Code und Größe der vom Server gesendeten Antwort in Bytes.
Momentan laufen beide Webseiten als VirtualHosts auf einem Debian GNU/Linux 3.1 mit dem Apache HTTP Server in der Version 2.0. Diese Version erlaubt es, mit Hilfe der LogFormat- und CustomLog-Direktiven für jeden VirtualHost verschiedene, von der globalen Einstellung abweichende Formate für die Speicherung der Seitenzugriffe zu setzen. Von Haus aus liefert der Apache bereits ein paar Format-Strings (definiert mit LogFormat) mit, unter denen man wählen kann.
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
Der erste Parameter, also alles innerhalb der Anführungszeichen, bestimmt dabei, welche Informationen in jeden Log-Eintrag aufgenommen werden sollen. Die einzelnen Tokens (wie %h) werden in der Apache-Dokumentation erklärt. Der zweite Parameter ist ein frei definierbarer Name, mit dem man später im CustomLog-Eintrag auf das definierte Format zurückgreifen kann. Bisher war davon bei mir das zugegebenermaßen sehr datenintensive combined-Format aktiv; ein Eintrag in der access.log sah also folgendermaßen aus:
a.b.c.d.anonymous.host.net - - [17/Feb/2008:14:39:06 +0100] "GET /modules/fnordlicht.html
HTTP/1.1" 200 10979 "http://referer.host.com/some/document.html" "Mozilla/5.0
(Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12"
Sowohl der Hostname (oder die IP-Adresse, falls keine Reverse-DNS-Auflösung möglich ist), als auch der Referrer und der User-Agent wurden gespeichert, sodass nicht nur unnötige Informationen über den Benutzer selbst vorhanden waren, sondern sogar sein Surf-Verhalten nachvollzogen werden konnte. Ein Albtraum aus Sicht eines Datenschützers. Mit zwei kleinen Eingriffen in die Apache-Konfiguration kann man diesem Albtraum aber entkommen. Zuerst muss ein möglichst anonymes Log-Format definiert werden. Dafür schreibt man in die Apache-Config (bei mir /etc/apache2/apache2.conf) unter die oben angegebenen LogFormat-Einträge:
LogFormat "127.0.0.1 - - %t "%r" %>s %b" anonymous
Dieses Format mit dem Namen “anonymous” enthält nur die im ersten Absatz angegebenen Informationen (time, request, status, bytes). Will man dieses Format nun für die eigene Webseite benutzen, schreibt man, je nach Server-Layout, entweder in der globalen Server-Config, oder innerhalb des eigenen VirtualHosts einfach:
CustomLog /var/log/apache2/access.log anonymous
Existiert bereits ein CustomLog-Eintrag, ändert man diesen entsprechend ab. Der Pfad zur Log-Datei kann natürlich beliebig gewählt werden. Nach einem Neustart des Apache treten die aktualisierten Einstellungen sofort in Kraft, und die Log-Datei enthält nur noch Einträge in der Form:
127.0.0.1 - - [23/Feb/2008:17:06:48 +0100] "GET /modules/fnordlicht.html HTTP/1.1" 200 10981
Das ist ausreichend, um sich mit Statistik-Tools wie Webalizer eine Übersicht über die Traffic-Daten der eigenen Homepage anzeigen zu lassen und respektiert die Privatsphäre der Besucher. Der einzige Nachteil: Man kann nicht mehr untersuchen, aus welchen Ländern die Besucher kommen — aber wer das will, kann ja zum BKA gehen.
Übrigens: Auf die Error-Log haben alle diese Einstellung keine Wirkung, dort werden also immer noch IP-Adressen gespeichert. Wer Apache komplett den Zugriff auf die Adressen verbieten will, ist eventuell mit dem Modul mod_removeip gut bedient, denn dieses ersetzt alle IP-Adressen gleich zu Beginn der Abarbeitung durch den Server mit 127.0.0.1 (localhost). Dies geht aber nur global für alle verwalteten VirtualHosts und kommt daher für mich derzeit nicht in Frage.
UPDATE: Das Netzwerk Wir Speichern Nicht!, das sich für ebendiese Anonymisierung der Nutzerdaten einsetzt, hat eine Sammlung von Tipps erstellt, wie man auch andere Dienste von IPs befreit.
Im Moment läuft mal wieder eine der ewigen Diskussionen über die absolut sichere Konfiguration für SSH auf Full Disclosure. Soeben kam dann auch, wie so häufig im Verlaufe solcher Dispute, neben einigen sehr informativen Posts und einigen Trollversuchen, diese Antwort:
Keith Kilroy <keith@xxxxxxxxxxx.xx>
The only box that is safe is the one unplugged hdd removed and
destroyed and rest of system locked in a closet.
“Naja”, denkt man sich dann, während sich ein zartes Gefühl des Unbehagens einschleicht, “irgendwie hat der Kerl Recht.” Doch in der Zukunft der Quantencomputer kann man sich wohl noch nicht einmal auf diese so einleuchtende Weisheit verlassen, wie einer der Nachfolgeposter feststellt:
Valdis.Kletnieks@xx.xxx
On Tue, 12 Feb 2008 03:21:20 EST, Keith Kilroy said:
> The only box that is safe is the one unplugged hdd removed and
> destroyed and rest of system locked in a closet.
Actually, no. :) Some clever guys at UIUC managed to get a quantum CPU
that wasn’t powered on to do some calculations *anyhow*:
http://www.newscientist.com/channel/info-tech/mg18925405.700.html
Now, if the program run while it’s turned off has an exploitable bug in it…..
Nachdem ich gestern in der Piet-Mondrian-Ausstellung im Kölner Museum Ludwig war, habe ich mich heute mal ein bisschen im Netz über den Künstler informieren wollen. Natürlich war meine erste Anlaufstelle die Wikipedia, und was lese ich da? Es gibt eine esoterische Programmiersprache, die von Mondrians Werken beeinflusst ist: Piet.
Piet is a programming language in which programs look like abstract paintings. The language is named after Piet Mondrian, who pioneered the field of geometric abstract art. I would have liked to call the language Mondrian, but someone beat me to it with a rather mundane-looking scripting language. Oh well, we can’t all be esoteric language writers I suppose.
Einige Beispiele, wie mit Piet geschriebene Programme aussehen können, kann man sich auf der Webseite des Entwicklers der Sprache, David Morgan-Mar, ansehen. Besonders beeindruckend finde ich dabei Thomas Schochs “Piet”, denn dieses wirkt tatsächlich wie eines von Mondrians Bildern:

Führt man das Programm aus, soll es das Wort “Piet” ausgeben. Leider konnte ich das nicht nachprüfen, da ich auf die Schnelle keinen der Interpreter zum Laufen bekommen habe. Wer selbst sein Glück versuchen oder mehr über den Künstler, die Sprache oder esoterische Programmiersprachen im Allgemeinen erfahren möchte, der tue dies auf einem der angegebenen Links.
Felix hat mich auf einen sehr interessanten Heise-Artikel aufmerksam gemacht: 60.000 Dollar Strafe für DNS-Abruf. Besonders bemerkenswert:
Das Gericht stellte fest, dass Ritz dabei seine “Identität hinter Proxies verbarg, ein UNIX-Betriebssystem verwendete und neben anderen Methoden Shell Accounts einsetzte. Außerdem gab er sich als Mail-Server aus.” Die auf diese Weise gewonnenen Informationen machte Ritz publik. Diese Information, stellte das Gericht fest, sei nicht öffentlich verfügbar gewesen. Damit habe Ritz die Datensicherheit von Sierra gefährdet, Ritz sei also als Hacker einzustufen, schließlich sei der Befehl “host -l” dem normalen Anwender nicht bekannt.
Haha.