현 인류에 있어서 가장 중요한 것 들 중 하나가 있다면 아마 개인정보 일 것 입니다. 그리고 이 개인정보를 지키기 위해서 다양한 방법들이 사용되고 있겠습니다만 가장 중요한 점은 온라인이나 내 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
BlowFish : github.com/rageworx/libblowfish
암호화 데이터 원본
www.learningcontainer.com/mp4-sample-video-files-download/
100MB 용량의 지구본 회전 영상 사용.
-O3 로 최적화 빌드 후 성능
100MB 용량의 크기의 데이터를 암호화 할때 AES-256-ECB 는 최당 4.3MB 를 처리, BlowFish 는 59.3MB 를 처리.
실시간 5GBps 의 데이터를 처리하기엔 이러나 저러나 역부족이나, 일부 패킷을 사용한다면 BlowFish 가 더 빠를수 밖에 없습니다.
추가 테스트
Apple MacBook Air (M1)
6년 전 최고사양 이었던 MacBookPro 에서의 Intel i7 보다 뛰어난 성능을 보여 주는 M1 의 성능은 AES-ECB 가 초당 9.3MB, BlowFish 가 70.5MB 정도의 처리를 하고 있습니다. 빠른 암호화 처리엔 일단 엄청 오래된 알고리즘이긴 하지만 속도가 아쉬운 상태에서는 빠른 처리를 위해 BlowFish 를 고려하는 것이 나쁘진 않아 보입니다. 추가로 CBC 를 처리 할 경우 얼마나 더 느려 지는지 이어서 테스트 해 보도록 하겠습니다
소스코드
Makefile 를 참고해서 압축을 푼 위치 위에 libendetool 및 libblowfish 를 각자 clone 받은 다음 빌드를 해서 library 를 만들어 놓고 빌드가 가능합니다.