Tecnicas para la actualizacion de implementaciones de protocolos y mecanismos criptograficos para Tinyos
Resumen
Actualmente existe un incremento del numero de
aplicaciones de las WSN y con ello surgen teorias e
implementaciones de esquemas de seguridad para este tipo de
redes. Este trabajo analiza dichas implementaciones y
consecuentemente ofrece un conjunto de tecnicas que permiten su
actualizacion o adaptacion descendente en las versiones del
sistema operativo para sensores TinyOS.
Abstract At present there is an increase in the
number of WSN applications, which leads to the making of new
theories and implementations of security schemes for this kind of
networks. This paper analyzes these implementations and
accordingly offers techniques that allow its update or descending
adaptation on the versions of the operating system for sensors
TinyOS.
Palabras claves: redes inalambricas de sensores,
seguridad, implementaciones, actualizacion de
implementaciones
Keywords: wireless sensor network, security,
implementations, implementations update
1.
Introduccion
Despues de iniciadas a finales de los años 90,
las Redes Inalambricas de Sensores (WSN) han
evolucionado hasta convertirse en una solucion tecnologica
viable, implementada por diversas organizaciones. De modo
general, este tipo de redes encuentra aplicacion en escenarios
con problemas de monitorizacion, rastreo y control
(monitorizacion ambiental e industrial, rastreo de posicion[1],
control de la carga electrica en areas residenciales, etc).
Dentro de las WSN se han realizado varias investigaciones con el
objetivo de proporcionales servicios de seguridad. A pesar del
reto que esto significa debido a las caracteristicas naturales de
este tipo de redes (limitaciones de los recursos del hardware de
los nodos y comunicacion inalambrica entre estos) estas
investigaciones han dado lugar a varios protocolos de seguridad,
entre los que podemos encontrar: Sistemas de Distribucion de
Claves, Criptografia de Clave Publica y Sistemas de Deteccion de
Intrusos, entre otros. No obstante, pocos de estos protocolos han
sido llevado a la practica y algunas de esas implementaciones no
funcionan sobre las versiones mas recientes de los sistemas
operativos para sensores. Ademas, no se dispone de una
documentacion que facilite el uso o actualizacion de estos
protocolos.
El proposito de este trabajo es, en primer lugar,
documentar las implementaciones de Protocolos y Mecanismos de
Seguridad (PMS) existentes para el sistema operativo para
sensores TinyOS [2]. Por tanto, se estudiara a cabalidad, desde
las generalidades hasta los detalles de cada aplicacion
disponible que implemente un PMS para TinyOS. Dicha documentacion
sera usada con el fin de crear un conjunto de tecnicas
recomendadas para a la hora diseñar o actualizar
estos protocolos. El segundo proposito de este trabajo es validar
la utilidad de estas tecnicas recomendadas en la
actualizacion de uno de una de las aplicaciones estudiadas. Por
consiguiente, se muestran los detalles de las modificaciones
realizadas al protocolo y los resultados en la puesta en practica
de su actualizacion. Finalmente se hace una comparacion de los
resultados obtenidos.
2.
Antecedentes
En la presente seccion abordaremos algunos trabajos
previos de los que veremos sus objetivos, resultados y relacion
con este trabajo. Estos y otros como [3], [4], [5] y [6]
evidencian la importancia del desarrollo e implementacion de
mecanismos criptograficos sobre estas redes. Posteriormente en
las Conclusiones (Seccion 5 en la pagina 16) se compararan
nuestros resultados con los obtenidos en trabajos
anteriores.
Wireless Sensor Network Security: A
Survey [7]
Este trabajo fue realizado en el año 2006 por
John P. Walters, Zhengqiang Liang, Weisong Shi y Vipin Chaudhary
de la Universidad Estatal de Wayne, en el se hace un analisis
profundo de los cuatro asuntos de mayor importancia en el tema de
la seguridad en redes de sensores. Primeramente se analizaron los
obstaculos con los que nos encontramos cuando pretendemos
implementar seguridad para estas redes, es decir, limitacion de
recursos y comunicacion de manera insegura, entre otros. Luego se
estudiaron los requisitos de seguridad que seria necesario
satisfacer, se mostraron los ataques mas comunes sobre este tipo
de redes y finalmente se brindan medidas de defensa contra estos
ataques.
El estudio de este trabajo nos permitio identificar los
ataques y medidas de seguridad de mayor importancia en las WSN.
Luego, partiendo de esto, enfocar las implementaciones que dan
soporte a estas medidas de seguridad. Estas implementaciones
seran descritas en la seccion 4.2 en la pagina siguiente y en la
seccion 4.4 en la pagina 14 se estudiara una de las que tiene
como objetivo la distribucion de claves.
Analysis of Security Threats, Requirements,
Technologies and Standards in Wireless Sensor Networks [8] En
el año 2009 Javier Lopez, Rodrigo Roman y Cristina Alcaraz
de la Universidad de Malaga en España, publicaron este
articulo que tiene como objetivo primario evidenciar la relacion
entre el contexto de la aplicacion para la WSN, sus
requerimientos y mecanismos de seguridad empleados. Ademas, se
analizan algunos estandares de seguridad que tienen en cuenta
esta relacion.
Este trabajo presenta inicialmente de forma clara y
amena conceptos fundamentales acerca de los sensores, las redes
de sensores, amenazas y tecnologias de seguridad. A pesar de no
ser este su tema esencial, nos sirvio para fomentar una base
sobre el tema de la seguridad en estas redes. Posteriormente en
la parte de este trabajo dedicada a la actualizacion de una
aplicacion que implementa seguridad sobre una red, se tiene en
cuenta el aporte de este trabajo.
Implementaciones de algoritmos de seguridad En la
actualidad existen varias implementaciones libres de algoritmos
de seguridad, estas han estado motivadas por las amenazas
demostradas en trabajos como los mencionados anteriormente.
Varios de estos han sido sido llevados a la practica con
resultados positivos [9] [10] y otros han servido de base al
desarrollo de investigaciones posteriores. El cuadro 1 enumera y
referencia cronologicamente las implementaciones de mecanismos de
seguridad analizadas en este trabajo. Estas implementaciones son
tratadas en detalles en la seccion 4.2 en la pagina
siguiente.
Cuadro 1. Implementaciones de
mecanismos de seguridad
Año | Nombre | Objetivo | Version de TinyOS | Referencia | |||
2005 2005 2007 2010 2010 2010 2010 | TinyKeyMan TinyECC AES Triviun MMH | Distribucion simetrica de Distribucion publica de Cifrado por bloques Cifrado continuo Funcion Hash (Autenticidad) Funcion | 1.x 1.1.11 2.x 2.x 2.x 2.x | [9] [10] [11] [11] [12] [11] [13] [11] [14] |
3. Descripcion
del problema
Se pretende compilar las implementaciones
existentes de los protocolos de seguridad para TinyOS, de tal
forma que se disponga de una documentacion que permita el uso de
dichas implementaciones.
Ademas, se estudia y proporciona un conjunto de
"tecnicas recomendadas" que permitan actualizar aquellas
implementaciones que no funcionen en la version mas reciente del
sistema operativo para sensores TinyOS. Estas "tecnicas
recomendadas" se utilizaran en la actualizacion de alguna
implementacion, o en la creacion de una nueva implementacion de
algun mecanismo especialmente importante que no haya sido
implementado.
4. Detalles de la
propuesta
En la presente seccion se abordaran los detalles de
nuestra propuesta; comenzando por la tecnologia utilizada para la
simulacion y modificacion de las implementaciones. Luego se
describen brevemente las implementaciones compiladas, enfatizando
en sus objetivos y funcionamiento. Posteriormente se expone un
conjunto de tecnicas recomendadas para actualizar una
implementacion y luego, estas tecnicas son usadas en la
actualizacion de uno de los PMS descritos en la seccion 4.2.
Finalmente se realiza un analisis comparativo de los resultados
del trabajo con otros similares.
4.1. Tecnologia Utilizada
Teniendo en cuenta los objetivos propuestos abordados en
la introduccion y la formulacion del problema; se hicieron
necesarias herramientas para trabajar sobre el codigo de las
implementaciones de PMS desarrolladas para TinyOS.
TinyOS es probablemente el sistema operativo para
sensores mas usado en la actualidad. Este sigue un modelo de
programacion orientado a eventos y es escrito completamente en
lenguaje nesC [15]. Dicho lenguaje es una extension del lenguaje
C [16] que incorpora su sintaxis y permite ademas la
Programacion Orientada a Componentes [17].
Debido a que el manejo del lenguaje nesC fue fundamental
para desarrollar este trabajo, la tecnologia seleccionada tuvo
dos objetivos principales; en primer lugar la edicion y
depuracion del codigo nesC de las implementaciones de PMS y en
segundo lugar la simulacion de estas implementaciones. Por
consiguiente, se usaron editores de codigo nesC que permitieran
ademas la depuracion y se utilizo un simulador de TinyOS para
Microsoft Windows. Cada una de estas herramientas es descrita a
continuacion.
4.1.1. Edicion y depuracion de codigo nesC NESCDT
[18] es un plugin para la plataforma Eclipse SDK que permite la
edicion de codigo nesC. Realiza completacion automatica de codigo
y resalto de la sintaxis. Ademas identifica graficamente tipos de
archivos (interfaces, componentes y modulos) de un proyecto en
nesC.
Otro editor usado fue Yeti 2 [19]. Este cuenta con las
mismas ventajas de NESCDT, ademas de otras como: validacion en
tiempo real, navegacion por medio de vinculos a traves de
declaraciones, creacion de grafico de componentes, depuraracion y
compilacion 1 . La figura 1 en la
pagina siguiente muestra un ejemplo de la edicion de un codigo en
nesC sobre Yeti 2.
4.1.2. Simulador de TinyOS para Windows
Normalmente la simulacion de TinyOS se hace sobre el sistema
operativo Linux. Los desarrolladores de este simulador
distribuyen paquetes RPM que instalan las herramientas necesarias
para la simulacion. Ademas distribuyen paquetes para un simulador
de Linux sobre Windows conocido como CygWin [21].
Para la simulacion de las implementaciones de PMS se
usaron los Paquetes de TinyOS para CygWin disponibles en
[22]. Fueron instaladas conjuntamente las versiones 1.1.15 y
2.0.2 de TinyOS. La figura 2 en la pagina siguiente muestra la
compilacion paralela de dos aplicaciones para versiones distintas
de TinyOS.
4.2. Implementaciones Existentes de Protocolos y
Mecanismos de Seguridad
Asuntos como la Autenticacion y la
Administracion de Claves son criticos dentro de la
seguridad en una red de sensores. Debido a las restricciones de
hardware de sus nodos no es possible el uso de
Figura 1. Edicion de codigo nesC
sobre Yeti 2
Figura 2. Versiones 1.1.15 y 2.0.2
de TinyOS instaladas conjuntamente
Los esquemas tradicionales de seguridad como la
Criptografia de Clave Publica (PKC) o un Centro de
Distribucion de Claves (KDC). Debido a esto han surgido
varias propuestas que intentan proveer esquemas de seguridad para
este tipo especial de redes, aunque no todas han sido llevadas a
la practica, se dispone actualmente de varias implementaciones
basadas en estos esquemas.
A continuacion analizaremos algunas de las
implementaciones disponibles en la actualidad de PMS para redes
de sensores. De cada una de estas veremos sus objetivos y version
de TinyOS para la que fue diseñada, describiremos su
funcionamiento y en caso de ser necesario, se expondra la
estructura de la implementacion con sus componentes e
interfaces.
4.2.1. Algoritmos de cifrado y autenticidad para
TinyOS
Sylvain Pelissier del Ecole Polytechnique Federale
de Lausanne ha desarrollado varias implementaciones de
algoritmos criptograficos para TinyOS 2.x. Como resultado de esto
ha obtenido las interfaces descritas a continuacion y los
componentes que las implementan, ademas para cada una de estas la
autora proporciona aplicaciones de ejemplo [11].
AES Esta interfaz implementa una version del
Algoritmo de Cifrado Estandar [23] para la codificacion
por bloques, esta define los siguientes comandos: encrypt para
cifrar un bloque de texto plano, decrypt descifra un bloque de
texto (criptograma) y keyExpansion calcula la clave extendida por
medio de un algoritmo de planificacion; dicha clave extendida
depende de la secreta conocida por el cliente y es utilizada para
el cifrado y descifrado de los bloques.
Para el uso correcto de esta interfaz debe inicialmente
contarse con una clave secreta. Esta pudiera obtenerse de los
mecanismos descritos en las secciones 4.2.2 y 4.2.3 y partiendo
de ella debe generarse la clave extendida mediante el comando
keyExpansion, luego usar esta en la codificacion y decodificacion
de los bloques con los comandos correspondientes. La figura 3
muestra el diagrama de componentes basico de una aplicacion que
usa la interfaz AES, y la figura 4 muestra el resultado de la
codificacion de 2 bloques de 16 bytes cada
uno.
Figura 3. Diagrama de componentes
de una aplicacion que usa AES
Figura 4. Resultado de la
codificacion con AES
Trivium Esta interfaz proporciona comandos para
el cifrado continuo basandose en el metodo Trivium [12]. Dicha
interfaz cuenta con tres comandos: gen keystream para generar
bytes aleatorios que seran usados conjuntamente con el texto
plano o el criptograma como entrada de una funcion XOR [24], el
segundo comando se nombra key init y es usado para la
inicializacion de la clave y del Vector de
Inicializacion (IV) [12], el tercer comando se nombra
process bytes y se usa para el cifrado y descifrado de los
mensajes.
Junto a la implementacion se proporcionan dos
aplicaciones que ejemplifican el uso de esta interfaz: una de
ellas para un procesador de 8 bits y otra para uno de 16 bits. En
cada caso debe contarse con una clave secreta del cliente y un
IV. Cada aplicacion simula un trasmisor y un receptor, para esto
define estados en los que realiza cada funcion. La clave secreta
y el IV se usan para la inicializacion de estos estados por medio
del comando key init. Este seria el primer paso, le sigue, la
codificacion y decodificacion del mensaje con el comando que
corresponde. En la figura 5 se muestra los resultados de la
codificacion/decodificacion de un mensaje con Trivium.
Message: Hello world
Encryption (hexadecimal): ec 5d 00 01 19
04 ef 50 98 e1 da 73
Message decryted: Hello world
Figura 5. Resultado de la
codificacion con Trivium
MMH y Poly Estas interfaces implementan funciones
hash universales para proporcionar autenticidad a los mensajes.
MMH es una Funcion Multimodular y Multilineal [13],
mientras que Poly se basa en el modelo descrito por Ted Krovetz y
Phillip Rogaway en [14]. Estas interfaces deben usarse
conjuntamente con un mecanismo de cifrado como los proporcionados
por AES o Trivium, un ejemplo de esto se muestra en la figura
6.
Figura 6. Diagrama de componentes
de una aplicacion que usa Trivium conjuntamente con
MMH
Ambas interfaces solo disponen del comando
hash por medio del cual se obtiene un numero entero de
32 bits que representa el codigo de autenticidad del
mensaje, este es calculado en funcion del mensaje y la clave del
cliente. En la figura 7 se muestra el resultado de la aplicacion
de la funcion de autenticacion de la interfaz MMH conjuntamente
con Trivium.
Figura 7. De izquierda a derecha:
Resultado de la aplicacion de MMH y Poly con Trivium
Puede notarse que no existen diferencias en cuanto a los
resultados de cada funcion de autenticidad, pero si se realiza un
analisis de complejidad a las correspondientes implementaciones
se observa que Poly presenta mayor complejidad computacional que
MMH lo cual debe ser considerado en las WSN.
4.2.2. Distribucion de clave
simetrica
En la Criptografia de Clave Simetrica el tema
de mayor importancia es el Establecimiento de Claves
[23] cuyo objetivo es hacer disponible una clave secreta
compartida para dos o mas partes interesadas en cifrar su
comunicacion. Seguidamente veremos una propuesta de los
investigadores Donggang Liu y Peng Ning, ambos de la Universidad
Estatal de Carolina del Norte en los Estados Unidos. Estos
implementaron una aplicacion para la version 1.x de TinyOS
nombrada TinyKeyMan.
TinyKeyMan es un mecanismo criptografico para el
establecimiento de claves simetricas en una WSN. Este mecanismo
implementa el Esquema Polinomico de Predistribucion de Claves
Basado en Depositos, un Esquema Aleatorio de Asignacion
de Subconjuntos y un Esquema Matricial de
Predistribucion de Claves [9]. Segun los autores, estos
esquemas garantizan una alta probabilidad de establecimiento de
claves, tolerancia de captura de nodos y baja carga computacional
y de comunicacion.
El diagrama de la figura 8 corresponde a una aplicacion
sobre TinyKeyMan. En este se muestra la relacion entre el
componente principal de la aplicacion (Simulation) y los
componentes de TinyKeyMan. Desde este componente principal se
utiliza el comando SecretAssign de la interfaz SetupServer para
obtener una Parte Polinomica [25] en funcion del ID del
nodo solicitante.
Figura 8. Diagramas de componentes
de una aplicacion sobre TinyKeyMan
Una vez que el nodo haya obtenido su parte polinomica
puede establecer una clave compartida con otro nodo (conocido su
ID) mediante el comando establish key de la interfaz Sensor. Esta
interfaz define ademas el evento keyEstablished para notificar
que se ha acordado una clave con el nodo especificado y pasar
dicha clave al nodo solicitante como parametro del evento. Para
establecer una clave compartida entre dos nodos, estos deben
hacer llamadas semejantes a establish key. En la figura 9 se
muestra un ejemplo del establecimiento de una clave compartida
entre el nodo 0 (ID=0) y el nodo 1 (ID=1), donde la constante TOS
LOCAL ADDRESS contiene el ID del nodo.
Despues que la aplicacion recibe el evento
keyEstablished notificando que ya se acordo la clave compartida
con su vecino puede comenzar la transmision de mensajes cifrados
con esta clave. En la figura 10 en la pagina siguiente se muestra
el resultado del uso de TinyKeyMan para establecer una clave
entre dos nodos.
Una vez obtenida la clave compartida pudiera usarse uno
de los algoritmos de cifrado tratados en la seccion 4.2.1 en la
pagina 5 para la codificacion y decodificacion de los
mensajes.
Finalmente se tiene que TinyKeyMan implementa dos de los
esquemas descritos anteriormente de forma separada: Simulation
para el Esquema Aleatorio de Asignacion de Subconjuntos
y SimulationG
Figura 9. Codigo para establecer
una clave entre dos sensores utilizando TinyKeyMan
0: 0 and 1 have set up key
0: key=B77B 8ADF 715A FBB2
1: 1 and 0 have set up key
1: key=B77B 8ADF 715A FBB2
Figura 10. Resultado de
TinyKeyMan
Para el Esquema Matricial de Predistribucion de
Claves. O sea, existen dos aplicaciones distintas en la
distribucion de TinyKeyMan. Gracias a esto podemos obtener
versiones distintas de la aplicacion y comparar los resultados de
cada una [9]. Si se desea Compilar una o otra aplicacion debe
modificarse el Makefile del proyecto TinyKeyMan.
4.2.3. Distribucion de clave publica
Anteriormente se ha descrito la dificultad del uso de
algoritmos clasicos como RSA [26] o DSA [27] para la distribucion
de claves publicas dentro de una WSN. A continuacion veremos una
propuesta realizada por An Liu y Peng Ning,
ambos del Departamento de Ciencias de la Computacion de la
Universidad Estatal de Carolina del Norte. Dicha propuesta se
nombra TinyECC y pretende la distribucion de claves publicas en
una WSN.
TinyECC es una implementacion del Esquema Criptografico
de Claves Publicas [23], esta se basa en una especificacion para
redes de sensores propuesta por An Liu y Peng
Ning en [10] de la Criptografia de Curva Eliptica
de Koblitz [28]. Se han desarrollado tres versiones de TinyECC
para TinyOS 1.1.11, pero para el estudio en esta seccion
describiremos solo la version 0.3, aunque en algun momento se
hagan aclaraciones con respecto a las versiones
anteriores.
Desde su primera version, esta aplicacion cuenta en su
implementacion con seis interfaces las cuales son comentadas a
continuacion.
NN Define operaciones algebraicas sobre numeros
naturales grandes que normalmente no son soportadas por los tipos
de datos primitivos de nesC.
ECC Define operaciones basicas sobre una curva
eliptica, ademas de otras operaciones extendidas basadas en el
metodo de la ventana deslizante [29].
ECDSA Define funciones para la generacion y
verificacion de la firma de autenticidad adjunta al mensaje. Esta
firma depende directamente del mensaje y de la clave
privada.
SHA1 Define las funciones del Algoritmo de Hash
Seguro SHA-1 [30].
CurveParam Define dos funciones: get param para
obtener los parametros de la curva eliptica y omega mul para la
multiplicacion optimizada con omega. En los modulos
secp128*.nc, secp160*.nc y secp192*.nc se implementa esta
interfaz. Dichos parametros de la curva pueden ser modificados en
la seccion "choose curve parameter " del archivo
Makefile.
Una aplicacion que pretenda hacer uso de la distribucion
de claves publicas proporcionada por TinyECC debe de incluir los
componentes listados en el cuadro 2 en la pagina siguiente y
hacer uso de las interfaces de la segunda columna de este cuadro.
La figura 11 en la pagina siguiente muestra el ejemplo de una
aplicacion que ademas de los componentes nativos de TinyOS,
utiliza los componentes requeridos para el uso de
TinyECC.
Puede notarse en la figura 11 en la pagina siguiente,
que la aplicacion que ella representa difiere de una aplicacion
clasica para recibo y envio de mensajes, solamente en la
inclusion de ECCC, ECDSAC y NNM
EL PRESENTE TEXTO ES SOLO UNA SELECCION DEL TRABAJO
ORIGINAL.
PARA CONSULTAR LA MONOGRAFIA COMPLETA SELECCIONAR LA OPCION
DESCARGAR DEL MENU SUPERIOR.