El sistema de identidad de Persona usa el cifrado de llave pública para asegurar la confianza y seguridad en el proceso de autenticación.
¿Por qué funciona el sistema descrito en Información general del Proveedor de Identidad?
Cadena de confianza
El navegador del usuario almacena localmente pequeñas piezas de información para cada una de las identidades del usuario: una dirección de correo electrónico, un par de llaves, y un certificado del IdP (Identity Provider) asociado.
El par de llaves del usuario es un par criptográfico DSA o RSA estándar que es generado y guardado localmente en el navegador del usuario. El certificado es firmado por el IdP asociado a la identidad del usuario elegida. Estos certificados están diseñados para no durar mas de 24 horas y pueden ser proporcionados de nuevo cuando caducan, siempre y cuando el usuario tenga una sesión activa con el IdP. Los pares de llaves nunca son compartidos entre computadoras ni entre navegadores.
Como se describe en la descripción general del protocolo, el navegador del usuario es capaz de generar y firmar aserciones de identidad efímeras especifícas del sitio. Cuando se toman juntas estas aserciones con la información en un certificado del usuario, el sitio es capaz de verificar la identidad de ese usuario. La autenticidad de los certificados debe ser verificada obteniendo la llave pública del IdP, la cual es publicada en un documento disponible sobre SSL.
De esa manera, la seguridad de Persona depende de que la llave privada del usuario y la llave privada del dominio se mantengan en secreto y de que la conexión SSL al IdP sea segura. Si se rompe la seguridad en cualquiera de estos puntos, la seguridad de la identidad del usuario puede verse comprometida.
Generando pares de llaves IdP
Para los IdPs (Identity Providers ), el paquete jwcrypto proporciona una herramienta de linea de comandos, generate-keypair
, la cual genera las llaves adecuadas para el uso con Persona. Debido a que las llaves generadas ya están serializadas en JSON, la llave pública es adecuada para su inclusión directa en el campo de llaves públicas del archivo /.well-known/browserid del IdP.
Certificado y formato de aserción
Por favor, consulte la especificación de BrowserID para información más detallada, pero a grandes rasgos, tanto los certificados como las aserciones son cadenas con tres partes: un encabezado, un cuerpo y una firma criptográfica. Cada parte está codificada separadamente en base64url, y concatenada delimitando cada parte con caracteres ".". El cuerpo no está cifrado, es texto plano que puede leerse si lo decodificas en base64url.
Los certificados y las aserciones son empaquetados juntos en una "aserción respaldada" cuando el usuario intenta autenticarse en un sitio. El paquete es creado concatenando un certificado y una aserción, separados por un "~".