SSL이 부과하는 오버 헤드는 얼마입니까?


168

나는 단단하고 빠른 대답이 없다는 것을 알고 있지만 SSL과 암호화되지 않은 소켓 통신의 암호화 오버 헤드에 대한 일반적인 크기 순서 추정치가 있습니까? 나는 응용 프로그램 수준 처리를 계산하지 않고 통신 처리 및 연결 시간에 대해서만 이야기하고 있습니다.

최신 정보

HTTPS HTTP 대에 대한 질문은 ,하지만 난이 스택의 낮은 찾고에 관심이 있어요.

(나는 피하기 혼란 문구 "크기의 순서를"대체 내가 오히려 형식적인 CompSci 감각보다 비공식적 인 용어로 사용되었다 물론 나는 경우. 했다 공식적으로 의미, 진정한 괴짜로 나는 생각 바이너리하고 아닌 것 십진수! ;-)

최신 정보

의견의 요청에 따라 지속적인 연결을 통해 적절한 크기의 메시지 (1k-10k 범위)에 대해 이야기한다고 가정합니다. 따라서 연결 설정 및 패킷 오버 헤드는 중요한 문제가 아닙니다.


이 비슷한 질문을 살펴볼 수도 있습니다 .
Darin Dimitrov

1
응용 프로그램을 좀 더 자세히 특성화 할 수 있습니까? 예를 들어 수명이 짧은 연결을 많이 설정합니까? 연결되어있는 동안 개별 메시지는 얼마나 큰 경향이 있습니까? (예를 들어, SSL 터널을 통해 Telnet으로 모든 키 누름을 플러시하거나
1Tb

답변:


178

차수 : 0

다시 말해, TLS를 추가 할 때 처리량이 절반으로 줄어드는 것을 볼 수 없습니다. 받는 답변 "중복"질문 응용 프로그램의 성능에 크게 초점, 어떻게 그 SSL 오버 헤드를 비교합니다. 이 질문은 특별히 응용 프로그램 처리를 제외하고 비 SSL과 SSL 만 비교하려고합니다. 최적화 할 때 성능에 대한 전체적인 관점을 취하는 것이 이치에 맞지만이 질문이 요구하는 것은 아닙니다.

SSL의 주요 오버 헤드는 핸드 셰이크입니다. 비싼 비대칭 암호화가 발생하는 곳입니다. 협상 후에는 비교적 효율적인 대칭 암호가 사용됩니다. 따라서 많은 연결이 이루어지는 HTTPS 서비스에 SSL 세션을 활성화하는 것이 매우 도움이 될 수 있습니다. 오래 지속되는 연결의 경우이 "종료 효과"는 그다지 중요하지 않으며 세션은 유용하지 않습니다.


여기 재미있는 일화. Google이 Gmail을 HTTPS를 사용하도록 전환했을 때 추가 리소스가 필요하지 않았습니다. 네트워크 하드웨어도없고 새로운 호스트도 없습니다. CPU로드 만 약 1 % 증가했습니다.


6
"HTTPS 서비스에 SSL 세션을 사용하려면 어떻게합니까?" 이것에 대해 배울 수있는 좋은 자료는 무엇입니까?
저스틴 빈센트

1
SSL 세션 사용은 서버마다 다릅니다. 서버 설명서를 읽으십시오.
erickson

7
@Bart van Heukelom-Keep-alive는 소켓 (및 SSL 연결)을 더 오래 열어 두는 데 도움이됩니다. 그러나 SSL 세션은 협상 된 암호화 매개 변수가 소켓에서 "기억"되도록합니다. 따라서 HTTP 연결 유지 기능은 참조 된 콘텐츠가 포함 된 단일 웹 페이지를로드하는 데 유용하지만 몇 초 후에 해당 연결이 닫힙니다. 3 분 후 다른 페이지를 가져올 때 SSL 세션을 사용하면 전체 핸드 셰이크를 반복하지 않고도 SSL 연결을 다시 설정할 수 있습니다. 특히 공개 키 암호화와 의 느린 키 교환은 건너 뛸 수 있습니다.
erickson

2
@Tony TLS가 오버 헤드를 몇 퍼센트 이상 추가 한 실제 사례가 있습니까? 내 대답은 질문만큼 일반적입니다. 다른 테이크가있는 경우 공유하십시오.
erickson

3
@Tony 한 번에 단일 바이트를 쓸 때 일반 소켓이 공간면에서 42 배나 SSL 소켓보다 성능이 뛰어납니다. 이는 최악의 경우입니다. 250 배는 본 적이 없습니다. 인터넷을 통해 1700 개의 데이터 포인트로 광범위한 실험을 수행했는데, 일반적인 결과로 일반 텍스트 소켓이 SSL보다 3 배 빠르지 않아 버퍼링 및 플러싱보다 더 정교한 프로그래밍을 사용하지 못했습니다. JSSE, 아마도 실험 날짜가 주어진 Java 5 일 것입니다.
Lorne의 후작

39

두 번째 @erickson : 순수한 데이터 전송 속도 페널티는 무시할 만합니다. 최신 CPU는 수백 MBit / s의 암호화 / AES 처리량에 도달합니다. 따라서 리소스가 제한된 시스템 (휴대폰)을 사용하지 않는 한 TLS / SSL은 데이터를 슬링하는 데 충분히 빠릅니다.

그러나 암호화로 인해 캐싱 및로드 밸런싱이 훨씬 더 어려워집니다. 이로 인해 성능이 크게 저하 될 수 있습니다.

그러나 연결 설정은 실제로 많은 응용 프로그램의 쇼 스토퍼입니다. 대역폭이 낮고 패킷 손실이 높으며 대기 시간이 긴 연결 (시골의 모바일 장치)에서 TLS에 필요한 추가 왕복 시간으로 인해 속도가 느려질 수 없습니다.

예를 들어, 일부 내부 웹 앱에 액세스하기 위해 암호화 요구 사항을 제거해야했습니다.


20
4 년의 통찰력 : 중국은 또한 의도적으로 모든 SSL / TLS 트래픽을 엉망으로 만들었습니다.
최대

3
중국이 인터넷을 검열하고 모든 사람의 트래픽을 탐지하려고 시도하는 것은 정확히 뉴스가 아닙니다. 그러나 4 년의 후시를 바탕으로 NSA MITM이 사이트로가는 길에 있다고 생각할 것입니다.
Eugene Beresovsky 2016 년

비정상적인 연결의 핵심은 암호화를 한 번 설정 한 다음 실제로 필요한 경우를 제외하고 재협상을 피하고 양측이 눈을 깜박이지 않고 언제든지 IP 주소를 변경할 수 있도록하는 것입니다. MTU는 매우 신뢰할 수없고 매우 부정직 할 수 있으므로 IT는 조각화를 가능하게합니다.
Evi1M4chine

12

연결 설정을 계산하지 않는다고 가정하면 (업데이트에 표시된 것처럼) 선택한 암호에 따라 크게 달라집니다. 대역폭 측면에서 네트워크 오버 헤드는 무시할 수 있습니다. CPU 오버 헤드는 암호화에 의해 좌우됩니다. 모바일 Core i5에서는 단일 코어에서 RC4를 사용하여 초당 약 250MB를 암호화 할 수 있습니다. (RC4는 최대 성능을 위해 선택해야합니다.) AES가 느려서 "50MB / s"만 제공합니다. 따라서 올바른 암호를 선택하면 완전히 활용 된 1Gbit 회선이 있어도 단일 현재 코어를 암호화 오버 헤드로 바쁘게 유지할 수 없습니다. [ 편집 : RC4는 더 이상 안전하지 않으므로 사용해서는 안됩니다. 그러나 AES 하드웨어 지원은 현재 많은 CPU에 존재하므로 이러한 플랫폼에서 AES 암호화가 정말 빠릅니다.]

그러나 연결 설정이 다릅니다. 구현에 따라 (예 : TLS 잘못된 시작 지원) 왕복이 추가되어 눈에 띄는 지연이 발생할 수 있습니다. 또한 첫 번째 연결 설정에서 값 비싼 암호화가 발생합니다. 위에서 언급 한 CPU는 어리석게 4096 비트 키를 사용하면 초당 코어 당 14 개의 연결 만 허용하고 2048 비트 키를 사용하면 100 개만 허용 할 수 있습니다. 후속 연결에서는 값 비싼 암호화를 피하면서 이전 세션이 종종 재사용됩니다.

요약하면 다음과 같습니다.

설정된 연결로 전송 :

  • 지연 : 거의 없음
  • CPU : 무시할 만하다
  • 대역폭 : 무시할 만함

첫 번째 연결 설정 :

  • 지연 : 추가 왕복
  • 대역폭 : 몇 킬로바이트 (인증서)
  • 클라이언트의 CPU : 중간
  • 서버의 CPU : 높음

후속 연결 설정 :

  • 지연 : 추가 왕복 (하나 또는 여러 개인 지 확실하지 않은 경우 구현에 따라 다름)
  • 대역폭 : 무시할 만함
  • CPU : 거의 없음

중요 사항 : 아무도 RC4를 다시 사용해서는 안됩니다. 이 프로토콜은 고장으로 간주되며 RC4 ​​전송은 스파이 조직의 안전을 위해 최소한 암호화되지 않은 전송과 동일해야합니다. 현재는 chacha20-poly1305와 같은 것이 조직과의 독립성으로 인해 대량 암호화에 강력히 권장됩니다.
Evi1M4chine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.