see it

see it

FED 2d, 50mm, f/2.8, Ilford Delta 100, Lab Scan

Der Ziegelblitz fällt

Adobe is not amused (via Golem). Apple hat nämlich weder im iPhone, noch im iPad Support für Flash eingebaut. Das hat bestimmt auch technische Gründe (läuft einfach nicht auf ARM). Viel wichtiger sind jedoch, glaube ich, die politisch/ökonomischen. Wenn Web-Entwickler ihren Content auch auf iPad und iPhone ausliefern wollen, dann müssen sie etwas benutzen, was nicht Flash ist. Web-Entwickler sind nun eine Horde von Leuten, die völlig unkontrolliert jedoch einer gewissen kollektiven Kultur unterliegen. Der echte Web-Entwickler mag Dinge die schön sind. Dazu gehört auch schöner HTML/CSS Code, der sich an W3C Standards hält (jeder flucht über IE). Apple Produkte sind schön, deshalb mögen Web-Entwickler oft auch Apple Produkte. Apple hat also die Web-Entwickler hinter sich und deshalb können sie sich das auch erlauben.

Was wird passieren? Millionen von Web-Entwicklern werden zu ihren Chefs gehen und sagen: Wir müssen aber auch iPad und iPhone unterstützen. Und immer wenn Chefs iPhone oder iPad hören, bekommen sie $$$-Zeichen in den Augen. Also stimmen die Chefs zu und wir kriegen Content jetzt auch W3C konform ausgeliefert.

Das wiederum wird dafür sorgen, dass Browser die W3C Standards besser unterstützen. Das wiederum wird für mehr W3C-embedded Content sorgen. Das Ganze nennt man “virtous cycle”. Das Gegenteil wäre der “vicious cycle”.

Ich glaube wir sind Flash innerhalb von zwei Jahren los.

Endlich!

noch was zu apfel

Völlig anlasslos, möchte ich diesem kleinen aber treffenden Beitrag beipflichten. Auf dass sich alle Leser noch einmal überlegen ob sie Äpfel wirklich kaufen mögen.

pyaed - a python audio entropy daemon

Same game again. Not all my boxes have tv-cards to leach entropy from, so I needed some other source. The soundcard comes into mind quickly, and every box has a soundcard nowadays. The existing audio_entropyd once again wasn’t useful, because what it produced didn’t survive the FIPS-140-2 tests (aka wasn’t really random at all on my box). I then went on reimplementing the exact same algorithm it uses in python with pyaudio to take a closer look on the data. When I dumped the output of this algorithm into a file, I could even see patterns in hexdump of that file. strange. Well, there must be some randomness, so I went on implementing a different algorithm. It also records stereo audio and then looks at the upper bit (0×0001) in the samples. If this bit is different on both channels and the current two stereo samples are different from the last two, it records that as an entropy bit (you can argue about that, though - afaik randomsound uses the same mechanism). To add some more confidence in the entropy, it then XORs 64kbit of entropy into a 4kbit block. This way, it’s getting around 3kbit/s of entropy out of the soundcard.

download sourcecode

README:

Python Audio Entropy Daemon v0.0.1 (works on my machine)
(c) 2010 by Kai Dietrich

Inspired by audio_entropyd by Folker Vanheusden
http://www.vanheusden.com/aed/
and randomsound by Daniel Silverstone
http://www.digital-scurf.org/software/randomsound

This software is Licensed under the
GNU General Public License 2.0 or later.

System Requirements:
--------------------
Python 2.6
PyAudio 0.2.3
a soundcard with line or mic in
optional: rng-tools / rngd

What it does:
-------------
Pyaed records samples from an audio input device, extracts some noise/entropy
and writes it to a fifo.

Pyaed opens the default audio input device pyaudio finds and records frames
(44.1kHz, 16bit, stereo). It looks at the highes bit (0x0001) in the samples from each channel.
If these bits differ and the samples are different from the last (to ignore constant signals),
a bit of entropy is recorded. To increase the qualitiy of randomness, it then compresses 64kbit of
entropy into 4kbit by XORing the bits. It then writes the bits into a fifo.
You can then attach rngd from the rnd-tools to this fifo (rngd -f -r entropy.fifo).
rngd will test the noise with a FIPS 140-2 test for it's statistical randomness
and delivers the bits to the kernel entropy buffer.

It does not work, what can I do?
--------------------------------
a) read the code (it's not that much)
b) fix the code
c) Play around with alsamixer to get noise on the default input device,
   turn up boosts and input levels until you get levels around 50%. If you want to, you can even put
   in a stereo mic to get noise from the air and not just the electromagnetic noise from the ADC.

How can I enhance the code?
---------------------------
Just do it. If you like this tool, you can just set up a project somewhere
and start collecting improvements. For me this was just some fire-and-forget
single-task code.

pyved - a python video entropy daemon

Well, what do computer scientists do, when they are bored? They toy around with cryptography.
For some reason I didn’t get video_entropyd to run (it would throw v4l errors and segfault), but I desperately need entropy. Now what I came up with is a quick python script which does essentially the same thing, but with much more dependencies and high-level scripting languages. Also I just grab video frames from the TV-card with pygame.camera, extract the entropy and write it to a fifo. All the communication with the kernel then does rngd from the rng-tools. It picks up the bits, checks if they are really random and only then puts them into the kernel. All in all I have a solution, which (according to rngd) generates about 80MiBit/s of entropy from a good old Bt878 receiver. Im quite satisfied :)

update: it turned out, that was only a number which resulted from reading and writing in chunks. The long run performance is 8kbit/s of entropy.

download source code

Python Video Entropy Daemon v0.0.1 (works on my machine)
(c) 2010 by Kai Dietrich

Inspired by video_entropyd by Folker Vanheusden,
The main part actually is just a python version of Folkers code.
http://www.vanheusden.com/ved/

This software is Licensed under the
GNU General Public License 2.0 or later.

System Requirements:
--------------------
Python 2.6
PyGame 1.9.1
a video4linux device
optional: rng-tools / rngd

What it does:
-------------
Pyved records frames from a video4linux device, extracts the noise/entropy
and writes it to a fifo.

Pyved opens the first video4linux device it finds and records frames (720x576, RGB).
If it finds the kernel entropy pool to be empty it starts extracting noise
from two successive frames. Every uncorrellated change in one of the three color
channels is considered to be a bit of physical randomness and written to
the fifo "entropy.fifo". You can then attach rngd from the rnd-tools to this
fifo (rngd -f -r entropy.fifo). rngd will test the noise with a FIPS 140-2 test for it's
statistical randomness and delivers the bits to the kernel entropy buffer.

How fast is it?
---------------
On a Pinnacle Bt878 analogue TV card, tuned to a really bad channel,
rngd reports the following speeds (entropy bits per second):

stats: HRNG source speed: (min=1.330; avg=1.783; max=4.657)Gibits/s
stats: FIPS tests speed: (min=70.382; avg=88.529; max=89.969)Mibits/s

this is frickin fast, compared to all those commercial devices

It does not work, what can I do?
--------------------------------
a) read the code (it's not that much)
b) fix the code
c) tune your tv-card with a tuner application to some channel before starting pyved

How can I enhance the code?
---------------------------
Just do it. If you like this tool, you can just set up a project somewhere
and start collecting improvements. For me this was just some fire-and-forget
single-task code.

Definitions

“[…] [D]efinition of a liberal: a conservative who just got arrested. A conservative, of course, is a liberal who just got mugged.”

just stumbled on it in the book “Steel Beach” by John Varley.

Realism in UI design

A good introduction into the cognitive aspects of UI design

via /.:

http://ignorethecode.net/blog/2010/01/21/realism_in_ui_design/

kaputte DVDs

ich hätte nicht gedacht, dass man die so kaputt machen kann:

ginaz VIDEO_TS # mount
[…]
/dev/dvd1 on /mnt/dvd type udf (ro)
ginaz VIDEO_TS # ls -alh
total 65G
dr-xr-xr-x 2 4294967295 4294967295 6.6K Oct 26 02:13 .
dr-xr-xr-x 3 4294967295 4294967295 88 Oct 26 02:13 ..
-r–r–r– 1 4294967295 4294967295 54K Oct 26 02:13 VIDEO_TS.BUP
-r–r–r– 1 4294967295 4294967295 54K Oct 26 02:13 VIDEO_TS.IFO
-r–r–r– 1 4294967295 4294967295 380K Oct 26 02:13 VIDEO_TS.VOB
-r–r–r– 1 4294967295 4294967295 14K Oct 26 02:13 VTS_01_0.BUP
-r–r–r– 1 4294967295 4294967295 14K Oct 26 02:13 VTS_01_0.IFO
-r–r–r– 1 4294967295 4294967295 456K Oct 26 02:13 VTS_01_1.VOB
-r–r–r– 1 4294967295 4294967295 18K Oct 26 02:13 VTS_02_0.BUP
-r–r–r– 1 4294967295 4294967295 18K Oct 26 02:13 VTS_02_0.IFO
-r–r–r– 1 4294967295 4294967295 988K Oct 26 02:13 VTS_02_0.VOB
-r–r–r– 1 4294967295 4294967295 7.0M Oct 26 02:13 VTS_02_1.VOB
-r–r–r– 1 4294967295 4294967295 14K Oct 26 02:13 VTS_03_0.BUP
-r–r–r– 1 4294967295 4294967295 14K Oct 26 02:13 VTS_03_0.IFO
-r–r–r– 1 4294967295 4294967295 8.9M Oct 26 02:13 VTS_03_1.VOB
-r–r–r– 1 4294967295 4294967295 16K Oct 26 02:13 VTS_04_0.BUP
-r–r–r– 1 4294967295 4294967295 16K Oct 26 02:13 VTS_04_0.IFO
-r–r–r– 1 4294967295 4294967295 283M Oct 26 02:13 VTS_04_1.VOB
-r–r–r– 1 4294967295 4294967295 192K Oct 26 02:13 VTS_05_0.BUP
-r–r–r– 1 4294967295 4294967295 192K Oct 26 02:13 VTS_05_0.IFO
-r–r–r– 1 4294967295 4294967295 325M Oct 26 02:13 VTS_05_0.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_05_1.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_05_2.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_05_3.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_05_4.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_05_5.VOB
-r–r–r– 1 4294967295 4294967295 386M Oct 26 02:13 VTS_05_6.VOB
-r–r–r– 1 4294967295 4294967295 192K Oct 26 02:13 VTS_06_0.BUP
-r–r–r– 1 4294967295 4294967295 192K Oct 26 02:13 VTS_06_0.IFO
-r–r–r– 1 4294967295 4294967295 325M Oct 26 02:13 VTS_06_0.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_06_1.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_06_2.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_06_3.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_06_4.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_06_5.VOB
-r–r–r– 1 4294967295 4294967295 386M Oct 26 02:13 VTS_06_6.VOB
[… snip …]
-r–r–r– 1 4294967295 4294967295 325M Oct 26 02:13 VTS_15_0.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_15_1.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_15_2.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_15_3.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_15_4.VOB
-r–r–r– 1 4294967295 4294967295 1.0G Oct 26 02:13 VTS_15_5.VOB
-r–r–r– 1 4294967295 4294967295 386M Oct 26 02:13 VTS_15_6.VOB
-r–r–r– 1 4294967295 4294967295 30K Oct 26 02:13 VTS_16_0.BUP
-r–r–r– 1 4294967295 4294967295 30K Oct 26 02:13 VTS_16_0.IFO
-r–r–r– 1 4294967295 4294967295 56M Oct 26 02:13 VTS_16_0.VOB
-r–r–r– 1 4294967295 4294967295 46M Oct 26 02:13 VTS_16_1.VOB
-r–r–r– 1 4294967295 4294967295 16K Oct 26 02:13 VTS_17_0.BUP
-r–r–r– 1 4294967295 4294967295 16K Oct 26 02:13 VTS_17_0.IFO
-r–r–r– 1 4294967295 4294967295 246M Oct 26 02:13 VTS_17_1.VOB
-r–r–r– 1 4294967295 4294967295 32K Oct 26 02:13 VTS_18_0.BUP
-r–r–r– 1 4294967295 4294967295 32K Oct 26 02:13 VTS_18_0.IFO
-r–r–r– 1 4294967295 4294967295 899M Oct 26 02:13 VTS_18_1.VOB
-r–r–r– 1 4294967295 4294967295 12K Oct 26 02:13 VTS_19_0.BUP
-r–r–r– 1 4294967295 4294967295 12K Oct 26 02:13 VTS_19_0.IFO
-r–r–r– 1 4294967295 4294967295 172M Oct 26 02:13 VTS_19_1.VOB

ginaz VIDEO_TS # lsdvd /dev/dvd1
Disc Title: XXX
Title: 01, Length: 01:31:50.120 Chapters: 36, Cells: 136, Audio streams: 04, Subpictures: 04

Title: 02, Length: 01:31:15.480 Chapters: 36, Cells: 136, Audio streams: 04, Subpictures: 04

Title: 03, Length: 01:34:23.360 Chapters: 36, Cells: 138, Audio streams: 04, Subpictures: 04

Title: 04, Length: 01:32:25.320 Chapters: 36, Cells: 136, Audio streams: 04, Subpictures: 04

Title: 05, Length: 01:34:32.120 Chapters: 36, Cells: 138, Audio streams: 04, Subpictures: 04

Title: 06, Length: 01:33:40.280 Chapters: 36, Cells: 138, Audio streams: 04, Subpictures: 04

Title: 07, Length: 01:32:34.280 Chapters: 36, Cells: 136, Audio streams: 04, Subpictures: 04

Title: 08, Length: 01:31:04.960 Chapters: 36, Cells: 138, Audio streams: 04, Subpictures: 04

Title: 09, Length: 01:32:33.520 Chapters: 36, Cells: 138, Audio streams: 04, Subpictures: 04

[… snip …]

Title: 99, Length: 00:00:00.520 Chapters: 01, Cells: 01, Audio streams: 08, Subpictures: 12

Longest track: 20

Active Pen-Testing

Heute mal eine Idee, die schon länger in meiner Schublade steckt und die nun endlich, aus gegebenem Anlass, mal aufgeschrieben gehört:

Wie wir alle wissen gehört zu Datenschutz (die Wahrung der Informationellen Selbstbestimmungsrechte) auch Datensicherheit (Vertraulichkeit, Verfügbarkeit und Integrität von Daten). Ohne Datensicherheit kann eine Organisation keinen Datenschutz gewährleisten (vermutlich deshalb werden die beiden verschiedenen Aufgaben von den Medien auch so oft in einen Hut geworfen). Wenn Unternehmen nun zu wenig bzw. nicht genug in Datensicherheit investieren, kommt es vor, dass die Daten von vielen Benutzern in die Öffentlichkeit gelangen. Ein Vorgang der immer mal wieder vorkommt, so z.B. bei studiVZ, schülerVZ, haefft.de oder nun aktuell ruf-jugendreisen.de. Auf den ersten richtig großen Skandal bei Bundesbehörden dürfen wir noch warten (Elektronischer Personalausweis, ELSTER, Gesundheistkarte anyone?), bei Landes- oder Lokalbehörden kommt das ja hin und wieder schon mal vor. Den betroffenen Kunden der jeweiligen Unternehmen entsteht dabei ein Schaden der nicht von den Unternehmen beglichen werden muss (die Bußgelder der Datenschutzbeauftragten sind lächerlich, wenn sie überhaupt verhängt werden), obwohl Sie mit genau diesen Daten vermutlich jahrelang Gewinn gemacht haben. Dieser Vorgang, dass eine Organisation auf Kosten anderer Gewinn macht, nennt man unter Ökonomen eine Externalität. Zur Lösung des Problems ist die Internalisierung der Kosten, die bei einem Datenverlust im Moment noch bei den betroffenen Nutzern anfallen, in der Kostenrechnung des Unternehmens oder der Behörde. Dies kann auf verschiedenen Wegen geschehen. Ein Weg der im Moment schon beschritten wird, ist eine staatliche Regel: Wenn du keine ausreichenden technischen und organisatorischen Maßnahmen ergreifst um Datenschutz sicherzustellen, musst du X Bußgeld bezahlten (BDSG, §9).

Nun, Regeln sind eine eigene Sache. Sie funktionieren ungefähr so: Entdeckungswahrscheinlichkeit * Strafhöhe = Risiko (Kosten). Wenn der Gewinn aus der Handlung nun größer ist als das Risiko durch die Strafe, dann sagt die Theorie, dass man gegen die Regel vernünftigerweise verstoßen wird (wer hat z.B. noch nie mal kurz im Halteverbot gehalten). Wenn die Bußgelder der Datenschutzbeauftragten also sehr niedrig sind, ist es ökonomisch sehr sinnvoll für die Firmen gegen die Regel zu verstoßen. Ein Weg in die richtige Richtung wäre also zum einen die Bußgelder zu erhöhen. Es gibt jedoch noch einen zweiten Faktor in der Gleichung: die Entdeckungswahrscheinlichkeit. Würden wir sie erhöhen, würde der gleiche Effekt eintreten. Nun ist mir nicht bekannt, dass sich irgendjemand diesen Effekt aktiv zu Nutze macht. Kein Unternehmen und keine Behörde muss befürchten, dass der Bundesdatenschutzbeauftragte bei ihnen unangemeldet an die Tür klopft und mal fragt wie es so um die technischen und organisatorischen Maßnahmen steht. Würde er das tun können, so würde auch noch ein weiterer Effekt im Kontext von Regeln in Kraft treten: Risikoaversität. Dieses Prinzip besagt, dass Menschen beim Einschätzen von Risiken (wie dem Risiko, einen Datenskandal zu erleiden) dazu tendieren die Eintrittswahrscheinlichkeit von negativen Ereignissen zu überschätzen, gegeben Schadenshöhe und Eintrittswahrscheinlichkeit sind in einem bestimmten kritischen Bereich, denn es gibt umgekehrt auch Situationen in denen wir risikoaffin handeln (z.B. wenn wir Lotto spielen) und das Risiko unterschätzen. Die Aufgabe des Staates ist es nun, Strafmaß und Eintrittswahrscheinlichkeit in einen effizienten Bereich zu verschieben.

Und nun zur Conclusio: Warum tut er dies nicht für den Datenschutz? Zum Beispiel durch aktive Überprüfung der technischen und organisatorischen Sicherheitsmaßnahmen nach §9 BDSG. Oder noch provokativer: Warum haben wir keine aktive Pen-Testing Behörde, die:

  1. private Unternehmen überprüft
  2. staatliche Behörden überprüft

Ich fordere staatliches Pentesting gegen Behörden und Unternehmen!

(man beachte dabei das Grundrecht auf Gewährleistung der Vertraulichkeit und Integrität informationstechnischer Systeme)

What is Open Source?

Well, here is the final answer. Just created it from the texts in the OpenSource Jahrbuch 2004 to 2008. Took me some hours and some code-snippets from my diploma theses. Just a quick Porter-stemming (which doesn’t work to well with german, I know) and a manually created stopwordlist. There’s definitly room for improvement (better stemming, differential corpus analysis, say agains the gutenberg corpus) but I just need it for putting people in the right mindset.

Wordle: OpenSource Jahrbuch