P2P

Anonymes P2P

Mir ist da gerade eine etwas anarchistische Idee für Anonymes P2P gekommen.

Probleme von P2P

  • Das Problem von P2P ist, dass es oft verwendet wird, um "illegale" Inhalte zu tauschen. "Illegal" ist hier in Anführungszeichen, da es ein Zitat darstellt. Denn oft sind die Inhalte nicht illegal (wie Kinderpornographie) sondern werden ohne beachtung eines Verbreitungsrechts getauscht. Was wiederum keinen "illegalen Tausch" darstellt (bis heute ist das nicht höchstrichterlich entschieden!), sondern von den Besitzern des Verbreitungsrecht nur als "illegal" moniert wird. (Es gibt in Deutschland zwar das Gesetz, dass etwas nicht getauscht und kopiert werden darf, wenn es aus einer offensichtlich illegalen Quelle stammt, aber ein Screener und eine Kopie einer DVD fallen ganz klar nicht darunter - die Quelle ist eindeutig legal und die Kopie der Quelle somit ebenfalls! Es gibt aber solche illegale Quellen, wie z. B. Kopien die im Kopierwerk zur Verbreitung gezogen werden. Die Frage ist nur, wie erkennt man die?)
  • Ein daraus resultierende Problem ist, dass die Inhaber der Rechte ein valides Interesse haben, die Filesharing-Netze zu überwachen und somit den Teilnehmer unter Druck zu setzen damit das nicht mehr geschieht. Es gibt genug Leute, die (aus mehr als sehr verständlichen Gründen) einen Vergleich vor Gericht vorziehen anstatt sich den Rest des Lebens mit Prozessen zur Hölle zu machen. Deshalb siegen diese Firmen meistens vor Gericht - weil die Angeklagten P2P-teilnehmer eben nicht den jahrzehntelangen Weg durch alle Instanzen gehen (der sie zudem meistens finanziell ruinieren würde). Klasse Sache das: Du bist im Recht, aber bist trotzdem ruiniert, weil Du es Dir finanziell nicht leisten kannst, Dein Recht durchzusetzen.
  • Durch diese Überwachung ist ein anonymes P2P nicht mehr leicht möglich. Somit geraten auch die legalen Dienste in die Übwachungsmühle und die Anonymität wird so stark ausgehebelt, dass man nicht mehr von Anonymität sprechen kann.

Grundlagen der Probleme

Die Grundlage wie man P2P überwacht sind eigentlich immer dieselben:

  • Es gibt Programme, die die Netze abgrasen, und die IPs der Teilnehmer aufzeichnen.
  • Die IPs werden dann angesprochen und man sieht nach, was für Daten auf der Platte sind.
  • Die Daten werden geprüft und das, was hinten aus dem Screening rausfällt wird an die Staatsanwaltschaft weitergegeben, damit diese aus der IP den Teilnehmer ermittelt.
  • Gegen den Teilnehmer wird dann ein Verfahren angestrengt.
  • In normalen Fällen wird die Staatsanwaltschaft das Verfahren einstellen, in krassen Fällen wird sie es weiterverfolgen. Dies sind aber nur die Fälle, in denen gewerbsmäßiges vorsätzliches Handeln (IANAL! Aber so verstehe ich das Strafrecht) vorliegt. Wer also "aus versehen" einen "illegalen" Film tauscht, weil zwischen den 100 legalen halt ein illegaler steckte, der kann in Deutschland nicht strafrechtlich verfolgt werden (Wiederum: Laienmeinung!), wer aber 100 "illegale" Filme verbreitet und darunter findet sich 1 legaler, der ist ein guter Kandidat damit die Staatsanwaltschaft dafür sorgt, dass man ihn wegsperrt (und wahrscheinlich zu Recht, denn da muss schon Unrechtsbewusstsein da sein, d. h. die Handlung ist vorsätzlich).
  • Es gibt noch weitere Verfahren um Teilnehmer zu entdecken, wie z. B. Fingerprinting. Das Problem ist hier nicht, dass die Information evtl. richtig ist, weil man prinzipiell die anonyme Masse aufteilen und mit genügend Forensik eine Durchsuchung anordnen kann, sondern dass es auch falsche Anschuldigungen gibt, und je ausgefeilter die Technik wird desto schwerer wird es, die Unschuld zu beweisen (denn de facto muss man das, wie will man sonst gegen die Indizienlast bitte antreten? Das können nur gut geschulte Mathematiker oder Leute vom Fach, aber garantiert nicht Lieschen Müller von Nebenan die ihren Computer gestern bei Aldi gekauft hat und dachte, sie macht nix falsch).

Ansätze um die Probleme zu beseitigen

In einer ersten Stufe würde es reichen, dem typischen einfachen gradlinigen Ansatz in Tauschbörsen zu vermeiden.

  • Man kann vermeiden, dass Systeme das Netz abgrasen können. Freenet 0.7 basiert auf dieser Idee. Das Problem ist, wenn der Angriff nur stark genug vorgetragen wird (z. B. jeder Netzknoten überwacht werden kann), dann ist diese Idee perdü. Alternativ lässt sich das Netz nicht durchsuchen, was aber ebenfalls keine Lösung darstellt, sondern ein P2P-Netz unbrauchbar macht. Somit kann man das Abgrasen des Netzes nicht verhinden. Man muss also dafür sorgen, dass dadurch keine Information rüberkommt.
  • Man kann vermeiden, dass Systeme in der Lage sind, die IP aufzuzeichnen. MIX-Netze wie TOR und I2P gehen diesen Weg, indem sie die Daten verschieden fließen lassen. Das Problem ist, dass dadurch die IP aber trotzdem im Log auftaucht. Man kann also nicht sagen "Nö, ich habe kein I2P laufen". Man gerät also automatisch in das Netz der Fahnder, alleine durch die pure Anwesenheit. Gut wäre, wenn man die Anwesenheit verschleiern könnte. I2P V3 wird das mit Restricted Routes versuchen, aber wiederum, ein entsprechend mächtiger Angreifer kann das aushebeln.
  • Man kann versuchen zu verhindern, dass jemand die Daten prüfen kann die man auf der Festplatte hat. Die Idee dahinter verfolgen ebenfalls die MIX-Netze und Freenet. Bei Freenet ist die Methode in Ordung, nur bedeutet das, man weiß nicht was man selber auf der Platte hat, ist also auf das Netz angewiesen um die Daten wieder zu beschaffen. Ein No-Go, denn wenn das Netz, wie Freenet 0.5, jetzt ausstirbt, sind die Daten nicht mehr da. Alternativ muss man die Daten auf der Festplatte mit Truecrypt oder ähnlichem halten, damit diese bei einer Hausdurchsuchung nicht gefunden werden. Das ist sehr aufwendig und angesichts der Tatsache, dass es mir ja darum geht, legales P2P zu betreiben, extrem hirnverbrannt. Ähnlich könnte man fordern, dass jeder, der bemüht ist, unbehelligt zu leben, weil er nix illegales tut, eine Selbstschussanlage am Zaun anbringen muss, damit niemand etwas illegales in seinem Garten tun kann. Aber es ist unerträglich, wenn die Festplatten bei einer Hausdurchsuchung untersucht werden. Ich spreche hier nicht vom schuldig-Fall sondern vom Fall dass man unschuldig ist. Alleine wenn ich an meine Porno-Sammlung auf meinen Platten denke (oder die streng vertraulichen Dokumente einiger meiner Kunden), will ich niemals, dass jemand anderes als ich darauf Zugriff hat. Verschlüsselung ist nicht der Weg, sondern der Weg muss sein, dass es niemals passiert, dass ich ungerechtfertigt in irgendein Schussfeld gerate, selbst wenn ich mal einen "illegalen Film" ziehe. In der Regel läuft das sogar so bei mir ab: "Download jetzt, gucken erst viel später". D. h. ich ziehe mir etwas, Share es dann (kann man nicht verhindern), aber ansehen werde ich es mir vielleicht überhaupt nie, weil es zwischen anderem Datenmüll vollkommen untergeht. Es wäre also möglich, dass die Anschuldigung zu Recht ergeht, obwohl ich unschuldig bin. Und so etwas wird immer wahrscheinlicher je komplexer die Systeme werden. Fazit: Nicht-Prüfbar-Machen ist ebenfalls keine gute Lösung.
  • Man kann die Ermittlung des Teilnehmers vereiteln oder nicht zulassen, das die Sache verfolgt wird. Beides sind aber Dinge, die der Gesetzgeber beschließen müsste, hier ist der Zug IMHO abgefahren, die Würfel sind gefallen hinsichtlich der leichten Ermittelbarkeit der Internetteilnehmer aus der IP oder sonstigen Zuordenbarkeiten. Das wird in Zukunft immer weiter gelockert, weshalb man hier nichts unternehmen kann.
  • Man kann über clevere Algorithmen dafür sorgen, dass man immer unter die Bagatellgrenze fallen muss sofern etwas passiert. Aber auch das ist nicht anzustreben. Es geht schlicht darum, dass man so unschuldig in die Mühlen der Justiz geraten kann. Und wer nichts illegales tut, dem ist das nicht zuzumuten, da diese Mühlen extrem kräftig malen und die meisten Leute ihr Recht eben nicht durchsetzen werden, dem Frieden willen! Mir ginge das nicht anders. Aber das bedeutet auch, dass man dadurch die Leute zu Selbstzensur, extrem übervorsichtigem Verhalten, unnötiger politischer Korrektheit und somit nichtausübrung ihrer Grundrechte zwingt! Das muss verhindert werden, aber halbseidene Methoden sollten dafür nicht in Betracht kommen.
  • Auch die Gegenmaßnahme gegen Fingerprinting und andere ziemlich ausgefeilten Ansätze, Anonymität zu unterdrücken, sind sehr aufwendig und für ungeübte Personen nicht leicht verwendbar.
Also, was kann man tun. Hier setzt meine Idee an:

  • Man muss verhindern, dass man die IP des Teilnehmers feststellen kann. Und zwar ohne zusätzliche Software und ohne zusätzliche neue Services vorauszusetzen. I2P ist solch ein Service, der prinzipbedingt einfach noch zu kompliziert ist.
  • Man muss sich also einen Service suchen, der eine 2-Wege-Kommunikation ermöglicht, bei dem der Weg aber aus technischen Gründen niemals geradlinig durch das Netz geht.
Hm .. welchen Service haben wir da?

P2P via DNS

Mir fällt nur ein Service ein, der überall verfügbar, gut ausgebaut und generell funktionsfähig ist, der als grundlegend für das Internet angesehen wird und den jeder Rechner spricht. Der die IP des Teilnehmers nicht transportiert aber trotzdem eine Kommunikation ermöglicht:

DNS

  • DNS ist ein hierarchisches rekursiv-iterartives System. Ich frage den Server meines Providers. Dieser fragt dann reihum andere DNS nach der Antwort und liefert schließlich das Resultat aus. Nicht selten wird der Service in mehreren Ebenen abgewickelt, d. h. der Anwender fragt den DNS der Firma, dieser fragt den DNS des ISP, welcher wiederum eine Resolver-Plattorm fragt der die eigentliche iterative Abfrage erledigt. Die IP des Teilnehmers landet so nur beim ISP.
  • Es ist leicht, einen eigenen DNS aufzusetzen. Es gibt gute und stabile Software für diesen Zweck, z. B. DJB-DNS. Diese erledigt das Resolving und kann als Proxy dienen.
  • Ein DNS-Proxy (Resolving Nameserver) kann rein rechtlich nicht beanstandet werden. Er ist ein Service für die Öffentlichkeit und stellt per se keinerlei P2P-Schnittstelle dar. Des Weiteren wird DNS-Traffic in Netzen von ISPs nicht geblockt.
Es gibt aber einige Probleme zu lösen:

  • DNS ist hierarchisch. D. h. es gibt autoritative und nichtautoritative Systeme. DNS braucht also irgendwo einen Zone in der man das P2P ablaufen lassen kann, in die jemand autoritativ Informationen "injecten" kann.
  • Allerdings gibt es eine zentral bindende Zone, die Root-Zone, in der man alles machen kann. Gibt man diese Zone frei, dann wäre ein vollkommen freies Resolving möglich. Leider wird die Root-Zone aber fest konfiguriert, weshalb es derzeit nicht einfach ist, diese dynamisch zu verändern.
  • Die ISPs verwenden außerdem die "standard-Root-Zone". Um deren Server mitzuverwenden wäre also zwingend irgendwo eine Domain notwendig, die das ganze initialisiert. Das Problem dabei ist, die Domain muss jemand bereitstellen. Und diese Domain kann auch leicht geblockt werden.

Ansätze

  • Mein Denkansatz (ich implementiere es nicht) ist also der, dass man eine Initiale Rootzone unterhalb von "Well Known Domains" erschafft, die den ganzen Vorgang initialisieren. Diese transportiert allerdings im Prinzip nur die Root-Nameserver-Einträge, so dass diese Domain nicht von ISPs geblockt wird. Und wenn doch kann man einen Algorithmus bauen, der zufallsmäßig Domains abfragt um so auf eine noch nicht geblockte Domain zu stoßen. Des Weiteren kann man ggf. einen Seed festlegen, der über einen anderen Algorithmus gefunden werden kann, z. B. per Google-Cache, so dass ISPs schon Content-Filtering anbringen müssten um das zu verhindern.
  • Diese "initiale Root-Zone" beschreibt dann die Nameserver der Zone. Das sind "wohlbekannte Teilnehmer" die die Zone für alle bereithalten. Sie bieten dadurch auch einen Proxy-Service an, der dafür sorgt, dass man über die DNS der ISPs an dem Netzwerk anonym teilnehmen kann, ohne selber einen DNS-Endpunkt zu betreiben! Das ist also "reine Teilnahme ohne Upload" für Leute. Die Download-Raten dieses Service werden aber mehr als gering ausfallen, da die ISPs die Teilnahme strikt filtern werden, indem sie die "Anzahl DNS-Requests pro User" stark limitieren. Geht auch nicht anders, denn sonst wirft das eine Bombe auf das etablierte DNS-Netzwerk.
  • Über diese Root-Zone findet man dann andere Teilnehmer. Ab da koppelt sich das System vom etablierten DNS ab und wird eigenständig. Jeder Teilnehmer ist somit Resolver und DNS zugleich und über diesen gesamten Prozess läuft das P2P ab.
Hierbei wird ein erweiterter DNS als Grundlage zur Teilnahme verwendet. Die P2P-Programme verwenden als Schnittstelle herkömmliche DNS-Requests, das Publishing geschieht durch Injecten, also Vorhalten, von DNS-Information.

  • Die Adressierung von Inhalten geschieht supernormal via DNS, nur dass der DNS dann keine IP-Information sondern direkt die Information ausspuckt, die dann nur Browser-Gerecht übersetzt wird. Man kann also für das Surfen einen einfachen HTTP-Proxy in dieses System entwickeln, der dann anonymes Surfen ermöglicht. Hierfür braucht es natürlich irgendwelche Services, die im Internet Daten abrufen. Diese gibt es mit TOR, I2P und AN.ON aber zuhauf, einzig muss jemand einen entsprechenden Proxy betreiben.
  • Das DNS ist ein gigantischer Cache. Die Information wird also auch dann noch vorgehalten, wenn der Service gerade nicht erreichbar ist, vorausgesetzt, jemand auf dem Pfad hat es schon abgerufen. In der vorgestellten Idee aber dürfte das Caching eine geringe Rolle spielen.
  • Der Overhead dieser Methode ist gigantisch. Das Surfen ist anonym in dem Sinne, dass man die IP nicht feststellen kann. Was aber abgerufen wird, das ist nicht anonym, d. h. Klartext. Es kommt keinerlei Verschlüsselung zum Einsatz. Das Netzwerk ist auch nicht gedacht, verhüllt illegale Informationen zu transportieren, sondern die Teilnehmer zu anonymisieren. Nicht mehr und nicht weniger.

Beispielsanwendung

Chat

Eine Ideale Anwendung dieses hier beschriebenen Systems ist eine Chat-Applikation. Das, was man sagt, wird per DNS-Request an den Server geschickt, und die Antwort (die Historie des Kanals) findet sich im DNS mit TEXT-Records.

Der Chat ist nicht ganz instant, da der Client laufend pollen muss, aber die Informationen fließen optimal zu den Clients, da ein hierarchisches Verteilsystem mit TTL zum Einsatz kommt. Der Chat besteht also aus mehreren Einträgen:

  • Eine Subdomain, die verwendet wird, um Text zu posten. Was man sagt steht so im abgerufenen Domainnamen. Der Server nimmt das auf und gibt eine entsprechende Antwort. So ist ein zwei-Wege-Handshake (Login von Usern) möglich.
  • Eine Subdomain, die die Historie des Kanals enthält. Die Historie wird 1h oder so vorgehalten, gelöst wird das per TTL. Ein Request der später für eine ältere Zeile eintrifft wird verworfen und als nicht (mehr) vorhanden eingestuft.
  • Eine Subdomain, die den aktuellen Zeilencounter enthält. Dieser erhöht sich laufend und ist nur wenige Sekunden gültig. Die Idee dahinter ist der Negative-Cache-Timeout den viele Resolver implementieren, da diese mehrere Sekunden (oder Minuten) lang sich merken, dass ein Datum nicht gefunden wurde, und so nicht nochmals ein Resolving vornehmen.

Hinweise

Die Subdomain, die den aktuellen Zeilencounter enthält, enthält einen Timestamp und einen "freetext", der aber standardmäßig "0" heißen sollte. Die Idee dahinter ist, dass einige DNS so blöd sind, und die Caching-Intervalle ausdehnen. Der "count" verhindert aber einen DoS-Angriff auf das System, wenn jemand also laufend diesen Namen kauttabfragt, wird einfach ein anderer gewählt (und vom System vorgeschlagen).

DoS steht hier nicht für DDoS, sondern für "fehlkonfigurierte kaputte clients".

Beispiel für die Domain attochat.com (das Beispiel existiert noch nicht!):

  • c.attochat.com: Subdomains die die Channels vom Chat enthält. Das "c" kann beliebig gewählt werden.
  • help.c.attochat.com: Wäre der Channel "help"
  • 123.help.c.attochat.com: Bytes ab Offset 123 aus dem Chat-Protokoll
  • N.123.help.c.attochat.com: Dito gegen DoS, N ist dabei eine beliebige Zahl
  • c.help.c.attochat.com: Aktueller Count, d. h. letztes Byte aus dem Chat-Protokoll
  • TS.c.help.c.attochat.com: Dito, für Resolver, die die TTL missachten. TS steht dabei für "seconds since the Epoch" nach UTC. Der Server liefert übrigens seinen Timestamp zurück, so dass man sich synchronisieren kann.
  • SEC.TEXT.N.USER.help.c.attochat.com: Postet eine Zeile in den Chat.
TEXT stellt dabei die Repräsentation des escapeten Textes dar, den man postet. Dieser Text kann aus mehreren Zeilen bestehen. USER ist dabei der Benutzername. N ein "free running counter" der bei 0 beginnt und TEXT der geeignet kodierte gesprochene Text und SEC der HEX-Auszug aus der kryptographisch signierten Quersumme des geposteten Textes im Falle von Logins (anderenfalls kann er entfallen, da jeder Text pushen kann).

Der Login-Vorgang beginnt mit N=0. TEXT enthält dabei den ersten Text den man postet, SEC entfällt. Da der Server einen nicht kennt antwortet er mit einem Login-Fehler und sendet ein Session-Cookie zurück. In diesem Fall hängt man einfach den Hash aus Passwort, Cookie, Text, Passwort (ja, Passwort am Anfang und am Ende) als SEC vor den Text.

Ist man ein unregistrierter User muss man sich registrieren. In diesem Fall sendet man als erstes SEC das Passwort (Codiert wie TEXT) und ist anschließend registriert. Das Senden des Passworts kann per PKI verschlüsselt erfolgen wenn Server und Client das unterstützen. In diesem Fall besteht "SEC" aus einer Subdomain, die den verwendeten PKI-Algorithmus enthält.

Private Chat

Privater Chat wird in dem Modell oben unterstützt, indem jeder Benutzer auch einen eigenen "Kanal" hat, dies ist der Username mit einem _ davor. Sofern der Server einen Login unterstützt, muss man die Historie als "SEC.124._USER.c.attochat.com" abrufen, wobei SEC wie beim Posten berechnet wird, allerdings ist TEXT dabei der abgerufene Sub-Domainname, hier also "124._USER".

Und ja, man kann dann unbemerkt lauschen. Warum auch nicht? Geht einfach mal ins Cafe und hört euch an, was die Leute so quatschen. Ach nee, da geht das auch ganz unbemerkt!

-Tino, 2007-01-05