Skip to content

Cloud-Speicher sind keine Backup-Lösungen

Im Moment ist ein etwas längerer Artikel in Vorbereitung, der das Backup-Konzept von datacube vorstellt. Vorab nur die Erinnerung, dass Cloud-Speicher wie Google Drive und Google Documents, Apple iCloud und Microsoft SkyDrive keine Backup-Lösungen sind und kein Backup ersetzen. Es handelt sich bei diesen Anbietern um riesige, gesichtslose Konzerne: Ihr seid ihnen egal, eure Daten sind ihnen egal. Wenn ihr bisher keine Backup-Maßnahmen getroffen habt (Cloud-Speicher zählen nicht!), dann ist jetzt der beste Zeitpunkt.

Hier ist mein Vorschlag, den ich so ähnlich selbst durchführe.

  • Einmalige Kosten: Genau dreimal so hoch wie die günstigste externe Festplatte bei Amazon/MediaMarkt/... Vermeidet "Refurbished"-Festplatten, die Amazon z.B. auch anbietet: In meiner Erfahrung steigen sie ausnahmslos nach wenigen Monaten bis Jahren unrettbar aus.
    Beispiel: Diese 10TB große WD Elements kostete zum Zeitpunkt der Veröffentlichung dieses Artikels etwa 230 Euro. Die Kosten für 10TB dreifach gesicherten Speicher betragen also knapp unter 700 Euro.
  • Laufende Kosten: Die Stromkosten sind kaum höher als ohne Backup, da zwei der drei Festplatten meistens nicht mit dem Strom verbunden sind. Defekte Festplatten müssen natürlich ersetzt werden.
  • Verwendete Software: rsync. Außerdem rate ich dringend zur Verwendung von dm-crypt und LUKS.
  • Vorgehensweise:
    1. Wichtige Daten werden ausschließlich auf der ersten Festplatte abgelegt. Falls dies nicht nötig oder gewünscht ist, kann auf die erste Festplatte verzichtet werden; wichtig ist aber, dass während des Backup-Prozesses nicht entschieden werden muss, ob eine Datei wichtig ist oder nicht. Das Backup muss nach dem Start ohne Nutzereingabe auskommen. Wird auf die erste Festplatte verzichtet, verringern sich die Kosten um ein Drittel.
    2. Die erste Festplatte wird per rsync vollständig auf die zweite Festplatte übertragen, und zwar so, dass lediglich geänderte Dateien aktualisiert und neue Dateien übertragen, aber gelöschte Daten nicht gelöscht werden.
    3. Die erste Festplatte wird per rsync vollständig auf die dritte Festplatte übertragen, sodass neue Dateien angelegt, geänderte Dateien aktualisiert und gelöschte Dateien gelöscht werden.
    4. Die drei Festplatten sind niemals gleichzeitig mit demselben Computer verbunden.
    5. Die zweite Festplatte wird nicht im gleichen Gebäude aufbewahrt wie die beiden anderen Festplatten.
    6. Die beiden Backup-Festplatten werden nur für Backups und Datenwiederherstellungen mit dem Computer verbunden.
    7. Das Backup wird ritualisiert durchgeführt, z.B. immer freitagnachmittags, aber auch immer dann, wenn es in Einzelfällen nötig ist (z.B. wenn das Dokument, an dem man seit 12 Stunden arbeitet, endlich fertig ist). Daher ist es wichtig, dass es schnell geht und nicht nervt, und das heißt, dass das Backup keine Fragen stellt und man sich auch nicht überlegen muss, welche Daten gesichert werden müssen.
    8. Es muss regelmäßig festgestellt werden, ob das Backup sich auch wiederherstellen lässt. Dazu darf es nicht in irgendwelchen obskuren Backup-Formaten vorliegen, sondern es muss offensichtlich sein, dass jede Datei auf dem Backup-Medium sich genau so wiedergeben, öffnen, betrachten usw. lässt wie das Original. Es darf auch nicht von der Kompatiblität der Backup-Software abhängen: Sollte rsync eingestellt werden oder mit neuen Versionen eines Betriebssystems inkompatibel sein, lässt sich das Backup trotzdem wiederherstellen.
  • Bei größerem Platzbedarf können jederzeit mehrere Festplatten verwendet werden, welche transparent mit mergerfs zu einem Dateisystem vereinigt werden. Externe Festplatten, die häufig transportiert werden (dritter Ort!) können von ihrem Gehäuse befreit (shucking) und z.B. in Koffern transportiert und an Dockingstationen angeschlossen werden können.
Wo sind eigentlich eure Passkeys gespeichert? Wenn ihr die Frage nicht definitiv mit "lokal, auf meinem Gerät, und außerdem als Backup dort: ..." beantworten könnt, ist das schlecht, und ihr solltet weiterhin Passwörter verwenden. (Wenn die Antwort "Was ist ein Passkey?" ist, solltet ihr definitiv weiter Passwörter verwenden.)

SPArEPART: Auto-Off-Funktion bei Epson-Projektoren nachrüsten

UPDATE: Die PCBs sehen gut aus! :-)

tl;dr: siehe Titel; Technik hier

Lizenzhinweis: Alle Inhalte des SPArEPART-Projekts (Arduino-Quellcode und Fritzing-Sketch für die PCBs) stehen unter der GNU General Public License Version 3.

Anfang dieses Monats hat unsere Schule endlich neue Projektoren (vulgo: Beamer) bekommen. Es war auch höchste Zeit, da die alten Geräte, die die neuen nun ersetzen, bis dato 10 Jahre auf dem Buckel hatten. Während einige dieser Geräte noch annehmbare Bilder produzierten, waren die meisten inzwischen so lichtschwach, dass man die Bildinhalte nur noch unter besten Bedingungen (Raum abgedunkelt, kontrastreiches Motiv) ausmachen konnte. In vielen Räumen war multimedialer Unterricht somit nicht mehr möglich.

Neben dem Alter der Geräte war einer der Hauptgründe für die schlechte Bildqualität der alten Projektoren die falsche Bedienung: Da eine der Bildquellen des Projektors eine Dokumentenkamera ist, die permanent ein Bild liefert, schalten sich diese Geräte nicht aufgrund von Inaktivität ab—denn von einer Quelle ist ja immer ein Bild da. Dies bedeutet, dass ein Projektor, der angeschaltet und dann vergessen wurde, so lange weiter läuft, bis man ihn bemerkt und ausschaltet. Dieses Schuljahr dauern die Osterferien 3 Wochen; das sind also über 500 Stunden, die ein solcher Projektor sinnloserweise über die Ferien läuft, wenn er vergessen wird; die Lebensdauer des Leuchtmittels bewegt sich in der Größenordnung von 3.000 Stunden insgesamt. Tatsächlich ist es nicht (nur) die Lampe, die Schaden nimmt—diese wäre ja austauschbar. Der komplette Projektor nimmt solchen Schaden dadurch, dass auch ein Austausch der Lampen nichts mehr hilft.

Um dieses Problem—das auch bei Fernsehern, insbesondere OLED-Modellen, auftritt—zu lindern, verfügen die meisten dieser Geräte über eine automatische Abschaltfunktion ("Auto Off"), die den Nutzer nach einiger Zeit (normalerweise 1-4 Stunden) auffordert, eine Taste an der Fernbedienung zu drücken und ansonsten das Gerät ausschaltet. An unseren alten Projektoren war eine solche Funktion vorhanden ("Abschalt-Timer"), aber leider nicht aktiviert.

Unsere neuen Geräte vom Typ Epson EB-695Wi besitzen eine solche Funktion nicht.

Damit sollte die Sache eigentlich beendet sein: Solche Geräte sind zur Verwendung grundsätzlich ungeeignet, vor allem aber dort, wo die Anzahl der Benutzer sehr groß wird (also in Schulen) und gerne "Streiche" gespielt werden (also in Schulen). Ob ein Gerät für die Verwendung im Schulbetrieb geeignet ist, steht als Kriterium bei der Beschaffung leider weit hinten (gefolgt nur von: wird das Gerät nach der Anschaffung überhaupt genutzt und wie gerne).

Folglich haben wir nun einen Satz von über 70 Projektoren, die alle Gefahr laufen, nach den nächsten Ferien den Geist aufzugeben—eigentlich sollen sie mindestens 8 Jahre halten. Wie es aber—nicht nur im Schulsystem—häufig so läuft, muss man um die Mängel des Gerätes irgendwie herumarbeiten. Solche "Workarounds" fallen mal mehr, mal weniger elegant aus. Ich halte diesen für mittelelegant.

Serial Port Arduino Epson Projector Attitude Readjustment Tool (SPArEPART)

Die Projektoren besitzen zwar keine "Auto Off"-Funktion, dafür aber eine funktionsfähige und recht gut dokumentierte serielle Schnittstelle (RS-232). Über diese kann der Projektor teilweise gesteuert werden—es ist so auch möglich, den Projektor ein- und auszuschalten. Der Plan ist klar: Wir bauen ein Gerät, das dem Beamer alle drei Stunden das Signal zum Ausschalten sendet. Offensichtlich wird ein Arduino benötigt. Da keine absolute Zeit ("jeden Tag um 18 Uhr"), sondern nur eine relative Zeit ("alle 3 Stunden") verwendet wird, wird kein RTC-Modul benötigt. Serielle Verbindungen gehören für Arduinos zum Tagesgeschäft, aber leider verwendet RS-232 anscheinend 12-Volt-Pegel; der Arduino sendet und empfängt mit 3,3 oder 5 Volt. Es wird also ein Konverter wie der MAX3232 benötigt. Auf vielen Wandler-Modulen, auf denen der MAX3232 verbaut ist, ist auch direkt eine serielle Buchse (weiblich) aufgelötet. Schließlich soll der Projektor nicht ohne Vorwarnung ausgeschaltet werden: Über einen Piezo-Summer soll ein Ton ausgegeben werden, bevor der Projektor ausgeschaltet wird. Noch besser wäre es natürlich, den Projektor "stumm" zu schalten—es gibt eine Option, aus dem sogenannten "A/V Mute"-Modus den Projektor nach einer kurzen Zeit auszuschalten. Der "A/V Mute"-Modus hat aber den Vorteil, dass er durch Tastendruck sofort deaktiviert werden kann, während nach dem Ausschalten eine kurze Zeit gewartet werden muss, bis der Projektor wieder angeschaltet werden kann. In Version 2 soll noch ein Klatschsensor eingebaut werden: Kurz vor dem Ausschalten spielt das Gerät die Tonfolge Shave and a Haircut; antwortet der Benutzer durch zweifaches Klatschen ("Two Bits!"), wird der Timer zurückgesetzt.

Teileliste:

Bilder:

SPArEPART, Ansicht oben
SPArEPART, Ansicht oben
SPArEPART, Ansicht vorne
SPArEPART, Ansicht vorne

Code:

#include <SoftwareSerial.h>
#include "pitches.h"

const byte rxPin = 3;
const byte txPin = 2;
// there is almost a 50-50 chance the RX and TX pins are reversed
// you may have to try both configurations
const byte tonePin = 12;
unsigned long lastReset;
const int noLegato = 100;

SoftwareSerial ProjSer(rxPin, txPin);

void setup() {
  ProjSer.begin(9600);
  lastReset = millis();
  pinMode(tonePin, OUTPUT);
}

void loop() {
  if (lastReset + 1000UL * 60 * 60 * 3 < millis()) {
    play_shave_and_a_haircut(tonePin, 70);
    delay(30 * 1000);
    ProjSer.println("MUTE ON");
    delay(100);
    ProjSer.println("MUTE ON");
    delay(100);
    ProjSer.println("MUTE ON");
    lastReset = millis();
  }
  delay(1000);
}

void play_shave_and_a_haircut(const byte tonePin, const int toneLength) {
  tone(tonePin, NOTE_G5, toneLength * 2);
  delay(toneLength * 2);
  noTone(tonePin);
  delay(noLegato);
  tone(tonePin, NOTE_D5, toneLength);
  delay(toneLength);
  noTone(tonePin);
  delay(noLegato);
  tone(tonePin, NOTE_D5, toneLength);
  delay(toneLength);
  noTone(tonePin);
  delay(noLegato);
  tone(tonePin, NOTE_E5, toneLength * 2);
  delay(toneLength * 2);
  noTone(tonePin);
  delay(noLegato);
  tone(tonePin, NOTE_D5, toneLength * 2);
  delay(toneLength * 2);
  noTone(tonePin);
  delay(noLegato);
}

Skizze (Fritzing):

Fritzing-Skizze

Bilder von den PCBs:

SPArEPART-PCB
SPArEPART-PCB
fertig zusammengebauter SPArEPART mit PCB
fertig zusammengebaut

Den Fritzing-Sketch, mit dem die PCBs erstellt wurden, gibt es hier: SPArEPART_pcb.fzz

Vielen Dank an AISLER, die die PCBs sehr schnell hergestellt haben!

Und das funktioniert?

Erstaunlicherweise ja, und es passt auch gerade so in die Anschlussöffnung am Projektor! Jetzt gilt es nur noch, 70 davon herzustellen und an allen Projektoren der Schule zu installieren. Hm, vielleicht hat ja der Informatik-Kurs Zeit...

How to extract the TOTP secret from your Steam Authenticator, *late* 2023 Edition

It appears to be no longer possible to log in using an old version (2.x) of the Steam app, so this method no longer works.

However, not all hope is lost: There is another method that works with the current vanilla Steam app from the Play Store and has the added benefit that it does not require you to remove your old Steam Guard anymore. It does, however, involve the terminal and running Frida on both your computer and your phone. You still need root access—yes, there are ways to do it without root, but again, iffy.

Here, again, is how to do it, step by step (original instructions from here):
  1. Have the Steam app configured as a Steam Guard.
  2. Connect your phone to your computer via USB and make sure you have USB debugging enabled. You can test this by connecting your phone to your computer and running adb devices. If this is your first time doing this, your phone will likely ask you to authorize your computer for debugging. adb devices should print something like 0d5e3a4d6b3e3e2f device.
  3. Install the frida Python module on your computer (possibly using pip install frida).
  4. Download the frida-server binary (you will have to click on "Show all ... assets") for your phone's architecture (this depends on your phone; you'll most likely need either arm or arm64), unpack it and push the server binary onto your device:
    adb push frida-server /data/local/tmp/
    adb shell
    Within the adb shell, then make the binary executable and run it as root:
    adb-shell$ su
    adb-shell# cd /data/local/tmp/
    adb-shell# chmod 755 frida-server
    adb-shell# frida-server
  5. On your computer, run this script (by MuelNova):
    import json
    import frida
    import sys

    package = "com.valvesoftware.android.steam.community"
    cmd = """
    'use strict;'

    if (Java.available) {
    Java.perform(function() {

    //Cipher stuff
    const Cipher = Java.use('javax.crypto.Cipher');

    Cipher.doFinal.overload('[B').implementation = function (input) {
    var result = this.doFinal.overload('[B').call(this, input);
    send(result);
    }

    }
    )}
    """


    def parse_hook(cmd_):
    print('[*] Parsing hook...')
    script = session.create_script(cmd_)
    script.on('message', on_message)
    script.load()


    def on_message(message, _):
    try:
    if message:
    if message['type'] == 'send':
    result = "".join(chr(i) for i in message['payload'])
    print(json.dumps(json.loads(result), indent=2, ensure_ascii=False))
    except Exception as e:
    print(e)


    if __name__ == '__main__':
    try:
    print('[*] Spawning ' + package)
    pid = frida.get_usb_device().spawn(package)
    session = frida.get_usb_device().attach(pid)
    parse_hook(cmd)
    frida.get_usb_device().resume(pid)
    print('')
    sys.stdin.read()

    except KeyboardInterrupt:
    sys.exit(0)
    except Exception as e:
    print(e)
    This should cause the Steam app on your phone to start, debugger (frida) attached.
  6. At this point, your Steam credentials should be printed on the adb shell:
    {
    "accounts": {
    "YOUR_STEAM_ID" {
    "shared_secret": "BASE_64_ENCODED_SHARED_SECRET",
    "identity_secret": "***IRRELEVANT***",
    "secret_1": "***IRRELEVANT***",
    "serial_number": "***IRRELEVANT***",
    "revocation_code": "RYOUR_REVOCATION_CODE",
    "account_name": "YOUR_ACCOUNT_NAME",
    "token_gid": "***IRRELEVANT***",
    "steamguard_scheme": 2,
    "steamid": "YOUR_STEAM_ID"
    }
    }
    }
    However, your authenticator app probably wants a base32 encoded secret, so you will need to run it through:
    echo [BASE_64_ENCODED_SHARED_SECRET] | base64 -d | base32 
  7. In your TOTP generator, add an account with the following parameters:
    Issuer: Steam
    Account name: [YOUR_ACCOUNT_NAME]
    Secret key: [BASE32_ENCODED_SHARED_SECRET_FROM_STEP_6]
  8. Verify that both your TOTP generator and the Steam app are producing the same five-digit alphanumeric codes.
  9. That's it! You can now remove the frida-server binary from your phone:
    adb-shell# rm /data/local/tmp/frida-server
Acknowledgements:
Thanks to MuelNova for the original instructions and null-dev for clarifying the base64/base32 conversion.

Steam: Old Big Picture mode and Steam Controller firmware update (after August 2023)

TL;DR below: How to force Steam back to an older version to restore the old "Big Picture" mode and update your Steam Controller's firmware to BLE, all thanks to one horny but knowledgeable Croatian furry.

A few weeks ago, Valve removed their old "Big Picture" mode from Steam. The old "Big Picture" mode had already been discontinued in favor of the new gamepadui "Big Picture" mode (i.e. what the Steam Deck comes with), but could hitherto still be forced by launching Steam with -oldbigpicture. While I actually like the new gamepadui more than the old "Big Picture" mode—besides the insane performance issues on my NVIDIA GPU, but there's ways around that—it is missing a few core features of the old "Big Picture" mode, most importantly: the old Controller Settings menu which allows you to update the firmware of your Steam Controller.

I like the Steam Controller. I like it a lot.
I think it is the best controller ever made. (The Xbox One controllers are great too. PlayStation controllers are hot garbage. Don't @ me.)

So of course, I bought six of them.



Okay Ian, so you like the Steam Controller, but come on, surely you can't like it enough to have six of them. Whatever are you going to do with six goddamn controllers?
Well. I was going to stop at four, but..

Myself only having two hands, you see, I can only use one controller at a time. Sometimes I can manage to forceconvince my wife to play with me, so that's two. Sometimes I'll have a friend over, that's three; another friend I have lent a fourth controller semi-permanently. That really ought to be enough for everybody—most games that allow local co-op do not allow more than four players simultaneously.

Ay, there's the rub: Since this one friend only comes over sometimes and very rarely brings his controller with him, it does not get updated often; in fact, at the time that Valve chose to remove their Controller Settings menu, it still hadn't gotten the firmware update that enables Bluetooth Low Energy (BLE). As such, it is now incompatible with the device I want to use it now, an NVIDIA Shield Pro—but since Valve have removed the menu, updating the firmware is no longer possible. (There is an alternative method involving batch files which is an awful time, requires Windows, may leave your Steam Controller soft-bricked when it goes wrong, and woe betide you if you try to run it in a VM.)

Dauntlessly, I set forth to update this fourth controller. I end up soft-bricking it, but thinking I ruined it, I seek to replace it. I end up buying not one, but two new/used controllers from the same seller—again with outdated firmware and without BLE. Sigh. After I soft-brick one of them, I finally become irritated enough to boot Windows to Go from a USB drive and run the firmware update successfully. I also run it on the second controller.

And then I run it on the soft-bricked controller. Again, successfully. It now works again.

Sort of, since this blog entry is not titled "Ian gets stupid and buys too many controllers." You see, now BLE works (for some reason), but the original dongle mode (you can pair up to four Steam Controllers to a single USB dongle) no longer works. Which, you know, I don't really care about, since I'm happy with BLE. Unfortunately, another friend has agreed to buy one of my surplus controllers and he needs to use dongle mode. Well, shit.

But owoho, what's this? Steam user Wikarian99PL has posted a guide on how to forcibly downgrade your Steam version! Well, actually, Linux Wizard and Furry of Legend lightwo posted a guide on how to continue using Steam with Windows 7 after Valve stops supporting it on December 31st, 2023. Crucially, it contains a method of using an older version of Steam—normally, Steam is one of these applications that always force you to use the newest version. If you play your cards right, you can use this older version to restore full functionality to your Steam Controller.

Here's how to do it:

  1. Quit Steam.
  2. Force Steam to "update" to an older version of the software using:
    steam -forcesteamupdate -forcepackagedownload -overridepackageurl http://web.archive.org/web/20230531115543if_/media.steampowered.com/client -exitsteam
  3. In the directory that contains local.vdf (~/.steam/steam/ here), create a file named steam.cfg with the following content:
    BootStrapperInhibitAll=Enable
    BootStrapperForceSelfUpdate=False
    This will prevent Steam from auto-updating on startup.
  4. This "old" version of Steam is still new enough to default to the new gamepadui. However, it is old enough to still recognize -oldbigpicture, so start Steam using steam -oldbigpicture. Once you start Steam, switch to "Big Picture" mode.
  5. Go to Settings > Controller Settings. Voilà!
From there, restoring full functionality is kind of straightforward: using a micro-USB cable, hit the Recover Steam Controller Firmware button to restore dongle connectivity. You can then update the firmware again (still in Controller Settings) to regain BLE connectivity.

Easy, right?

I don't know why Valve hates the Steam Controller—they built an excellent gaming handheld based on it, and now they seem to have but completely dropped it. Luckily, furries are here to save the day. Thanks, lightwo!

New name, new PGP key

My last name has changed and so my PGP key has too.
Listed below is my new public key, signed with my old key. I hope that proves something.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

This is Ian from datacu.be and this is my new PGP key.
Today's date is 2023-09-08.

- -----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBGTx9v4BEADTgoKMx2hr/uMpJt7rNW4NDTpuUJSNcdwLagYnedht1ip0jhc3
5LinwFFz0Us3+z+G/hVNX6YR6Hhgf2hmO/4GTeLgIttnAyPJugGpCL68mMioyVv1
PF0Q6+SjaNMaq4S4cL7KF9LCiRdi6+G9KJQrXGIPTIqE/v315Lu2jHoIfnovfoQU
Ld8KWIh/kzREhNLzMkwkqERl8zoWQyInSVpS+JruZ+Y847gfpf32LgXuc4DT/arc
DmSNkaVHNombiEzdwADcb0JOUHn4kvbGMzbi6PSkIQ98A3ZcMe0QqA3ItQAwjMkX
yy+jzNYd8aV32C7KwSrRqYnl2Od2WR7twiNPNRfbsUKEBg8EWWVUo6qI9tQr3McP
5FysJc8x+40lTETHLZYBbUnxLWGkKYRRB5MR3ISqx0iDyt5NE0tLpEjzHj35QYmP
1ABqCCqzbL6UPi32k7iP/PGLge4OEsVaRGXdUJR8pSTYrFA7d3r4XEdEHiSQSVJU
wQHRvGLo86e87jjv4O+2qdWwz7iUvj3J6T/fEpvyfKYKpeURJcV7IEpDOKQNPW0M
SXLlZgIF7W20JYZr2vMY6IaCIvYLKr6JaB2Kdy6E1agpz5DyekxWoM8KRyqeN9bR
7zvSTSHxJSkbTiRqqlzv0c+xfa7YZGtm5pkwXFPdtLHm//5Un5wljyqwGQARAQAB
tCFJYW4gU2ltb24gTG9obWFubiA8aWFuQGRhdGFjdS5iZT6JAlQEEwEIAD4CGyMF
CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQTxPtjH+IZ+eJoDTdQfwNDPS3Ln
+wUCZPsowwIZAQAKCRAfwNDPS3Ln+8m8EACUM3xCUkCzXS6Jtx7cZhsc8nMSm09g
UzV86bWVG5I69Pu/zsRavewC91Xmpf5Si18gmYpkyyM9v+Ir4oHq6i98rvbncGOi
gOzNCRd4Plof7Gt5cLyIDywSQXQUvvlnL4iReBUh5Zr1X/W2+CiwdWtCV2y1ajtO
5Q1MKAHHiW7DJq86l7sesitQS5AphVuCbwoEwADF2Ys/VVBrTDoeSKeWI5SQJDS8
LQoeys1NWRS9odBHkRX2sGEUtbPrxUdzUifsY26hpAdwGyNHSIz5RMg00noVdpeF
UOxZ/G9fl431O95xfGR5WkLL6p+WqmJ2zpHBwKzLnfe4kW1VMm9aecdRMhHKlHqr
3EUBeOCPBC4WsSu1TyVUGbN2CyKgqcu0BFaVMG+IRdoVNX+xdGdHrNaSfLwcgEMB
n6jtxlJHxwMAnwODQJGBAivtub/z+IDQXu//78nAZ7MUQnT/1lTXvpY9kbV+ng78
Nn6b/kBgniC2Y4jEoiTn8y8BaGOPt8HkzoiZ7aYoIO/M+YFfvDH2Uwp9Gz9kfLOy
pI7XWq6B72JhoOTniHJpXzMvV3DsZlQtlrOopPWOZu95hEJ6PesxZ9wwS2j/qGy8
6kuKaQcdbF17FJgiFDfYG1A3MnjIVRqxtdL+Q78qrICykyfms26uf9tSPWqdEri0
ZL/HVgrnM7tDcLQuSWFuIFNpbW9uIExvaG1hbm4gPGlhbi5sb2htYW5uQGdyYi1v
bmxpbmUubmV0PokCUQQTAQgAOxYhBPE+2Mf4hn54mgNN1B/A0M9Lcuf7BQJk+yj0
AhsjBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEB/A0M9Lcuf7VPMP/RMG
1F9uLkvWL61sKpaoQ1Y3JXbOhDukX2XICkdOXqyO5+RTV+4YiCmVqLrm7c4bHZn8
0iAad879/UQQDAEQ4XhigoDqvKKwpTRBF7krnGA3NMUusD7qmtdW94hQL4bvda1v
Db3P75zEtrvrh3B9l4fIH9NpZq6gofWStL8EaOSVpRxSnnNgLGTf4xNkJTzuBg9R
is2udFfoG07X12RmqRInJU5r4rmio8oH9u/Y1P6rLQMvhERhLKsTmU8NIhjoZcK9
Jl5tWKTsal1l1HMAdtwhyKMt3o6GRGnHXng2Yaj4ruFKZLESaR4wg6YicCidxn89
0zXcEReVvO9iWILmxHI1sXI9Bg63lmigRhFbetwsb8nWh6S/LSn+puZ820xJ54it
DrleJ5JEd5OYBZRK3fnT+jKNODjx2nweyfUPhfPS2fXUGbyfY2m35btVZshI3+U9
PYyWNz8OmbxnKpbIl71m7I6XKjFGqV5dtIvccxn4w+X2Jc5ZiaiMwmP/wtY3el4k
uD8YVHOMiQFNnFpb8ia7EC4JJ0nzx8bjSo0/Ov1m/V9nnrIxxiXRJaElIRQVQaFS
qkYWT/17ez3R1trcAScEunWAIcALWnx0vUxIiSror5zaK6ppBWobhMYavndT0LW2
R0CKWC0jcknxfkc+GFP4rTbADMFj6uFBHFuKliiMuQINBGTx9v4BEADDOaDfkU1V
JCCy3/FMYbH3VhcEGrn+Pku0ZQOxT1mZjsq3IdOaJBfmOpWHLh6yDR9fgrTBtiLu
CvwDNC95aiyI6TBQLtdpGjVJsqYvXuh6wVWHEsjjrU79UnjtRIoJsVdc+pKrMqjS
IV77ciAc+evjCgjpj1Vd6+iCHmIHpxXcQHopoEAR2y0sGdEPZ78yCmElXcl8xsUk
40OGkWaCHRWMH2Ypdyqj4WzawwPNo76fkIxgCZyLMFR71s9IBZ3cdYhJwZrMEnf4
PEUR1sVk+OTYm1X0bEjJqoA/yjFMYphO3qWjKZjl5tGkuDH1Z+9+QfhawbVMEM/6
oogISMPAXSJ5yJoREpBg/aLVgKuWl3ByJK38oiDBmyhBjvMzdlp6aKPbGOiilEsN
tKvu+7h9akH+41Pjg7Lb/kZYYyORDZ4h1lO1qE0YYo49PpfiWehxupP0CTtAn7jH
TgId11NIKQ4HAj+fNv40t+Fxch5hhWA27xmGXsLFlVHnkcbQByovT7kNXQTVTkf6
E5636OeSD0VCDNWo6gXPCtPD3e0TFAr10aIjK45JH4i09Glm4ERjsPxxhOmhbOKC
a5/b8ggwwki/TvZhXSsnjm7Uj2KUW9Blpg4mSe7C/lE075ZE3GILabB3qMlhIKgX
0Abp/9f/K1Emp2rh4G6RPGJz6aC467AXiQARAQABiQI2BBgBCAAgFiEE8T7Yx/iG
fniaA03UH8DQz0ty5/sFAmTx9v4CGwwACgkQH8DQz0ty5/uQtw//Yhwl9L4O+ZEv
5/47QfVQLTWbfJ8AKN/IxnziajjW7Dd+QDFRrL2MCkyKKoicxGck6KFWQiic8eMq
x6h5SKfhoB4cXpQKPq0bdN1wI/M8t+uf2noWgVakWpsmsyt1ezBnqfCS4kcTTlRr
nQjCneP2UNgy8PEC3M0NGFx/E+qQkhIoFs7+Jlg7H016JgX1EzbNSBAeRQYoyCNk
tuNyCzDtn0vTacCGPNm73EG5RnZpDy2Pa7XTvcAQnKilXIJfElK6TY8/x0RLZ5v0
qA12s/fPIEmct+BZmhbxLGv9wT5dV3fDPGuEDMiNV02+d5rRqwbVlMHjcCwzIdG3
rnSrbq+r8Cl+JXxYFj88FpXUaSuLqt616zRD1rIbpg5xMPEYROuZJQuRRhGCNbOf
nQD3YdY61k+2WH0cV9ow6R0Z+yD2s7jH645CsVD3ohsiqhhm1HB+t/LVmIG9AUFQ
82Y0hjczgYYcAnK5FvUCvAK+sXe/bImJuJCCJ8e3wjqc3DJ4Gx6AHdqbvB1pWnFG
hIyskfbU/5F/MTXfKVMUl0PWMgWSgMPd4rYdXyS1n8dJVUZwrDZ6zP02JvE7EaQI
aK/2VSVmzBNCgatN7lLzWkmVbt4ht9G8s1yFN+hFemiMdeNtvbRKJnEBKzoLPDLc
f6HOs0Fe6kZBXVHIjfLnhKHj6MXBA2o=
=MTCJ
- -----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE/5YAJmle+gcrL8geDYIhNLCvZ4MFAmT7Kk4ACgkQDYIhNLCv
Z4PB7Q//WWrQsT5rCf1MjabjQAd2eOmxsJFUXeLZONG9amtI8ZyPRGRG3JQ8kjxZ
lqJ2s5iMAis2ufhAqLOaTvFGdxvJ/Nm+UubcI+HzN8ILLe64qrJ7mDU3pG93nz10
cYJgtWfatjrY4Jm7PSJM4Ph9qFbHqAePuaJRLssJ2BDgKuhc/0/EkT1JTwCQC8fj
zRwl9PZQEBVp+S73yelafWsNLlBKOKsG+NSwjO0ojeW7KRYOYTuMMqPxZJLcYNxc
XVNxU7v7iQFP3JdmAbkBcdYlSnrrLtPL+X3bIFRjCpSnjazisgt+gh2y3zqfUGdf
63/jDcbKTGxwX5YT3bdIoElpvM36dkB9JIQCVOu1WmCgieopAdBoZsB90UiS4M6h
DV0IiQ4KS50mRvfSK2Hk4cIhdVu9lYaKzqf7K6oBKFv/S5q493kl69zwghbfgj9b
B40SMiwWiLU+dTCGFQfuBsF+36zhtbof4fey+PM2IXh5ZH5/uhXKB2VKPzc5shPu
FL+wK1CiSeOY/iE1LmAyEH3XpN8Z3ABd1x59IWcZqS+oJkXz2P27wf49hjy+tQrl
213MjOywxSfApb7E38VTSZMrrfenKMnT4owvvbLJAnrQJiEOtm58CCZgAMCUpTGS
/VSV0pidIvQSGVqfhbwkfxmn38dAOraQ8vCAH/zENa/QTSqchKU=
=rGnC
-----END PGP SIGNATURE-----
You can also download and import the key here.

You Need But Say the Magic Word - how to get Accor Hotels to stop spamming you

I once booked a hotel in London (I think?) and gave Accor my email address so they could send me the information. Without asking me, they added me to their list of accounts to spam with marketing bullshit ("exciting offers" and "don't let your points go to waste").

Cue this exchange:

  1. I send them this:
    I have never consented to receiving any mail not directly related to a booking I have made. I demand you delete my account and my email address from your records immediately.

  2. They reply with:
    Dear Mr. [REDACTED],

    Thank you for reaching ALL Accor Live Limitless customer Data Privacy Team.

    We have well taken note of your request regarding deleting your account.

    In accordance with the applicable regulations and for the sake of confidentiality and protection of your personal data, we must authenticate you in order to be able to respond to your query. Please reply to this email and provide us with your personal data as it is displayed today on your account. This aims to protect you from malicious request from unauthorized third parties:

    1.1. First name:
    1.2. Last name:
    2. Email address:
    3. Postal address AND/OR telephone number AND/OR one of the last three stays credited:

    Upon reception of your account’s information, our team will carry out the necessary investigation and get back to you as soon as possible.

    We remain at your disposal for further inquiries.

    Kind Regards,


    Data Privacy Team
    ALL Accor Live Limitless
    www.accor.com

  3. ???

  4. PROFIT: Accor deletes my data (or so they claim, at least).

What is step 3, you ask? You wouldn't believe me if I told you:
To whomever it may concern:

I, the owner and sole recipient of this email address, forbid you and your entire company from writing to this email address in the future. If you continue to do so, I will take legal action.

[REDACTED]

To which they reply:
Dear Mr. [REDACTED],

We have reviewed your request to cancel your membership in our loyalty program.

We confirm that your membership has been canceled and that your account and personal data have been deleted from our database.

We remain at your disposal should you have any additional requests.

Kind regards,


Data Privacy Team
ALL Accor Live Limitless
www.accor.com


Fuck Accor and fuck advertisers everywhere. I only wanted a roof over my head when I went to London; we're not friends. Get back, motherfucker, you don't know me like that.

Bonus LOL: Here's something they tacked on to their reply:

This e-mail, any attachments and the information contained therein ("this message") are confidential and intended solely for the use of the addressee(s). If you have received this message in error please send it back to the sender and delete it. Unauthorized publication, use, dissemination or disclosure of this message, either in whole or in part is strictly prohibited.
Get bent.

Krypto-Defätismus

tl;dr: Sicher verschlüsselte, vertrauliche Kommunikation ist möglich, aber nicht mit dieser Einstellung.

Spätestens seit den Enthüllungen von Edward Snowden wissen wir, was einige schon seit längerer Zeit vermuteten und/oder behaupteten: Die Geheimdienste dieser Welt, allen voran die amerikanische NSA und das britische GCHQ, spionieren die gesamte Welt aus, sammeln Informationen über unbescholtene Bürger aller Herren Länder und verhalten sich, wie es sich für Geheimdienste geziemt, wie übergriffige Arschlöcher. Seit diesen Enthüllungen hat sich zum Glück einiges getan—Ende-zu-Ende-Verschlüsselung hat Einzug in Messenger wie Signal, Threema und schließlich sogar WhatsApp gehalten und Zugriffe auf das World Wide Web (WWW) finden inzwischen praktisch vollständig über HTTPS statt (Danke, Let's Encrypt!)

Gleichzeitig hielt in den Köpfen der Leute allerdings eine äußerst schädliche Überzeugung Einzug, die ich hier als Krypto-Defätismus bezeichnen möchte. Diese lässt sich wie folgt zusammenfassen:

Warum soll ich meine Daten und Nachrichten verschlüsseln?—Die NSA kann das eh alles knacken!
Diese Überzeugung ist deswegen so schädlich, weil sie dafür sorgt, dass der Anteil von vertraulicher Kommunikation sehr klein bleibt: Ich für mich selbst kann sicher verschlüsseln, aber jemand, mit dem ich kommunizieren möchte, muss die Prozedur mitmachen. Da freut es die Geheimdienste der Welt natürlich, wenn ob der vermeintlichen Sinnlosigkeit dieser auf sichere Kryptographie verzichtet und im Klartext kommuniziert wird.

Und nun die Fakten:

  • Sichere, vertrauliche Kommunikation ist möglich, und zwar...
  • ... weil es sichere Verschlüsselung gibt, die die Geheimdienste nicht knacken können, und zwar...
  • ... weil für Geheimdienste, Regierungen, Freimaurer, Echsenmenschen, AfD-Wähler und Katholiken dieselben verdammten Naturgesetze gelten wie für uns alle.
Ich bin mir nicht vollständig sicher, aber ich glaube, der Krypto-Defätismus hat dieselbe Ursache wie viele andere gesellschaftliche Probleme: Die Leute sind schlecht in Mathe und stolz darauf.

Sie verstehen nicht, dass die Mathematik, mit allen ihren Regeln und Gesetzen, hinter allem steht, was das 20. und 21. Jahrhundert ausmacht und alles ermöglicht, was für uns nur deswegen nicht wie gottgleiche Magie wirkt, weil wir damit aufgewachsen sind.

Und sie verstehen nicht, dass Mathematik ein großer Gleichmacher ist: Ihre Regeln gelten für Billionäre und Weltorganisationen ebenso wie für Turnvereine und Privatpersonen, oder mit anderen Worten:

Was die Kryptographie geheim gehalten hat, soll der Mensch nicht ergründen.
Selbstverständlich gibt es Angriffe auf Kryptosysteme. Selbstverständlich gibt es Bedienungsfehler, die die Vertraulichkeit verschlüsselter Daten untergraben. Selbstverständlich gibt es Bestrebungen der Geheimdienste, Kryptographie zu schwächen.

Moment mal, wie bitte? Bitte lassen Sie sich diesen Gedanken noch einmal durch den Kopf gehen: Wenn die NSA (oder das GCHQ, oder das BKA/der BND) eine Wundermaschine im Keller stehen hat, die alle Verschlüsselung knacken kann, warum würden sie dann zu solchen Maßnahmen greifen? Weil die Geheimdienste der Welt sehr genau wissen, dass es für sie unmöglich ist—und in vielen Fällen für immer unmöglich bleiben wird—gute Verschlüsselung zu knacken.

Deswegen gibt es immer und immer wieder Bestrebungen, Firmen zur Aufweichung ihrer Kryptographie zu zwingen, Ende-zu-Ende-Verschlüsselung zu verbieten oder zu unterwandern oder, möglicherweise, das Narrativ zu verbreiten, Verschlüsselung wäre sinnlos und könnte immer gebrochen werden. In Wirklichkeit sind weitverbreitete Kryptosysteme, sofern sie nicht durch wissenschaftliche Untersuchungen gebrochen werden und korrekt angewendet werden, auf absehbare Zeit unerreichbar für Außenstehende—asymmetrische Kryptographie ist theoretisch durch Quantencomputer bedroht, praktisch erscheinen solche Angriffe für die nächsten Jahrzehnte unmöglich; symmetrische Kryptographie wie Rijndael ist unempfindlich gegen Quantencomputer.

Es gibt allerdings eine viel größere Bedrohung: Der um sich greifende Krypto-Defätismus und die damit einhergehende Apathie gegenüber Privat- und Intimsphäre, eine selbsterfüllende Prophezeiung: Ich muss mich nicht schützen, Facebook/die NSA/die Weltverschwörung hat meine Daten ja eh.

Steht auf, reibt euch die Augen und fangt an, eure Daten und Kommunikation zu verschlüsseln.

How to Use Your Yubikey as a Steam Guard TOTP Generator, 2023 Edition

Update Nov 5, 2023: This no longer works—see here for updated instructions.

Note: Unlike most other articles on this blog, this article contains instructions on how to solve a common-ish problem and therefore is written in English.

You will need:
  • a Yubikey (not a Yubico "Security Key", but other brands may work as well; rule of thumb: if you can use your device as a 2FA for, say, Amazon, it should work)
  • a rooted Android phone; there seem to be recipes for Androids without root, but I haven't tested them and they seem complicated
  • an older version of the Steam app for Android (version 2.x, I got mine from here; don't worry, you can return to the current version when you're done)

Here's how to do it, step by step:
  1. Remove your current Steam Guard from your Steam account; if you're not currently using the 3.x Steam app, you can probably skip this step.
    Caution: This is not the same as Step 2!
  2. Uninstall the current Steam app and install a 2.x version from your most trusted source.
  3. Set up your 2.x app as a Steam Guard authenticator.
  4. Use either adb or your favorite file manager app (with root privileges) to copy /data/data/com.valvesoftware.android.steam.community/files/Steamguard-[YOUR_STEAM_ID] ([YOUR_STEAM_ID] will be replaced by a long number) to your computer.
  5. This is a JSON file that will look something like this:
    {
    "steamid":"[YOUR_STEAM_ID]",
    "shared_secret":"[BASE32_ENCODED_SECRET]",
    "serial_number":"[SOME_NUMBER]",
    "revocation_code":"R[YOUR_REVOCATION_CODE]",
    "uri":"otpauth:\/\/totp\/Steam:[YOUR_ACCOUNT_NAME]?secret=[YOUR_SHARED_SECRET]&issuer=Steam",
    "server_time":"[TIMESTAMP]",
    "account_name":"[YOUR_ACCOUNT_NAME]",
    "token_gid":"[8_BYTE_GID]",
    "identity_secret":"[BASE32_ENCODED_SECRET]",
    "secret_1":"[BASE32_ENCODED_SECRET]",
    "status":1,
    "phone_number_hint":"[LAST_4_DIGITS_OF_YOUR_PHONE_NUMBER]",
    "steamguard_scheme":"2"
    }
    The relevant line is highlighted in bold; in your favorite Yubikey TOTP app, add a new account and enter the parameters in italics:
    Issuer: Steam
    Account name: [YOUR_ACCOUNT_NAME]
    Secret key: [YOUR_SHARED_SECRET]
  6. Make sure your Steam app generates the same TOTPs as your Yubikey. If it doesn't, something has gone wrong and you'll likely need to start over from step 4 or 5.
  7. You're done! You can now update your old Steam app (2.x was last released in 2020!!) to the newest version. However, you may want to keep the Steamguard-[YOUR_STEAM_ID] file around to add accounts to more Yubikeys.

What can you do with it?
  • You can use it to log in, even if your phone is lost, damaged, stolen, etc.
  • You cannot use it to authorize trades.
Why should I do this?
I didn't say you should, I said you could. Personally, I trust my Yubikey more than my phone and I also expect it to live longer.

Doesn't this impact the security of my Steam account?
See above; I don't believe my Yubikey is more easily compromised and/or lost than my phone. If you disagree, don't do it.

Closing thought:
Thank you Valve for using standard TOTPs for Steam login. Now could you please make it easier to export/access the shared secret?

Acknowledgements:
Thanks to geripgeri for the original instructions on how to add a Steam account to your Yubikey.

WhatsApp ist ein Hurensohn

Ich hatte heute das große Vergnügen, meiner Partnerin den Umstieg vom alten auf ein neues Handy zu begleiten. Das Ganze ging soweit ganz gut—dann kam WhatsApp.

Auf dem neuen Handy läuft Android 11, genauer /e/OS. /e/OS ist eine Android-Distribution ohne Google Play Services. Man wird nicht aufgefordert, ein Google-Konto zu erstellen oder zu verwenden. Daten werden (jedenfalls größtenteils) nicht an Google oder andere Datenkraken geschickt.

WhatsApp möchte Backups gerne aus Google Drive wiederherstellen. Ja, danke für nichts.

Aber halt, es gibt ein lokales Backup! Man kann Backup-Dateien (msgstore-JJJJ-MM-TT.1.db.crypt12) vom alten Handy sichern, auf das neue Handy übertragen und dort wiederherstellen!
Äh, ja, so theoretisch. Normalerweise funktioniert das so:

  • Dateiauswahl-Dialog öffnet sich
  • Benutzer sucht die Datenbankdatei im internen Speicher oder der SD-Karte
  • Benutzer wählt Datei aus
  • Programm stellt Daten wieder her
WhatsApp, die dumme Sau, macht aber Folgendes:

  • Handy muss neu verifiziert werden
  • Oh, du verifizierst schon zum dritten Mal, weil die letzten Versuche nicht geklappt haben? SMS kriegst du nicht mehr, lass mich dich anrufen...
  • Was, sogar schon das vierte Mal? Bitte warte 15 Minuten...
  • Okay, also von Google Drive wiederherstellen...
  • Was meinst du mit "das geht nicht"??? Okay, dann mach ich dir einen leeren Chatverlauf, haha!
  • Was, sogar schon das fünfte Mal? 7 Stunden! etc.
Am Ende habe ich es dann doch hinbekommen. Wie? Nun, das ist ein sehr simpler Prozess, der jedem einleuchtet. So geht's:

  • Zunächst muss man die Datenbank-Datei (msgstore-JJJJ-MM-TT.1.db.crypt12) vom alten Handy sichern
  • Anschließend muss man sie in msgstore.db.crypt12 umbenennen und exakt dort platzieren, wo WhatsApp sie vermutet. Das ist nicht etwa immer der gleiche Ordner—auf dem alten Handy war das Verzeichnis WhatsApp/Databases/, auf dem neuen Handy dagegen Android/media/com.whatsapp/WhatsApp/Databases/.
  • Äh, nun ja, diesen Pfad gibt es zweimal: Einmal auf dem internen Speicher, einmal auf der SD-Karte. Welchen WhatsApp benutzt? Wer kann das sagen... ¯\_(ツ)_/¯
  • Dann muss man noch während der Suche nach Backups den Flugmodus aktivieren. Wegen der Sicherheit, wissenschon.
  • Auch wichtig ist, dass man WhatsApp den Zugriff auf die Kontakte untersagt, auch wenn dies eigentlich gewünscht ist. Wegen, äh, *papierraschel* Legacy Timing Overflow Error.
  • Aber im richtigen Moment muss man den Flugmodus dann wieder deaktivieren (und in den Schiffmodus schalten, vermutlich).
  • Das Blutopfer an Kali nicht vergessen!
... dann besteht eine entfernte Chance, dass WhatsApp das Backup wiederherstellt.

Keine Gnade für die, die es freiwillig verwenden, und auch kein Mitleid für solche, die es mitmachen, "weil es ja sonst auch jeder benutzt".

Aber für die Liebe bringt man so manche Opfer...

Update: Edunite

Ascaion stellt zum Ende des Schuljahres 2022/23 den Betrieb von Edunite (siehe auch) ein, das zuletzt (glücklicherweise) nur noch als Kommunikationsplattform genutzt wurde.

Leider ist das Kommunikationstool im Schulportal Hessen (auch bekannt als LANiS) vollkommen ungeeignet zur Kommunikation und so beginnt nun die Suche nach einem sinnvollen benutzerfreundlichen brauchbaren Ersatz.

Mal sehen.

YouTube muss sterben

YouTube (kein Link notwendig) bedarf keiner Vorstellung. Es bedarf möglichst schneller und vollständiger Vernichtung.

Ein Besuch auf youtube.com mit frisch zurückgesetztem Browser ruft bei mir inzwischen ähnliche Gefühle hervor wie ein Blick auf die Schlagzeile der BILD oder in eine Notaufnahme an Silvester. YouTube ist das Privatfernsehen, vor dem uns unsere Eltern immer gewarnt haben. Es begann als Petrischale für alle Internetnutzer, die ihren Mitmenschen etwas mitzuteilen hatten, aber in Petrischalen gedeihen die schleimigsten, giftigsten, die anspruchslosesten Lebensformen, und aus dieser Petrischale ist inzwischen eine gewaltige Biofabrik geworden, die niedrigsten Niederungen unseres Bedürfnisses nach Zerstreuung massenweise produziert.

Nicht genug damit, dass YouTube schlechte Inhalte begünstigt; die lächerlich willkürlichen Bewertungsrichtlinien, auf deren Grundlage YouTube entscheidet, ob und welche Werbeeinnahmen den Besitzern der Videos zukommen, sorgen dafür, dass sich gute Inhalte stets schwertun, überhaupt erreichbar zu bleiben. Des Weiteren zwingt diese Unsicherheit die YouTuber dazu, sich zunehmend selbst zu zensieren, sodass Videos, in denen die Wörter "sex", "gun", "rape" etc. nicht mehr ausgesprochen werden dürfen, immer weiter zunehmen. YouTube nimmt somit die verklemmte Prüderie der US-Amerikaner und verteilt sie, ob seiner Marktmacht, über die gesamte Welt.

YouTube ist nicht zu retten. Brennt alles nieder und fangt von vorne an.

Rant: Edunite

Edunite ist ein schreckliches System.

Die meisten meiner Kollegen, die damit arbeiten müssen, teilen diese Einschätzung. Als "Schuladministrator", der auf unserer Edunite-Plattform noch zusätzliche Befugnisse und Aufgaben hat, muss ich ihnen aber unterstellen, dass sie viele der Kritikpunkte von Edunite noch gar nicht kennen. Tatsächlich fällt mir spontan nur ein einziger Vorteil ein: Nachrichten, die man auf Edunite bekommt, leitet Edunite an eine angegebene E-Mail-Adresse (so vorhanden) weiter. Dies ist einer der Punkte, die Edunite dem "Schulportal" voraus hat—und auch der Grund, warum das "Schulportal" als Kommunikationsmittel völlig ungeeignet ist, genauso wie die "dienstlichen E-Mail-Adressen" (@schule.hessen.de), die alle Lehrer in Hessen ab dem nächsten Schuljahr verwenden müssen. Aber hier soll es um Edunite gehen, und daher:

Login If You Can

Anders als praktisch alle anderen Web-Dienste, bei denen die Authentifikation auf Benutzernamen und Passwörter basiert, kann man sein Passwort bei Edunite nicht selbst zurücksetzen:
Edunite behauptet:
Die Behauptung, es läge am Datenschutz, ist natürlich Unsinn; tatsächlich wurde mir gegenüber bei einem Telefonat mit Ascaion behauptet, diese Funktion sei in Entwicklung und man rechne "bis Ende des Jahres" mit einer Umsetzung.
Der in der Meldung erwähnte "Edunite-Administrator [der] Schule" bin ich. Auf der Schulwebsite befindet sich ein Formular, mit dem man ein neues Passwort anfordern kann. Ein nicht unerheblicher Teil unserer Schüler- und Elternschaft kennt den Unterschied zwischen Edunite-Login und E-Mailadresse nicht und scheitert daran, in das Formular eine funktionierende E-Mailadresse einzugeben, an die das neue Passwort geschickt werden soll. Dies ist nicht vollständig die Schuld der Anwender: Edunite-Logins sind aufgebaut wie E-Mail-Adressen, sind aber keine. Schlimmer noch: Die "Domain", die für unsere Schule Bestandteil der Edunite-Logins ist, existiert, hat aber überhaupt nichts mit unserer Schule zu tun. Ich denke, das liegt daran, dass sich alle Schulen, die Edunite verwenden, dieselbe Login-Seite verwenden. Übrigens hindert mich als "Schuladministrator" nichts daran, Zugänge anzulegen, die so aussehen, als ob sie zu einer anderen Schule gehören, denn die "Domain" ist Bestandteil des Logins und damit frei wählbar.
Dies alles halte ich bereits für gefährlich genug—und peinlich für eine "professionelle" Lösung. Aber es wird schlimmer.

DoS mich, ich bin der Frühling

Eins der wichtigsten Designziele einer Plattform für "effizientes Bildungsmanagement" sollte der Schutz von Schülerdaten sein—diese haben es sich nicht ausgesucht, der Plattform beizutreten und wurden von der Schule angemeldet. Dazu kommt, dass die Art der Daten, die auf Edunite verwaltet wird—nämlich Schülerleistungen und -zensuren—streng vertraulich sind. Daher wird der Zugang für Unbefugte streng unterbunden: Bereits nach wenigen fehlgeschlagenen Login-Versuchen wird das entsprechende Konto gesperrt und muss von einem Administrator wieder freigeschaltet werden. Mit anderen Worten: Jeder Dritte, auch jeder völlig unbeteiligte Dritte ohne Bezug zur Schule, kann jedes Edunite-Konto der Schule sperren, und zwar auch die Lehrerkonten. Auch die Konten, mit denen für alle anderen der Zugang wiederhergestellt werden soll. Um ein Konto zu sperren, benötigt man lediglich den "Login" des Kontos, der bei den meisten Schulen aus dem Namen der Schüler/-innen abgeleitet werden kann und bei den Lehrern aus dem Lehrerkürzel. Diese Art von Denial-of-Service-Angriffen (DoS) ist problemlos automatisierbar und von einem kompletten Laien ohne finanziellen oder großen Zeitaufwand durchführbar. Man kann von Glück reden, dass Schüler der Unter- und Mittelstufe im Allgemeinen nicht mit Computern umgehen können.

Ich würde Sie doch nicht anlügen...

Zurück zu den Passwörtern, die ich als Schuladministrator zurücksetzen muss—selbst, wir erinnern uns, können das die Schüler aus Datenschutzgründen nicht: Ich bekomme also E-Mails, in denen der Name des betroffenen Schülers steht, der Name eines Elternteils, die Klasse und im besten Fall auch noch die E-Mail-Adresse, an die das neue Passwort soll. Nichts davon kann jemals verifiziert werden. Es ist jedem Dritten, mindestens aber jedem Klassenkameraden, trivialerweise möglich, für ein Konto das Passwort zurücksetzen und es sich an eine beliebige E-Mail-Adresse schicken zu lassen. So etwas habe ich sonst noch nirgendwo gesehen. Wohlgemerkt: Hierbei handelt es sich um eine Lösung aus der "freien Wirtschaft", wo alles viel besser und schneller geht.

"Dann machen Sie halt nicht so"

Der uralte Witz geht so:
Kommt ein Mann zum Arzt und sagt: "Herr Doktor, mein Arm tut immer total weh, wenn ich so mache." Sagt der Arzt: "Dann machen Sie doch nicht so!"
Der Witz im modernen Bildungsmanagement geht so: Man möchte das Passwort von Max Mustermann zurücksetzen und sucht daher nach "Max". Es stellt sich aber heraus, dass die Schule mehr als 50 "Max"s hat und sie deswegen nicht auf einer Seite angezeigt werden können. Edunite bietet daraufhin an, auf die zweite Ergebnisseite zu wechseln, auf der alle Max ab Nachname "Koc" sind:Edunite-Suchergebnisse: 25 pro Seite, 3 Seiten werden angezeigt
... aber wenn man darauf klickt, macht Edunite dann so:
Fehlermeldung: Hier geht's nicht weiter.
Dieser Fehler ist nicht nur reproduzierbar: Er ist auch nicht nicht-reproduzierbar, das heißt, er tritt jedes Mal auf. Es gibt, und das ist jetzt kein Witz, Schüler, deren Passwörter ich nicht ändern kann, weil ich ihren Eintrag bei Edunite nicht aufrufen kann. Ich kann auch nicht mit ihrem genauen Namen suchen, denn Edunite ist sehr speziell und hört bei Vor- und Nachnamen beim jeweils ersten Leerzeichen auf zu suchen. Als Beispiel: Ein Schüler, der mit Nachnamen "La Traviata" heißt, kann niemals gefunden werden, wenn es mehr als 50 Schüler gibt, die "La" in Vor- oder Nachnamen haben und die alphabetisch vor ihm kommen.
Oh, und Edunite ist so konfiguriert, dass bei solchen Fehlern immer automatisch eine Nachricht an zwei "Systemadministratoren" (von Ascaion) geschickt wird. Sie wissen Bescheid.

E-Mail als letzte Rettung - oder als Fluch

Wie bereits erwähnt halte ich ein Feature von Edunite für unheimlich wichtig: Edunite besitzt ein Nachrichtensystem, das leidlich bedienbar ist (die Klasse 9x kann nicht gefunden werden, wenn sie als Klasse "09x" eingetragen ist; Kurt Schmitt kann nicht gefunden werden, wenn er bei Edunite als "Kurt Egon Schmitt" eingetragen ist). Zum Glück reicht Edunite, so man in seinem Benutzerkonto seine E-Mail-Adresse hinterlegt, aber alle Nachrichten, die man bekommt, an diese E-Mail-Adresse durch. Mehr noch: Man kann auf diese E-Mails sogar antworten und sie werden dann als Edunite-Nachrichten ins System eingepflegt. Das funktioniert größtenteils gut! Nun ja, wenn man per E-Mail Dateien anhängt, trennt Edunite diese klammheimlich ab; andererseits lassen sich manche Dateianhänge auf Edunite gar nicht öffnen, während sie bei den E-Mails korrekt angehängt und abrufbar sind. Dies alles sollte meiner Meinung nach bei einem professionell entwickelten, produktiv eingesetzten System nicht mehr passieren, aber sei's drum—im Vergleich zu den übrigen Punkten, die ich bisher aufgelistet habe, erscheint mir diese Art von Problem als geradezu liebenswürdige Marotte.
Weniger lustig die Art der E-Mail-Gestaltung. Ich weiß nicht, ob bei Ascaion eine grundsätzliche Abneigung gegen das Medium E-Mail herrscht oder ob sie es nicht besser wissen—beides erscheint mir möglich—aber der Absender aller E-Mails von Edunite lautet: "edunite". Nicht etwa "Anna Müller via edunite" oder etwas Ähnliches, das Aufschluss über Absender und Inhalt der Mail verrät. Wozu den Überblick bewahren? Das Genie beherrscht das Chaos.
Apropos Chaos: Edunite erlaubt den Versand von Nachrichten an (automatisch generierte?) Verteilerlisten à la "alle Deutschlehrer" oder "Alle Lehrer der 5y". Wer zählt als Lehrer der 5y? Praktisch jeder, der mal einen Fuß in den Klassenraum gehalten hat: Jahrgangsübergreifende AGs, Wahlunterricht, Religions-, Musik-, Kunstunterricht in Kursen? Willkommen im Verteiler. Grob geschätzt 80% der Nachrichten, die mich über Edunite erreichen, haben weder Bezug noch Handlungsbedarf, was mich angeht—eine enorme Verschwendung meiner Zeit und Ressourcen. Andersherum übersehe ich wichtige Nachrichten, die über Edunite kommen, weil sie in einer gigantischen Menge an Rauschen untergehen.

Menüs: Die Nutzer-Grenzerfahrung

Ich mache es hier kurz und arbeite mit Bildern.
Die Kids nennen so etwas, glaube ich, "POV" (point of view): Stellen Sie sich vor, ein Kollege hat seinen Deutschkurs abgegeben und er soll nun einem anderen Kollegen zugeordnet werden. Wo müssen Sie klicken?
Auswahl
Gut, das war jetzt vielleicht etwas schwierig. Wie wäre es hier:
Auswahl
Nehmen Sie sich Zeit.

Zugegeben: Dieses Problem haben nur die "Schuladministratoren" und die wurden ja speziell instruiert. Nehmen wir stattdessen ein Problem, vor dem jeder Lehrer des Öfteren steht: Er benötigt eine aktuelle Liste der Schüler in seiner Klasse. Das ist viel einfacher:
Auswahl
Oh, hoppla. Das ist nur für die eigene Klasse, für die man die Klassenleitung hat. Zur Klassenliste der 5z, die im Klassenverband NaWi-Unterricht hat, geht es unter "Kurslisten":
Auswahl
Worauf hätten Sie geklickt - "Kursübersicht"? Da muss ich Sie enttäuschen: Unter "Kursübersicht" können Sie nur "eine Liste aller Kurse Ihrer Schule im gewählten Schuljahr generieren." Logisch. Steht ja auch dran. Wie oft hört man das im Lehrerzimmer: "Ich möchte gerne eine Liste aller Kurse—nur der Kurse, nicht der Schüler—im gewählten Schuljahr generieren." Viel häufiger hört man: "Wie ich Edunite hasse, dieses ************ S*******system! Ich glaube, den Passierschein A38 könnte ich schneller und entspannter kriegen. Vorher kommt aber noch Godot."

Update: Plot Twist!