Processing math: 100%

43 votos

Más pequeño de la implementación de AES para los microcontroladores?

¿Alguien puede recomendar un pequeño, implementación libre de AES Rijndael de 128 para los microcontroladores. Idealmente, para los PIC18, a pesar de general aplicación en C sería útil.

La compilación de la axTLS aplicación para PIC18 y el cifrado/descifrado de un bloque requiere de 6KB ROM y 750b de RAM.

Compilación de rijndael-alg-fst.c para PIC18 y el cifrado/descifrado de un bloque requiere 28KB ROM y 0,5 KB de RAM.

Compilación de Brian Gladman de 8-bit AES para PIC18 y el cifrado/descifrado de un bloque requiere 19KB de ROM y 190 bytes de RAM.

¿Hay mejor optimizado PIC variantes específicas disponibles?

(actualizado los requisitos de RAM para axTLS versión)

19voto

Mitchell Watt Puntos 71

Me pregunto ¿cómo se obtiene el 7,5 kB de RAM en uso con axTLS. Mirando el código, todo el contexto se almacena en esta estructura:

typedef struct aes_key_st 
{
    uint16_t rounds;
    uint16_t key_size;
    uint32_t ks[(AES_MAXROUNDS+1)*8];
    uint8_t iv[AES_IV_SIZE];
} AES_CTX;

El tamaño de esta estructura es 2 + 2 + 4 * 15 * 8 + 16 = 504. Veo que no hay variables globales en aes.c, las variables automáticas son todos pequeños, por lo que el uso de la pila también es razonable. Entonces, ¿dónde 7.5 kB ir? Tal vez estás tratando de usar la biblioteca entera en lugar de sólo la extracción de implementación de AES?

De todos modos, esta aplicación se ve bastante simple, yo prefiero que se adhieren a este código y tratar de optimizarlo. Sé que puede ser complicado, pero el aprendizaje de la AES detalles puede ayudar al menos a calcular el mínimo absoluto el uso de la RAM.

Actualización: he intentado compilar esta biblioteca en IA-32 Linux y escribir una simple CBC, AES-128 cifrado de la prueba. Obtuvo los siguientes resultados (el primer número es la longitud de la sección hex):

 22 .data         00000028  0804a010  0804a010  00001010  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 23 .bss          00000294  0804a040  0804a040  00001038  2**5
                  ALLOC

Que sólo 660 bytes .bss (he declarado AES_CTX como una variable global). La mayoría de los .de datos es ocupado por el IV y clave. Yo no incluye .aquí el texto, como usted obtendrá totalmente diferente resultado en el procedimiento de CFP (secciones de datos debe ser casi el mismo tamaño en ambas arquitecturas).

14voto

Morten Jensen Puntos 471

Sé que esta pregunta es un poco viejo, pero recientemente he tenido a la investigación en mí como estoy implementando AES128 en un PIC16 y un 8051, y así que tenía curiosidad acerca de esta cuestión.

He usado algo como esto: http://cs.ucsb.edu/~koc/cs178/proyectos/JT/aes.c y mi ram es el uso de un par de cientos de bytes y el tamaño del binario es de menos de 3 kb de ROM.

Mi mejor consejo es leer en la página de la Wikipedia http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation y comprender los diferentes modos, por ejemplo, cómo AES en modo OFB sorta utiliza BCE modo como un bloque de construcción básico. También el XOR ing (en OFB-modo) hace un simétrica de la operación, de manera de cifrar/descifrar es la misma función que también ahorra espacio.

Cuando entendí cómo AES realmente trabajado, yo podría implementar en C mediante la personalización de un pedazo de código que se encuentra en la web y, a continuación, pruebe contra el NIST especificación* * * (hay que hacer esto! cantidad de código que se encuentra en línea es defectuoso) y la práctica sólo lo que sea absolutamente necesario.

Yo era capaz de encajar AES128 en un 8051, junto con algunos otros RF firmware haciendo esta personalización y optimización. El uso de la memoria RAM (para todo el sistema) bajó de ~2.5 kb justo debajo de 2 kb, lo que significa que no tienes que actualizar a un 8051 con 4 kb de SRAM, pero podría seguir usando el más barato de 2 kb de SRAM versión.

** Prueba de Vectores están en el Apéndice F en: http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf

EDITAR:

Finalmente conseguí el código en Github: https://github.com/kokke/tiny-AES128-C

He optimizado un poco de tamaño. GCC tamaño de salida cuando compilado para ARM:

$ arm-none-eabi-gcc -O2 -c aes.c -o aes.o
$ size aes.o
   text    data     bss     dec     hex filename
   1024       0     204    1228     4cc aes.o

Por lo que el uso de los recursos es ahora un tamaño de 1 kb de código, 204 bytes de RAM.

No recuerdo cómo construir para el PIC, pero si la 8bit AVR de Atmel Mega16 es como la de la foto, el uso de los recursos es:

$ avr-gcc -Wall -Wextra -mmcu=atmega16 -O2 -c aes.c -o aes.o
$ avr-size aes.o
   text    data     bss     dec     hex filename
   1553       0     198    1751     6d7 aes.o

Así 1.5 K código y 198bytes RAM.

6voto

Bauna Puntos 176

Recientemente tomé la axTLS implementación y trabajó en la reducción tanto como podía. Usted puede generar fácilmente las S-cajas de sí mismo y ahorrarse unos cientos de bytes.

static uint8_t aes_sbox[256];   /** AES S-box  */
static uint8_t aes_isbox[256];  /** AES iS-box */
void AES_generateSBox(void)
{
    uint32_t t[256], i;
    uint32_t x;
    for (i = 0, x = 1; i < 256; i ++)
    {
        t[i] = x;
        x ^= (x << 1) ^ ((x >> 7) * 0x11B);
    }

    aes_sbox[0] = 0x63;
    for (i = 0; i < 255; i ++)
    {
        x = t[255 - i];
        x |= x << 8;
        x ^= (x >> 4) ^ (x >> 5) ^ (x >> 6) ^ (x >> 7);
        aes_sbox[t[i]] = (x ^ 0x63) & 0xFF;
    }
    for (i = 0; i < 256;i++)
    {
         aes_isbox[aes_sbox[i]]=i;
    }
}

Usted puede obtener el código fuente completo en: http://ccodeblog.wordpress.com/2012/05/25/aes-implementation-in-300-lines-of-code/

1voto

fabio Puntos 143

Yo uso la aplicación de Texas para msp430 en un microcontrolador Freescale con 512 de Ram y 8k (S08SH8) flash y también el Arduino sin ningún tipo de renovación.

http://www.ti.com/lit/an/slaa547/slaa547.pdf

1voto

Bash Puntos 1680

Usted puede encontrar esta aplicación muy interesante. Es de código abierto AVR cripto-biblioteca.

Usted puede encontrar algunos de los generales (obsoleto) información y estadísticas sobre el tamaño del código y de rendimiento aquí.

AES:

AES information

Sólo he jugado con el SHA-1 fuente de la que lib, así que no puedo comentar sobre AES.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X