La aplicación NoMorePass está diseñada para almacenar de una manera segura el par usuario/password en el dispositivo móvil y ser capaz de compartir (una versión encriptada del password) con clientes que requieran una credencial al usuario. Esto hace innecesario almacenar los passwords en otros lugares y evita el riesgo de filtraciones o hackeos.
La operación de la app encripta todos los passwords usando una contraseña maestra que se solicita al usuario cada vez que es necesario y/o está almacenada de manera segura y protegida por dispositivos hardware como el reconocedor de huellas dactilares y define un protocolo para intercambiar versiones reencriptadas de los passwords par ser consumidos por los clientes. Esto hace posible “enviar” passwords a los navegadores de una manera segura.
El protocolo requiere de un servidor externo (www.nomorepass.com) que actúa como intermediario para los intercambios y es incapaz de recuperar el password desencriptado incluso si todo el tráfico entre cliente y servidor estuviese comprometido (cosa muy dificil teniendo en cuenta que se usa https).
La extensión Chrome busca dentro de la página que el usuario está visionando los campos de formulario que indiquen la presencia de un formulario con login y password. Si este es el caso, el usuario puede activar el protocolo pulsaldo el botón de la extension. En este momento la extensión pide un ticket al servidor (POST /api/getid) y recibe un ticket y un token (este no se usa). La extensión genera un nuevo token y genera con este token y el ticket un código QR que se muestra al usuario en pantalla. A partir de este momento la extensión llamará al servidor repetidas veces (POST /api/check) enviando el ticket hasta que reciba una respuesta positiva o el ticket expire.
El usuario, usando la app puede escanear el código QR, extraer el ticket y el token creado por la extensión y encriptar el password seleccionado utilizando este token (recuerda, solo la extensión conoce este token), en este momento llama al servidor para comunicar el password encriptado y el nombre de usuario (POST /api/grant), cuando el servidor recibe esta información hace que la siguiente llamada a la función check para este ticket devuelva la información recibida.
Cuando una llamada a la función check recibe una respuesta positiva, incluyendo usuario y password encriptado, la extensión desencripta el password usando el token privado generado y rellena los campos del formulario anteriormente identificado y simula el envío del formulario por el usuario.
El protocolo asume que el token usado para encriptar la clave solo es conocido por la extensión y transmitido a la app usando la camara, lo que hace imposible que sea interceptado y evita la posibilidad de desencriptar el password enviado a los servidores.