Anonyme tokens

Hvad er anonyme tokens?

Hvis du bruger en qwant.us-nøgle, vil du modtage en tilfældigt genereret adgangskode, som din browser sender til os med hver søgeforespørgsel, så vi kan aktivere annoncefri søgning. Hvis du bruger vores Android-app, eller vores webudvidelse til Chrome og Firefox, sender din browser os i stedet for adgangskoden en tilfældigt genereret adgangskode (anonymt token) med hver søgeanmodning til godkendelse, som genereres lokalt. Dette sikrer, at hver adgangskode er unik og ikke har nogen forbindelse med den faktiske qwant.us-nøgle eller mellem de enkelte adgangskoder.

Hvilket problem er det meningen, at anonyme tokens skal løse?

Hvis din browser altid sender os det samme password ved hver søgning, ville vi i det mindste teoretisk have mulighed for at etablere en sammenhæng mellem alle søgninger, der er udført med den samme nøgle. Selv hvis vi ikke gør det, vil tillid selvfølgelig stadig være nødvendig for at være sikker på din anonyme søgning. For at vi ikke kun skal love den anonyme søgning, men også kan bevise den, har vi introduceret de anonyme tokens.

Hvordan fungerer det?

Så vi vil gerne have engangsadgangskoder genereret direkte fra din slutenhed, som du så sender til os til godkendelse under dine søgninger. Men for hvert anonymt token på din slutenhed skal vi sørge for, at et almindeligt token er blevet trukket fra din qwant.us-nøgle for det, uden (og det er det afgørende) at fortælle os, hvilken qwant.us-nøgle der blev brugt til at generere det anonyme token.

Traditionelt ville vi bruge en eller anden form for kryptografisk signatur til dette formål. I dette tilfælde ville vi underskrive det genererede anonyme token. Når du så sender os det anonyme token sammen med signaturen på et senere tidspunkt, kan vi være sikre på, at det anonyme token er gyldigt. Men for at få signaturen skulle du have sendt os det anonyme token sammen med din rigtige nøgle, hvilket ville ophæve anonymiteten.

Derfor bruger vi i stedet en modificeret form for kryptografisk signatur, den såkaldte blind signature. For at skabe en analogi til det virkelige liv, er det som at sende os dit anonyme token i en kuvert af karbonpapir. I dette eksempel ville vi ikke være i stand til at åbne kuverten, men vi ville være i stand til at underskrive udefra, så vores underskrift ville blive overført til det anonyme token indeni. Når du får konvolutten tilbage, kan du fjerne den og sende os adgangskoden og underskriften tilbage senere. Så kan vi bekræfte, at det rent faktisk er vores underskrift.

Faktisk er denne analogi en smule misvisende, for i den faktiske proces, i det øjeblik du sender os det anonyme token og signaturen, har vi ikke kun aldrig set det anonyme token før, men heller aldrig set selve signaturen. Og alligevel kan vi verificere, at signaturen er genereret af os.

Hvad betyder det for dine autentificerede søgninger?

Ved at bruge den beskrevne algoritme kan både du og vi sikre, at der hver gang bruges en ny tilfældig adgangskode, der ikke er relateret til din qwant.us-nøgle, til dine godkendte søgninger.

Det særlige ved denne algoritme er, at alle komponenter, der sikrer anonymitet, eksekveres lokalt på din enhed. Denne eksekverede kildekode kan ses og verificeres af enhver til enhver tid.

Det bedste af det hele er, at du ikke behøver at konfigurere noget for at bruge anonyme tokens. Det er nok at installere/bruge vores browserudvidelse/Android-app for at få din enhed til at bruge anonyme tokens til alle søgninger.

Algoritmen bag den:

I en klassisk RSA-signatur ville vi tage det anonyme token m, den hemmelige eksponent d, og den offentlige modulus N af vores private nøgle og oprette signaturen ved hjælp af m^d (mod N). Vi ønsker dog, at m skal forblive hemmelig.

Derfor opretter din terminal et tilfældigt tal r ved hjælp af en tilfældig talgenerator, som ikke er divisor-relateret til N. Så den største fælles divisor for r og N må være 1.

Da r er et tilfældigt tal, følger det, at m' ikke afslører nogen information om det lokalt lagrede anonyme token m.

Vores server modtager nu det obfuskerede anonyme token m' fra din slutenhed sammen med den qwant.us-nøgle, der skal bruges. Vi trækker et token fra nøglen og sender den også obfuskerede signatur s'≡ (m')^d (mod N) tilbage til din slutenhed.

Din terminal kan nu beregne den faktiske gyldige RSA-signatur s for det ukrypterede anonyme token: s≡ s' r^-1 (mod N). Det virker, fordi for RSA-nøgler gælder r^(e*d)≡ r (mod N). Og derfor også: s ≡ s' * r^-1 ≡ (m')^d*r^-1 ≡ m^d*r^(e*d)*r^-1 ≡ m^d*r*r^-1 ≡ m^d (mod N).

Din slutenhed sender os nu det ukrypterede anonyme token sammen med den tilknyttede signatur til godkendelse under en søgning. Selve nøglen bliver ikke længere sendt til os under søgningen.

Har du spørgsmål? Vi er glade for at hjælpe!