Supervisión de contraseñas
La supervisión de contraseñas es una función que compara las contraseñas almacenadas en el llavero “Autorrelleno de contraseñas” del usuario con una lista seleccionada y actualizada continuamente de contraseñas de las que se tiene constancia que han aparecido en filtraciones de diferentes organizaciones de internet. Si esta función está activada, el protocolo de supervisión compara continuamente las contraseñas del llavero “Autorrelleno de contraseñas” del usuario con la lista seleccionada.
Funcionamiento de la supervisión
El dispositivo del usuario realiza continuamente comprobaciones por turnos (round robin) de las contraseñas del usuario, realizando consultas a un intervalo que es independiente de las contraseñas del usuario o de los patrones de uso de su gestor de contraseñas. Esto ayuda a garantizar que los estados de verificación permanezcan actualizados con las listas más recientes de contraseñas filtradas. A fin de ayudar a evitar que se filtre información sobre la cantidad de contraseñas únicas que tiene el usuario, las solicitudes se agrupan por lotes y se realizan en paralelo. En cada comprobación se verifica un número fijo de contraseñas en paralelo y, si el usuario tiene menos contraseñas que dicho número, se generarán contraseñas aleatorias y se añadirán a las consultas para compensar la diferencia.
Comparación de las contraseñas
La comparación de contraseñas es un proceso de dos partes. Las contraseñas más filtradas se incluyen en una lista local en el dispositivo del usuario. Si la contraseña del usuario aparece en esta lista, el usuario recibe inmediatamente una notificación sin ninguna interacción externa. Esto está diseñado para garantizar que no se filtre información sobre las contraseñas que tiene un usuario que están más comprometidas debido a una filtración de contraseñas.
Si la contraseña no está incluida en la lista de contraseñas más frecuentes, se comparará con otras contraseñas filtradas con menos frecuencia.
Comparación de contraseñas de los usuarios con una lista seleccionada
Para comprobar si la contraseña que no está presente en la lista local coincide, se requiere cierta interacción con los servidores de Apple. A fin de ayudar a garantizar que no se envíen a Apple contraseñas de usuarios legítimos, se implementa un tipo de intersección de conjunto privado criptográfica que compara las contraseñas de los usuarios con un gran conjunto de contraseñas filtradas. De este modo, para las contraseñas con menor riesgo de filtración, se compartirá muy poca información con Apple. Para la contraseña de un usuario, esta información se limita a un prefijo de 15 bits de un hash criptográfico. La eliminación de las contraseñas filtradas con más frecuencia de este proceso interactivo mediante la lista local de contraseñas más filtradas reduce el delta en la frecuencia relativa de contraseñas en los cubos del servicio web, por lo que inferir contraseñas de usuario a partir de estas búsquedas no resulta práctico.
El protocolo subyacente crea particiones de la lista de contraseñas seleccionadas, que contenía aproximadamente 1500 millones de contraseñas en el momento de redactar este manual, en 215 cubos distintos. El cubo al que pertenece la contraseña se basa en los primeros 15 bits del valor del hash SHA256 de la contraseña. Además, cada contraseña filtrada, pw, se asocia con un punto de curva elíptica en la curva P256 de NIST: Ppw = ⍺·HSWU(pw), donde ⍺ es una clave aleatoria de secreto conocida solo por Apple, y HSWU es una función de Oracle aleatoria que asigna contraseñas a puntos de curva según el método Shallue-van de Woestijne-Ulas. Esta transformación está diseñada para ocultar computacionalmente los valores de contraseñas y contribuye a impedir que se muestren nuevas contraseñas filtradas mediante la función de supervisión de contraseñas.
Para calcular la intersección del conjunto privado, el dispositivo del usuario determina el cubo al que 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 cubo correspondiente 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, calcula ⍺Pc = ⍺β·HSWU(upw), y lo devuelve, junto con el cubo de puntos correspondiente —Bλ={ Ppw | SHA256(pw) comienza con el prefijo λ}— al dispositivo.
La información devuelta permite al dispositivo calcular B’λ={β·Ppw | Ppw∈Bλ} y confirma que la contraseña del usuario se ha filtrado si ⍺Pc ∈B'λ.