Monitoreo de contraseñas
El monitoreo de contraseñas es una función que verifica si las contraseñas del usuario almacenadas en el llavero de autorrelleno de contraseñas coinciden con una lista de contraseñas que se sabe que han sido expuestas en filtraciones de varias fuentes en línea. Si la función está activada, el protocolo de monitoreo verifica continuamente si hay coincidencias entre las contraseñas del llavero de autorrelleno de contraseñas y la lista revisada.
Cómo funciona el monitoreo
El dispositivo del usuario realiza continuamente comprobaciones en las contraseñas del usuario, realizando consultas en un intervalo que es independiente de las contraseñas del usuario o de los patrones de uso de su administrador de contraseñas. Esto ayuda a garantizar que los estados de verificación se mantengan actualizados con la lista actual de contraseñas filtradas. Para ayudar a evitar la filtración de información relacionada con el número de contraseñas únicas del usuario, las solicitudes se agrupan y se ejecutan de forma paralela. Con cada comprobación, se verifica en paralelo un número fijo de contraseñas y, si el número tiene menos contraseñas que esta cantidad, se generan contraseñas aleatorias y se añaden a las consultas para compensar la diferencia.
Coincidencia de contraseñas
Las coincidencias de contraseñas se realizan en un proceso que consta de dos partes. Las contraseñas más comúnmente filtradas se encuentran dentro de una lista local en el dispositivo del usuario. Si una de las contraseñas del usuario coincide con una de la lista, se notifica de inmediato al usuario sin interacción externa alguna. Esto está diseñado para garantizar que no se filtre información sobre las contraseñas que tiene un usuario y que tienen mayor riesgo de ser transgredidas.
Si la contraseña no está en la lista de las más frecuentes, entonces se verifica en la lista de contraseñas menos filtradas.
Comparación de las contraseñas del usuario con la lista revisada
Para verificar si una contraseña coincide o no con alguna de las que están en la lista local, es necesario establecer una interacción con los servidores de Apple. Para ayudar a garantizar que no se envíen a Apple contraseñas legítimas de los usuarios, se implementa un tipo de intersección de conjunto criptográfico privado, el cual compara las contraseñas del usuario respecto a un conjunto extenso de contraseñas filtradas. Esto está diseñado para garantizar que se comparta menos información con Apple sobre las contraseñas que tienen menos riesgo de filtrarse. Para la contraseña de un usuario, esta información está limitada a un prefijo de 15 bits de un hash criptográfico. Eliminar de este proceso interactivo las contraseñas filtradas con mayor frecuencia (utilizando la lista local de contraseñas filtradas comúnmente) reduce el delta en la frecuencia relativa de contraseñas en los depósitos de servicios web, lo que hace que no sea práctico inferir las contraseñas de los usuarios a partir de estas consultas.
El protocolo subyacente divide la lista revisada de contraseñas, que contiene aproximadamente 1,500 millones de contraseñas al momento de esta publicación, en 215 buckets diferentes. El bucket al que pertenece una contraseña se basa en los primeros 15 bits del valor hash SHA256 de la contraseña. Además, cada contraseña filtrada, pw, se asocia con un punto curvo elíptico en la curva NIST P256: Ppw = ⍺·HSWU(pw), donde ⍺ es una clave aleatoria secreta que sólo Apple conoce, y HSWU es una función aleatoria de Oracle que asigna las contraseñas en los puntos de la curva basada en el método Shallue-van de Woestijne-Ulas. Esta transformación está diseñada para ocultar de forma computacional los valores de las contraseñas y ayuda a evitar revelar contraseñas recientemente filtradas mediante el monitoreo de contraseñas.
Para computar la intersección de conjunto privado, el dispositivo del usuario determina a cuál bucket pertenece la contraseña del usuario mediante λ, el prefijo de 15 bits de SHA256(upw), donde upw es una de las contraseñas del usuario. El dispositivo genera su propia constante aleatoria, β, y envía el punto Pc = β·HSWU(upw) al servidor, junto con una solicitud para el bucket que corresponde a λ. Aquí, β oculta información sobre la contraseña del usuario y limita a λ la información expuesta de la contraseña a Apple. Por último, el servidor toma el punto enviado por el dispositivo del usuario, realiza el cómputo ⍺Pc = ⍺β·HSWU(upw) y lo devuelve junto con el bucket correspondiente de puntos (Bλ={ Ppw | SHA256(pw) comienza con el prefijo λ}) al dispositivo.
La información que se devuelve permite al dispositivo realizar el cómputo B’λ = {β·Ppw | Ppw ∈ Bλ}, y confirma que la contraseña del usuario ha estado en una filtración si ⍺Pc ∈ B'λ.