Escribir «non gardamos o teu contrasinal» nunha páxina web custa exactamente o mesmo que escribir calquera outra cousa: nada. É unha frase, non unha garantía. Escríbea igual quen di a verdade que quen non, e desde o teu lado da pantalla as dúas vense idénticas.
Ese é o problema de fondo de calquera web que che pide un contrasinal para «analizalo». Aínda que o servizo sexa impecable —código limpo, boas intencións, xente honrada—, ti non tes maneira de sabelo. O servidor é unha caixa pechada. Mándaslle o dato máis sensible que tes e confías en que do outro lado pase o que che prometeron que pasa.
E hai un detalle que adoita pasar desapercibido: unha promesa de non gardar tampouco protexe do que non depende de quen promete. Un servidor honesto pode ter rexistros que ninguén revisou, un proxy polo medio, unha copia de seguranza automática, un empregado novo ou, sinxelamente, un mal día. O contrasinal xa saíu da túa máquina. O que ocorra despois está fóra do teu alcance e, moitas veces, do seu.
A única resposta que non esixe crer nada
A solución non é prometer mellor. É non precisar o dato.
Se o teu contrasinal nunca sae do navegador, a pregunta «que fan con el?» deixa de ter sentido. Non hai un «eles». Non hai un servidor que o reciba, nin rexistros onde apareza, nin copia que o conteña, nin empregado que poida lelo. A confianza non se xestiona mellor: elimínase do problema.
Iso é o que fai password.es. O comprobador analiza o que escribes no teu propio navegador, co teu propio procesador. O texto que tecleas non viaxa a ningures porque non hai ningures a onde viaxar.
De onde sae o azar
O xerador ten o mesmo enfoque. Para facer un contrasinal aleatorio fai falta azar, e hai dúas formas de conseguilo: pedirllo a un servidor ou pedirllo ao navegador. Pedirllo a un servidor sería absurdo: o servidor coñecería o contrasinal antes ca ti.
Así que llo pedimos ao navegador, con crypto.getRandomValues(). É a API
estándar da plataforma web para aleatoriedade criptográfica —a que existe
precisamente para isto, fronte a Math.random(), que serve para barallar cartas
nun xogo e non para nada que deba resistir a alguén con interese—. Quen produce o
azar é o propio navegador, na túa máquina. Nós non participamos: o resultado
aparece na túa pantalla e alí queda.
Como comprobalo sen fiarte de min
Todo o anterior segue sendo, polo de agora, un parágrafo escrito pola mesma xente que fixo o sitio. Ou sexa: exactamente aquilo do que che dicía que desconfiases. Así que non me creas. Mírao.
Abre as ferramentas de desenvolvemento do teu navegador —F12, ou
Cmd+Option+I nun Mac—, vai á lapela Rede (Network), déixaa aberta e entra
no comprobador. Verás cargarse a páxina. Agora limpa a lista, fai clic no campo
do contrasinal e escribe.
Isto é o que vas ver, e aquí convén ser exacto en lugar de vendedor:
- Ao facer clic no campo, dispárase unha petición. Non é o teu contrasinal
—aínda non escribiches nada—: é a libraría que fai a análise, un ficheiro
chamado
zxcvbn-es-es.min.jsque trae dentro as listas de palabras, nomes, patróns de teclado e contrasinais coñecidos contra os que se compara. Descárgase de password.es en canto tocas o campo, para que chegue mentres tecleas. Sae do mesmo dominio, é un ficheiro estático e é o mesmo para todo aquel que abra esta páxina —o sitio ten varias versións segundo o idioma, e cada páxina carga a súa—. - A partir de aí, escribas o que escribas, a lista queda quieta. Unha letra, vinte, borra, volve empezar, pega un texto longo. Cero peticións. O contador non se move. O dicionario xa está no teu navegador e a busca ocorre contra a memoria da túa máquina.
Esa distinción é toda a diferenza. Non é que confíes en que a petición non leve o teu contrasinal: é que non hai petición. Non fai falta interpretar nada nin entender o código; abonda con mirar un contador que non sobe.
O inventario completo, coas súas pegas
Xa que o argumento é «compróbao», sería raro agochar o que atoparías ao comprobalo. O inventario honesto de password.es:
Non hai analítica. Nin Google Analytics, nin unha alternativa discreta, nin un píxel. Houbo un e retirouse de todas as páxinas. Non hai cookies. O sitio non escribe ningunha. Si hai unha cousa gardada no teu navegador: se prefires o tema claro ou escuro, no almacenamento local do teu propio equipo. Nunca se envía a ningures e podes borralo desde o mesmo inspector. Non hai rexistro, contas nin formularios: non hai onde deixar un dato aínda que quixeses deixalo.
E a pega, porque haina: a páxina pide dúas tipografías aos servidores de Google ao cargar. Iso significa que Google ve que alguén coa túa IP cargou unha páxina deste dominio, como en tantísimos sitios. Non ve o que escribes —esa petición ocorre antes e non se repite—, pero é unha petición a un terceiro, verala nesa mesma lapela Rede e non tería ningún sentido contarche que abras o inspector e á vez non mencionala. Está na lista de cousas por arranxar.
Por que contamos isto
Poderiamos ter escrito «cero peticións, privacidade total» e quedar tan anchos. Soaría mellor e sería falso nos detalles: hai unha petición de dicionario e hai unhas tipografías. Un argumento que cae cando alguén o comproba non era un argumento: era publicidade.
A versión precisa é menos redonda e aguanta o escrutinio: o que ti escribes non sae do teu navegador, e iso vese en trinta segundos cunha ferramenta que xa tes instalada.
E ollo, porque isto devólveseche como criterio xeral. A próxima vez que unha web che pida o contrasinal para o que sexa, abre esa lapela e mira se aparece unha petición ao premer unha tecla. Se aparece, o teu contrasinal foise. Dá igual o que diga o aviso de privacidade, o bonito que sexa o cadeado do formulario ou o seria que pareza a empresa. E se a web che ensina o contrasinal xa analizado despois dun xiro de roda, xa sabes por onde pasou.
A regra da que menos se fala en seguridade non é sobre contrasinais: é sobre verificación. Fiarse está ben. Comprobalo é mellor, e aquí é de balde.
Fontes: a arquitectura do propio password.es, verificable co inspector de
calquera navegador — o comprobador descarga do propio dominio, ao enfocar o
campo, a libraría de análise coas súas listas (zxcvbn-es-es.min.js) e non
emite ningunha petición mentres se escribe ·
crypto.getRandomValues(), a API estándar da Web Crypto API para aleatoriedade
criptográfica · o código do sitio non contén analítica, píxeles nin cookies; o
único dato almacenado en local é a preferencia de tema · as tipografías sérvense
desde Google Fonts.