UNIVERSIDAD DE SEVILLA ESCUELA SUPERIOR DE INGENIERÍA...

65
UNIVERSIDAD DE SEVILLA ESCUELA SUPERIOR DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA DE SISTEMAS Y AUTOMÁTICA Detección de ataques de spoofing a los sistemas de navegación global. AUTOR: FERNANDO GARCÍA ZAPATA TUTOR: ANÍBAL OLLERO BATURONE SEPTIEMBRE 2013, SEVILLA

Transcript of UNIVERSIDAD DE SEVILLA ESCUELA SUPERIOR DE INGENIERÍA...

  • UNIVERSIDAD DE SEVILLA

    ESCUELA SUPERIOR DE INGENIERÍA

    DEPARTAMENTO DE INGENIERÍA DE SISTEMAS Y AUTOMÁTICA

    Detección de ataques de spoofing a los

    sistemas de navegación global.

    AUTOR: FERNANDO GARCÍA ZAPATA

    TUTOR: ANÍBAL OLLERO BATURONE

    SEPTIEMBRE 2013, SEVILLA

  • 1

    Índice Capítulo 1. Introducción ............................................................................................................................... 3

    Evolución histórica de los sistemas GNSS ................................................................................................. 3

    Las amenazas a los sistemas GNSS ........................................................................................................... 4

    Receptores GPS basados en software ...................................................................................................... 5

    Capítulo 2. Estado del arte de la seguridad GPS .......................................................................................... 6

    2.1 Técnicas de spoofing ........................................................................................................................... 6

    2.1.2 Ataque mediante simulador de señales GPS ............................................................................... 6

    2.1.3 Ataque mediante un receptor-spoofer GPS ................................................................................. 6

    2.1.4 Ataque mediante varios receptores-spoofers GPS ...................................................................... 7

    2.2 Técnicas anti-spoofing ........................................................................................................................ 8

    2.2.1 Discriminación por ángulo de llegada .......................................................................................... 8

    2.2.2 Autenticación de señales GPS .................................................................................................... 11

    2.2.3 Monitorización de la calidad de la señal recibida ...................................................................... 13

    2.2.4 Correlación de la señal P ............................................................................................................ 15

    Capítulo 3. Sistema GPS .............................................................................................................................. 16

    3.1 Introducción ...................................................................................................................................... 16

    3.2 Descripción del sistema .................................................................................................................... 17

    3.3 Descripción de las señales GPS ......................................................................................................... 18

    3.4 Modulación y código C/A .................................................................................................................. 20

    3.5 Datos de navegación ......................................................................................................................... 21

    3.6 Funcionamiento del sistema GPS ...................................................................................................... 23

    3.7 Adquisición ........................................................................................................................................ 25

    3.8 Seguimiento o tracking ..................................................................................................................... 26

    3.9 Extracción de los datos de navegación ............................................................................................. 27

    Capítulo 4. Anti-spoofing utilizando la señal P(Y) ..................................................................................... 29

    4.1 Procesamiento de las señales secretas para autenticación .............................................................. 29

    4.2 Implementación del mecanismo de autenticación ........................................................................... 32

    4.3 Introducción al receptor software “Soft-GNSS” ............................................................................... 33

    postProcessing.m ................................................................................................................................ 35

    Acquisition.m....................................................................................................................................... 35

    Tracking.m .......................................................................................................................................... 36

    4.4 Modificación del receptor software SoftGNSS v3.0 .......................................................................... 37

  • 2

    initSettings.m ...................................................................................................................................... 38

    postProcessing.m ................................................................................................................................ 40

    Tracking.m .......................................................................................................................................... 43

    CheckSpoof.m ...................................................................................................................................... 47

    Capítulo 5. Resultados ................................................................................................................................ 52

    Capítulo 6. Conclusiones y líneas futuras de desarrollo ............................................................................ 58

    Conclusiones ........................................................................................................................................... 58

    Líneas futuras de desarrollo .................................................................................................................... 58

    REFERENCIAS .............................................................................................................................................. 60

    APÉNDICE A. TOMA DE LOS DATOS GPS. .................................................................................................. 61

  • 3

    Capítulo 1. Introducción

    A lo largo de este proyecto vamos a desarrollar, aplicar y analizar los resultados de una técnica anti-

    spoofing para los sistemas GPS, en concreto una que utiliza la señal militar para detectar ataques de

    spoofing.

    En este primer capítulo haremos una pequeña introducción sobre la evolución de los sistemas de

    navegación, las amenazas que han surgido y cómo ha proliferado el desarrollo de sistemas de

    navegación basados en software.

    En el siguiente capítulo haremos un repaso sobre las técnicas, tanto de ataque como de defensa, del

    sistema GPS actual. Observaremos como a medida que han aparecido nuevas técnicas para atacar estos

    sistemas, se han desarrollado también mecanismos de defensa para combatirlos. Estudiaremos varias

    técnicas desarrolladas en los últimos años por numerosos investigadores.

    En el capítulo tres describiremos, de forma detallada, el funcionamiento del sistema GPS. Es primordial

    entenderlo, ya que así podremos analizar cuáles son sus debilidades, cómo puede ser atacado y cómo

    podemos defendernos de estos ataques.

    Durante el capítulo cuatro describimos de forma detallada uno de los mecanismos de defensa que

    existen para los sistemas GPS. Además desarrollaremos, en Matlab y utilizando un receptor GPS

    software, este mecanismo para poder estudiar posteriormente sus resultados.

    En el capítulo cinco presentamos los resultados de aplicar el mecanismo desarrollado en el capítulo

    cuatro, tanto en una situación en la que el sistema está siendo atacado como en una situación donde no

    se produce el ataque, para comprobar como no arroja falsos positivos (no indica que estamos bajo un

    ataque cuando no lo estamos) y detecta correctamente cuando sí se está atacando al sistema.

    Finalmente, en el capítulo seis, se detallan las conclusiones obtenidas tras analizar los resultados.

    También se proponen líneas futuras de desarrollo, de manera que el trabajo aquí desarrollado pueda ser

    ampliado e implementado en sistemas que funcionen en tiempo real.

    Evolución histórica de los sistemas GNSS

    Hoy en día los sistemas de navegación son ampliamente utilizados en cientos de millones de

    dispositivos, y son cada vez más los servicios, en muchos casos críticos, que basan su funcionamiento en

    una correcta sincronización temporal y en el conocimiento de la posición exacta que es ofrecido gracias

    a los GNSS (sistemas de navegación global por satélite).

    Un ejemplo de este tipo de servicios son el guiado de aviones en condiciones de poca o ninguna

    visibilidad (ya sea por ser de noche o por inclemencias meteorológicas) o la sincronización de las redes

    de comunicaciones móviles.

  • 4

    Pero no solo los sistemas de navegación por satélite se utilizan en infraestructuras críticas para la

    sociedad, si no que cada día están más implantados en la vida del ciudadano y forman una parte vital de

    los servicios que utilizamos todos los días, tales como equipos que utilizan nuestra posición para calcular

    rutas y guiarnos hasta un punto de destino.

    Por estos motivos resulta cada vez más importante garantizar la integridad y seguridad de los

    sistemas de navegación, ya que además, como se ha demostrado con muchos otros casos de nuevas

    tecnologías que han surgido a lo largo de la historia reciente, tales como internet, cuanto más usado y

    crítico se vuelve un servicio, más intereses (y, por tanto, personas) aparecen e intentan atacarlo y sacar

    provecho de sus vulnerabilidades.

    Dentro de los sistemas GNSS, analizaremos el caso particular del GPS, ya que es con mucha

    diferencia el más usado en la actualidad. Los otros sistemas son GLONASS, muy poco operativo desde el

    desmantelamiento de la Unión Soviética, y Galileo, que aún no está en funcionamiento y es poco

    probable que lo esté antes de 2019. Además, Galileo será capaz de funcionar también con señales GPS,

    así que las vulnerabilidades GPS constituirán vulnerabilidades también en Galileo en la medida en que

    ambos sean compatibles.

    En el sistema GPS debemos diferenciar, desde el punto de vista de la seguridad, del uso civil y del

    militar. En el caso del militar, hoy en día la seguridad no es un problema, ya que desde su concepción se

    pensó en hacer un sistema que fuese robusto e invulnerable (al menos, en la medida de lo posible). No

    ocurre así con el uso civil, que como veremos, no presenta ninguna medida de seguridad.

    Las amenazas a los sistemas GNSS

    Una característica de los sistemas GNSS es que los receptores en la Tierra funcionan con señales

    de muy baja potencia, de hecho con un nivel de potencia que es menor que el ruido térmico de los

    propios sistemas. Esto provoca que el tipo de ataque más común y sencillo de llevar a cabo consista en

    ataques de denegación de servicio (DoS, “denial of service”), realizados mediante el “jamming”, creando

    interferencias.

    Existe otro tipo de ataque, mucho más peligroso, denominado “spoofing”. Este ataque consiste en

    la suplantación de la señal GNSS, de manera que los receptores calculen posiciones incorrectas. Este

    ataque es mucho más dañino que el de denegación de servicio, ya que permite que el usuario del

    sistema GNSS reciba una posición incorrecta por parte del receptor sin que éste sea capaz de detectarlo.

    Este ataque es posible debido a que las señales GPS no llevan ningún mecanismo de autenticación o

    identificación para poder determinar que la señal recibida es legítima. En el nuevo sistema Galileo sí que

    se prevé incluir un sistema de autenticación, pero probablemente constituya un servicio por el que haya

    que pagar para su uso.

    Los ataques de spoofing constituyen una amenaza real, como demuestra el hecho de que

    numerosos ataques de este tipo han sido llevados a cabo por investigadores en entornos controlados.

  • 5

    Los métodos que se han desarrollado hasta ahora para mitigar este tipo de ataques se basan

    principalmente en comprobaciones entre varios sistemas distintos (ya sean internos o externos al

    sistema GNSS) y en la predicción de características de la señal de navegación que estamos recibiendo.

    Receptores GPS basados en software

    En los últimos diez años ha habido una explosión, en gran parte de la comunidad de

    investigadores, en la implementación de receptores GPS mediante software. En estos sistemas se

    implementan los correladores, el tracking de la señal y el procesamiento de los mensajes de navegación

    para calcular la posición. Una característica común a la mayoría de receptores basados en software es

    que no funcionan en tiempo real, es decir, no procesan la señal directamente, sino que utilizan como

    entrada un fichero consistente en un log de señal GPS capturado de alguna otra forma.

    Estos sistemas presentan una clara ventaja respecto a los sistemas basados en hardware

    tradicionales: la flexibilidad a la hora de modificar, mejorar e implementar nuevas características al

    sistema, y es por este último motivo por el que hemos decidido trabajar con un receptor GPS basado en

    software, a pesar de que se han propuesto métodos para crear un dispositivo anti-spoofing [2].

    Las entradas que utilizaremos para este receptor serán dos ficheros de datos con las señales GPS,

    capturados ambos ficheros en el mismo momento separados una distancia de varios metros.

  • 6

    Capítulo 2. Estado del arte de la seguridad GPS

    Vamos a realizar un pequeño recorrido por las diferentes técnicas para realizar ataques de spoofing

    al sistema GPS y los mecanismos que se han desarrollado para descubrir estos ataques.

    2.1 Técnicas de spoofing

    Para evaluar la forma de mitigar los ataques de spoofing, primero debemos conocer cuáles son los

    tipos de ataques que existen. Estos ataques pueden ser desde muy simples hasta realmente sofisticados,

    llegando en casos muy extremos (utilizando una gran cantidad de recursos y tecnología) a ser

    prácticamente indetectables

    Los clasificaremos según el nivel de sofisticación del ataque.

    2.1.2 Ataque mediante simulador de señales GPS

    El tipo de ataque más sencillo consiste en conectar un amplificador y una antena a un generador

    de señales GPS. Con esto lograríamos radiar señales GPS falsas con los datos que nosotros configuremos

    en el generador de señales.

    Sin embargo, existen varios inconvenientes en este tipo de ataques. El primero, y quizás el más

    importante, es el coste: un simulador de señales GNSS puede llegar a costar más de 250 mil euros.

    Algunas empresas ofrecen opción de alquilar este tipo de equipos por algo menos de mil euros a la

    semana, lo que hace más viable un ataque de este tipo de corta duración que un ataque continuado

    durante un tiempo prolongado. Otro inconveniente es el tamaño, ya que la mayoría de simuladores GPS

    son equipos pesados y muy grandes. Esto lleva a que no se pueda realizar este tipo de ataques en

    entornos controlados por fuerzas de seguridad o simplemente de forma discreta (por ejemplo, sería

    inviable este tipo de ataque en un aeropuerto).

    Como vemos, este tipo de ataque es muy sencillo de llevar a cabo, pero solo teóricamente, para

    llevarlo a la práctica hacen falta grandes recursos económicos y que la zona de ataque no esté

    controlada ni haya mucha afluencia de personas.

    2.1.3 Ataque mediante un receptor-spoofer GPS

  • 7

    Una de las mayores dificultades de realizar con éxito un ataque de spoofing es obtener, de

    forma más o menos precisa, la posición y velocidad de la antena del receptor al que queremos atacar.

    Esto es importante porque, como veremos en las técnicas anti-spoofing, podríamos detectar que un

    ataque se está produciendo si estos datos que recibimos del receptor GPS no son coherentes con el

    estado de nuestro sistema.

    Para solventar este problema, uno de los ataques consiste en crear un pequeño

    (suficientemente pequeño como para que sea portable) receptor GPS que sea también capaz de emitir

    una señal GPS spoofeada [2]. La forma de proceder sería posicionar este pequeño receptor cerca de la

    antena del sistema que queremos atacar, tal y como se indica en la Figura 1, de manera que ambos

    reciban aproximadamente la misma posición, velocidad y tiempo. Con estos datos, nuestro receptor

    sería capaz de generar una señal suficientemente elaborada que logre realizar con éxito un ataque de

    spoofing.

    Figura 1. Esquema de los dispositivos para realizar un ataque.

    Por supuesto, este tipo de ataque también tiene sus inconvenientes. Hoy en día no existen

    equipos receptores-spoofers de GPS disponibles en el mercado, lo que reduce drásticamente el número

    de personas capaces de llevar a cabo este ataque.

    Por otro lado, el software que debería llevar este sistema debería ser bastante elaborado, ya que

    debería implementar no solo un sistema de recepción de GPS, sino también un sistema generador de

    señales GPS que además deberá utilizar los datos que está recibiendo el receptor, lo que implica que

    debe haber sincronización entre el receptor GPS y el emisor de señales GPS spoofeadas. Esto, a pesar de

    que la estructura de los mensajes GPS es pública y está perfectamente documentada, es complejo y

    requiere muchos conocimientos, no solo de software sino también de electrónica y hardware.

    Otro inconveniente es que es necesario acceso físico al sistema que quieres atacar, y además este

    sistema no debe ser revisado por personas, ya que detectarían el receptor y el ataque quedaría anulado.

    2.1.4 Ataque mediante varios receptores-spoofers GPS

    Este es el tipo de ataque más complicado de realizar, ya que requiere mucha coordinación, que

    las señales que emita cada equipo tenga la fase correcta, que no se ataquen entre ellos, etc.

    Ante este tipo de ataque, no hay defensa posible, al menos no con el sistema GPS actual, la única forma

  • 8

    de detectarlos sería mediante autenticación criptográfica (como tiene previsto implementar Galileo, por

    ejemplo) pero esto no es posible con la tecnología GPS.

    Se necesitan tantos equipos receptores-spoofers como antenas tenga el objetivo al que se desea

    atacar. Todos estos equipos deben estar sincronizados en fase, es decir, deben tener algún mecanismo

    de sincronización o compartir un oscilador. También deben situarse de forma que los equipos no se

    spoofeen entre ellos. El objetivo de esta configuración (varios dispositivos, atacando cada uno a una

    antena) es el de evitar un tipo de técnica anti-spoofing que veremos posteriormente.

    Estos son, básicamente, todos los tipos de ataques de spoofing que se pueden llevar a cabo

    actualmente.

    Vamos ahora a analizar las diferentes técnicas que los investigadores han propuesto durante los

    últimos años para mitigar, o al menos detectar, estos ataques.

    2.2 Técnicas anti-spoofing

    A medida que han ido apareciendo nuevas formas de atacar los sistemas GNSS, también han

    surgido métodos para detectarlos.

    Hay que distinguir entre la detección y la actuación. Mientras que, como veremos, sí se han

    desarrollado técnicas para detectar los ataques, no hay forma de evitarlos o pararlos, por lo que el único

    mecanismo de actuación posible ante un ataque de este tipo es dejar de confiar en los datos aportados

    por el sistema GPS.

    2.2.1 Discriminación por ángulo de llegada

    Este mecanismo detecta el ataque gracias al uso de múltiples antenas receptoras. Se basa en la

    observación de las diferencias de las portadoras L1 captadas entre diferentes antenas que comparten un

    oscilador común.

  • 9

    Figura 2. Se observa la diferencia entre la fase de la señal que recibe cada antena.

    Como vemos en la Figura 2, las líneas discontinuas representan las zonas de fase constante de la

    señal emitida por el satélite, separadas una distancia igual a la longitud de onda, y que son

    perpendiculares al vector S, que es un vector que va desde el receptor hasta el satélite (representaría la

    línea de visión, LOS).

    En este caso, en el que el receptor no está siendo atacado, la diferencia de fase de portadora L1

    que ven las dos antenas respecto al satélite será previsible:

    𝑑𝜑𝑖 = 𝑏𝑇𝐴�̂�𝑖 + 𝑁𝑖 + 𝐵 + 𝛾𝑖

    Donde:

    - i hace referencia al satélite del que estamos calculando la fase

    - b es el vector que une las dos antenas

    - A es una matriz de cosenos direccionales para rotar vectores

    - �̂�𝑖 es el vector de la línea de visión (LOS) hasta el satélite

    - 𝑁𝑖 es un número aleatorio que variará para cada satélite

    - B es un valor que dependerá de la implementación que realicemos del sistema.

    - 𝛾𝑖 es la suma de todos los errores en la fase de la portadora para el satélite

  • 10

    Figura 3. Esquema de un sistema siendo atacado.

    En el caso de que el receptor esté siendo atacado, como se observa en la Figura 3, la diferencia

    de fase entre las dos antenas será distinta a la esperada, y gracias a este hecho detectaremos que se

    está produciendo un ataque.

    La Figura 4 muestra la variación de la fase para cuatro satélites distintos. Como vemos, para

    cada satélite obtenemos una variación distinta.

    Figura 4. Variación de fase para distintos satélites.

    El problema de este sistema es que, como vemos en la ecuación, para poder estimar la fase

    necesitamos la altura de las antenas. Esto no es un problema en el caso de sean estáticas, pero si están

    en movimiento (por ejemplo, montadas en un avión) necesitaremos alguna forma de averiguar la altura

    (y, obviamente, esta forma no puede ser utilizando las señales GPS).

  • 11

    El algoritmo para la detección de spoofing sería el siguiente:

    1. Se calcula el valor de 𝑑𝜑𝑖 esperado. Para esto necesitamos conocer la altura de las antenas y el

    valor B.

    2. Se mide 𝑑𝜑𝑖 y se compara con el valor calculado.

    3. Para cada satélite, el error entre el valor medido y el esperado se calcula cada 500 milisegundos,

    aunque esta tasa podría ser mayor.

    4. Basándonos en un umbral de error, que calcularemos en función de la elevación del satélite del

    que recibamos la señal, el peor caso esperado, si existe o no multi-trayecto y en el error de la

    altura de las antenas, aumentaremos o disminuiremos un contador de errores.

    5. Si el contador de errores alcanza un número, que estimaremos en función de la tasa a la que

    hayamos calculado los errores, se lanza una alarma de ataque.

    Este sistema se puede realizar con tantas antenas como se desee, no únicamente con dos. Para

    lograr engañar con éxito al sistema se necesitan tantos dispositivos spoofers como antenas, por lo que

    este método de detección de ataques constituye un sistema muy robusto y difícil de vulnerar.

    2.2.2 Autenticación de señales GPS

    Un método para evitar el ataque de los sistemas GNSS, que ha sido ampliamente discutido en

    numerosas conferencias [3], consiste en la implementación de algún tipo de mecanismo de

    autenticación de señales para garantizar que la señal que estamos recibiendo es, efectivamente, la señal

    que esperamos y no una producida por un elemento externo.

    Una de las dificultades a la hora de diseñar una mejora de este tipo para los sistemas GNSS es

    que debe ofrecer retrocompatiblidad, es decir, que los cambios que introduzcamos en la arquitectura

    del sistema GNSS deben permitir que los receptores antiguos, aquellos que no implementan esos

    cambios, puedan funcionar con normalidad. Este requisito es un imperativo, y dificulta mucho el diseño

    de un cambio en los sistemas GNSS.

    Una opción es implementar secuencias para la autenticación de señales. Este mecanismo de

    control de acceso a las señales de navegación del satélite puede hacerse en dos capas distintas: en la

    capa de datos o en la capa de modulación de señal.

    Si se aplica en la capa de datos, el receptor será capaz de hacer un seguimiento de la señal, sin

    embargo no podrá decodificar el contenido del mensaje, es decir, no será capaz de calcular la posición,

    velocidad ni el tiempo (PVT).

    Un control de acceso a la capa de señal requiere que se encripten los códigos PRN.

    Para la implementación podríamos utilizar un cifrado continuo (que es más rápido y tiene una

    implementación en hardware más sencilla que un cifrado en bloque). Este mecanismo consiste en un

    cifrado de clave simétrica donde un flujo de bits no encriptados (planos) se combinan con un flujo de

    bits pseudoaleatorios, habitualmente mediante un OR exclusivo (XOR). Para poder encriptar el código

  • 12

    PRN, a este código se le realiza el módulo 2 y se suma al flujo cifrado, de manera que obtenemos un

    código PRN cifrado.

    Suponiendo una señal BPSK donde la componente en fase está modulada por un código

    conocido y la componente en cuadratura por un código encriptado, la señal transmitida seguiría el

    siguiente modelo:

    𝑠(𝑡) = ∑ [𝑂𝑎𝑘(𝑡)𝐷𝑘(𝑡)cos (2𝜋𝑓𝐿1𝑡)] +

    𝑁𝑘=1 ∑ [𝑂𝑏

    𝑘(𝑡)𝑆𝐶𝑘𝐷𝑘(𝑡)sin (2𝜋𝑓𝐿1𝑡)]𝑁𝑘=1

    Donde:

    - N es el número de satélites visibles.

    - 𝑂𝑎𝑘 y 𝑂𝑏

    𝑘 son los códigos públicos para cada satélite K.

    - 𝑆𝐶𝑘 es el flujo de cifrado.

    - 𝐷𝑘 son los datos transmitidos.

    El método a seguir sería el siguiente: se observa el flujo de cifrado, 𝑆𝐶𝑘, durante un periodo de

    tiempo determinado. Se extrae una parte del flujo binario con la referencia de tiempo epoch de la SAS

    (Signal Authentication Sequences, secuencias de señales de autenticación) para una ventana de tiempo

    determinada: por ejemplo, si en el instante 𝑛0 se observan 5000 chips del flujo binario, extraeríamos

    𝑆𝐶𝑘[0: 5000, 𝑛0]. Como vemos, le añadimos la referencia de tiempo.

    Figura 5. Diagrama de bloques para la creación de una señal cifrada.

    La secuencia extraída es procesada y transmitida en el servicio de mensajes de navegación con

    autenticación. Esta secuencia o mensaje, definido como la secuencia de señal de autenticación, sería así:

  • 13

    𝑆𝐴𝑆𝑘 = 𝑆𝐶𝑘[𝑛0 ∶ 𝑛0 + 𝑙]

    Donde l es la longitud del código del SAS y 𝑛0 es el instante de observación del primer chip del

    flujo de cifrado 𝑆𝐶𝑘.

    Finalmente, durante el proceso de decodificación y tras la autenticación, el receptor obtiene el

    SAS, genera la secuencia PN para ese tiempo epoch específico, y realiza la correlación de ésta con las

    muestras del código encriptado. El resultado de esta correlación es pasado a un algoritmo que

    determina, basándose en un umbral que puede haberse estimado previamente, el estado de seguridad

    de la señal. En la Figura 6 se muestra un esquema de este proceso.

    Figura 6. Diagrama de bloques para descifrar la señal.

    El gran problema de este sistema es que requiere realizar modificaciones tanto a los receptores

    GPS actuales como a la estructura de las señales GPS, lo cual no parece que vaya a ocurrir.

    2.2.3 Monitorización de la calidad de la señal recibida

    Este mecanismo se basa en la implementación de algoritmos que se ejecutarían en el receptor

    GPS de estaciones de referencia, que se encargarían de monitorizar la calidad de las señales recibidas [4].

    Esta técnica para detectar posibles ataques requiere tener varios receptores fijos en distintos

    lugares de referencia. El hardware que equipen estas estaciones será más caro, ya que también debe ser

    más fiable y, además, habrá pocos.

    El fundamento de este mecanismo es que, idealmente, el pico de correlación que obtenemos

    con los códigos PRN será exactamente igual en todos los receptores, independientemente de la

    distancia que haya entre ellos.

  • 14

    Sin embargo, si se introduce una señal extraña, que en ese caso sería la señal de spoofing, los

    picos de correlación ya no serán iguales, tal y como se muestra en la Figura 7.

    Figura 7. Efecto de una señal extraña en los picos de correlación.

    Parte de la monitorización consiste en la implementación de un algoritmo que busque

    asimetrías en los picos de correlación. Estos algoritmos tomarían, como entrada, diferentes medidas de

    las señales GPS, realizarían un procesamiento a estas medidas y entonces decidirían si la señal es

    correcta o no. Esta decisión estará basada en tests estadísticos, y se podría utilizar el criterio de

    Neyman-Pearson para decidir si una determinada señal pasa o no el test.

    Para poder llevar a la práctica este método, necesitaríamos receptores que implementen varios

    correladores por canal, como se entenderá a continuación.

    Dos de los test más comunes son el “delta-test” y “ratio-test”.

    Figura 8. Efecto de una forma de onda extraña en el seguimiento del código

    El “delta-test” (∆-test) está diseñado para identificar asimetrías en los picos de correlación.

    Hay que recordar que tendremos un pico de correlación cuando el código esté perfectamente alineado.

  • 15

    El discriminante del test es el siguiente:

    ∆𝑚=𝐼𝑒𝑎𝑟𝑙𝑦,𝑚 − 𝐼𝑙𝑎𝑡𝑒,𝑚

    2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚

    Donde 𝐼𝑒𝑎𝑟𝑙𝑦,𝑚, 𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 e 𝐼𝑙𝑎𝑡𝑒,𝑚 son, respectivamente, las acumulaciones en fase early,

    prompt y late ya filtradas y m es el número del correlador. El dividir por 2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 normaliza el

    resultado a un valor máximo de uno. El discriminador asume que, si se está haciendo el tracking de la

    señal y estamos en fase con ella, los valores de 𝑄𝑒𝑎𝑟𝑙𝑦,𝑚, 𝑄𝑝𝑟𝑜𝑚𝑝𝑡,𝑚 y 𝑄𝑙𝑎𝑡𝑒,𝑚 son, aproximadamente,

    cero.

    El “ratio-test” es un test que detecta máximos planos, picos de correlación estrechos o muy

    altos. El discriminante de este test es:

    𝑅𝑚 =𝐼𝑒𝑎𝑟𝑙𝑦,𝑚 + 𝐼𝑙𝑎𝑡𝑒,𝑚

    2𝐼𝑝𝑟𝑜𝑚𝑝𝑡,𝑚

    Donde, al igual que antes, se asume que estamos en fase con la señal (es decir, que estamos en

    la fase de “tracking” o seguimiento).

    Los receptores multi-correlación generan m pares de discriminantes por canal. Una vez están

    bien determinados los efectos multitrayecto y el ruido térmico, los discriminantes realizan los dos tests

    estadísticos con el fin de determinar si la señal que recibimos es correcta o no.

    2.2.4 Correlación de la señal P

    Este es otro de los mecanismos anti-spoofing que se han propuesto a lo largo de los últimos

    años [5], [6].

    Este sistema hace uso de la señal militar, que es una señal sin interés para los receptores civiles,

    como mecanismo de comprobación de que la señal GPS recibida es correcta.

    Para ello necesitamos dos receptores, uno que se encuentre en un lugar seguro, de manera que

    la señal que reciba se encuentre siempre fuera del peligro de ser falsa, y otro que sería el que utilizaría

    el usuario, que sería un receptor GPS normal.

    Periódicamente, el receptor GPS del usuario mandaría la señal militar que está captando de cada

    satélite del que está recibiendo la señal.

    Este mecanismo es el que he implementado, y por tanto lo describiremos con detalle más adelante.

  • 16

    Capítulo 3. Sistema GPS

    3.1 Introducción

    El sistema GPS (Global Positioning System) es un sistema de navegación global (GNSS por sus siglas

    anglosajonas) que permite determinar la posición de cualquier objeto que tenga visibilidad con los

    satélites que forman el sistema.

    Fue creado por el Departamento de Defensa de los Estados Unidos, que actualmente es también el

    encargado de operarlo.

    En 1957, la Unión Soviética lanzó al espacio el Sputnik I, el primer satélite artificial de la historia,

    cuyo propósito era aportar información sobre la concentración de electrones en la ionosfera. Este

    satélite emitía una señal de forma periódica, y fue este hecho el que llamó la atención de los científicos

    estadounidenses, George Weiffenbach y William Guier, que pensaron en utilizar la variación de la

    frecuencia que sufría esa señal debido al efecto Doppler para así poder determinar la posición del

    Sputnik.

    Gracias a estos dos científicos y su logro se planteó la posibilidad de realizar el cálculo inverso:

    determinar la posición de un objeto en la Tierra a partir de la señal que emitan satélites cuya órbita

    estuviera determinada con suficiente precisión. Esta idea fue rápidamente llevada a la realidad por la

    Armada Estadounidense, que desarrolló el sistema TRANSIT, el primer sistema que permitía determinar

    la posición de un observador en la Tierra a partir de la información que enviaban los satélites, y que

    quedó operativo en 1964.

    Este sistema primitivo tenía fines únicamente militares, aunque en 1967, tres años después de su

    puesta en marcha, se puso disponible para fines comerciales. Las actualizaciones de la posición se hacían

    cada cuarenta minutos, y el observador debía permanecer prácticamente estático para obtener

    información precisa, por lo que no se le encontró uso comercial.

    Posteriormente, en esa misma década, gracias al desarrollo de los relojes atómicos, mucho más

    precisos que los que había hasta entonces, se pensó en desarrollar un nuevo sistema, más avanzado,

    que permitiera calcular la posición de forma más precisa y de objetos en movimiento. Así, en 1973, se

    combinaron los programas de la Armada Estadounidense y de la Fuerza Aérea de los Estados Unidos,

    dando lugar al sistema conocido como NAVSTAR GPS.

    Entre 1978 y 1985 se desarrollaron y pusieron en marcha once satélites, que fueron sustituidos y

    ampliados en sucesivas generaciones, hasta completar la constelación de satélites actual, con capacidad

    para operar en cualquier parte del mundo.

    El sistema NAVSTAR garantiza siempre la presencia de, al menos, cuatro satélites sobre el horizonte.

    Este número corresponde al número mínimo de satélites necesarios para determinar la posición de un

    objeto con exactitud.

  • 17

    3.2 Descripción del sistema

    El sistema GPS está compuesto por tres segmentos bien diferenciados:

    Segmento Espacial

    Este segmento es el formado por los satélites que conforman la constelación NAVSTAR y

    que emiten la señal desde el espacio. Está formado por 24 satélites, distribuidos en seis órbitas

    (cuatro satélites por órbita) con un período de rotación de doce horas, un altitud de 20200 km

    sobre la Tierra, una inclinación respecto al ecuador terrestre de 55 grados, y una vida útil de

    unos siete años y medio por satélite.

    Estos satélites actúan como puntos de referencia a partir de los cuales los receptores

    GPS, mediante triangulación, calculan su posición en la Tierra. Para que esta triangulación arroje

    un resultado preciso, hacen falta al menos cuatro satélites visibles, aunque con tres sería

    suficiente en caso de que no nos importe saber a qué altura sobre la superficie de la Tierra nos

    encontramos.

    Segmento de Control

    Está formado por una serie de estaciones terrenas, distribuidas por la superficie

    terrestre, que se encargan de monitorizar constantemente cada satélite, analizando las señales

    emitidas por estos, y actualizar la información de navegación de los satélites, enviándole la

    información actualizada periódicamente.

    Las estaciones están situadas cerca del plano ecuatorial, y en ellas se encuentran

    receptores con relojes de muy alta precisión.

    Segmento de usuario

    Este segmento no interactúa con los otros segmentos, y es el correspondiente a los

    receptores GPS, que reciben la señal emitida por los satélites y calculan la posición. En el caso de

    los receptores militares, utilizarán señales que proporcionan más precisión y que no están

    accesibles a los receptores comerciales, que tienen un error sensiblemente mayor que los

    receptores militares.

  • 18

    3.3 Descripción de las señales GPS

    Las señales GPS son transmitidas por los satélites en dos frecuencias distintas, ambas pertenecientes

    a la banda L. Se utiliza esta banda para aprovechar las condiciones de propagación de ondas de radio en

    el espacio a estas frecuencias:

    - Los retrasos producidos por la Ionosfera son muy altos para frecuencias por debajo de los 100

    MHz y por encima de los 10 GHz.

    - La velocidad de propagación de las ondas electromagnéticas a través del aire se hace menor a

    medida que la frecuencia disminuye.

    - Los códigos PRN (que se explican más adelante) requieren un alto ancho de banda para la

    modulación en la frecuencia de la portadora, por tanto, necesitamos frecuencias altas para

    tener un ancho de banda también alto.

    - Las frecuencias deben estar en un rango en el que la señal no se vea afectada por fenómenos

    tales como la lluvia, nubes o nieve.

    Las frecuencias utilizadas se denominan L1 y L2, y son múltiplos de una frecuencia fundamental, f0

    𝑓0 = 10.23 𝑀𝐻𝑧

    𝑓𝐿1 = 154𝑓0 = 1575.42 𝑀𝐻𝑧

    𝑓𝐿2 = 120𝑓0 = 1227.60 𝑀𝐻𝑧

    En el segmento de usuario del sistema GPS, las únicas señales involucradas son las que envían los

    satélites, así que a partir de ahora me referiré a ellas simplemente como “señales”, sin indicar de

    manera explícita que son las enviadas por los satélites.

    Las señales tienen tres partes bien diferenciadas:

    - Portadora: es la señal a la frecuencia L1 o L2, y es la utilizada para modular la señal de

    información.

    - Datos de navegación: aquí es donde se encuentra toda la información correspondiente a las

    órbitas de los satélites. Esta información es actualizada por las estaciones terrestres

    correspondientes al segmento de control, y son enviadas a los satélites periódicamente.

    Estos datos tienen un régimen binario de 50 bits por segundo.

  • 19

    - Secuencia de propagación: todos los satélites tienen dos secuencias o códigos de propagación.

    El primero, llamado código de adquisición o código C/A, que es el utilizado por los sistemas

    receptores GPS no militares, y el código P, que es un código encriptado utilizado para uso militar.

    El código C/A, está formado por 1023 chips (un chip corresponde a un bit), y se repite cada

    milisegundo, mientras que el código P es más largo, formado por aproximadamente 2.35∙1034

    chips y se retransmite cada 266 días aproximadamente. Este código tiene un campo que indica

    en qué instante del código está enviando, para que el receptor pueda sincronizarse. El código

    C/A se transmite en la frecuencia L1, mientras que el P se transmite en la frecuencia L1 y L2.

    Vamos a basarnos en el esquema de la Figura 9 para explicar los pasos para generar la señal GPS.

    Figura 9. Esquema de generación señal GPS

    Por un lado, generamos los datos de navegación a una tasa de 50 bits por segundo, como

    indicamos antes, y de forma paralela generamos el código C/A correspondiente al satélite que vaya a

    enviar la señal.

    Cuando tenemos ambas señales, las combinamos mediante una suma de módulo 2

    (correspondiente a una operación XOR entre las dos señales digitales). También combinamos, mediante

    la misma operación, los datos de navegación con la señal P(Y).

    La señal que obtenemos como resultado de estas operaciones se modula a la frecuencia L1 y L2,

    utilizando una modulación BPSK (binary phase shift keying). Es importante hacer notar que ambos

    códigos están modulados en fase y cuadratura, esto es, hay una diferencia de fase de noventa grados

    entre ambos códigos.

  • 20

    La señal que se transmite puede ser descrita, por tanto, mediante la ecuación:

    𝑠𝑘(𝑡) = √2𝑃𝐶(𝐶𝑘(𝑡) ⊕ 𝐷𝑘(𝑡)) cos(2𝜋𝑓𝐿1𝑡) + √2𝑃𝑃𝐿1 (𝑃𝑘(𝑡) ⊕ 𝐷𝑘(𝑡)) sin(2𝜋𝑓𝐿1𝑡) +

    √2𝑃𝑃𝐿2(𝑃𝑘(𝑡) ⊕ 𝐷𝑘(𝑡)) sin(2𝜋𝑓𝐿2𝑡)

    Donde:

    - PC es la potencia de la señal que va con el código C/A.

    - PPL1 es la potencia de la señal con el código P en la frecuencia L1.

    - PPL2 es la potencia de la señal con el código P en la frecuencia L2.

    - Ck es el código C/A asignado al satélite k.

    - Dk son los datos de navegación correspondientes al satélite k.

    - fL1 y fl2 son las frecuencias L1 y L2 respectivamente.

    El código C/A se repite cada milisegundo, mientras que un bit de los datos de navegación se envía

    cada veinte milisegundos. Esto quiere decir que por cada bit de los datos de navegación, la señal

    contiene veinte códigos C/A completos.

    3.4 Modulación y código C/A

    El sistema GPS utiliza una modulación CDMA basada en código PRN.

    Los códigos PRN (pseudorandom noise), transmitidos por los satélites GPS, son secuencias

    determinísticas con características similares al ruido blanco gaussiano.

    El código C/A es la suma de dos secuencias PRN de longitud 2𝑛 − 1, con n = 10. Este código es único

    para cada satélite, siempre es el mismo y es público, es decir, es conocido.

    Estos códigos son utilizados como las secuencias de propagación de las señales GPS debido a sus

    propiedades, siendo sus características más importantes las referidas a la correlación.

    - Correlación cruzada: todos los códigos C/A están no correlados respecto al resto de códigos.

    Esto es, para dos códigos, Ci y CK correspondientes a los satélites k e i, la correlación cruzada

    puede expresarse como:

    𝑟𝑖𝑘(𝑚) = ∑ 𝐶𝑖(𝑙)𝐶𝑘(𝑙 + 𝑚) ≈ 0

    1022

    𝑙=0

  • 21

    - Autocorrelación: todos los códigos C/A están no correlados consigo mismos siempre que el

    desfase sea distinto de cero. Gracias a esta propiedad es fácil averiguar cuando dos códigos C/A

    similares se encuentran alineados, tal y como se observa en la Figura 10. Esta propiedad puede

    expresarse como:

    𝑟𝑘𝑘(𝑚) = ∑ 𝐶𝑘(𝑙)𝐶𝑘(𝑙 + 𝑚) ≈ 0, 𝑝𝑎𝑟𝑎 |𝑚| ≥ 1

    1022

    𝑙=0

    Figura 10. Autocorrelación normalizada de un código C/A. Se observa que el máximo se da para un desfase igual a cero.

    3.5 Datos de navegación

    Los datos de navegación están formados por tramas de 1500 bits de longitud, estando cada una

    de estas tramas formadas a su vez por cinco sub-tramas, cada una de 300 bits de longitud, tal y como se

    muestra en la Figura 10.

    Una sub-trama está formada por diez palabras, donde cada palabra tiene una longitud de treinta bits.

    Las sub-tramas 1, 2 y 3 se repiten (tienen los mismos datos) en cada trama, mientras que las tramas 4 y

    5 tienen 25 versiones distintas (todas con la misma estructura pero con diferentes datos). Como el

    régimen binario es de 50 bits por segundo, se tardan seis segundos en transmitir una sub-trama

    completa, treinta segundos en una trama completa y doce minutos y medio en enviar un mensaje de

    navegación completo.

  • 22

    Figura 11. Estructura de los datos de navegación GPS.

    Las sub-tramas están formadas por diez palabras y siempre comienzan con dos palabras especiales,

    telemetry (TLM) y handover-word (HOW). TLM es la primera palabra y se repite en cada sub-trama, por

    lo que se repite cada seis segundos. Contiene un preámbulo de ocho bits, seguido por 16 bits de uso

    reservado y de paridad. El preámbulo es utilizado para sincronización de la trama. HOW contiene una

    versión truncada, de 17 bits, del tiempo de la semana (TOW o time of week), seguido por dos bits de

    bandera. Los tres bits siguientes identifican la sub-trama, para así saber cuál de las cinco sub-tramas es

    la que estamos procesando.

    Además de las palabras TLM y HOW, cada sub-trama contiene otras ocho palabras.

    - Sub-trama 1: aquí van contenidos todos los datos referentes a la información del reloj. Esta

    información es necesaria para poder establecer en qué instante fue transmitido el mensaje por

    el satélite. Además, en esta sub-trama van también los datos relativos a la salud del satélite,

    indicando si los datos son o no fiables.

    - Sub-tramas 2 y 3: en estas sub-tramas van los datos correspondientes a las efemérides. Estos

    datos son los que indican la órbita del satélite, y son necesarios para poder establecer la

    posición del receptor.

    - Sub-tramas 4 y 5: aquí van la información relativa al almanaque. La información del almanaque

    es la misma que la de las efemérides y la del reloj, pero con menos precisión. Además, los

    satélites envían información en el almanaque sobre el resto de satélites, pero en las efemérides

    cada satélite envía información relativa únicamente a sí mismo.

  • 23

    3.6 Funcionamiento del sistema GPS

    La idea detrás del sistema GPS es utilizar los satélites en el espacio como puntos de referencia para,

    aplicando triangulación, calcular nuestra posición.

    La información que recibe un receptor de un satélite le permite saber qué satélite es el que envía

    los datos, cuál es la posición del satélite y el instante exacto a la que esa información fue enviada (salió

    del satélite).

    El receptor comparará el instante al que la señal fue enviada por el satélite y el instante en que ha

    recibido esa información. La diferencia de ambos tiempos dará el tiempo de propagación, y con este

    tiempo y la velocidad de propagación de la señal es posible calcular la distancia entre el receptor y el

    satélite.

    El receptor tendrá esta información de cada satélite con el que tenga visibilidad, por lo que

    mediante triangulación podrá calcular su posición. Una vez tiene la distancia entre él y un satélite, sabrá

    que su posición se encuentra en la superficie de una esfera de radio esa distancia calculada y de centro

    la posición del satélite. Si tiene la distancia con dos satélites, aplicará este principio con ambos satélites

    y la posición deberá encontrarse en la intersección de ambas esferas, que es un círculo, por lo que aún

    no puede determinar su posición. Con un tercer satélite, aplicando el mismo principio que con dos,

    obtendrá dos puntos (correspondientes a la intersección de tres esferas). Utilizando un cuarto satélite,

    no hay lugar a dudas de la posición en la que se encuentra el receptor, ya que la intersección entre las

    cuatro esferas es un único punto. En la Figura 12 se muestra gráficamente la aplicación de este

    algoritmo.

    Figura 12. Triangulación con tres satélites en tres pasos.

    Recalculando la posición continuamente, permite al receptor conocer también su velocidad y la

    dirección de movimiento.

  • 24

    Otra forma de determinar la velocidad a que se mueve el receptor es utilizando el efecto Doppler,

    ya que se produce precisamente por la diferencia de velocidades entre emisor y receptor. Calculando la

    diferencia entre la frecuencia de emisión de la señal y la frecuencia a la que la recibimos, sabiendo que

    esta diferencia viene producida por el efecto Doppler, un receptor será capaz de calcular la velocidad a

    la que se está moviendo.

    Para poder realizar estos cálculos de la posición, necesitamos ser capaces de recibir los datos de

    navegación. Este no es un problema trivial, ya que a pesar de que la señal sale de los satélites a una

    frecuencia determinada (L1 o L2), debido al efecto Doppler no será esa la frecuencia la que la señal

    llegue a nosotros, sino que habrá una pequeña variación. Además, también tenemos que lidiar con el

    problema de la sincronización. Debemos averiguar, de alguna manera, qué información estamos

    recibiendo en el momento en que empecemos a recibir la señal, es decir, el desfase que hay (aquí el

    desfase es la diferencia entre el momento en que empezó a transmitirse la unidad de información que

    estamos recibiendo y el momento en que empezamos a recibirla).

    El procesamiento de señal para los sistemas de navegación (tanto para GPS como para Galileo) está

    basado en un sistema de canales, donde un canal representa la adquisición de datos de un satélite. Esto

    quiere decir que nos harán falta al menos cuatro canales para calcular la posición de un receptor (ya que

    cada canal estará recibiendo datos de un satélite). Antes de asociar un canal a un satélite, necesitamos

    saber qué satélites están visibles. En función de la forma en que averigüemos esto, hablaremos de un

    inicio frío o un inicio caliente:

    - Inicio caliente o warm start: en este tipo de inicio, el receptor combina la información que tenía

    almacenada del almanaque y la última posición que computó. Los datos del almanaque los

    utiliza para hacer una estimación gruesa de la posición de los satélites en el instante actual. Esta

    información a su vez se utiliza junto a la de la última posición calculada para estimar qué

    satélites deben estar visibles.

    Sin embargo, hay dos casos en los que esta opción de inicio no arrojará resultados positivos. Si el

    receptor está alejado de la última posición en la que estuvo (por ejemplo, en otro continente),

    los satélites que calcule como satélites visibles no lo estarán realmente. Tampoco funcionará si

    ha pasado mucho tiempo desde la última vez que el receptor actualizó la información

    correspondiente al almanaque, ya que los satélites podrían haber variado su posición.

    - Inicio frío o cold start: en este tipo de inicio, el receptor no utiliza ninguna información

    almacenada, sino que empieza a buscar todos los satélites hasta encontrar alguno que esté

    visible.

    El problema de este método es que es muy lento, pueden pasar varios minutos hasta que el

    receptor tenga los datos suficientes para calcular la posición.

    Además del modo de inicio, existen dos fases para lograr la sincronización correcta entre el receptor

    GPS y la señal recibida. Estas fases son adquisición y seguimiento.

  • 25

    3.7 Adquisición

    El propósito de esta fase es identificar todos los satélites visibles para el receptor.

    Además, si el satélite está visible, tras la fase de adquisición los siguientes parámetros tienen que

    quedar determinados:

    - Frecuencia: la frecuencia de la señal recibida no será exactamente la frecuencia a la que la señal

    fue transmitida por el satélite, si no que habrá variaciones debido al efecto Doppler. La

    variación producida por este efecto, suponiendo la máxima velocidad del satélite y una

    velocidad muy alta del receptor, será de unos 10 kHz. Para un receptor estacionario la variación

    nunca será superior a 5 kHz.

    - Fase del código: este parámetro hace referencia al punto exacto del bloque de datos que

    estamos procesando en el que el código C/A comienza. En caso de estar analizando un bloque

    de datos correspondiente a un milisegundo, habrá un código C/A completo y un comienzo de

    código C/A.

    Existen muchos métodos para realizar la adquisición, aunque todos se basan en las propiedades de

    las señales GPS, en especial de la propiedad de autocorrelación del código C/A.

    La señal recibida, s(t), será una combinación de todas las señales de los N satélites visibles:

    𝑠(𝑡) = ∑ 𝑠𝑛(𝑡)

    𝑁

    𝑛=1

    Cuando estemos realizando la adquisición del satélite k, la señal s(t) será multiplicada con el código C/A

    local correspondiente a ese satélite. Gracias a la propiedad de correlación cruzada que vimos

    anteriormente, tras realizar esta multiplicación, las señales del resto de satélites se verán reducidas

    prácticamente a cero. Sin embargo, para que esto ocurra, la fase del código C/A debe estar

    perfectamente alineada.

    Una vez hemos obtenido la señal del satélite de interés, debemos bajarla a banda base para trabajar con

    ella. Para eso multiplicamos la señal por una portadora generada localmente a la frecuencia de la señal.

    Sin embargo, como dijimos antes, a priori no sabemos la frecuencia exacta de la señal, ya que habrá

    variaciones de hasta 10 kHz. Es posible buscar la frecuencia probando con diferentes frecuencias, en

    pasos de 500 Hz, lo que nos da 41 frecuencias distintas para probar. Una búsqueda, tanto de la fase de

    código como de la frecuencia, con un resultado positivo, se muestra en la Figura 13.

    Como vemos, la fase de adquisición es una fase de búsqueda. Se prueba cada una de las diferentes fases

    del código (puede haber hasta 1023, ya que ese es el número de bits del código), y lo mismo para cada

    una de las frecuencias posibles. Cuando se han realizado todas las pruebas, se busca el máximo valor de

    señal obtenido, y si supera un umbral determinado, diremos que el satélite es visible. En caso contrario,

    el satélite no estará visible y probaremos con otro satélite distinto.

  • 26

    Figura 13. Adquisición positiva tras completar la búsqueda en código y frecuencia.

    3.8 Seguimiento o tracking

    El propósito de esta fase es refinar los valores de fases de código y de frecuencia obtenidos en la fase de

    adquisición, además de mantener actualizados estos valores, ya que a medida que pasa el tiempo y

    tanto los satélites como el receptor se van moviendo, van cambiando.

    El seguimiento está compuesto por dos partes diferenciadas:

    - Seguimiento del código: hemos de mantener la fase del código actualizada para poder extraer

    correctamente los datos de navegación. Para esto se suele utilizar un DLL, donde tres códigos

    C/A locales son generados y correlados con la señal recibida. A cada uno de estos códigos se les

    llama Early code, Prompt Code, y Late code. Habitualmente estarán separados (el desfase entre

    ellos será) de medio chip.

    - Seguimiento de la frecuencia/fase de la señal: debemos mantener actualizada la frecuencia del

    oscilador local para poder bajar a banda base la señal correctamente. Esta parte puede ser

    implementada de dos formas: utilizando un seguidor de fase o un seguidor de frecuencia.

    A continuación, en la Figura 14 se muestra un diagrama de bloques completo para implementar un

    sistema de seguimiento para un canal.

    Se observa que primero se multiplica la señal por una señal sinusoidal sin desfasar y por otra

    desfasada 90 grados, a la misma frecuencia de la señal, para así poder bajarla a banda base tanto la

    componente en fase, I, correspondiente al código C/A, como la componente en cuadratura, Q,

    correspondiente al código P.

  • 27

    El siguiente paso es multiplicar por los códigos Early, Prompt y Late y se integra. Debido a la

    propiedad de correlación cruzada de los códigos C/A, en este punto la señal en cuadratura, señal Q,

    se hace prácticamente cero.

    Figura 14. Diagrama de bloques para realizar el seguimiento en un canal.

    La fase de tracking o seguimiento se realiza continuamente, para poder seguir los cambios de fase del

    código y de frecuencia. Si en algún momento, durante esta fase, se perdiera la señal del satélite, se

    comenzaría de nuevo con la fase de adquisición.

    3.9 Extracción de los datos de navegación

    Cuando se está realizando la fase de seguimiento, somos capaces de comenzar a extraer los bits de los

    datos de navegación.

    El valor de un bit se halla integrando los datos recibidos durante veinte milisegundos.

    Una vez leídos unos treinta segundos de datos, hemos debido hallar el comienzo de una sub-trama, lo

    cual es necesario para poder estimar en qué momento fue enviado el mensaje.

    Cuando tenemos el instante de transmisión, debemos extraer los datos de las efemérides, para poder

    establecer la posición del satélite cuando fueron enviados los datos.

  • 28

    Finalmente, deberemos calcular los pseudorangos, esto es, las distancias desde el receptor a los satélites.

    Para esto nos basamos en el instante en el que fueron transmitidos los datos y el instante en el que lo

    hemos recibido, obteniendo así el tiempo de transmisión y, a partir de ahí como conocemos la velocidad

    de propagación de la señal GPS, obtendremos la distancia entre el receptor y el satélite.

  • 29

    Capítulo 4. Anti-spoofing utilizando la señal P(Y)

    Determinadas señales de los distintos sistemas de navegación están especialmente diseñadas para

    prevenir ataques de spoofing, o simplemente para evitar el acceso no autorizado. Algunos ejemplos los

    constituyen señales tales como la señal P(Y) en el caso de GPS o el código P del sistema GLONASS.

    Estas señales son desconocidas para el atacante, por lo que a la hora de hacer spoofing no podrá

    replicarlas.

    Sin embargo, los usuarios civiles no tienen acceso al contenido de la señal P(Y), e incluso los receptores

    GPS militares autorizados utilizan hardware adicional para evitar el spoofing.

    A pesar de esto, los investigadores Todd E. Humphreys, Mark L. Psiaki, Brady W. O'Hanlon, Jahshan A.

    Bhatti y Daniel P. Shepard han propuesto un método que utiliza estas señales para realizar la

    autenticación de las señales recibidas, asegurando así que un receptor no está siendo atacado o

    detectando el ataque si se produjese.

    Vamos a realizar la demostración de que este método arroja resultados positivos, de manera que podría

    ser implementado en sistemas reales como mecanismo para detectar ataques.

    A pesar de que utilicemos el sistema GPS, este mecanismo se podría utilizar en cualquier sistema de

    navegación que tenga al menos una señal segura, incluso si el contenido de esta no es accesible

    (característica presente en todos los sistemas de navegación actuales).

    4.1 Procesamiento de las señales secretas para autenticación

    Vamos a suponer que un receptor GPS se encuentra recibiendo una señal válida, es decir, estamos en la

    fase de tracking, a la frecuencia L1. Como vimos anteriormente, la señal transmitida estará compuesta

    por la señal portadora, que será una onda sinusoidal, el código C/A y P correspondiente a cada satélite, y

    los datos de navegación.

    Escogemos la frecuencia L1 porque en ella viajan tanto el código C/A como el código P, transmitidos en

    fase y cuadratura. Por tanto, un receptor estaría recibiendo la siguiente señal:

    𝑠𝐿1(𝑡) = ∑[𝑠𝑖𝐿1,𝐶/𝐴(𝑡) + 𝑠

    𝑖𝐿1,𝑃(𝑌)(𝑡)]

    𝑁

    𝑖=1

    Ahora nos centramos en las componentes tanto de datos como de código para un satélite concreto.

    Eliminamos el subíndice L1 por comodidad.

    𝑠1𝑖(𝑡) = 𝐴1

    𝑖𝐷𝑖(𝑡 − 𝜏𝑖𝐶,1)𝑥𝐶(𝑡 − 𝜏𝑖

    𝐶,1) cos[2𝜋(𝑓𝐿1 + 𝑓𝐷,1𝑖) + 𝜃𝑖]

    + 𝐵1𝑖𝐷𝑖(𝑡 − 𝜏𝑖𝑃,1) 𝑥𝑃(𝑡 − 𝜏

    𝑖𝑃,1)sin[2𝜋(𝑓𝐿1 + 𝑓𝐷,1

    𝑖) + 𝜃𝑖]

    Donde:

    - Los subíndices C y P se refieren al código C/A y P, respectivamente.

  • 30

    - A y B son parámetros de escala que modelan la potencia recibida de la señal.

    - D representa los datos de navegación.

    - 𝑥𝑃 y 𝑥𝐶 representan el código P y el código C/A, respectivamente.

    - 𝜏𝑃 y 𝜏𝐶 representan la fase de la señal P(Y) y de la señal GPS, respectivamente.

    - 𝜃 representa diferencia de fase entre la señal recibida y el oscilador local.

    - 𝑓𝐷 es la variación de frecuencia producida por el efecto Doppler.

    Como indicamos antes, ahora el receptor, al estar en la fase de tracking, se encargará de separar las

    componentes de la señal en componente en fase y componente en cuadratura y bajarlas a banda base.

    La señal de salida tras ese proceso podemos expresarla como:

    𝑠1(𝑡) = 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1){𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1] + 𝑖

    ∙ 𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]}

    + 𝐵1𝐷(𝑡 − 𝜏𝑃,1)𝑥𝑃(𝑡 − 𝜏𝑃,1){𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1] − 𝑖

    ∙ 𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]}

    Donde el superíndice ^ indica que son estimaciones.

    El siguiente paso en la fase de seguimiento, como vimos, consiste en multiplicar estas señales por los

    códigos C/A e integrarlas. Vamos a suponer que se multiplica por un único código C/A (ya que los otros

    dos presentarán una correlación muy baja y no afectarán al resultado). Como 𝑥𝐶 y 𝑥𝑃 son ortogonales, la

    correlación cruzada de ambos llevará a la componente 𝑥𝑃 a cero.

    Obtendremos dos salidas, una para cada componente de la señal, e integrando sobre un intervalo de

    tiempo 𝑇𝐶, tendremos:

    𝑆𝐼,1 = ∫ 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑐𝑜𝑠[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]𝑑𝑡𝑇𝐶

    0

    𝑆𝑄,1 = ∫ 𝐴1𝐷(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑥𝐶(𝑡 − 𝜏𝐶,1)𝑠𝑖𝑛[2𝜋(𝑓𝐷,1 − 𝑓𝐷,1)𝑡 + 𝜃1 − 𝜃1]𝑑𝑡𝑇𝐶

    0

    Se puede observar, por tanto, que durante la fase de seguimiento se busca maximizar 𝑆𝐼,1, lo que

    implica reducir 𝑆𝑄,1 hasta llevarlo a cero.

    Este proceso es similar, con algunas pequeñas variaciones, en todos los receptores GPS comerciales.

  • 31

    Lo que pretendemos hacer es procesar de la misma forma las señales en dos receptores que se

    encuentren en puntos distintos, sabiendo que la única diferencia, a efectos de la señal P(Y), que habrá

    entre ambos receptores es la diferencia de tiempo que tarda la señal en llegar desde el satélite a cada

    uno de los receptores. Esto mismo expresado de forma matemática es lo siguiente:

    𝑠𝑒ñ𝑎𝑙 𝑟𝑒𝑐𝑖𝑏𝑖𝑑𝑎 𝑒𝑛 𝑙𝑎 𝑙𝑜𝑐𝑎𝑙𝑖𝑧𝑎𝑐𝑖ó𝑛 1: 𝑥𝑃(𝑡 − 𝜏𝑃,1)

    𝑠𝑒ñ𝑎𝑙 𝑟𝑒𝑐𝑖𝑏𝑖𝑑𝑎 𝑒𝑛 𝑙𝑎 𝑙𝑜𝑐𝑎𝑙𝑖𝑧𝑎𝑐𝑖ó𝑛 2: 𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2)

    Si, una vez bajada la señal a banda base (tanto su componente I como su componente Q), y antes de

    multiplicar por el código C/A, realizamos una correlación de las señales Q de ambos receptores,

    tendremos la siguiente expresión:

    𝑆𝑄,1:2 = ∫ 𝐵1𝐵2𝐷𝑇𝐶

    0

    (𝑡 − 𝜏𝑃,1)𝐷(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2) 𝑥𝑃(𝑡 − 𝜏𝑃,1)𝑑𝑡

    Donde hemos eliminado el término del coseno y el seno ya que, al bajar a banda base, el coseno tiende

    a uno y el seno a cero.

    Si ambos receptores están recibiendo la misma señal P(Y), el resultado de esta operación arrojará un

    pico de correlación cuando ambas señales estén desfasadas una cantidad ∆𝑡 = 𝜏𝑃,2 − 𝜏𝑃,1. La aparición

    de este pico indicará que, efectivamente, ambos receptores están recibiendo la misma señal P(Y) y que,

    por tanto, no están siendo atacados.

    Sin embargo, debemos encontrar alguna forma de medir ese pico de correlación para indicar que,

    efectivamente, no se está produciendo un ataque. Observar directamente un pico en la correlación

    queda rápidamente descartado, ya que implicaría que cada milisegundo deberíamos comprobar si

    aparece un pico o no, y no solo es que el ojo humano no sea tan rápido, es que implicaría que

    deberíamos estar atentos continuamente a la salida de la correlación, lo que no tiene tampoco sentido.

    Tampoco podemos utilizar como medida la magnitud del pico de correlación, ya que para señales

    débiles puede aparecer un pico con una magnitud relativamente baja, mientras que para señales fuertes

    (con una potencia medianamente alta) una correlación negativa puede dar un valor bastante alto,

    debido a la magnitud de las señales, como se observa en la Figura 15.

  • 32

    Figura 15. Correlación de dos señales iguales, pero de distinta magnitud, consigo mismas. Se ve que, en la de la derecha los valores de correlación negativos son más altos que el pico de la de la izquierda.

    Finalmente, abordaremos esta cuestión de la misma forma que se aborda la detección de un satélite en

    el proceso de adquisición. Estableceremos un coeficiente de spoofing o coeficiente de correlación, que

    definiremos como el resultado de la división entre el mayor valor y el segundo mayor valor de la

    correlación.

    Si este coeficiente es mayor que un umbral determinado, concluiremos que no se está produciendo un

    ataque y viceversa.

    4.2 Implementación del mecanismo de autenticación

    Vamos a implementar este sistema de autenticación utilizando la señal P(Y).

    Debido a que desarrollar el hardware necesario para hacer una implementación real del sistema sería

    muy costoso, tanto técnicamente como económicamente, vamos a realizarla en software, utilizando

    para ello como herramientas Matlab y un receptor GPS desarrollado sobre Matlab. Esto nos permitirá,

    además, poder probar el sistema, ya que en la implementación real, tendríamos que realizar el spoofing

    para comprobar que efectivamente funciona, lo cual es ilegal además de peligroso.

    El receptor software GPS que utilizaremos es el denominado “SoftGNSS v3.0” [7], desarrollado por Dennis M.Akos y Darius Plausinaitis, y que se distribuye bajo la licencia de software libre GNU. Nuestro objetivo será que el sistema sea capaz de trabajar con dos ficheros a la vez (en la versión que se distribuye solo trabaja con un fichero) y que nos indique si, en los datos recogidos por cualquiera de los

  • 33

    dos ficheros, se está produciendo un ataque de spoofing o si por el contrario todo funciona de forma correcta.

    4.3 Introducción al receptor software “Soft-GNSS”

    Este software está desarrollado en Matlab, mediante el lenguaje “Matlab Language”, utilizado para

    programar sobre esta plataforma.

    El receptor recibe como entrada un fichero, que deberá ser un fichero generado por la recepción de las

    señales GPS sin ningún tipo de procesamiento, es decir, de las señales en “raw”.

    Durante la primera fase, la de adquisición, se determinan qué satélites están visibles para el receptor.

    Estos satélites son asignados a una estructura de canales, incluyendo información sobre la frecuencia

    Doppler, el desfase del código C/A, la potencia recibida, etc.

    La siguiente fase es la de seguimiento. Durante esta fase el software irá leyendo bloques de bytes del

    fichero correspondientes a un milisegundo de recepción, y realizará las operaciones necesarias para

    determinar los datos que está recibiendo.

    Esto se hace secuencialmente para cada canal, es decir, primero se procesará un canal, y cuando se

    termine de procesar por completo, pasará al siguiente canal y comenzará de nuevo el proceso con este

    nuevo canal.

    Cuando termine la fase de seguimiento de todos los canales, el software decodificará los datos de

    navegación recibidos en cada canal, y los procesará hasta determinar la posición del receptor, arrojando

    como salida una figura similar a la de la Figura 16. En caso de no haber suficientes canales o no ser la

    muestra (el fichero) lo suficientemente largo como para calcular una posición, el programa arrojará

    todos los datos que ha reunido tanto de la fase de adquisición como de la de tracking.

    De forma un poco más precisa, el código sigue el siguiente workflow:

    - Primero, unos poco milisegundos son leídos y pasados a la función de adquisición. Esta función

    buscará la presencia de señales GPS válidas, y para las que haya presentes, estimará la fase del

    código C/A y la frecuencia Doppler. El resultado se almacenará en una estructura llamada

    acqResults.

    - Tras este proceso, la función preRun lee la estructura de resultados, acqResults, e inicializa todos

    los canales necesarios (uno por cada satélite encontrado en el proceso de adquisición). Esta

    función también limpia el workspace de Matlab mediante la sentencia clear.

    - Tras la inicialización de los canales, un bloque de datos, correspondiente a un milisegundo, es

    leído del fichero y pasado a la función de tracking. Las efemérides decodificadas se almacenan

    en una estructura, eph. Los resultados del tracking, tales como las salidas de los correladores,

    discriminadores, etc. Se almacenan en una estructura llamada trackResults.

  • 34

    - Una vez ha terminado el tracking para todos los canales, la función postNavigation comenzará a

    analizar la señal que hemos obtenido. Identificará el comienzo de una sub-trama, el tiempo de

    propagación de la señal y estimará los pseudorangos.

    - Finalmente, se calculan las coordenadas del receptor que generó el fichero y se convierten a un

    sistema de coordenadas como UTM o WGS84.

    Figura 16. Resultado del procesamiento de un fichero en coordenadas UTM.

    Vamos a analizar y a explicar brevemente los ficheros más importantes para nosotros. Como no estamos

    interesados en calcular la posición, no explicaré ninguno de los ficheros que tienen como misión esta

    tarea.

    InitSettings.m

    Es el fichero principal de configuración del software. Creará una estructura, settings, que almacenará las

    variables comunes a todos los bloques que forman el sistema. Esto quiere decir que los cambios que

    hagamos en esta estructura, a través de este fichero, se verán en todas las funciones del programa.

    Los parámetros más importantes a configurar son los siguientes:

    - Settings.fileName: aquí deberemos poner la ruta hacia el fichero que queremos procesar.

    - Settings.IF: frecuencia a la que se encuentran los datos del fichero.

  • 35

    - Settings.samplingFreq: frecuencia de muestreo a la que tomamos los datos del fichero.

    - Settings.msToProcess: número de milisegundos que queremos procesar por canal.

    Hay bastantes más parámetros, aunque los que en general diferirán según cómo hayas hecho la

    adquisición y muestreo de las señales para guardarlas en el fichero son los que he mostrado.

    postProcessing.m

    Este script se encargará de ejecutar todas las funciones, desde la de adquisición hasta la que calcula e

    imprime los resultados de navegación.

    Es el fichero principal que se encarga de conectar entre sí todas las funciones y el resto de los scripts.

    Mantiene las estructuras de datos y se encarga de pasárselas como parámetros a las funciones que los

    necesiten.

    Acquisition.m

    Aquí está definida la función acquisition. Esta función implementa un algoritmo especial para hallar el

    desfase de código y de frecuencia, basado en la transformada de Fourier.

    La función busca la presencia de una señal GPS en pasos de 0.5 kHz. Para cada paso de frecuencia, se

    produce una búsqueda del desfase de código, almacenando el resultado de la correlación, esto es, se

    almacena el resultado de la correlación para cada paso de frecuencia.

    Una vez terminado el barrido en frecuencia, la función busca el pico más alto de todas las correlaciones

    que hemos almacenado. Una vez encontrado este pico, se busca el segundo pico más alto, y se dividen

    ambos picos. El resultado de esta división es el coeficiente que se utilizará para determinar si hay

    presencia de señal GPS o no. El umbral de decisión puede ajustarse en el fichero initSettings.m, en la

    variable settings.acqTreshold.

    Si el coeficiente es mayor que el umbral de decisión, se hace una aproximación más fina de la frecuencia

    de la señal, ya que un error de 0.5 kHz es demasiado alto para que el PLL pueda comenzar con el

    tracking.

    Los parámetros que utiliza la función no son más que los datos del fichero, la estructura settings y una

    tabla, generada anteriormente, con los códigos C/A de cada satélite.

  • 36

    Figura 17. Resultado del proceso de adquisición de un fichero.

    Tracking.m

    Esta función se encarga de hacer el seguimiento de las señales GPS de cada canal.

    Recibe los siguientes parámetros: un bloque de datos del fichero, la estructura channel, que contiene

    información relativa a los canales (si están activos, PRN, etc), y una tabla de códigos C/A.

    La función procesará el fichero, para cada canal, y devolverá dos estructuras: el resultado del tracking,

    en la estructura trackResults, y una versión actualizada de la estructura channel.

    La estructura channel se utiliza para pasar información de cada canal, además de para almacenar nueva

    información del mismo. Además, permite realizar el seguimiento de forma continua, ya que para cada

    milisegundo procesado se almacena la frecuencia, el desfase de código, etc., y estos datos son utilizados

    para procesar el siguiente milisegundo, que a su vez actualizará la estructura una vez termine.

    La estructura trackResults contiene los resultados, para cada canal, de cada uno de los milisegundos

    procesados, y serán mostrados en pantalla una vez finalice el proceso, tal y como se muestra en la

    Figura 18.

    Es en esta función donde se realiza la correlación con los códigos C/A, por lo que será de vital

    importancia cuando queramos implementar el mecanismo anti-spoofing, ya que aquí se encontrarán las

    señales de interés.

  • 37

    Figura 18. Datos generados tras el proceso de tracking para un canal.

    Para iniciar el software, habrá establecer el directorio de trabajo de Matlab en el directorio donde se

    encuentren los ficheros, o bien añadirlo al Path de Matlab, y ejecutar el script init.m.

    4.4 Modificación del receptor software SoftGNSS v3.0

    Para poder implementar el sistema anti-spoofing necesitamos realizar varias modificaciones al programa.

    Primero debemos tener claro qué necesitamos y qué tendremos que modificar. Utilizaremos dos

    ficheros, por lo que debemos añadir la capacidad al sistema de trabajar con dos ficheros.

    Esto significa que tendremos que mantener dos estructuras channel, de manera que cada una mantenga

    los datos del fichero que está procesando. Si quisiéramos hallar la posición de ambos receptores,

    deberíamos añadir también una nueva estructura trackResults, sin embargo no estamos interesados en

    el cálculo de la posición, así que podemos dejar esa estructura tal y como está y que calcule únicamente

    la posición de uno de los dos ficheros.

    Por supuesto, al trabajar con dos ficheros, necesitaremos también dos descriptores de fichero, que es la

    forma en la que MATLAB trabaja con ellos.

    A la hora de realizar la adquisición, deberemos realizarla de ambos ficheros. Para determinar si se está

    sufriendo spoofing, compararemos las señales P(Y) recibidas por un receptor y por el otro, tal y como

    explicamos antes. Sin embargo, debemos comprobar la señal P(Y) recibida en cada receptor y entre los

    mismos satélites, es decir, debemos correlar las señales P(Y) de ambos receptores siempre que

    provengan de un satélite que ambos receptores tengan en común. Esto quiere decir que, tras la

  • 38

    adquisición, deberemos desechar aquellos canales que no correspondan a satélites visibles para ambos

    receptores.

    Una vez terminada la adquisición, viene la fase de seguimiento. Lo ideal sería hacer el seguimiento de

    ambos ficheros en paralelo, pero en Matlab eso no es posible, sino que ha de hacerse de forma

    secuencial. Por tanto, deberemos hacer el tracking, que se realiza en bloques de datos correspondientes

    a un milisegundo, de cada fichero de forma secuencial, es decir, hacer el tracking correspondiente a un

    milisegundo de un fichero, hacer lo mismo con el otro fichero, y así sucesivamente hasta terminar el

    número de milisegundos total procesados. Esto deberá hacerse para cada canal.

    También debemos ser capaces de simular, de alguna manera, el spoofing, ya que como se indicó antes,

    realizarlo de forma real es ilegal. Para simular el ataque deberemos sustituir la señal P(Y) de uno de los

    ficheros por otra señal, por ejemplo un ruido blanco gaussiano, que sería lo esperado si se realizara un

    ataque de estas características.

    Vamos a ir realizando modificaciones al código para lograr estos objetivos.

    initSettings.m

    En primer lugar, necesitamos trabajar con dos ficheros, por lo que el sistema debe ofrecernos esta

    posibilidad. Debemos ser capaces de indicarle al software qué ficheros vamos a utilizar, por lo que

    añadimos en la estructura settings un nuevo parámetro que indique la ruta al segundo fichero con el

    que trabajaremos, llamado secondfileName.

    También debemos ser capaces de indicarle al software si queremos que haga spoofing o no, es decir, si

    queremos que la señal P(Y) de uno de los dos ficheros sea modificada para simular un ataque de

    spoofing. Esta variable solo podrá tener dos valores, true si queremos que sí se haga spoofing, y false, si

    queremos que no se realice el ataque.

    Para tal fin, añadimos una nueva variable a la estructura settings, llamada makeSpoof.

    Antes definimos la estrategia para determinar si se estaba produciendo un ataque o no. Calcularemos

    un coeficiente de spoofing, y en caso de que sea superior a un umbral determinado, concluiremos que

    no se está produciendo ningún ataque. De alguna manera debemos indicar el valor de este umbral, así

    que para tal fin creamos la variable spoofTreshold dentro de la estructura settings.

    Por otro lado, si volvemos a la ecuación de la correlación entre las dos señales P(Y)

    𝑆𝑄,1:2 = ∫ 𝐵1𝐵2𝐷𝑇𝐶

    0

    (𝑡 − 𝜏𝑃,1)𝐷(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 + ∆𝑡 − 𝜏𝑃,2)𝑥𝑃(𝑡 − 𝜏𝑃,1)𝑑𝑡

    Observamos que existe un valor, ∆𝑡, que corresponde a la diferencia entre lo que tarda la señal en llegar

    a un receptor y al otro. En nuestro caso, que trabajamos con ficheros, esta diferencia temporal será un

    desfase provocado no solo por la diferencia entre los tiempos de llegada de la señal a cada receptor,

    sino por la diferencia entre los instantes en que se comienzan a recoger los datos de cada fichero.

  • 39

    Por muy precisos que seamos, los aparatos tienen un tiempo de calentamiento, que será diferente para

    cada uno de los dispositivos que utilicemos para capturar los datos y guardarlos en un fichero, por lo

    que el valor ∆𝑡 puede llegar a ser significativo, de cientos de milisegundos. En el caso de que un humano

    tenga que, manualmente, iniciar cada dispositivo, el retardo puede llegar a ser de varios segundos.

    Aumentar el máximo valor posible de ∆𝑡 implica aumentar el rango de la correlación que tendremos que

    hacer para poder encontrar el pico. Es decir, si ∆𝑡 puede ser de hasta un segundo, quiere decir que

    tendremos que correlar al menos un segundo de la señal P(Y) de ambos ficheros, ya que en caso utilizar

    una señal de menos de un segundo, ∆𝑡 podría caer fuera del rango de correlación y por tanto obtener

    un falso positivo (creer que estamos siendo atacados cuando, en realidad, simplemente es que la

    ventana de tiempo debería ser mayor). Este fenómeno se ilustra en la Figura 19.

    Figura 19. A la izquierda, correlación con una ventana insuficiente, a la derecha la misma correlación con una ventana temporal más grande.

    Para controlar el tamaño máximo de esta ventana temporal, creamos una nueva variable en la

    estructura settings, con el nombre msMaxToCheck, que indicará el número máximo de milisegundos que

    queremos de tamaño para la ventana temporal.

    Por tanto, al fichero initSettings finalmente le hemos añadido las siguientes líneas:

    settings.secondfileName = ‘segundoFichero’; settings.msMaxToCheck = 3000; settings.makeSpoof = false; settings.spoofTreshold = 3.5;

    Los datos que aparecen corresponden a una configuración de ejemplo.

  • 40

    postProcessing.m

    Como indicamos, este script se encarga, entre otras cosas, de mantener y pasar las estructuras a las

    diferentes funciones. Por tanto, aquí realizaremos todos los cambios necesarios a estas estructuras

    antes de pasárselo a las funciones.

    Además, también es el encargado de llamar a las funciones, por lo que si necesitamos llamar más de una

    vez a una función, cambiar el orden de las llamadas, etc. Tendremos que realizar esos cambios en este

    fichero.

    En primer lugar, tenemos que abrir dos ficheros, por lo que tendremos dos descriptores de ficheros

    distintos. Al ser ficheros raw, los abrimos en modo lectura binaria. Para ello están las siguientes líneas

    de código:

    [fid, message] = fopen(settings.fileName, 'rb'); [fid2, message2] = fopen(settings.secondfileName, 'rb');

    Al existir dos ficheros, necesitaremos realizar la adquisición dos veces. Esto implica, además de tener

    que llamar dos veces a la función con los parámetros correspondientes, tener dos estructuras de datos

    para poder almacenar los resultados de la adquisición. También deberemos llamar dos veces a la

    función que imprime estos resultados, para poder evaluarlos.

    disp (' Acquiring satellites for file 1...'); acqResults = acquisition(data, settings);

    disp(' Acquiring satellites for file 2...'); data = fread(fid2, 11*samplesPerCode, settings.dataType)'; acqResults2 = acquisition(data, settings);

    plotAcquisition(acqResults); plotAcquisition(acqResults2);

    Ahora vendría la llamada a la función de tracking. Sin embargo, tal y como indicamos anteriormente,

    solo haremos el seguimiento de los canales que se encuentren en ambos ficheros.

    Esto quiere decir que tenemos que añadir el código necesario para poder eliminar los canales (más bien,

    los satélites asociados a esos canales) que no sean iguales en ambos ficheros.

    Para ello escribimos el siguiente código:

    for i=1:settings.numberOfChannels for b=1:settings.numberOfChannels if(channel(i).PRN == channel2(b).PRN) break; end if(b == settings.numberOfChannels) channel(i).PRN = 0; end end end

  • 41

    Como vemos, recorremos ambos arrays de estructuras de datos, channel y channel2, que es donde

    están almacenados los datos correspondientes a los canales, y aquellos cuyos satélites, dados por el

    campo PRN, no sean comunes a ambos ficheros, los eliminamos, poniéndole el campo PRN a cero.

    Una vez nos hemos asegurado de que vamos a procesar los mismos canales para ambos ficheros,

    necesitamos reordenar las estructuras channel y channel2, de manera que estén ordenadas.

    Esto es necesario porque, cuando realicemos el seguimiento, deberemos hacerlo del mismo satélite en

    ambos ficheros, por lo que en las estructuras channel y channel2 deben aparecer los satélites en el

    mismo orden.

    En la Figura 20 observamos el resultado tras la fase de adquisición de dos ficheros donde no tenían

    visibilidad los mismos satélites (solo uno en común).

    Figura 20. Adquisición de dos ficheros que tienen visibilidad con distintos satélites

    Para ello creamos la función SortStruct, que nos ordenará una estructura, de mayor a menor, según el

    campo que le indiquemos.

    channel = SortStruct(channel, 1); channel2 = SortStruct(channel2, 1);

    El campo PRN es el primero de la estructura channel, por eso le pasamos un “1” como segundo

    parámetro a la función.

    La función SortStruct hace lo siguiente:

    - Crea un cell array de tres dimensiones a partir de la estructura de da