Anonyme Token
Was sind anonyme Token?
Wenn Sie einen MetaGer-Schlüssel verwenden, erhalten Sie ein zufällig generiertes Passwort, das Ihr Browser bei jeder Suchanfrage an uns sendet, damit wir eine werbefreie Suche ermöglichen können. Wenn Sie unsere Android-App oder unsere Web-Erweiterung für Chrome und Firefox verwenden, sendet Ihr Browser statt des Passworts bei jeder Suchanfrage zur Authentifizierung ein zufällig generiertes Passwort (anonymes Token) an uns, das lokal generiert wird. Damit ist sichergestellt, dass jedes Passwort einzigartig ist und weder mit dem eigentlichen MetaGer-Schlüssel noch zwischen den einzelnen Passwörtern eine Verbindung besteht.
Welches Problem sollen anonyme Token lösen?
Wenn Ihr Browser uns mit jeder Suchanfrage das immer gleiche Passwort zusendet, hätten wir zumindest theoretisch die Möglichkeit, eine Korrelation zwischen allen mit dem gleichen Schlüssel durchgeführten Suchen herzustellen. Auch wenn wir das natürlich nicht tun, wäre so dennoch Vertrauen notwendig, um sich seiner anonymen Suche sicher zu sein. Damit wir die anonyme Suche nicht nur versprechen müssen, sondern auch beweisen können, haben wir die anonymen Token eingeführt.
Wie funktioniert das?
Wir möchten also Einmalpasswörter direkt von Ihrem Endgerät generieren lassen, die Sie uns dann bei Ihren Suchen zur Authentifizierung zusenden. Allerdings müssen wir für jedes anonyme Token auf Ihrem Endgerät sicherstellen, dass dafür ein reguläres Token von Ihrem MetaGer Schlüssel abgezogen wurde, ohne (und das ist der Knackpunkt), dass wir erfahren, welcher MetaGer Schlüssel zur Generierung des anonymen Token verwendet wurde.
Traditionell würde man dazu eine Form der kryptographischen Signatur verwenden. In diesem Fall würden wir den generierten anonymen Token signieren. Wenn Sie uns dann zu einem späteren Zeitpunkt den anonymen Token zusammen mit der Signatur zusenden, können wir sicher sein, dass der anonyme Token gültig ist. Um jedoch die Signatur zu erhalten, hätten Sie uns den anonymen Token zusammen mit Ihrem echten Schlüssel geschickt, was die Anonymität zunichte machen würde.
Daher verwenden wir stattdessen eine modifizierte Form der kryptographischen Signatur, die sogenannte blinde Signatur. Um eine Analogie zum wirklichen Leben zu schaffen, ist es so, als würden Sie uns Ihren anonymen Token in einem Briefumschlag aus Kohlepapier schicken. In diesem Beispiel könnten wir den Briefumschlag nicht öffnen, aber wir könnten von außen unterschreiben, so dass unsere Unterschrift auf den anonymen Token im Inneren übertragen wird. Wenn Sie den Umschlag zurückbekommen, könnten Sie ihn entfernen und uns später das Passwort und die Unterschrift zurückschicken. Wir könnten dann bestätigen, dass es tatsächlich unsere Unterschrift ist.
Tatsächlich hinkt diese Analogie ein wenig, denn im tatsächlichen Verfahren haben wir in dem Moment in dem Sie uns den anonymen Token und die Unterschrift schicken, nicht nur den anonymen Token noch nie zuvor gesehen, sondern auch die Unterschrift selbst noch nie. Und trotzdem können wir verifizieren, dass die Signatur von uns erzeugt wurde.
Was bedeutet das für Ihre authentifizierten Suchanfragen?
Durch die Verwendung des beschriebenen Algorithmus können wir und Sie gleichermaßen sicherstellen, dass für Ihre authentifizierten Suchanfragen von Ihnen jedes Mal ein neues zufälliges Passwort verwendet wird, das in keinem Zusammenhang mit Ihrem MetaGer Schlüssel steht.
Das Besondere an diesem Algorithmus ist dabei, dass alle Komponenten, die die Anonymität gewährleisten, lokal auf Ihrem Gerät ausgeführt werden. Dieser ausgeführte Quellcode kann jederzeit von jedem eingesehen und verifiziert werden.
Und das Beste: Um anonyme Token zu verwenden, müssen Sie nichts weiter konfigurieren. Die einfache Installation/Nutzung unserer Browser-Erweiterung/Android-App reicht vollkommen aus, damit Ihr Endgerät bei allen Suchanfragen anonyme Token verwendet.
Der Algorithmus dahinter:
Bei einer klassischen RSA Signatur würden wir den anonymen Token m
, den geheimen Exponenten d
und den öffentlichen Modulus N
unseres privaten Schlüssels nehmen und die Signatur mittels m^d (mod N)
erstellen. Wir wollen aber, dass m
geheim bleibt.
Deshalb erstellt Ihr Endgerät eine zufällige Zahl r
mit Hilfe eines Zufallszahlengenerators, die teilerfremd zu N
ist. Der größte gemeinsame Teiler von r
und N
muss also 1
sein.
Weil r
eine Zufallszahl ist, folgt daraus, dass m'
keinerlei Informationen über den lokal gespeicherten anonymen Token m
preisgibt.
Unser Server erhält nun von Ihrem Endgerät den verschleierten anonymen Token m'
zusammen mit dem zu verwendenden MetaGer Schlüssel. Wir ziehen einen Token von dem Schlüssel ab und senden die ebenfalls verschleierte Signatur s'≡ (m')^d (mod N)
an Ihr Endgerät zurück.
Ihr Endgerät kann nun die tatsächlich gültige RSA Signatur s
für den unverschleierten anonymen Token berechnen: s≡ s' r^-1 (mod N)
. Das funktioniert, weil für RSA Schlüssel gilt: r^(e*d)≡ r (mod N)
. Und deshalb auch: s ≡ s' * r^-1 ≡ (m')^d*r^-1 ≡ m^d*r^(e*d)*r^-1 ≡ m^d*r*r^-1 ≡ m^d (mod N)
Ihr Endgerät sendet uns nun bei einer Suche den unverschleierten anonymen Token zusammen mit der zugehörigen Signatur zur Authorisierung zu. Der Schlüssel selbst wird bei der Suche nicht mehr an uns gesendet.