이 글은 Openssl에 AES에 대한 예제파일이 없어서 작성 하였다.
Openssl에서 AES코드를 가져와 사용하는 방법에 대해서 알아 보자
C언어로 작성된 보안 알고리즘이 필요하다, 당신은 어떻게 하겠는가?
난 주저 없이 Openssl에서 필요한 알고리즘 구현을 뜯어온다.
1. Openssl에서 AES뜯어내기
http://www.openssl.org 에서 압축된 것을 받아서 압축을 풀면 아래와 같은 화면을 볼 수 있다.
암호화 알고리즘과 해쉬는 crypto 디렉토리에 있다.
해당 폴더에 들어가면 우리가 일반적으로 알고있는 주요 알고리즘 외에 많은 알고리즘을 볼 수 있다.
aes디렉토리에 들어가면 AES알고리즘의 구현을 볼 수 있다.
보통 다른 알고리즘은 이 디렉토리에 예제 파일이 있고 여기서 make를 하면 해당 알고리즘만 컴파일이 된다.
하지만 AES는 예제 파일이 없다... 다른 알고리즘은 해당 디렉토리 혹은 <Openssl디렉토리>/test에 테스트파일이 있다.
이 소스를 수정하기 위해서 aes디렉토리를 원하는 곳으로 복사를 한다.
이제 해야할 것은 컴파일을 해보는 것이다.
하지만 당연히 컴파일은 되지 않는다. 몇가지 문제가 있는데
메이크 파일 작성
일단 Makefile을 수정해야 합니다. 원하시는대로 수정 하시면 될꺼 같구요 저는 아래와 같이 하였습니다.
openssl 종속성 줄이기
이제 파일들을 모두 열어서 include 종속성들을 제거 해야합니다.
#include <openssl/~~~> 형식들을 #include "~~~~"로 바꾸어야 합니다.
사실 임베디드 환경에서 사용하거나 최적화를 한다면 이런식으로 대충 하면 안되겠죠?
필요한 파일들은 e_os.h, e_os2.h, opensslv.h opensslconf.h
또한 aes_wrap.c 를 삭제 해야 합니다. 이 파일은 aes를 이용해서 키를 wrapping하는 알고리즘을 구현 하고 있습니다. 알고리즘의 rfc는 3394( http://www.ietf.org/rfc/rfc3394.txt )입니다.
만약 이 알고리즘을 사용하면서 openssl에서 떼어내기를 원한다면 crypto.h cryptolib.c cryptolib.h mem.c mem_clr.c과 연결되어 있는 종속을 해결 하면 됩니다.
Openssl에서 AES코드를 가져와 사용하는 방법에 대해서 알아 보자
C언어로 작성된 보안 알고리즘이 필요하다, 당신은 어떻게 하겠는가?
난 주저 없이 Openssl에서 필요한 알고리즘 구현을 뜯어온다.
1. Openssl에서 AES뜯어내기
http://www.openssl.org 에서 압축된 것을 받아서 압축을 풀면 아래와 같은 화면을 볼 수 있다.
암호화 알고리즘과 해쉬는 crypto 디렉토리에 있다.
해당 폴더에 들어가면 우리가 일반적으로 알고있는 주요 알고리즘 외에 많은 알고리즘을 볼 수 있다.
aes디렉토리에 들어가면 AES알고리즘의 구현을 볼 수 있다.
보통 다른 알고리즘은 이 디렉토리에 예제 파일이 있고 여기서 make를 하면 해당 알고리즘만 컴파일이 된다.
하지만 AES는 예제 파일이 없다... 다른 알고리즘은 해당 디렉토리 혹은 <Openssl디렉토리>/test에 테스트파일이 있다.
이 소스를 수정하기 위해서 aes디렉토리를 원하는 곳으로 복사를 한다.
이제 해야할 것은 컴파일을 해보는 것이다.
하지만 당연히 컴파일은 되지 않는다. 몇가지 문제가 있는데
- Makefile이 우리가 원하는 대로 실행파일을 만드는 것이 아닌 정적라이브 러리를 만든다.
- aes_cfb.c파일에서 e_os.h파일을 필요로 한다.
- aes_wrap.c 파일은 openssl에서 알고리즘들의 일반화를 위해서 aes를 랩핑하는데 쓴다. 구지 필요는 없다.
- 거의 모든 파일이 <openssl/aes.h>를 참조한다.
- 테스트 파일이 없어 된건지 안된건지 알 길이 없다.
메이크 파일 작성
일단 Makefile을 수정해야 합니다. 원하시는대로 수정 하시면 될꺼 같구요 저는 아래와 같이 하였습니다.
openssl 종속성 줄이기
이제 파일들을 모두 열어서 include 종속성들을 제거 해야합니다.
#include <openssl/~~~> 형식들을 #include "~~~~"로 바꾸어야 합니다.
사실 임베디드 환경에서 사용하거나 최적화를 한다면 이런식으로 대충 하면 안되겠죠?
필요한 파일들은 e_os.h, e_os2.h, opensslv.h opensslconf.h
또한 aes_wrap.c 를 삭제 해야 합니다. 이 파일은 aes를 이용해서 키를 wrapping하는 알고리즘을 구현 하고 있습니다. 알고리즘의 rfc는 3394( http://www.ietf.org/rfc/rfc3394.txt )입니다.
만약 이 알고리즘을 사용하면서 openssl에서 떼어내기를 원한다면 crypto.h cryptolib.c cryptolib.h mem.c mem_clr.c과 연결되어 있는 종속을 해결 하면 됩니다.
