Je sais que cette question est un peu ancienne, mais je viens tout juste de faire des recherches moi-même, alors que je m’applique à AES128 sur un PIC16 et un 8051, et j’étais donc curieux de connaître cette question.
J'ai utilisé quelque chose comme ceci: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
et mon utilisation de RAM est de quelques centaines d'octets et la taille binaire est inférieure à 3 Ko de ROM.
Mon meilleur conseil est de lire sur la page Wikipedia http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
et de comprendre les différents modes, par exemple comment AES en mode OFB utilise le mode ECB comme bloc de construction de base. De plus, le XOR (en mode OFB) en fait une opération symétrique. Crypter / décrypter est donc la même fonction, ce qui permet également de gagner de la place.
Lorsque j'ai compris le fonctionnement réel d'AES, je pouvais l'implémenter en C, puis le tester par rapport à la spécification NIST ** (beaucoup de code trouvé en ligne est défectueux) et ne mettre en œuvre que ce dont j'avais absolument besoin.
J'ai pu adapter AES128 sur un 8051 avec un autre micrologiciel RF en effectuant cette personnalisation et cette optimisation. L'utilisation de la mémoire RAM (pour l'ensemble du système) est passée d'environ 2,5 Ko à un peu moins de 2 Ko, ce qui signifie que nous n'avons pas eu besoin de passer à une 8051 avec SRAM de 4 Ko, mais que nous pouvions continuer à utiliser la version moins coûteuse de SRAM de 2 Ko.
** Les vecteurs de test figurent à l’Annexe F à l’ adresse suivante : http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
MODIFIER:
Enfin obtenu le code sur Github: https://github.com/kokke/tiny-AES-c
J'ai optimisé un peu pour la taille. Sortie de taille GCC lors de la compilation pour 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
Ainsi, l’utilisation des ressources est désormais de 1 Ko, soit 204 octets de RAM.
Je ne me souviens pas comment construire pour le PIC, mais si le AVR Atmel Mega16 à 8 bits ressemble à un PIC, l'utilisation des ressources est la suivante:
$ 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
Donc 1,5K code et 198bytes de RAM.