Peering

Peering / Blog

Emparejar sin cuenta: cómo decide Peering en quién confiar

La mayoría de las herramientas de escritorio remoto te piden registrarte para que una empresa decida si dos dispositivos van juntos. Peering se salta a la empresa y te lo pregunta a ti, con seis dígitos.

Cada dispositivo es su propia identidad

La primera vez que Peering se ejecuta en un Mac o un iPhone genera un par de claves P-256 y guarda la mitad privada en el Keychain de ese dispositivo. Esa clave es la identidad del dispositivo para siempre. No hay nombre de usuario, ni contraseña, ni ningún servidor que guarde una copia. Cada vez que arranca la app firma un certificado autofirmado nuevo sobre esa clave, y los demás dispositivos fijan la clave y no el certificado.

Esto importa porque un certificado autofirmado no prueba nada por sí solo. Dice «esta clave hizo este certificado», no «este es el Mac de tu salón». Algo tiene que conectar una clave con un dispositivo físico, y ese algo eres tú.

Los seis dígitos

Cuando un teléfono conoce a un Mac por primera vez, ambas pantallas muestran un código de seis dígitos. Tú confirmas que coinciden. Si es así, cada dispositivo guarda la clave del otro. Si no, hay alguien entre los dos y lo rechazas.

El código no es aleatorio y no es una contraseña. Es un hash corto de todo el handshake: los dos ID de dispositivo, claves de un solo uso recientes de cada lado, números aleatorios de un solo uso de cada lado y la clave de identidad del Mac. En concreto, son los primeros cuatro bytes de un SHA-256 sobre esos campos, reducidos a seis dígitos decimales. Si un atacante retransmite la conexión, el Mac y el teléfono ven cada uno una transcripción distinta y, por tanto, un número distinto.

La pantalla Empareja tu primer iPhone de Peering en el Mac, con las tres formas de conectar y un código QR.
El Mac espera un teléfono. El código aparece en ambas pantallas cuando se encuentran.

Por qué comprometerse primero

Un código de seis dígitos tiene solo un millón de valores, así que un atacante ingenioso podría intentar probar claves de un solo uso hasta que ambos lados muestren por casualidad el mismo número. El protocolo cierra esa puerta con un paso de compromiso y revelación:

  1. Cada lado envía primero un hash de su clave de un solo uso y de su número aleatorio.
  2. Solo cuando han llegado los dos hashes, cualquiera de los lados revela los valores reales.
  3. Cada lado comprueba lo revelado contra el hash que recibió antes.

Como un atacante tiene que comprometerse antes de ver nada, no puede ajustar sus valores para que coincidan. Lo que queda es una adivinanza a ciegas, con una probabilidad de una entre un millón de obtener un código coincidente por intento, y un intento fallido se ve como una discrepancia que puedes notar.

El atajo del QR

Si escaneas el código QR del Mac, no hay nada que comparar a ojo. El QR contiene un secreto de 16 bytes que solo podría tener alguien que mire la pantalla del Mac. El teléfono lo usa para calcular una prueba (un HMAC sobre el handshake), y el Mac la acepta como evidencia de que la persona que empareja está físicamente delante del Mac. Sin esa prueba, el Mac pide a su propio usuario que lo apruebe.

Después de emparejar, la confianza es una comparación de claves

Cada conexión posterior es una sesión TLS 1.3 en la que ambos lados presentan su clave. El teléfono toma la clave del Mac del certificado que realmente recibió, nunca de nada que el Mac diga en un mensaje, y la compara con la guardada en tiempo constante. Una clave distinta significa que no hay conexión. Después de la primera vez no se te pide nada.

Si un Mac afirma «ya te conozco» pero tu teléfono no tiene ninguna clave guardada para él, el teléfono lo rechaza. La afirmación no prueba nada, porque un desconocido podría decirla con la misma facilidad.

El recorrido práctico está en la guía de emparejamiento. Para saber qué pasa con la conexión una vez que existe, consulta qué puede ver el relay.

Preguntas

¿Peering necesita una cuenta o una dirección de correo?

No. Cada dispositivo crea su propia clave y la guarda en su propio Keychain. Emparejar es un código de seis dígitos que comparas en ambas pantallas.

¿De qué protege el código de emparejamiento de seis dígitos?

De alguien que se interponga entre tu iPhone y tu Mac. El código se deriva de todo el handshake, así que un intermediario produce códigos distintos en las dos pantallas y puedes ver la discrepancia.