Ich weiß, dass diese Frage ein bisschen alt ist, aber ich musste sie erst kürzlich selbst recherchieren, da ich AES128 auf einem PIC16 und einem 8051 implementiere, und deshalb war ich auch neugierig auf diese Frage.
Ich habe so etwas verwendet: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
und meine RAM-Nutzung beträgt ein paar hundert Bytes und die Binärgröße ist weniger als 3 KB ROM.
Mein bester Rat ist, auf der Wikipedia-Seite http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation nachzulesen
und die verschiedenen Modi zu verstehen, zum Beispiel, wie AES im OFB-Modus den ECB-Modus als Grundbaustein verwendet. Auch das XOR'ing (im OFB-Modus) macht es zu einer symmetrischen Operation, so dass das Ver- / Entschlüsseln dieselbe Funktion ist, die auch Platz spart.
Als ich verstand, wie AES wirklich funktionierte, konnte ich es in C implementieren und dann anhand der NIST-Spezifikation testen ** (tun Sie dies! Viel Code, der online gefunden wurde, ist fehlerhaft) und nur das implementieren, was ich unbedingt brauchte.
Durch diese Anpassung und Optimierung konnte ich AES128 zusammen mit einer anderen HF-Firmware auf einem 8051 installieren. Die RAM-Auslastung (für das gesamte System) ging von ~ 2,5 kB auf knapp 2 kB zurück, was bedeutet, dass wir mit 4 kB SRAM nicht auf eine 8051 aktualisieren mussten, sondern weiterhin die billigere 2 kB SRAM-Version verwenden konnten.
** Testvektoren finden Sie in Anhang F unter: http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
BEARBEITEN:
Endlich den Code auf Github: https://github.com/kokke/tiny-AES-c
Ich habe ein bisschen für die Größe optimiert. GCC-Größenausgabe beim Kompilieren für 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
Die Ressourcennutzung beträgt jetzt 1 KB Code, 204 Byte RAM.
Ich erinnere mich nicht, wie man für den PIC baut, aber wenn der 8-Bit-AVR Atmel Mega16 dem PIC ähnelt, ist die Ressourcennutzung:
$ 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
Also 1,5K Code und 198Byte RAM.