Ein anonymes Netzwerk?

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Mokki.

    Ein anonymes Netzwerk?

    Also erstmal ein Hallo an alle die das lesen :)

    Dann hoff ich das ich hier richtig bin(war mir ein wenig unschlüssig)

    So wie man im Titel schon sieht, hatte ich eine Idee zu einem Anonymes Netzwerk. Ich weis natürlich nicht ob diese Idee umsetzbar wäre bzw. ob es überhaupt anonyme wäre(nach meinem Wissenstand und wenn alle von mir angesprochenen Probleme Lösungen finden ist es das auch).

    So also zur Idee:

    Dadurch das es etwas schwer zu erklären ist, werde ich das ganze auf 4 Client u. einen Server herunterbrechen.
    Außerdem fang ich erst einfach an und füge dann immer mehr Funktionen hinzu.

    Das ganze basiert auf dem Asymmetrisches Kryptosystem (Wikipedia) bzw. auf RSA (Wikipedia).
    Indem Beispiel können die Client nur Daten senden, wissen aber nicht an wen:
    In den Clientapplikationen ist ein Public-Key des Servers gespeichert.
    Nun hat jeder Client eine Liste von IPs.
    Die Liste enthält die IPs aller Client(ihn eingeschlossen) und den Server.
    Hier mal als Bsp:
    1
    192.168.178.1
    2
    192.168.178.97
    3
    192.168.178.65
    4
    192.168.178.4
    5
    192.168.178.9

    Sagen wir mal, wir wären Client 4 (IP 192.168.178.4) und wir möchten Daten an den Server senden.
    Also verschlüsselt er die Daten und sendet sie an Client 5 (IP 192.168.178.9).
    Dieser empfängt die Daten und sendet sie weiter an Client 1 (IP 192.168.178.1).
    Dieser empfängt die Daten und sendet sie weiter an Client 2 (IP 192.168.178.97).
    Das geht so weiter bis die Daten wieder bei Client 4 sind und er diese löscht.
    Den ganzen Prozess machen auch alle anderen Clients. Sobald sie eine Nachricht empfangen leiten sie dies weiter bzw. hängen ihre eigene Nachricht an und senden das Ganze dann weiter.

    Nehmen wir an, die dritte IP (192.168.178.65) ist der Server.
    Er empfängt jetzt von Client 2 (IP 192.168.178.97) die Nachricht von Client 4 (IP 192.168.178.4).
    Er schick die Nachrichten weiter an Client 4 (IP 192.168.178.4) und entschlüsselt gleichzeitig mit seinem Privat-Key die Nachrichten.

    Also hat der Server die Nachricht bekommen und keiner der Clients weis welche IP dem Server gehört.


    Probleme(lösbar):
    - Wenn ein Client nicht erreichbar ist kommt die Nachricht nie an. Lösung: Ping(oder so was ähnliches) an den nächsten Client. Ist dieser nicht erreichbar wird der nächste in der Liste gewählt.

    Probleme(nicht lösbar):
    - Der Server kann keine Nachrichten an die Clients senden.
    - Es können keine neune Clients hinzukommen.

    So um nun die Probleme zu lösen die mit der oberen Methode nicht lösbar waren müssen wir das ganze Konzept noch etwas verändern:
    Die Clients brauchen eine Anlaufstelle, die sie dann auf die Liste hinzufügt.
    Irgendwie müssen die Server zurückschreiben können.
    Also nochmal ein Bsp.:
    Client 1
    192.168.178.1
    Client 2
    192.168.178.97
    Client 3
    192.168.178.65
    Client 4
    192.168.178.4
    Hauptserver
    192.168.178.9

    Der Hauptserver ist die Anlaufstelle für die Client um ihrer Ip in die Liste eintragen zu lassen.
    Und los geht's:
    Alle Client senden ein Login an den Hauptserver.
    Dieser trägt alle IPs in eine Liste ein.
    Dann sendet der Server die Liste zurück an alle Clients.
    Diese fangen nun an sich zu verbinden.
    Jeder Client schaut also auf der Liste wo er sich befindet und baut eine Verbindung zum Client über ihm auf.
    Der letzte Client verbindet sich hierbei mit dem Server und der Server mit dem ersten Client.

    Jetzt brauchen wir eine Public-Key von dem unserer Server einen Private-Key besitzt. Ich denke der beste Weg wäre wenn die Clientanwendung gleich eine bei sich hat.
    Also kann jetzt der Server anfangen: Er sendet einen Public-Key und einen Name bzw. eine Beschreibung verschlüsselt mit seinem eigenen Public-Key an Client 1.
    Dieser hängt an die Nachricht seinen eigenen Public-Key und einen Namen bzw. eine Beschreibung verschlüsselt an(wieder mit dem Publickey der in der Anwendung integriert ist).
    Dies tut auch Client 2,3 und 4.
    Dann landet die Nachricht wieder beim Server. Dieser lässt sie nochmal reihum wandern (Warum? Kommt gleich ^^ ).
    Er entschlüsselt die Nachrichten und macht wieder eine neue Liste mit Publickeys | Namen.
    Diese verschlüsset er dann nacheinander mit den Publickeys in der Liste und schickt sie zusammen als Nachrichtenbündel an Client 1.
    Dieser kann nur die Nachricht im Bündel entschlüsseln, die mit seinem Public-Key verschlüsselt wurde.
    Er sendet die Nachricht an Client 2, dieser entschlüsselt sie auch und sendet sie weiter an Client 3.
    Usw.
    Wenn die Nachricht wieder beim Server ankommt lässt er sie passieren. Beim zweiten Mal löscht er sie dann.

    Wenn Client1 die Nachtlicht entschlüsselt hat, kann sich der Benutzer von Client 1 die Liste anschauen.
    Wenn er mit einer Beschreibung (einem Client) Verbindung aufnehmen mag, wählt er ihn aus der Liste.
    Der Client schickt dann einen verschlüsselten (mit dem Public-key aus der Liste) Public-Key und seine Nachricht an den nächsten Client. Usw.
    Ist die Nachricht beim Client angekommen sendet er seine Antwort mit dem Public-Key(aus der Nachricht) verschlüsselt zurück an den Client.

    Weshalb löscht jetzt der Server die Nachricht erst beim zweiten Mal? Wenn Client 2 Client 1 eine Nachricht schicken will, geht diese erst über den Server. Würde der diese löschen käme sie nie an....

    Problemen bzw. Fragen:
    (lösbar)
    - Warum löscht der Client nicht die Nachricht die er empfangen hat? Jeder der den Verkehr überwacht könnte so herausfinden mit wem wer kommuniziert.
    - Die letzte Nachricht ist immer die Nachricht des Clients davor. Hierbei könnte man irgendwo zufällig (natürlich nicht in eine Nachricht) seine Nachricht einfügen.
    - Clients senden absichtlich falsche Daten oder droppen Nachrichten. Indem Fall kann ersten der Server checken: kam eine Nachricht an muss sie auch beim zweiten Mal ankommen. Außerdem könnten alle Clients in bestimmten Abständen zufällig vom Server ausgewählt die Nachrichtenlänge weitergeben.
    - Clients sind down (wurde vorhin schon besprochen)
    - Über Brute Force Angriffe lässt sich natürlich herausfinden wer was macht. Client 10 added sich zur Liste. Der neue Eintrag gehört zu Client 10. So etwas lässt sich verhindern indem man viele Clients zur Liste hinzufügt und die Verbindung nach kurzer Zeit 10 min abgebrochen wird.

    (nicht lösbar)
    - Enormer Geschwindigkeitsverlust...
    - Wenn sich der Client vor und hinter einem "Opfer" verbinden kann man erkennen was das "Opfer" für Nachrichten sendet. Weis man dann auch noch den Privat-Key des Servers kann man herausfinden zu welcher Ip welche Beschreibung passt. erschwert durch zufälliges Zusammenwürfeln der IP-Liste, aber nicht beseitigt

    Also meine Frage an euch: Was haltet ihr davon bzw. ist sowas möglich oder hab ich was vergessen :?: (Bin dankbar für jede Kritik :thumbsup: )

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ich hab deinen Text mal quer gelesen und dein Design klingt sehr nach Onion Routing (Tor ist da sehr bekannt, ansonsten gibts noch I2P, Freenet, JAP und einiges mehr). Zu Tor findet man auch viele Papers die sich mit der Architektur befassen, seien es reine Erklärungen oder verschiedene Arten von Angriffen darauf.
    Nein nicht wirklich. Da ich keine "Zwiebelverschlüsslung" verwende. Und die Message wird immer gleich herumgesendet, nicht auf verschieden Pfaden.
    Hast du ev. Links zu

    gs93 schrieb:

    Angriffen

    /Angriffsmöglichkeiten
    auf TOR. Würde mich mal interessieren wo die Schwachstellen liegen. Kann des dann ev. auf meine Idee übertragen...

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Die einzig offene bekannte Schwachstelle ist meines Wissens das Problem mit der Traffic Analyse. Für die gefixten einfach Google nutzen, besonders zum letzten Angriff gabs einiges an Berichten.
    Wenn ich das richtig verstanden habe möchtest du einen Ring bauen und dadurch die Traffic Analyse erschweren. Das Hauptproblem dass ich bei deinem Protokoll sehe ist die Skalierung, das funktioniert nur bei wenigen Clients oder mit recht hohem Delay. Das Senden ist da auch tlw problematisch: Wenn Client 1 ein Packet los schickt und in diesem nur/hauptsächlich Daten für Client 2 sind ist es klar wer der Empfänger ist, weshalb der Sender gleichzeitig auch unnütze Daten an Andere versenden muss und das steigert den Traffic dann ziemlich.
    Im Übrigen würde ich den Server so wenig wie möglich erledigen lassen, sonst baut man sich einen Single Point of Failure (und damit gerne auch Angreifbarkeit und es verschlechtert die Skalierbarkeit).
    Bei Tor und ähnlichen Diensten ist das wahrgenommene Delay schon schwer fürs normale Surfen tolerierbar und bei dir wächst es umso mehr je größer das Netz wird. Zudem: Wenn der Client sicher gehen will dass seine Nachricht angekommen ist muss er warten bis er eine Bestätigung des Empfängers bekommt (Drei Armeen Problem) bevor er sich beenden kann (mit zwei Clients kann ein Angreifer die Reihenfolge ignorieren, immer direkt zwischen seinen Clients routen und damit beliebig viele andere Clients überspringen). Was für Protokolle möchtest du überhaupt anonymisieren? Oder was für eine Zielgruppe hast du?

    Auch wenn du die Daten nicht entschlüsseln kannst, so kannst du ja sehen für wen sie bestimmt sind. Oder soll jeder einfach versuchen die Daten zu entschlüsseln (das führt dann bei vielen Nachrichten zu viel CPU Overhead)?
    Also erstmal danke für die tolle Kritik(kann dir ja OT keine Hilfreich-Bwertung geben).

    gs93 schrieb:

    Was für Protokolle möchtest du überhaupt anonymisieren? Oder was für eine Zielgruppe hast du?


    Es war einfach eine Idee, die auf ner langen Zugfahrt entstanden ist...

    gs93 schrieb:

    Oder soll jeder einfach versuchen die Daten zu entschlüsseln

    Ja eig. schon... Oder wie würdest du das am besten lösen?
    Sehe eig. keine andere Möglichkeit. Würde man z.b. sagen das man das ganze so macht, dass wenn Teile der Nachricht (z.b. ein 5 Char String immer der selbe ist) kann der Client immer nur diese 5 Chars versuchen zu entschlüsseln. Klappt dies ist es seine Nachricht. Das Problem dabei ist, das ein Client mit allen Open-Rsakeys diese 5 Chars verschlüsseln kann und somit weis welche Nachricht an wen geht.

    gs93 schrieb:

    mit zwei Clients kann ein Angreifer die Reihenfolge ignorieren, immer direkt zwischen seinen Clients routen und damit beliebig viele andere Clients überspringen


    Sry, aber was meinst du damit?

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mokki“ ()