ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่เมื่อเร็ว ๆ นี้ฉันต้องค้นคว้าด้วยตัวเองเพราะฉันใช้ AES128 กับ PIC16 และ 8051 และฉันก็อยากรู้เกี่ยวกับคำถามนี้เช่นกัน
ฉันใช้สิ่งนี้: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
และการใช้หน่วยความจำของฉันคือสองร้อยไบต์และขนาดไบนารีน้อยกว่า 3kb ROM
คำแนะนำที่ดีที่สุดของฉันคืออ่านบนหน้า Wikipedia http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
และทำความเข้าใจกับโหมดต่าง ๆ เช่น AES ในโหมด OFB โหมด sorta ใช้โหมด ECB เป็นโครงสร้างพื้นฐาน นอกจากนี้ XOR'ing (ในโหมด OFB) ทำให้การดำเนินการแบบสมมาตรดังนั้นการเข้ารหัส / ถอดรหัสเป็นฟังก์ชั่นเดียวกันซึ่งยังประหยัดพื้นที่
เมื่อฉันเข้าใจว่า AES ใช้งานได้จริงฉันสามารถนำไปใช้ใน C แล้วทดสอบกับข้อกำหนด NIST ** (ทำสิ่งนี้! รหัสที่พบมากออนไลน์มีข้อบกพร่อง) และใช้สิ่งที่ฉันต้องการเท่านั้น
ฉันสามารถใส่ AES128 บน 8051 ควบคู่กับเฟิร์มแวร์ RF อื่น ๆ ด้วยการปรับแต่งและปรับแต่งนี้ การใช้ RAM (สำหรับทั้งระบบ) ลดลงจาก ~ 2.5kb เหลือเพียง 2kb ซึ่งหมายความว่าเราไม่จำเป็นต้องอัปเกรดเป็น 8051 ด้วย 4kb SRAM แต่สามารถใช้รุ่น SRAM ราคาถูกกว่า 2kb ได้
** เวกเตอร์ทดสอบอยู่ในภาคผนวก F ใน: http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
แก้ไข:
ในที่สุดก็รับรหัสบน Github: https://github.com/kokke/tiny-AES-c
ฉันปรับขนาดให้เหมาะสมเล็กน้อย ขนาดเอาต์พุต GCC เมื่อรวบรวมสำหรับ 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
ดังนั้นการใช้ทรัพยากรจึงเป็นรหัส 1KB, RAM 204 ไบต์
ฉันจำไม่ได้ว่าจะสร้าง PIC อย่างไร แต่ถ้า 8bit 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 และ RAM 198bytes