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:
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.:
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
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 )
Lg Mokki
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 )
Lg Mokki