그냥 연결 속도와 OpenSSL 을 이용한 암호화 통신 속도가 어느 정도 차이가 나는지?
글쓴이: stypr / 작성시간: 일, 2006/03/12 - 10:51오후
안녕하세요.
암호화 통신 쪽을 구현하고 있는데, OpenSSL 을 이용해서 사용하고 있습니다. 근데 문제가 속도인데요.
생각보다 엄청 느리군요. 제가 궁금한 것은 그냥 socket 을 통한 연결과 OpenSSL 을 통한 연결시 (reuse session 을 하지 않을 경우.) 속도 차이가 몇 배 정도 나는지 궁금하군요.
제가 프로그래밍을 잘못 짠건지, 원래 속도가 그런건지 잘 모르겠습니다.
제 느낌으로는 10~100배 정도는 기존 암호화통신을 사용하지 않을 때보다 느려진 것 같군요.
이게 원래 그런가요?
Forums:
질문을 조금 바꿔야 겠군요.
session 기능을 이용해서 재사용하도록 하니, 이전보다는 속도가 낳아졌음을 느낄 수가 있군요.
질문을 바꾸면, 일반 socket 통신 속도 vs OpenSSL 을 이용한 암호화 통신 속도 (session 을 이용할 경우) 의 차이가 몇 배 정도 나는 것이 정상인지가 궁금합니다.
말씀하신 세션
말씀하신 세션 재사용이 통신 속도에 상당한 영향을 미치는 요소 중의 하나인 셈입니다. 단순히 TCP 세션을 매번 새로 맺는 것도 성능에 상당한 영향을 주는데, 키 생성에 비대칭 알고리즘까지 돌려야 하는 SSL 세션 연결은 더더욱 부담이 클 수밖에 없습니다.
본래 내용으로 돌아가서...
암호화를 사용할 때와 사용하지 않을 때의 통신 속도가 몇 배 차이가 난다고 단순히게 말하는 건 쉽지 않습니다. 전자의 경우, Gbit 이더넷으로 구성된 LAN 같은 아주 빠른 네트워크나 아주 낮은 연산 속도의 장비를 사용하는 드문 경우가 아니라면 통신 경로 상에서의 네트워크 대역폭이 병목이 됩니다. 하지만 암호화를 적용한 통신에서는 CPU 연산 능력이 병목이 될 가능성이 상당히 높아집니다.
병목이 되는 위치가 달라지면 '몇 배'라는 건 의미를 잃게 됩니다. 1Mbps 대역폭의 네트워크에서 3GHz 짜리 컴으로 통신하는 경우는 아마 1배가 될 것이고, 1Gbps 네트워크에서 N배 차이가 났다면 10Gbps 네트워크에서는 10N배 차이가 날 테니까요.
다만 OpenSSL이 정상적인 암복호화에 어느 정도의 성능을 보이는가를 알면 프로그램의 다른 부분을 최적화 할 수 있는가 하는 판단에 참고할 수는 있습니다. 딱 암복호화에 걸리는 시간 만큼의 처리 속도가 나고 있다면 프로그램을 더 개선할 여지가 별로 없겠지만, 그보다 훨씬 낮은 속도를 보인다면 어딘가 개선의 여지가 있겠죠. "openssl performance" 정도로 검색을 하면 몇몇 데이터를 구하실 수 있으며, 당장 동일한 PC에서 "openssl speed" 명령을 이용해 지정된 알고리즘의 처리 속도를 확인하실 수 있습니다.
정말 필요로 하시는 정보는 "어디를 어떻게" 최적화 시켜야 할 것인가, 하는 것이리라 생각합니다. gprof 같은 프로파일링 툴을 이용해서 어느 루틴에서 시간이 많이 소모되고 있는지를 파악하신 후 그에 따라 최적화 작업을 수행해 주셔야 하지 않을까 싶습니다.
----
$PWD `date`
$PWD `date`
감사합니다. 많은
감사합니다. 많은 도움이 되었습니다. ^^
SSL 이용시 속도 저하
SSL은 처음 연결이 되면 서로간의 대칭키를 교환하기 위해
(1) 핸드쉐이크를 합니다. (1) 이후에 교환된 대칭키로 (2) 대칭키
암호화 통신을 합니다.
(1)을 수행은 비대칭 암호화, 비대칭 복호화, 해쉬 연산이 이루어지고
(2)를 수행은 송신 암호화, 수신 복호화가 이루어집니다.
시간상으로 볼때 (1) >> (2) 입니다. 따라서 연결이 잦고 통신량이 적은
경우라면 (1) 의 방법중 resume 을 사용하는 세션관리를 하는게 시간을
줄이는 방법입니다.
대략의 비교는 (1)의 경우는 openssl speed rsa 의 sign, verfiy 시간
(2)의 경우는 openssl speed aes-128-cbc 암복호화 시간으로 비교
하면 됩니다.
댓글 달기