
C로 작성된 소형 휴대용 AES128/192/256
이것은 C로 작성된 AES ECB, CTR 및 CBC 암호화 알고리즘의 작고 휴대성이 뛰어난 구현입니다.
aes.h에서 AES192 또는 AES256 기호를 정의하여 기본 키 크기인 128비트를 192비트 또는 256비트로 변경할 수 있습니다.
API는 매우 간단하며 다음과 같은 형태입니다 (C99 <stdint.h> 스타일의 유형 주석을 사용합니다):
/* Initialize context calling one of: */
void AES_init_ctx(struct AES_ctx* ctx, const uint8_t* key);
void AES_init_ctx_iv(struct AES_ctx* ctx, const uint8_t* key, const uint8_t* iv);
/* ... or reset IV at random point: */
void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv);
/* Then start encrypting and decrypting with the functions below: */
void AES_ECB_encrypt(const struct AES_ctx* ctx, uint8_t* buf);
void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf);
void AES_CBC_encrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length);
void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length);
/* Same function for encrypting as for decrypting in CTR mode */
void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length);
중요 참고 사항:
aes.h에서 CBC, CTR 또는 ECB 기호를 정의하여 운영 모드 중 일부 또는 전체를 선택적으로 사용할 수 있습니다 (자세한 내용은 주석을 읽으십시오).
C++ 사용자는 aes.h 대신 aes.hpp를 #include해야 합니다.
악의적인 입력으로 인한 경계를 벗어난 메모리 접근 오류에 대한 내장된 오류 검사 또는 보호 기능이 없습니다.
이 모듈은 ARM용으로 컴파일할 때 200바이트 미만의 RAM과 1-2K ROM을 사용하지만, 활성화된 모드에 따라 결과는 다를 수 있습니다.
제가 본 C 구현 중 가장 작은 축에 속하며, 더 작은 구현을 알고 계시다면(또는 이 코드에 대한 개선 사항이 있다면) 저에게 연락해 주십시오.
저는 64비트 x86, 32비트 ARM 및 8비트 AVR 플랫폼에서 이 코드를 성공적으로 사용했습니다.
CTR 모드만 ARM용으로 컴파일했을 때의 GCC 크기 출력:
$ arm-none-eabi-gcc -Os -DCBC=0 -DECB=0 -DCTR=1 -c aes.c
$ size aes.o
text data bss dec hex filename
1171 0 0 1171 493 aes.o
.. 그리고 THUMB 명령어 세트로 컴파일하면 코드 크기가 1K보다 훨씬 작아집니다.
$ arm-none-eabi-gcc -Os -mthumb -DCBC=0 -DECB=0 -DCTR=1 -c aes.c
$ size aes.o
text data bss dec hex filename
903 0 0 903 387 aes.o
저는 Free Software Foundation, ARM GCC 컴파일러를 사용하고 있습니다:
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (4.8.4-1+11-1) 4.8.4 20141219 (release)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
이 구현은 다음 문서의 데이터와 대조하여 검증되었습니다:
미국 국립표준기술연구소 특별 간행물 800-38A 2001판 부록 F: AES 운영 모드의 예시 벡터.
문서의 다른 부록은 예를 들어 패딩, CTR 모드에서의 IV 및 nonce 생성 등 구현 세부 사항에 유용합니다.
이 프로젝트에 기여해 주신 모든 좋은 분들께 진심으로 감사드립니다.
이 저장소의 모든 자료는 퍼블릭 도메인에 있습니다.