USD

Fundamentos de seguridad de IoT - Parte 1: Uso de la criptografía

Por Stephen Evanczuk

Colaboración de Editores de Digi-Key de América del Norte

Nota del editor: Esta serie que consta de varias partes proporciona una guía práctica para ayudar a los desarrolladores a asegurarse de que se siguen las mejores prácticas desde el principio. Aquí, la primera parte discute los algoritmos de criptografía que subyacen a los diseños seguros. En la Parte 2, se analiza el papel de las claves privadas, la administración de claves y el almacenamiento seguro en los sistemas seguros. En la Parte 3, se examinan los mecanismos incorporados en los procesadores seguros para mitigar las amenazas diseñadas para subvertir la ejecución de software de sistemas y aplicaciones en los dispositivos de IoT. En la Parte 4, se identifica y muestra cómo aplicar mecanismos de seguridad en los procesadores avanzados para ayudar a asegurar el aislamiento necesario para mitigar los ataques al entorno de ejecución de los dispositivos de IoT. En la Parte 5, se describe cómo la seguridad de la IoT continúa desde los dispositivos de IoT a través de medidas de seguridad de mayor nivel utilizadas para conectar esos dispositivos a los recursos de la nube de IoT.

El rápido crecimiento de la dependencia de las aplicaciones de IoT en la industria, la medicina, el transporte y otras aplicaciones críticas ha alterado dramáticamente el panorama de la seguridad. A diferencia de las anteriores aplicaciones empresariales con recursos fácilmente disponibles para procesar algoritmos de seguridad, las aplicaciones de IoT de nivel empresarial se encuentran vulnerables a una creciente gama de amenazas que apuntan a las redes en expansión de dispositivos de IoT con recursos limitados. En su prisa por responder a las oportunidades de IoT que surgen rápidamente, las organizaciones implementan con demasiada frecuencia dispositivos de IoT funcionalmente incapaces de apoyar las medidas de seguridad básicas para proteger los datos almacenados y proteger el intercambio de datos y comandos a través de redes vulnerables.

Hasta dónde deben llegar los desarrolladores para asegurar un diseño, por supuesto, depende de múltiples factores. Cada aplicación se enfrenta a su propio conjunto de amenazas y requiere una evaluación adecuada de los riesgos de esas amenazas. Debido a que los dispositivos conectados se enfrentan a un número poco común de amenazas, cualquier dispositivo de IoT requerirá al menos algunas medidas de seguridad mínimas.

Para algunos, la aplicación de medidas de seguridad sólidas para un dispositivo de IoT simple podría parecer un caso de sobreingeniería, pero incluso los dispositivos simples de sensores de temperatura que carecen de protección suficiente pueden proporcionar a los piratas informáticos un punto de entrada a las redes corporativas [1]. De hecho, la seguridad de la IoT se enfrenta a constantes desafíos debido a la combinación de la conectividad omnipresente que proporcionan las aplicaciones de IoT y los dispositivos de recursos limitados que subyacen a estas aplicaciones. De hecho, incluso en los diseños de dispositivos de IoT con suficientes recursos para ejecutar algoritmos de criptografía en el software, las aplicaciones pueden seguir siendo vulnerables debido a sutiles errores en la aplicación de esos algoritmos.

Este artículo describe las clases básicas de algoritmos de criptografía y explora su papel en la seguridad. A continuación, se muestra cómo los desarrolladores pueden aprovechar los procesadores y los dispositivos especializados de Maxim Integrated, Microchip Technology y Texas Instruments que están diseñados para acelerar estos algoritmos, mejorando diferentes aspectos de la seguridad y simplificando su aplicación.

Los diversos tipos de algoritmos criptográficos y sus funciones

Los algoritmos de criptografía se dividen en tres grandes categorías que abordan los principios de seguridad fundamentales de la confidencialidad, la autenticación (verificar la fuente del mensaje), el no repudio (probar que el remitente creó un mensaje cifrado o firmado) y la integridad:

  • Algoritmos de clave simétrica, donde el algoritmo o cifrado, utiliza la misma clave secreta para cifrar un mensaje legible por el hombre (texto plano) a una versión protegida (texto cifrado), y más tarde para descifrar el texto cifrado de nuevo a texto plano. Los cifrados de clave simétrica se utilizan normalmente para garantizar la confidencialidad. Los algoritmos de criptografía simétrica más comunes incluyen:
    • Triple DES (Data Encryption Standard), también conocido como 3DES, u oficialmente por el Instituto Nacional de Estándares y Tecnología de los Estados Unidos (NIST) como el Triple Algoritmo de Cifrado de Datos (TDEA).
    • Algoritmos Estándar de Cifrado Avanzado (AES)[2], como el AES-256, que utiliza claves de 256 bits.
  • Algoritmos de clave asimétrica, en los que el cifrado utiliza un conjunto emparejado de claves privadas y públicas para cifrar y descifrar un mensaje, por lo general, como parte de protocolos de seguridad más amplios para el acuerdo de claves y las firmas digitales. Los cifrados asimétricos suelen utilizarse para garantizar la confidencialidad, la autenticación o el no repudio. Los algoritmos de criptografía de clave pública incluyen:
    • Algoritmos que utilizan la criptografía de campo finito (FFC), incluyendo:
      • Algoritmo de firma digital del Estándar Federal de Procesamiento de Información (FIPS)
      • Intercambio de claves del Grupo de Tareas de Ingeniería de Internet (IETF) Diffie-Hellman (DH)[3]
    • Algoritmos que utilizan la criptografía de factorización de enteros (IFC), incluyendo:
      • Algoritmo de RSA (Rivest-Shamir-Adleman)[4]
    • Algoritmos que utilizan la criptografía de curva elíptica (ECC), incluyendo:
      • Intercambio de clave de curva elíptica Diffie-Hellman (ECDH)[5]
      • Algoritmo de firma digital de curva elíptica (ECDSA)[6]
  • Algoritmos hash, donde el algoritmo reduce un mensaje original a un valor de longitud fija mucho más pequeño y único, llamado de forma variada hash, digesto o firma. Estas funciones de conversión unidireccionales desempeñan un papel fundamental en la verificación de que el mensaje no ha sido alterado (integridad) y encuentran aplicación en múltiples protocolos que implican un código de autenticación de mensaje (MAC), un código de autenticación de mensaje keyed-hash (HMAC) o funciones de derivación de clave (KDF), entre otros. Los algoritmos criptográficos de hash incluyen:
    • MD5 (resumen de mensajes 5)
    • Algoritmos Hash Seguros (SHA)[7] como el SHA-256, que genera un valor hash de 256 bits para un mensaje.

Como todo algoritmo de criptografía eficaz, los algoritmos mencionados anteriormente están diseñados con múltiples requisitos críticos que van mucho más allá del alcance de este breve artículo. Sin embargo, desde una perspectiva amplia, los algoritmos basados en la clave deben generar un texto cifrado que sea virtualmente imposible (o al menos económicamente inviable) de descifrar sin la clave. Por su parte, los algoritmos de hash necesitan generar hash rápidamente, produciendo el mismo hash para el mismo mensaje de entrada, pero generando un hash marcadamente diferente para incluso un ligero cambio en el mensaje de entrada, mientras que nunca producen el mismo valor de hash para dos mensajes diferentes, y nunca producen el mensaje original dado un valor de hash particular.

Aunque los detalles de estos y otros algoritmos de criptografía difieren ampliamente, todos ellos dependen de una serie de manipulaciones de bajo nivel, transformaciones y otras operaciones matemáticas diseñadas para cumplir estos objetivos generales. Por ejemplo, el cifrado AES convierte el texto plano en texto cifrado utilizando una serie de "rondas" que incorporan "claves redondas" únicas derivadas de la clave secreta original del usuario (Lista 1).

Copy
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)]) 
begin 
   byte  state[4,Nb]
 
  state = in
 
   AddRoundKey(state, w[0, Nb-1])
 
    for round = 1 step 1 to Nr–1
        SubBytes(state)
        ShiftRows(state)
        MixColumns(state)
        AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) 
    end for 
 
    SubBytes(state)
    ShiftRows(state)
    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) 
 
    out = state
end

Lista 1: Este seudocódigo describe las secuencias de operaciones que intervienen en el cifrado de los mensajes, convirtiendo el texto plano (in) en texto cifrado (out) utilizando un conjunto de valores (w) derivados de la clave privada del remitente. (Fuente del código: NIST)

Dentro de una ronda, la transformación SubBytes() reemplaza cada byte utilizando una tabla de sustitución (S-box), que a su vez es el resultado de una serie de transformaciones (Figura 1).

El diagrama de la etapa SubBytes() reemplaza cada byte usando una tabla de sustitución (S-Box)Figura 1: En el cifrado AES, la etapa SubBytes() reemplaza cada byte usando una tabla de sustitución (S-Box). (Fuente de la imagen: NIST)

En el siguiente paso de la secuencia, la transformación ShiftRows() desplaza los bytes de las tres últimas filas, cada una con un número diferente de bytes (Figura 2).

Diagrama de la etapa ShiftRows() en la secuencia de ejecución del cifrado AESFigura 2: La etapa ShiftRows() en la secuencia de ejecución del cifrado AES desplaza las filas aumentando los desplazamientos. (Fuente de la imagen: NIST)

En los últimos pasos de la secuencia, MixColumns() aplica una transformación a cada columna que sustituye cada byte de la columna con los resultados de un polinomio, mientras que AddRoundKey() transforma el resultado realizando una operación de XOR bitado en cada columna utilizando una llave redonda creada para ese fin.

El número total de rondas varía según el tamaño de la llave. El AES-128, que utiliza una llave de 128 bits, requiere 10 rondas, mientras que el AES-192 (tamaño de la llave 192 bits) y el AES-256 (256 bits) requieren 12 y 14 rondas, respectivamente. El descifrado sigue el mismo patrón, invirtiendo los pasos del proceso y sus transformaciones separadas.

Cifras más recientes como el ECDH utilizado para el intercambio de claves y el ECDSA utilizado para las firmas digitales se basan en matemáticas más complejas como las estructuras algebraicas de la curva elíptica ampliamente definidas por la fórmula:

Ecuación 1 Ecuación 1

Con una cuidadosa selección de los parámetros de las curvas a y b y el uso de restricciones adicionales, las curvas exhiben propiedades criptográficas útiles (de nuevo, más allá del alcance de este artículo). Aunque es simple en su concepto, el conjunto específico de parámetros es crítico: Una mala selección de los parámetros de la curva puede dar lugar a que las curvas sigan siendo vulnerables a ataques sofisticados. Para ayudar a eliminar esta posibilidad, el NIST proporciona un conjunto estándar de curvas criptográficamente sólidas que incluyen P-192, P-224, P-256, y otras de fuerza creciente. Los nombres de las curvas corresponden a la longitud de bits del número primo p de los elementos del campo primo subyacente de la curva.

Un desarrollador puede usar estas propiedades con ECDSA para firmar algún mensaje usando una curva acordada y proporcionar al destinatario la clave pública y la firma -un par de números etiquetados r y s. El proceso de firma en sí implica los siguientes pasos:

  • Comenzando con algún punto de la curva, llamado punto base G(x,y), el algoritmo crea una clave pública Q(x,y) multiplicando el punto base por la clave privada del desarrollador (d) modulo p:

Ecuación 2 Ecuación 2

  • Otro punto de coordenadas (x1,y1) se crea utilizando un número aleatorio k en el rango [1 ... n-1]:

Ecuación 3 Ecuación 3

  • H(m), se genera el hash SHA del mensaje m.
  • Utilizando el módulo inverso del número aleatorio k, k-1, los componentes finales r y s de la firma digital se generan de la siguiente manera:

Ecuación 4 Ecuación 4

Ecuación 5 Ecuación 5

El resultado final es un intercambio que autentica el mensaje, confirma su integridad y asegura el no repudio.

Cómo implementar algoritmos de criptografía

La lección objetiva de esta mirada, ciertamente superficial, a estos algoritmos es que los algoritmos criptográficos se basan en una secuencia de operaciones matemáticas diseñadas para que los intentos de comprometer los resultados sean tan costosos desde el punto de vista computacional que es imposible -o inviable- completarlos con la suficiente rapidez como para ser útiles al autor. Además, incluso una inspección superficial de cada algoritmo sugiere que un dispositivo de IoT con recursos limitados probablemente tendrá pocas posibilidades de ejecutar una implementación de software del algoritmo sin comprometer potencialmente los requisitos funcionales primarios del dispositivo. Por último, los detalles precisos del algoritmo más allá de los pasos que se muestran aquí significan que incluso un sutil error de codificación o una pequeña mala interpretación de la norma puede dar lugar a vulnerabilidades de seguridad, o incluso a un fallo total del proceso criptográfico.

Los errores en la implementación de los algoritmos pueden ocurrir incluso en las organizaciones de desarrollo más grandes, y en las aplicaciones que dependen críticamente de esos algoritmos. Por ejemplo, una conocida vulnerabilidad en una consola de juegos surgió porque la implementación de la ECDSA construida por la empresa utilizó un valor constante de k, en lugar de un valor aleatorio para el tipo de cálculo mostrado en la Ecuación 3. Como resultado, los hackers podrían derivar la clave secreta d. El uso de un generador aleatorio defectuoso para crear k llevó a una explotación similar que resultó en una gran pérdida de Bitcoin.

Las capacidades de criptografía basada en hardware incorporadas en los procesadores y los circuitos integrados de seguridad dedicados permiten a los desarrolladores ignorar en gran medida los complejos detalles de la ejecución de los algoritmos de criptografía y centrarse, en cambio, en las ventajas de utilizar esas capacidades para asegurar sus aplicaciones. Estos dispositivos añaden una capa extra de seguridad al integrar los flujos de datos y las operaciones dentro del dispositivo, eliminando una forma común de ataque que controla los buses externos en busca de señales de información privilegiada. Además de proporcionar una implementación confiable de un algoritmo particular, una solución basada en hardware permite a los desarrolladores incorporar la seguridad en los diseños sin comprometer los requisitos fundamentales como la latencia de respuesta y el rendimiento general.

Los aceleradores de criptografía incorporados a estos dispositivos descargan la ejecución de la criptografía del procesador principal, liberándolo para manejar la función principal del diseño. De hecho, el soporte de criptografía basado en hardware se ha convertido en una característica cada vez más común de los procesadores. Al mismo tiempo, no todas las aplicaciones requieren toda la fuerza de las medidas de seguridad apoyadas por los algoritmos descritos anteriormente. De hecho, los desarrolladores pueden encontrar una amplia gama de algoritmos de criptografía acelerada y combinaciones de algoritmos en procesadores como los siguientes:

  • El microcontrolador de 32 bits MAX32631 de Maxim Integrated, que admite los cifrados AES y DSA
  • El MCU MAX32520 de 32 bits de Maxim Integrated, que admite los algoritmos AES, SHA y ECDSA
  • Los miembros de la familia de microcontroladores de 16 bits PIC 24F XLP de Microchip Technology, donde los dispositivos como el PIC24FJ256GA406 admiten los cifrados AES y 3DES
  • Los miembros de las familias de MCU PIC 32MZ de 32 bits y MPU SAM9X60 de 32 bits, donde los dispositivos como el PIC32MZ2048EFM144 y SAM9X60T admiten los códigos AES y 3DES así como las funciones de hash SHA y HMAC
  • Miembros de la familia de MCU SimpleLink de Texas Instruments, como los MCU inalámbricosCC1312R y CC2652R, que admiten los códigos AES, ECDH y ECDSA, así como las funciones hash de SHA.

Otros dispositivos de seguridad como DS28E38 de Maxim Integrated y ATECC608A de Microchip Technology integran aceleradores de cifrado y la funcionalidad relacionada necesaria para acelerar los protocolos de autenticación. Entre sus amplias capacidades de criptografía, estos dispositivos soportan el tipo de funcionamiento de la ECDSA descrito anteriormente. En un dispositivo de IoT o en un periférico inteligente, un procesador anfitrión puede utilizar circuitos integrados de autenticación como estos para crear rápidamente firmas digitales ECDSA P-256 para enviarlas a otro dispositivo o autenticar las firmas ECDSA P-256 de otros dispositivos.

Los procesadores y dispositivos especializados habilitados para la seguridad suelen estar construidos con un amplio marco de seguridad basado en el hardware que proporciona una funcionalidad de seguridad adicional, como los generadores de números aleatorios de alta calidad. Muchos dispositivos que proporcionan este nivel de capacidad aprovechan las fuentes de ruido aleatorio inherentes a los diseños de semiconductores para maximizar la entropía necesaria en los verdaderos generadores de números aleatorios (TRNG). Como se sugiere en el ejemplo de Bitcoin mencionado anteriormente, estos tipos de TRNG son un factor esencial para el correcto funcionamiento de los algoritmos criptográficos.

El soporte integrado para el almacenamiento seguro de claves privadas y otros datos secretos proporcionan una de las capacidades más importantes de los diseños seguros. Otras características arquitectónicas disponibles con estos y otros procesadores similares proporcionan un nivel aún más profundo de apoyo a la seguridad.

Por todas sus capacidades, los procesadores con aceleradores de cifrado integrados y características relacionadas ayudan a simplificar el desarrollo de diseños seguros mediante el uso de librerías de interfaz de programación de aplicaciones (API) sencillas. Las llamadas a funciones intuitivas de la API permiten a los desarrolladores abstraer las implementaciones de seguridad, confiando en la API para acceder a la funcionalidad del hardware subyacente. Por ejemplo, los desarrolladores pueden utilizar el kit de evaluación MAX32520-KIT de de Maxim Integrated para la MCU MAX32520 en combinación con el kit de desarrollo de software Micros (SDK) de Maxim Integrated para construir rápidamente dispositivos seguros de IoT. Junto con los controladores y el middleware asociados, el SDK de Maxim Integrated Micros incluye funciones de muestra que demuestran los patrones de diseño básicos necesarios para cifrar (AES128_ECB_enc()) y descifrar (AES128_ECB_dec ()) los mensajes utilizando el cifrado AES (Listado 2).

Copy
int AES128_ECB_enc(int asynchronous)
{
    printf( asynchronous ? "Test Cipher Async\n" : "Test Cipher Sync\n");
 
    char *_key = "797f8b3d176dac5b7e34a2d539c4ef36";
    char key[MXC_AES_KEY_128_LEN];
    ascii_to_byte(_key, key, MXC_AES_KEY_128_LEN);
 
    const char *iv_src = "";
    char iv_dst[16];
    ascii_to_byte(iv_src, iv_dst, 16);
 
    char *_pt= "00000000000000000000000000000000";
    char pt[MXC_AES_DATA_LEN];
    ascii_to_byte(_pt, pt, MXC_AES_DATA_LEN);
 
    mxc_ctb_cipher_req_t cipher_req = {
        (uint8_t*)pt,
        MXC_AES_DATA_LEN,
        (uint8_t*)iv_src,
        (uint8_t*)result,
        &Test_Callback };
 
    // Reset crypto block
    MXC_CTB_Init(MXC_CTB_FEATURE_CIPHER | MXC_CTB_FEATURE_DMA);
    MXC_CTB_IntEnable(asynchronous);
 
 
    MXC_CTB_Cipher_SetMode(MXC_CTB_MODE_ECB);
    MXC_CTB_Cipher_SetCipher(MXC_CTB_CIPHER_AES128);
    MXC_CTB_Cipher_SetKeySource(MXC_CTB_CIPHER_KEY_SOFTWARE);
 
    // Load key into cipher key register
    MXC_CTB_Cipher_SetKey((uint8_t *)key, MXC_AES_KEY_128_LEN);
 
    if (asynchronous){
        wait = 1;
        MXC_CTB_Cipher_EncryptAsync(&cipher_req);
        while( wait );
    } else {
        MXC_CTB_Cipher_Encrypt(&cipher_req);
    }
    const char *_expected = "322FD6E503395CDB89A77AC53D2B954F";
    char expected[MXC_AES_DATA_LEN];
    ascii_to_byte(_expected, expected, MXC_AES_DATA_LEN);
 
    return AES_check(result, expected, MXC_AES_DATA_LEN);
 
}
 
int AES128_ECB_dec(int asynchronous)
{
    printf( asynchronous ? "Test Cipher Async\n" : "Test Cipher Sync\n");
 
    char *_key = "797f8b3d176dac5b7e34a2d539c4ef36";
    char key[MXC_AES_KEY_128_LEN];
    ascii_to_byte(_key, key, MXC_AES_KEY_128_LEN);
 
    const char *iv_src = "";
    char iv_dst[16];
    ascii_to_byte(iv_src, iv_dst, 16);
 
    char *_pt= "322FD6E503395CDB89A77AC53D2B954F";
    char pt[MXC_AES_DATA_LEN];
    ascii_to_byte(_pt, pt, MXC_AES_DATA_LEN);
 
    mxc_ctb_cipher_req_t cipher_req = {
        (uint8_t*)pt,
        MXC_AES_DATA_LEN,
        (uint8_t*)iv_src,
        (uint8_t*)result,
        &Test_Callback };
 
    // Reset crypto block
    MXC_CTB_Init(MXC_CTB_FEATURE_CIPHER | MXC_CTB_FEATURE_DMA);
    MXC_CTB_IntEnable(asynchronous);
 
 
    MXC_CTB_Cipher_SetMode(MXC_CTB_MODE_ECB);
    MXC_CTB_Cipher_SetCipher(MXC_CTB_CIPHER_AES128);
    MXC_CTB_Cipher_SetKeySource(MXC_CTB_CIPHER_KEY_SOFTWARE);
 
    // Load key into cipher key register
    MXC_CTB_Cipher_SetKey((uint8_t *)key, MXC_AES_KEY_128_LEN);
 
    if (asynchronous){
        wait = 1;
        MXC_CTB_Cipher_DecryptAsync(&cipher_req);
        while( wait );
    } else {
        MXC_CTB_Cipher_Decrypt(&cipher_req);
    }
    const char *_expected = "00000000000000000000000000000000";
    char expected[MXC_AES_DATA_LEN];
    ascii_to_byte(_expected, expected, MXC_AES_DATA_LEN);
 
    return AES_check(result, expected, MXC_AES_DATA_LEN);
}

Listing 2: Los desarrolladores pueden inspeccionar el código de muestra en el paquete de distribución Maxim Integrated Micros SDK para aprender los patrones básicos de diseño necesarios para realizar la encriptación AES (AES128_ECB_enc()) y la desencriptación (AES128_ECB_dec ()) utilizando las funciones de criptografía integrada del MCU MAX32520. (Fuente del código: Maxim Integrated)

Protocolos de autenticación

Las implementaciones de algoritmos de criptografía sólidos son particularmente críticas para proporcionar una base segura para los protocolos de nivel superior utilizados en las aplicaciones. Los protocolos de nivel superior, como el Transport Layer Security (TLS), suelen realizar sus operaciones utilizando un conjunto definido de algoritmos criptográficos, denominado conjunto de cifrado. En el TLS, los algoritmos extraídos de un conjunto de cifrado acordado ayudan a garantizar la autenticación y la confidencialidad en las sesiones de comunicación entre un cliente de un dispositivo de IoT y el servidor anfitrión. El TLS 1.2[8] procede a través de una secuencia específica de transacciones para negociar los parámetros, realizar la autenticación e intercambiar las claves de sesión antes de proceder al intercambio de datos (Figura 3).

Diagrama del protocolo de creación de sesiones TLS 1.2Figura 3: El protocolo de creación de sesiones TLS 1.2 utiliza una variedad de algoritmos de un conjunto de cifrado acordado para la autenticación, el intercambio de claves y el intercambio de datos en curso. (Fuente de la imagen: Texas Instruments)

La autenticación se asegura estableciendo la identidad del servidor (y opcionalmente del cliente) mediante la verificación de los certificados de seguridad, que contienen la respectiva clave pública de cada participante. Aquí, cada participante envía un mensaje cifrado con su clave privada. Dado que la clave pública recibida solo puede descifrar un mensaje cifrado con su clave privada asociada, cada participante puede confirmar que el proveedor de un certificado es realmente el propietario del mismo.

En la siguiente etapa del TLS, los participantes ejecutan una serie de transacciones para crear una clave de sesión compartida. Esta clave de sesión compartida se utiliza luego para cifrar el tráfico real de mensajes, garantizando la confidencialidad de los intercambios de mensajes para esa sesión.

Las múltiples opciones de protocolo permiten a los desarrolladores perfeccionar este proceso genérico de creación de sesiones de TLS, a veces en detrimento de la seguridad general. Además, durante el proceso de intercambio de parámetros, los desarrolladores pueden utilizar un conjunto de cifrado diferente seleccionando una combinación adecuada de algoritmos compatibles con TLS 1.2 para cada fase del protocolo, incluso:

  • Establecimiento clave: RSA, DH, ECDH
  • Autentificación: RSA, DSA, ECDSA
  • Cifras: 3DES, AES
  • Autentificación de mensajes: SHA

La última versión de TLS, TLS 1.3[9], añade seguridad adicional al realizar primero el intercambio de claves para proteger mejor el proceso de creación de sesiones. Principalmente, TLS 1.3 dispone en gran medida del conjunto de cifrado TLS 1.2 en favor de algoritmos más sólidos que incluyen el uso de la función de derivación de claves de extracción y expansión (HKDF) basada en HMAC y el cifrado autenticado con algoritmos de datos asociados (AEAD). Los algoritmos AEAD abordan la amplia necesidad de asegurar la autenticidad, integridad y confidencialidad de los mensajes. Estos algoritmos lo hacen combinando el mensaje encriptado con un MAC que puede ser generado en serie (Figura 4, izquierda), en paralelo (Figura 4, derecha), o en alguna combinación de ambos.

El diagrama de la AEAD proporciona autenticación y confidencialidadFigura 4: La AEAD proporciona autenticación y confidencialidad al incluir un MAC con el texto cifrado utilizando, entre otras técnicas, métodos llamados encrypt-then-MAC (izquierda) y encrypt-and-MAC (derecha) que computan el MAC en serie o en paralelo, respectivamente. (Fuente de la imagen: Wikipedia)

Aumentar la fuerza de seguridad

Esta evolución de los algoritmos de criptografía y protocolos asociados sigue la carrera continua entre los expertos en criptografía decididos a reforzar la seguridad y los igualmente decididos a derrotarla. Por ejemplo, en un esfuerzo por mejorar la seguridad, los expertos crearon la ECDSA como una variante de la CCE de la ASD, que a su vez es una variante de las anteriores cifradas. El resultado es que la ECDSA puede alcanzar la misma fuerza de seguridad que la DSA pero con un tamaño de clave mucho más pequeño.

En criptografía, la fuerza de seguridad del algoritmo se define en términos de x bits y la expectativa de que un ataque requeriría alrededor de 2x operaciones para derivar la clave privada subyacente al algoritmo. Definidos en estos términos, las diferentes clases de algoritmos pueden requerir longitudes de clave significativamente diferentes para lograr niveles de seguridad comparables (Cuadro 1).

Tabla de diferentes clases de algoritmos de criptografíaTabla 1: Diferentes clases de algoritmos de criptografía pueden requerir tamaños de claves significativamente diferentes para las claves públicas (L) o las claves privadas (N, k, f) para lograr niveles comparables de seguridad. (Fuente de la imagen: NIST)

En esta tabla del NIST, los parámetros del algoritmo FFC L y N corresponden a los tamaños de la clave pública y la clave privada, respectivamente. Para los algoritmos IFC y ECC, k y f, respectivamente, corresponden al tamaño de la clave. El NIST señala que los algoritmos con una fuerza de seguridad de 80 libras (fondo naranja en el cuadro) ya no están aprobados para la protección de la información del gobierno, mientras que otros (fondo amarillo) aún no están incluidos en las normas del NIST debido a problemas de eficiencia.

Este paso a una mayor seguridad sigue impulsando la evolución de los cifrados y las suites de cifrado recomendadas. Por ejemplo, el conjunto de algoritmos de seguridad nacional comercial de la Agencia de Seguridad Nacional de los Estados Unidos (NSA) desplazó al anterior conjunto B de la NSA con recomendaciones para el uso de parámetros más sólidos necesarios para proteger la información clasificada como alto secreto (Tabla 2).

Cuadro de algoritmos de criptografía con recomendaciones sobre los niveles mínimos de seguridadTabla 2: El paquete de la CNSA recomendado por la NSA incluye algoritmos de criptografía con recomendaciones sobre los niveles mínimos de seguridad requeridos para proteger información altamente sensible. (Fuente de la imagen: Digi-Key, de los datos de la NSA)

Mirando hacia el futuro, la disponibilidad de capacidades de computación cuántica presentará una dramática discontinuidad en la seguridad en general, y en los algoritmos de criptografía en particular.

Conclusión

Los dispositivos de IoT y otros diseños conectados se enfrentan a un número creciente de amenazas que requieren métodos de seguridad cada vez más robustos basados en una amplia gama de algoritmos de criptografía. Diseñados para hacer de la seguridad de las fisuras una propuesta impracticable, estos algoritmos se basan en una serie de transformaciones y operaciones matemáticas para encriptar el texto plano al texto cifrado y descifrar el texto cifrado de nuevo al texto plano. Como se ha demostrado, es posible utilizar implementaciones basadas en hardware de estos algoritmos para permitir a los desarrolladores construir más fácilmente una fuerte seguridad en un diseño sin comprometer sus requisitos primarios de funcionalidad y rendimiento.

Referencias:

  1. Cómo una pecera ayudó a hackear un casino
  2. FIPS PUB 197: el estándar oficial de AES
  3. IETF RFC 3526 (DH)
  4. NIST SP 800-56B Rev. 1 (DOI) (RSA)
  5. NIST SP 800-56A (ECDH)
  6. FIPS Pub 186-4 (firma digital)
  7. FIPS PUB 180-4: Secure Hash Standard (SHS)
  8. IETF RFC 5246 (TLS 1.2)
  9. IETF RFC 8446 (TLS 1.3)

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de Digi-Key Electronics o de las políticas oficiales de Digi-Key Electronics.

Acerca de este autor

Stephen Evanczuk

Stephen Evanczuk tiene más de 20 años de experiencia escribiendo para y sobre la industria de electrónica en un amplio rango de temas, entre ellos hardware, software, sistemas y aplicaciones, que incluyen IoT. Se doctoróen neurociencias (redes neuronales) y trabajó en la industria aeroespacial en sistemas seguros con distribución masiva y métodos de aceleración de algoritmos. Actualmente, cuando no escribe artículos sobre tecnología e ingeniería, trabaja en aplicaciones de aprendizaje profundo sobre sistemas de reconocimiento y recomendaciones.

Acerca de este editor

Editores de Digi-Key de América del Norte