이전 글 에 이어서 이번엔 TwoFish 를 구현한 다음 간단히 실험을 해 보았습니다.
libtwofish 는 libblowfish 와 동일한 형태로 구현 되었으며, 98년에 BorlandC 로 만들어진 코드를 assembly 없이 modern C++ 에서 사용할 수 있도록 구현 되었으며, 처음 만들어 져 있던 BorlandC 용 테스트 코드도 동일한 결과를 얻어 낼 수 있도록 100% 구현을 해 두었습니다.
github.com/rageworx/libtwofish
원작자 역시 별도의 License 를 요구하지는 않도록 Open source 로 공개 되어 있긴 하나, 공익적인 목적을 위해 MIT license 로 배포 중 입니다 ( 혹시라도 소스가 이상하다고 묻지 말라는 또다른 암묵적인 이유이기도 합니다 .. )
이번엔 Apple Macbook Pro 13" 2015 ( Intel i7-5557U 3.1GHz ) 에서 빌드 및 성능 테스트를 MacOSX Mojave x86.64 에서 실험 해 보았습니다.
BlowFish 보다 더욱 더 향상된 암호화를 지원하는 것은 물론, CBC 가 아닌 ECB 로 동일한 테스틑 해 보았을 경우 약 100MB 의 비디오 파일을 암호화 하는데 걸리는 시간은 AES-256-ECB 가 초당 4.1MB 를 처리 하고, BlowFish 가 57.9MB, 그리고 TwoFish 가 75.6MB 를 처리 합니다.
이전 CipherTest-1 으로 부터 속도 계산 방법이 잘못 된 것을 알아서 정확히 속도 계산을 하도록 했으며, 각 암호화 작업 이후에 delta 를 계산하는 형태로 만들어 CPU 의 cache 에 영향을 받지 않도록 처리 해 두었습니다. 이런 저런 이유로도 지금 계획중인 USB3 의 5Gbps 내 packet 을 암호화 처리 하는데 있어서 TwoFish 는 가장 우선적인 암호화 방법이라 봐 집니다. 물론 암호화 특성 때문에 각기 데이터 크기가 조금씩 다르게 나오는데, 속도와 최종 8 바이트 정도는 어느정도 양해를 구해도 될 정도 이니, 꽤 나쁘지 않은 가장 빠른 암호화 알고리즘이 아닌가 합니다.
현재 공개된 libtwofish 는 현존 모든 architecture 에서 사용이 가능하나, C++ 을 사용하도록 만들어진 부분이 있으므로 최소 GCC5 이후의 컴파일러를 쓰는 것을 권장 하며, 대부분의 MacOS 의 X-Code 에서 오류 없이 사용 가능하며, MSVC 를 제외한 모든 시스템에서 make 를 통해서 사용이 가능 합니다. ( Windows 에서는 MSYS2+MinGW-W64 를 통해 사용 가능 합니다 )
테스트에 사용한 소스는 아래에 첨부 합니다만, Makefile 을 이해하는 분에 한해서 사용이 가능한점은 고려해서 쓰도록 하십시오.