Tôi biết câu hỏi này hơi cũ, nhưng gần đây tôi đã phải tự nghiên cứu nó khi tôi triển khai AES128 trên PIC16 và 8051, và vì vậy tôi cũng tò mò về câu hỏi này.
Tôi đã sử dụng một cái gì đó như thế này: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
và mức sử dụng ram của tôi là vài trăm byte và kích thước nhị phân nhỏ hơn 3kb ROM.
Lời khuyên tốt nhất của tôi là đọc lên trang Wikipedia http://en.wikipedia.org/wiki/Block_codes_modes_of_operation
và hiểu các chế độ khác nhau, ví dụ như cách AES trong chế độ OFB sử dụng chế độ ECB làm khối xây dựng cơ bản. Ngoài ra, XOR'ing (ở chế độ OFB) làm cho nó hoạt động đối xứng, vì vậy mã hóa / giải mã là chức năng tương tự cũng giúp tiết kiệm không gian.
Khi tôi hiểu làm thế nào AES thực sự hoạt động, tôi có thể triển khai nó trong C và sau đó kiểm tra nó theo đặc tả của NIST ** (làm điều này! Nhiều mã được tìm thấy trực tuyến là thiếu sót) và chỉ thực hiện những gì tôi thực sự cần.
Tôi đã có thể điều chỉnh AES128 trên 8051 cùng với một số phần mềm RF khác bằng cách thực hiện tùy chỉnh và tối ưu hóa này. Việc sử dụng RAM (cho toàn bộ hệ thống) đã giảm từ ~ 2,5kb xuống dưới 2kb, nghĩa là chúng tôi không phải nâng cấp lên 8051 với SRAM 4kb, nhưng vẫn có thể tiếp tục sử dụng phiên bản SRAM 2kb rẻ hơn.
** Các vectơ kiểm tra có trong Phụ lục F trong: http://csrc.nist.gov/publications/nistpub/800-38a/addendum-to-nist_sp800-38A.pdf
CHỈNH SỬA:
Cuối cùng cũng nhận được mã trên Github: https://github.com/kokke/tiny-AES-c
Tôi đã tối ưu hóa một chút cho kích thước. Đầu ra kích thước GCC khi được biên dịch cho 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
Vì vậy, việc sử dụng tài nguyên bây giờ là mã 1KB, RAM 204 byte.
Tôi không nhớ cách xây dựng cho PIC, nhưng nếu 8 bit AVR Atmel Mega16 giống như PIC, thì việc sử dụng tài nguyên là:
$ 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
Mã 1,5K và RAM 198byte.