나는이 질문이 약간 오래되었다는 것을 알고 있지만 PIC16과 8051에서 AES128을 구현할 때 최근에 스스로 연구해야 했으므로이 질문에 대해서도 궁금했습니다.
나는 다음과 같은 것을 사용했다 : http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
그리고 내 램 사용량은 몇 백 바이트이고 이진 크기는 3kb ROM보다 작습니다.
가장 좋은 조언은 Wikipedia 페이지 ( http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation )를 읽고
다양한 모드를 이해하는 것입니다. 또한 XOR (OFB 모드)은 대칭 작업이므로 암호화 / 암호 해독은 공간을 절약하는 동일한 기능입니다.
AES가 실제로 어떻게 작동하는지 이해하면 C로 구현 한 다음 NIST 사양 ** (이것! 많은 온라인 코드에서 결함이 있음)에 따라 테스트하고 절대적으로 필요한 것만 구현할 수 있습니다.
이 사용자 지정 및 최적화를 수행하여 다른 RF 펌웨어와 함께 8051에 AES128을 맞출 수있었습니다. 전체 시스템에 대한 RAM 사용량은 ~ 2.5kb에서 2kb 바로 아래로 내려갔습니다. 즉, 4kb SRAM을 사용하여 8051로 업그레이드 할 필요는 없지만 저렴한 2kb SRAM 버전을 계속 사용할 수 있습니다.
** 테스트 벡터는 부록 F에 있습니다 : http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
편집하다:
마지막으로 Github에서 코드를 얻었습니다 : https://github.com/kokke/tiny-AES-c
크기에 맞게 조금 최적화했습니다. ARM 용으로 컴파일 될 때 GCC 크기 출력 :
$ 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
따라서 리소스 사용량은 이제 1KB 코드, 204 바이트 RAM입니다.
PIC를 빌드하는 방법은 기억 나지 않지만 8 비트 AVR Atmel Mega16이 PIC와 같은 경우 리소스 사용량은 다음과 같습니다.
$ 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
따라서 1.5K 코드와 198 바이트 RAM.