본문 바로가기

내가 작업한 것들/소프트웨어

빠른 암호화를 위한 AES 와 BlowFish 간의 성능 측정

 현 인류에 있어서 가장 중요한 것 들 중 하나가 있다면 아마 개인정보 일 것 입니다. 그리고 이 개인정보를 지키기 위해서 다양한 방법들이 사용되고 있겠습니다만 가장 중요한 점은 온라인이나 내 PC 에 있는 정보 뿐만 아니라 어딘가 IoT 기기간에 흘러 다니는 것들 등을 모두 포함 하면 일반 평문으로 정보가 저장 되는 것은 집의 문을 활짝 열어 두고 다 훔쳐 가라는 대인배 아닌 대인배가 되는 것과 다를 바 없을 것이란 점 입니다.

 

 아마 현재 인류가 사용하는 암호화 기술은 대부분 AES 암호화를 기반으로 한 알고리즘에서 CBC ( Chain Block Chaining ) 같은 지속되는 암호화 키 길이 때문에 발생할 수 있는 패턴을 제거해 주는 기술까지 다양한 종류가 있을 듯 합니다만, 문제는 데이터를 저장만 해 두기 위한 알고리즘과, 실시간으로 많은 데이터를 처리 할 때 필요한 알고리즘은 많은 차이가 있어야 한다는 점 입니다.

 

 그간 libEndeTool 이라는 라이브러리를 OpenSource 로 AES-256-CBC 와 BASE64 를 통한 테스트기반으롤 저장하는 간편한 기능을 사용하고 있었는데, 이 라이브러리의 단점은 대용량 파일 처리가 느리다는 점 입니다. 아마 모든 AES 알고리즘 기반 암호화 알고리즘의 단점일 수 있겠지만, 문제는 느리다는 이유가 바로 키 길이에 따라 발생하는 패턴을 없애기 위해 CBC 를 처리하고 있다는 점 입니다. 이 CBC 가 전체적인 성능을 모두 까먹고 있는 것이고, 만약 이 CBC 대신 가장 기본적인 알고리즘 만으로 데이터를 짧게 처리해서 패킷 단위로 나눠 매번 키를 다르게 해서 처리 한다는 가정으로 과연 이 AES 와 BlowFish 간의 데이터 성능 차이는 얼마나 날까? 라는 의문을 기반으로 실험을 진행 해 보기로 했습니다.

 

테스트 기반 환경

Apple MacBook Pro 2015 CTO ( Intel i7-5557U 3.1GHz ) + MacOS Mojave

 

조건

CPU에서 AES 명령어를 쓰지 않아야 하는 상태

 

컴파일러

Apple LLVM version 10.0.1 (clang-1001.0.46.4)

 

사용된 소스

AES-256 : github.com/rageworx/libendetool

 

rageworx/libendetool

Encode/Decode library for string, stream data with AES-256-CBC and BASE-64. ( LZMAT compression is option ) - rageworx/libendetool

github.com

BlowFish : github.com/rageworx/libblowfish

 

rageworx/libblowfish

The Blowfish encryption library for C++ library. Contribute to rageworx/libblowfish development by creating an account on GitHub.

github.com

암호화 데이터 원본

www.learningcontainer.com/mp4-sample-video-files-download/

 

11 Sample video files | MP4 sample download - Learning Container

Sample video files are available for your testing purpose. Here, MP3, AVI, MOV, MPG, 3GP, OGV, MKV, WEBM, FLV, and much more for download.

www.learningcontainer.com

100MB 용량의 지구본 회전 영상 사용.

 

-O3 로 최적화 빌드 후 성능

Intel MacBook Pro 2015 에서의 성능

100MB 용량의 크기의 데이터를 암호화 할때 AES-256-ECB 는 최당 4.3MB 를 처리, BlowFish 는 59.3MB 를 처리.

실시간 5GBps 의 데이터를 처리하기엔 이러나 저러나 역부족이나, 일부 패킷을 사용한다면 BlowFish 가 더 빠를수 밖에 없습니다.

 

추가 테스트

Apple MacBook Air (M1)

Apple MacBookAir M1 에서의 성능

 6년 전 최고사양 이었던 MacBookPro 에서의 Intel i7 보다 뛰어난 성능을 보여 주는 M1 의 성능은  AES-ECB 가 초당 9.3MB, BlowFish 가 70.5MB 정도의 처리를 하고 있습니다. 빠른 암호화 처리엔 일단 엄청 오래된 알고리즘이긴 하지만 속도가 아쉬운 상태에서는 빠른 처리를 위해 BlowFish 를 고려하는 것이 나쁘진 않아 보입니다. 추가로  CBC 를 처리 할 경우 얼마나 더 느려 지는지 이어서 테스트 해 보도록 하겠습니다

 


 

소스코드

ciphertest-1.zip
0.01MB

Makefile 를 참고해서 압축을 푼 위치 위에 libendetool 및 libblowfish 를 각자 clone 받은 다음 빌드를 해서 library 를 만들어 놓고 빌드가 가능합니다.