Testimonis anònims
Què són els testimonis anònims?
Si feu servir una clau de MetaGer, rebeu una contrasenya generada a l'atzar que el vostre navegador ens envia amb cada consulta perquè puguem activar la cerca sense publicitat. Si feu servir la nostra aplicació per a Android o la nostra extensió web per a Chrome i Firefox, en lloc d'aquesta contrasenya el navegador ens envia amb cada consulta una contrasenya generada a l'atzar (testimoni anònim) per autenticar-se, generada localment. Això garanteix que cada contrasenya sigui única i que no tingui cap relació ni amb la clau real de MetaGer ni entre les diferents contrasenyes.
Quin problema volen resoldre els testimonis anònims?
Si el vostre navegador ens envia sempre la mateixa contrasenya amb cada consulta, com a mínim teòricament tindríem la possibilitat d'establir una correlació entre totes les cerques fetes amb la mateixa clau. Encara que, evidentment, no ho fem, caldria confiança per estar segurs de la vostra cerca anònima. Perquè no només haguem de prometre la cerca anònima, sinó que també la puguem demostrar, hem introduït els testimonis anònims.
Com funciona?
Volem, doncs, que les contrasenyes d'un sol ús es generin directament al vostre dispositiu i que després ens les envieu per autenticar-vos durant les cerques. Tanmateix, per a cada testimoni anònim del vostre dispositiu hem d'assegurar-nos que se n'hagi restat una fitxa normal de la vostra clau de MetaGer, sense (i aquí rau la qüestió) que sapiguem quina clau de MetaGer s'ha fet servir per generar el testimoni anònim.
Tradicionalment faríem servir alguna forma de signatura criptogràfica per a això. En aquest cas, signaríem el testimoni anònim generat. Després, quan ens enviéssiu el testimoni anònim juntament amb la signatura, podríem estar segurs que el testimoni és vàlid. Ara bé, per obtenir la signatura ens hauríeu enviat el testimoni anònim juntament amb la vostra clau real, cosa que anul·laria l'anonimat.
Per això fem servir una forma modificada de signatura criptogràfica, l'anomenada signatura cega. Fent una analogia amb la vida real, és com si ens enviéssiu el vostre testimoni anònim dins un sobre de paper carbó. En aquest exemple no podríem obrir el sobre, però sí que podríem signar-lo per fora, de manera que la nostra signatura es transferiria al testimoni anònim de dins. Quan recuperéssiu el sobre, en podríeu treure el contingut i, més endavant, tornar-nos a enviar la contrasenya i la signatura. Aleshores podríem confirmar que la signatura és realment nostra.
De fet, aquesta analogia és una mica enganyosa, perquè en el procés real, en el moment en què ens envieu el testimoni anònim i la signatura, no només no havíem vist mai abans el testimoni anònim, sinó que tampoc no havíem vist mai la signatura mateixa. I, tot i així, podem verificar que la signatura la vam generar nosaltres.
Què vol dir això per a les vostres cerques autenticades?
Fent servir l'algorisme descrit, tant nosaltres com vosaltres podem garantir que en cada cerca autenticada s'utilitza una contrasenya nova, aleatòria i sense cap relació amb la vostra clau de MetaGer.
El que té d'especial aquest algorisme és que tots els components que garanteixen l'anonimat s'executen localment al vostre dispositiu. Qualsevol pot consultar i verificar aquest codi font en qualsevol moment.
I el millor de tot: no cal que configureu res per fer servir els testimonis anònims. N'hi ha prou d'instal·lar i fer servir la nostra extensió de navegador o l'aplicació per a Android perquè el vostre dispositiu utilitzi testimonis anònims en totes les cerques.
L'algorisme que hi ha al darrere:
En una signatura RSA clàssica, agafaríem el testimoni anònim m, l'exponent secret d i el mòdul públic N de la nostra clau privada i crearíem la signatura amb m^d (mod N). Però nosaltres volem que m continuï sent secret.
Per això, el vostre dispositiu crea un nombre aleatori r amb un generador de nombres aleatoris, coprimer amb N. És a dir, el màxim comú divisor de r i N ha de ser 1.
Com que r és un nombre aleatori, se'n dedueix que m' no revela cap informació sobre el testimoni anònim m desat localment.
El nostre servidor rep ara el testimoni anònim ofuscat m' del vostre dispositiu juntament amb la clau de MetaGer que cal fer servir. Restem una fitxa de la clau i tornem al vostre dispositiu la signatura, també ofuscada, s'≡ (m')^d (mod N).
El vostre dispositiu ja pot calcular la signatura RSA vàlida s per al testimoni anònim sense ofuscar: s≡ s' r^-1 (mod N). Això funciona perquè, per a les claus RSA, r^(e*d)≡ r (mod N). I, per tant, també: s ≡ s' * r^-1 ≡ (m')^d*r^-1 ≡ m^d*r^(e*d)*r^-1 ≡ m^d*r*r^-1 ≡ m^d (mod N).
El vostre dispositiu ens envia ara el testimoni anònim sense ofuscar juntament amb la signatura associada per autoritzar una cerca. Durant la cerca, la clau ja no se'ns envia.