Fragen? Antworten! Siehe auch: Alternativlos
Bittorrent funktioniert so, dass du vorher weißt, welche Datei du kriegst. In der torrent-Datei oder dem Magnet-Link steht der Hash der Daten drin. Du weißt, ob du die richtigen Daten gekriegt hast, weil der Hash sonst nicht stimmt. Bittorrent hat da einen schlauen Kniff namens Merkle Tree am Start, um auch schon einzelne falsche Fragmente erkennen zu können und nicht erst am Ende merkt, dass der Download für die Tonne war. Und selbst damit sind die Probleme noch nicht gelöst.
Wenn dich jemand ärgern will, announced er einfach öffentlich, er habe Segment 23, und schickt dir dann halt kaputte Daten. Wenn das genügend viele Leute machen, dann denkt der Bittorrent-Client immer, da war halt das Netz gerade kaputt, und versucht es beim selben Sender nochmal. Und natürlich kommt es auch vor, dass für einige Segmente gar keiner online ist, der die hat. Dann hängt euer Torrent halt ewig.
So und jetzt kommt bei den Covid-Daten dazu, dass die dynamisch sind. Da fallen ständig welche weg und an anderer Stelle kommen neue dazu. Woher weißt du als Client, dass die Daten OK sind, die du gerade kriegst? Da müsste man dann irgendwas mit Krypto-Signaturen machen, und der Client müsste die Signaturen prüfen können, d.h. die müssten dann von "der Behörde" signiert sein, damit es nur einen Signierer gibt und man den Public Key von dem halt in die App packen kann. Wenn man das so macht, hat man ein sogenanntes Revocation-Problem, falls der Key abhanden kommt.
Aber nehmen wir mal an, das sei alles gelöst.
Dein Telefon müsste jetzt die ganze Zeit online sein, um seine Fragmente anzubieten. Nehmen wir mal an, man nimmt Bittorrent-Tech wie eine distributed hash table, um das zuständige Gerät zu einem Fragment findbar zu machen.
Das ist schon im Bittorrent für die Raubkopierer Scheiße, weil es heißt, dass ein Abmahnanwalt die IP finden kann. Wenn jeder nur seine eigenen Fragmente hostet, dann ist das noch schlimmer. Dann findet man nicht nur raus, wer teilnimmt, sondern man findet die aktuelle IP zu einem gegebenen Fragment, und weil die jetzt gerade online sein muss, damit ich da Tokendaten abholen kann, kann ich auch eine Geolokalisierung machen und sehen wo das Gerät gerade grob ist. Das sind alles Daten, die man nicht rausrücken will.
Ich will jetzt nicht behaupten, dass da gar nichts geht, aber das ist bei weitem nicht so ein Selbstläufer, wie der eine oder andere anzunehmen scheint.
Übrigens, am Rande. Wenn ihr euch mal die DP-3T-Dokumente anguckt, dann werdet ihr sehen, dass das recht nahe an dem Konzept war, das ich hier als Idee eines Kumpels präsentiert habe. Das lag jetzt nicht daran, dass mein Kumpel sich deren Proposal angeguckt hat, sondern dass das halt das "naheliegende" Verfahren ist. Also für Leute, die hauptberuflich Krypto-Protokolle machen.
Ich sagte ja schon in meinem initialen Beitrag zu Corona-Apps, dass DP-3T aussieht, als hätten da Leute dran gearbeitet, denen Datenschutz wichtig ist. Aber wie dort auch gesagt: Da gibt es noch genügend andere Dinge, die man in so einer App verkacken kann.
Ich weiß nicht, ob ihr mal Bergwandern gemacht habt. Da wandert man stundenlang über mehr oder wenige einsame Bergwege, und man macht sich die ganze Zeit vor, man sei so gut wie da. Nur noch um die Ecke da, dann muss da die Hütte sein, zu der wir wollten. Bergwandern kann man nur machen, wenn man sich entweder selbst bescheißen kann, dass man gleich da ist, oder einen Weg gefunden hat, die früher oder später einsetzenden Schmerzen zu ignorieren. Beim Programmieren ist das leider genau so. Wenn daher jemand kommt und sagt, er hackt mal eben ne App, dann könnt ihr euch sicher sein, dass der zur ersten Gruppe gehört. Der redet sich gerade selbst ein, er sei so gut wie da. Weil er genau weiß, dass er sonst auf halbem Weg scheitern wird und aufgeben muss. Glaubt so jemandem kein Wort.
Die "ich spür keinen Schmerz"-Methode ist auch sehr verbreitet in der IT. Das sind die Leute, die sich zwölf Dutzend Libraries und Frameworks und Datenbanken und andere Abhängigkeiten in ihre Projekt reinholen und dann "schnell fertig" sind. Nur dass die Schmerzen für die ganzen beweglichen Teile halt auf den Endanwender abgewälzt werden, und auf den, der den Scheiß dann warten soll.
Eine ordentliche App braucht ihre Zeit. Sowohl im Design der Protokolle als auch in der Umsetzung, dem Testing, und so weiter. Ich weiß: Ihr wisst das alle. Ich wollte es nur mal wieder angesagt haben. Weil auch IT-Anwender sich gerne Dinge einreden, die nicht der Realität entsprechen.