La razón por la que la mayoría de las ideas cripto basadas en la ubicación de 2020 murieron sin hacer ruido es que confiaban en el GPS. El GPS es una señal emitida que cualquier receptor puede escuchar, y a un receptor se le puede decir que mienta sobre lo que oyó. Las herramientas para hacerlo cuestan unos treinta dólares en Amazon, y así desde 2015. Cualquier protocolo que pague a una cartera por estar en unas coordenadas, y verifique esa presencia solo con GPS, pierde dinero con carteras falsas que están en un sofá. No es un ataque difícil ni ingenioso.
Proof of location es la capa que lo soluciona. La expresión se usa más de lo que se define, así que empecemos por una definición. Proof of location es una afirmación, verificable por alguien que no estaba presente, de que un dispositivo concreto estuvo en unas coordenadas concretas dentro de una ventana de tiempo concreta. Es una afirmación sobre la presencia, no sobre las coordenadas. En esa distinción está la mayor parte de la ingeniería.
El modelo de amenaza. No nos defendemos de un Estado; ese caso extremo llega al final. Nos defendemos del atacante medio con un móvil, un portátil y una tarde libre. Ese atacante puede falsificar el GPS con una herramienta comercial, ejecutar la app en un emulador y crear una cartera con una línea de código. Cualquier control aislado puede ser superado por ese atacante. El objetivo de ingeniería es que el coste de superarlos todos a la vez sea mayor que la recompensa del drop.
Este artículo explica lo que Seek hace hoy, en términos sencillos, y lo que está por llegar. Es deliberadamente más breve en el marketing y más extenso en la mecánica.
Capa uno, en la captura: atestación del dispositivo. Cada solicitud de captura incluye una declaración firmada por el sistema operativo. En iOS es Apple App Attest; en Android, Google Play Integrity. Seek verifica ambas en el servidor. La atestación dice tres cosas en una sola firma: este es un dispositivo real, el binario de la app no ha sido manipulado y quien llama tiene una clave creada en este dispositivo para nuestro paquete. Un móvil rooteado no pasa. Un emulador no pasa. Una app reempaquetada que se salta la comprobación de ubicación no pasa. La atestación no demuestra dónde está el móvil; demuestra que el móvil no miente sobre ser un móvil. Eso es lo que hace que merezca la pena leer las demás señales.
Capa dos, en la captura: distancia con margen. La app solo te deja pulsar el botón de captura cuando estás dentro del radio de recogida del spawn. El servidor comprueba por su cuenta las coordenadas que enviaste frente a las del spawn y acepta hasta setenta y cinco metros de separación. La diferencia entre el radio del botón y el del servidor es deliberada. El GPS de un móvil apoyado en una pared puede desviarse unos metros por motivos que no son culpa tuya, y rechazar capturas dentro de esa oscilación resulta arbitrario. Más allá de setenta y cinco metros la solicitud se rechaza sin más, sin puntuación y sin apelación en esa capa.
Capa dos, continuación: límites de frecuencia y topes por spawn. Dos solicitudes de recogida con menos de cinco segundos de diferencia reciben un 429 de un control respaldado por Postgres que se mantiene entre instancias serverless. Un mismo spawn acepta como máximo dos intentos de la misma cuenta, y el segundo vale el 65 por ciento del primero. Estos topes no están para detectar fraude; están para que un bot que ya haya superado las otras capas no pueda explotar el endpoint más rápido de lo que juega una persona.
Capa tres, en la captura: señales del entorno, registradas pero no aplicadas. Cada captura incluye además indicadores: si la solicitud vino de un simulador, si Android informó de que la posición procedía de un proveedor de ubicación simulada y la precisión del GPS indicada en metros. Se registran y nunca se usan para rechazar la captura en sí. Una app que miente sobre ellos es precisamente la app a la que no quieres dejar tomar la decisión, así que la decisión se toma en otro sitio. Importan en la capa cuatro.
Capa cuatro, en el pago: el filtro antifraude. Las retiradas pasan por una función de servidor que lee los últimos noventa días de capturas de la cuenta. Si alguna de esas capturas vino de un simulador, o Android informó de un proveedor simulado, o la cuenta hizo dos capturas con éxito con menos de diez segundos de diferencia, o la cuenta se desplazó entre dos coordenadas de captura más rápido de lo que puede viajar una persona, o otra cuenta ya ha retirado desde la misma huella de dispositivo, la retirada pasa a revisión humana en lugar de aprobarse automáticamente. No se le dice al usuario qué alarma saltó, y su cuenta sigue jugando con normalidad. La detección es una decisión de negocio sobre los pagos, no un castigo.
La razón para separar captura y pago es que protegen cosas distintas. La capa de captura protege el juego. Si la captura fue fraudulenta, se convierte en moneda del juego que nunca sale de la app, lo cual no cuesta nada. La capa de pago protege dinero real. Cada dólar que sale del sistema pasa por la revisión de noventa días de todo lo que llevó al saldo, y una sola señal sospechosa en esa ventana basta para dejar la decisión en manos de una persona. Juntas, las dos capas hacen que un jugador legítimo nunca note fricción en el momento de la captura, y que un atacante que coló una captura falsa nunca vea el dinero.
Capa cinco, en la captura: rastro de movimiento. Todos los móviles tienen un acelerómetro y un giroscopio en el mismo chip que se comunica con el GPS. Seek registra ahora una breve ventana de movimiento en los segundos previos a una captura, calcula un pequeño conjunto de estadísticas (varianza de la magnitud, actividad de rotación, número de fotogramas quietos) y envía ese resumen con la solicitud de recogida. Un móvil que caminó hasta un spawn tiene una firma de movimiento distinta a la de un móvil sobre un escritorio con un simulador de GPS en marcha. Hoy la firma no se aplica en la capa de captura, por la misma razón que los indicadores del entorno: una app modificada puede mentir. Va al filtro antifraude de noventa días, junto con las señales de simulador y de proveedor simulado, y un rastro de movimiento plano en el historial es otra alarma que manda una retirada a revisión humana.
Un ejemplo práctico. Un probador ejecuta un falsificador de GPS, fija las coordenadas en un drop de Seek al otro lado de la ciudad y pulsa capturar. La comprobación de distancia pasa porque las coordenadas falsificadas coinciden. La atestación pasa porque la app no está modificada. La captura se registra. Dos horas después, el mismo probador hace tres capturas más, una de ellas desde unas coordenadas a diez kilómetros. El rastro de movimiento de las cuatro es plano (el móvil nunca se movió), y la comprobación de desplazamiento imposible salta con las dos coordenadas a las que no se podía llegar a pie en dos horas. La cuenta sigue jugando, sigue recogiendo y no sabe que algo va mal. Cuando el probador solicita un pago, este llega a una mesa de revisión humana con el indicador de desplazamiento imposible y el rastro de movimiento plano adjuntos. El revisor lo deniega. Los cuarenta dólares de saldo acumulado del probador nunca valen nada fuera de la app.
El marco económico. Lo que importa no es que falsificar la captura en sí sea imposible; es que el filtro de pago repasa todo lo que hizo la cuenta hasta llegar al saldo. Un drop de dos euros protegido por atestación y distancia es barato de atacar una vez e inútil de atacar repetidamente, porque la comprobación de retirada detecta el patrón antes de que el patrón se convierta en dinero. Un drop de diez mil euros necesita un marco más sólido en la capa de captura, que es de lo que trata la hoja de ruta de abajo.
Qué hay en la hoja de ruta. El próximo control en llegar son las balizas como alternativa para drops en interiores. Para un spawn colocado dentro de un edificio en el que el GPS no sirve de nada, una pequeña baliza Bluetooth registrada en el drop permite a la app demostrar la presencia sin depender en absoluto de la posición por satélite. La aplicación obligatoria de la atestación es la segunda línea: hoy las solicitudes sin atestación se registran pero se siguen aceptando, para poder medir la tasa de falsos rechazos en dispositivos legítimos antes de activar el interruptor y rechazarlas del todo. Ambas llegan como añadidos pequeños, aburridos y verificables al mismo esquema de captura y pago que ya está en uso.
Lo que todavía no funciona bien. El GPS en interiores se desvía de diez a quince metros en un centro comercial, y ninguna astucia en el servidor lo arregla; una baliza es la respuesta real, y por eso está en la hoja de ruta. La latencia por debajo del segundo no existe y probablemente no existirá, porque el filtro antifraude lee el historial en lugar de una sola solicitud. Los wearables tienen menos sensores que los móviles, así que un diseño de proof of location ajustado para móviles no se traslada limpiamente a unas gafas. Y un Estado con un camión lleno de equipos de radiofrecuencia puede burlar hoy cualquier verificador en un móvil; cualquier protocolo que diga lo contrario no está siendo honesto contigo. El nuestro no lo dirá.
El principio de diseño que merece decirse en voz alta. Un verificador debe ser honesto sobre lo que puede y no puede demostrar. Presentar una puntuación probabilística como un sí o no absoluto es peor que presentar un sí o no absoluto basado en reglas estrictas, porque una puntuación crea un regulador, y cualquier regulador acaba empujándose hacia aceptar más reclamos cuando los objetivos de participación van por detrás. Nuestra capa de captura no tiene regulador. Pasa las comprobaciones o no las pasa. La capa antifraude sí tiene un regulador, y ese regulador está en manos de una persona, no en el código.
Esta es la pieza bajo Seek que hace que valga la pena tener activos anclados y airdrops verificados por ubicación. Un anunciante coloca en unas coordenadas un token con valor real porque quien acabe teniéndolo estuvo en esas coordenadas con un dispositivo atestado, y porque el filtro de pago repasará el historial de la cuenta antes de que se mueva el dinero. El whitepaper contiene la especificación completa. Este artículo es la versión en lenguaje sencillo de lo que ocurre dentro de la app.
En resumen. La presencia no es una coordenada. Una sola señal no demuestra presencia. Seek verifica la presencia en dos capas: atestación, distancia y rastro de movimiento en el momento de la captura, y un filtro antifraude de noventa días en el momento del pago. Lo único pendiente, las balizas para drops en interiores, cierra el último caso que el GPS por sí solo no puede resolver. Eso es lo que de verdad es proof of location hoy dentro de Seek, y por eso esta capa importa más que cualquiera de las cosas más llamativas que hace posibles.


