Como se señaló en un artículo anterior, la capa MAC de 802.15.4 implementa varias características que son utilizadas por el protocolo ZigBee en las capas de red y aplicación. Una de estas características son los servicios de seguridad.
IEEE 802.15.4 establece el algoritmo de encriptación que se utilizará para cifrar los datos que se transmitan. Sin embargo, la norma no especifica cómo deben gestionarse las claves ni qué tipo de políticas de autenticación deben aplicarse. Estas cuestiones se tratan en las capas superiores, gestionadas por tecnologías como ZigBee.
Waspmote permite trabajar tanto en 802.15.4 y ZigBee mediante módulos XBee. Estos módulos implementan el hardware necesario para cifrar los datos utilizando AES con un algoritmo 128b longitud de la llave.
Este artículo muestra cómo manejar cuestiones de seguridad utilizando Waspmote y su API de código abierto. Para saber más sobre los detalles de seguridad de IEEE 802.15.4, por favor lee antes el artículo que trata este asunto: Seguridad en redes 802.15.4 y ZigBee.
Configurar los parámetros de seguridad es una tarea muy sencilla de realizar utilizando la API Waspmote. Toda la información relacionada con las funciones de la librería se puede encontrar en las Guías de Redes 802.15.4 y ZigBee en la sección de Desarrollo de Waspmote.
En primer lugar, hay que activar la seguridad mediante la siguiente función:
xbee802.encryptionMode(1);
El segundo paso es establecer el clave de enlace. Esta clave debe ser la misma en todos los nodos para que puedan comunicarse dentro de la red. Como se ha explicado anteriormente, se trata de una clave de 128b de longitud. La siguiente función establece esta clave:
xbee802.setLinkKey("secreto_clave_enlace");
Activar la seguridad disminuye la Carga útil como muestra la siguiente figura, sin embargo it vale pagando por esta disminución de la información transmitida y garantizando al mismo tiempo la privacidad de nuestra red.
|
@16bit Unicast |
Unicast @64bit |
Difusión |
Cifrado |
98 Bytes |
94 Bytes |
95 Bytes |
NO Cifrado |
100 Bytes |
100 Bytes |
100 Bytes |
Waspmote API te permite establecer la configuración de seguridad en dos sencillos pasos.
ZigBee implementa dos capas de seguridad adicionales a la de 802.15.4: la capa Red y Aplicación capas de seguridad. Los módulos XBee ZigBee integrados en Waspmote también implementan estas dos capas de seguridad adicionales.
Las redes ZigBee necesitan un coordinador para funcionar. Si se activa el cifrado en el coordinador, éste aplicará una política de seguridad a la red cuando se cree.
Activar la seguridad añade un autenticación al proceso de adhesión. Por ejemplo, después de que un enrutador se una a una red, debe obtener el clave de seguridad de la red para autenticarse. Si el dispositivo no puede obtener la clave de seguridad de la red, la autenticación falla y el dispositivo abandona la red, ya que no puede comunicarse con nadie de la red.
En primer lugar, hay que activar la seguridad mediante la siguiente función:
xbeeZB.encryptionMode(1);
La seguridad debe estar activada en todos los nodos, no sólo en el Coordinador.
Las redes XBee ZigBee pueden funcionar utilizando un nodo como Centro de confianza.
A Centro de confianza (TC) es un único dispositivo responsable de determinar quién puede unirse a la red. Si un CT está habilitado, debe aprobar cada router o dispositivo final que quiera unirse a la red. Si un router permite que un nuevo dispositivo se una a la red, el router envía una notificación al TC de que se ha producido una unión. El TC ordena al router que autentique el dispositivo recién incorporado o que fuerce su salida. Algunos perfiles ZigBee públicos requieren un TC.
Para utilizar el TC en una red ZigBee, el coordinador debe configurar correctamente el bit "utilizar centro de confianza" en el parámetro 'Opciones de cifrado' antes de iniciar una red. Sólo el coordinador puede actuar como TC.
La API del Waspmote permite configurar un Coordinador como TC cantando la siguiente función:
xbeeZB.setEncryptionOptions(2):
Las redes XBee ZigBee pueden utilizar tres llaves diferentes:
- Clave de enlacese utiliza para enviar la clave de red cifrada. Si esta clave se establece en cero, entonces la clave se enviará sin cifrar a los nodos de unión. Configurar esta clave utilizando la API Waspmote es tan sencillo como:
xbeeZB.setLinkKey("link_key_secret_");
- Clave de redse utiliza para cifrar todos los datos enviados dentro de la red. Configurar esta clave mediante la API Waspmote es tan sencillo como:
xbeeZB.setNetworkKey("network_key_encr");
- Clave de aplicaciónSe utiliza para cifrar los datos en la capa de aplicación. Es única entre cada par de nodos. Esta clave no es configurable, aunque debemos especificar si se va a utilizar o no con la siguiente función:
xbeeZB.setAPSencryption(XBEE_ON);
Los módulos definen una clave de red y una clave de enlace (clave de enlace del centro de confianza). Ambas claves son de 128 bits y se utilizan para aplicar el cifrado AES a los paquetes de radiofrecuencia.
El coordinador selecciona una clave de seguridad de red mediante el parámetro "Clave de cifrado". Del mismo modo, el coordinador también debe especificar una clave de enlace mediante el parámetro "Clave de enlace".
Cuando un nuevo dispositivo quiere únase a una red segura, debe obtener la clave de red del Coordinador. El coordinador transmitirá la clave de red en claro, o puede cifrarla utilizando un llave de enlace preinstalada. Si el bit "Opciones de cifrado" está configurado para transmitir la clave de red sin cifrar, o si el parámetro "Clave de enlace" está configurado a 0 en el coordinador (seleccione una clave de enlace aleatoria), el coordinador transmitirá la clave de red en claro (sin cifrar). En caso contrario, si el bit "Opciones de cifrado" no está activado y "Clave de enlace" es > 0, la coordinador cifrará la clave de red con la clave de enlace y transmitirá la clave de red cifrada a cualquier dispositivo que se una.
Si un dispositivo que se une no tiene la clave de enlace preconfigurada correcta y la clave de red se envía cifrada, el dispositivo que se une no podrá unirse a la red.
La seguridad de la red requiere Marco de 32 bits contador que debe mantener cada dispositivo. Este contador de tramas se incrementa después de cada transmisión y no puede llegar a 0. Si un vecino recibe una transmisión con un contador de tramas menor o igual que el último contador de tramas recibido, el paquete se descartará.
Para evitar un eventual bloqueo en el que el contador de tramas de un dispositivo llegue a 0xFFFFFFFF, la clave de red debe ser periódicamente actualizado en todos los dispositivos de la red. Para actualizar la clave de red en la red, el coordinador debe emitir el parámetro "Clave de cifrado" con una nueva clave de seguridad. Esto enviará un retransmisión de emisiones en toda la red, haciendo que los contadores de tramas de todos los dispositivos se reinicien a 0 y que los dispositivos empiecen a utilizar la nueva clave de red. Todos los dispositivos también conservarán la clave anterior durante un breve periodo de tiempo hasta que todos hayan cambiado a la nueva clave.
Activar la seguridad disminuye la Carga útil como muestra la siguiente figura, sin embargo vale la pena pagando por esta disminución de la información transmitida y garantizando al mismo tiempo la privacidad de nuestra red.
@16bit Unicast |
Difusión |
|
Cifrado (sin APS) |
66 Bytes |
84 Bytes |
Cifrado (APS) |
62 Bytes |
80 Bytes |
NO Cifrado | 74 Bytes | 92 Bytes |
Referencias externas:
- Guía de redes ZigBee
- API Waspmote