Quanto sobrecarga o SSL impõe?


168

Sei que não há uma resposta única e definitiva, mas existe uma estimativa genérica de ordem de magnitude aproximada para a sobrecarga de criptografia do SSL versus a comunicação de soquete não criptografada? Estou falando apenas do processamento da comunicação e do tempo de ligação, sem contar o processamento no nível do aplicativo.

Atualizar

uma pergunta sobre HTTPS versus HTTP , mas estou interessado em olhar mais baixo na pilha.

(Substituí a frase "ordem de grandeza" para evitar confusão; eu a estava usando como jargão informal, e não no sentido formal do CompSci. É claro que se eu tivesse falado formalmente, como um verdadeiro nerd, eu estaria pensando em binário em vez de decimal! ;-)

Atualizar

Por solicitação no comentário, suponha que estamos falando de mensagens de bom tamanho (intervalo de 1 a 10 k) em conexões persistentes. Portanto, a configuração da conexão e a sobrecarga de pacotes não são problemas significativos.


Você pode dar uma olhada nessa pergunta semelhante .
1311 Darin Dimitrov

1
Você pode caracterizar seu aplicativo um pouco mais? Por exemplo, ele estabelece muitas conexões de curta duração? Enquanto conectada, qual o tamanho de uma mensagem individual? (Por exemplo, talvez você está liberando a cada tecla pressionada com Telnet através de um túnel SSL, ou talvez você está copiando arquivos de log 1 Tb.)
Erickson

Respostas:


178

Ordem de magnitude: zero.

Em outras palavras, você não verá sua produtividade cortada pela metade ou algo parecido quando adicionar o TLS. As respostas para a pergunta "duplicada" se concentram muito no desempenho do aplicativo e em como isso se compara à sobrecarga do SSL. Esta pergunta exclui especificamente o processamento do aplicativo e procura comparar apenas não SSL com SSL. Embora faça sentido ter uma visão global do desempenho ao otimizar, não é isso que esta pergunta está perguntando.

A principal sobrecarga do SSL é o handshake. É aí que a criptografia assimétrica cara acontece. Após a negociação, são usadas cifras simétricas relativamente eficientes. É por isso que pode ser muito útil habilitar sessões SSL para o seu serviço HTTPS, onde muitas conexões são feitas. Para uma conexão de longa duração, esse "efeito final" não é tão significativo e as sessões não são tão úteis.


Aqui está uma anedota interessante. Quando o Google mudou o Gmail para usar HTTPS, nenhum recurso adicional foi necessário; sem hardware de rede, sem novos hosts. Apenas aumentou a carga da CPU em cerca de 1%.


6
Como você "habilita as sessões SSL para o seu serviço HTTPS"? O que é um bom recurso para aprender sobre isso?
Justin Vincent

1
A ativação de sessões SSL é específica do servidor. Leia o manual do seu servidor.
Erickson

7
@Bart van Heukelom - Keep-alive ajudará a manter um soquete (e a conexão SSL) aberto por mais tempo, o que ajuda. Mas as sessões SSL fazem com que os parâmetros criptográficos negociados sejam "lembrados" de um soquete para o outro. Portanto, o HTTP keep-alive seria útil para carregar uma única página da web com seu conteúdo referenciado, mas após alguns segundos, essa conexão será fechada. Três minutos depois, digamos, quando outra página é buscada, uma sessão SSL permite que a conexão SSL seja restabelecida sem repetir o handshake completo. Em particular, a troca lenta de chaves com criptografia de chave pública pode ser ignorada.
Erickson

2
@ Tony Você tem algum exemplo do mundo real em que o TLS acrescenta mais do que alguns por cento de sobrecarga? Minha resposta é tão geral quanto a pergunta. Se você tem uma opinião diferente, compartilhe-a.
Erickson

3
@ Tony Eu vi soquetes simples superando soquetes SSL por um fator de 42 em termos de espaço ao escrever um único byte de cada vez, o que é o pior caso. Nunca vi 250x. Fiz um experimento extenso na Internet com 1700 pontos de dados, onde o resultado geral foi que os soquetes de texto simples não eram melhores que três vezes mais rápidos que o SSL, usando uma programação não mais sofisticada que o buffer e a liberação. JSSE, provavelmente Java 5, dada a data do experimento.
Marquês de Lorne

39

Segundo @erickson: A penalidade pura da velocidade de transferência de dados é desprezível. As CPUs modernas atingem uma taxa de transferência de criptografia / AES de várias centenas de MBit / s. Portanto, a menos que você esteja no sistema com recursos limitados (telefone celular), o TLS / SSL é rápido o suficiente para coletar dados.

Mas lembre-se de que a criptografia torna o cache e o balanceamento de carga muito mais difíceis. Isso pode resultar em uma enorme penalidade de desempenho.

Mas a configuração da conexão é realmente uma rolha de exibição para muitos aplicativos. Em baixa largura de banda, alta perda de pacotes e conexões de alta latência (dispositivo móvel no campo), as viagens de ida e volta adicionais exigidas pelo TLS podem tornar algo lento em algo inutilizável.

Por exemplo, tivemos que abandonar o requisito de criptografia para acessar alguns de nossos aplicativos Web internos - eles eram quase inutilizáveis ​​se usados ​​na China.


20
Com quatro anos de retrospectiva: a China também pode ter intencionalmente atrapalhado todo o tráfego SSL / TLS.
max

3
A censura da China à internet e a tentativa de farejar o tráfego de todos não é exatamente novidade. Com quatro anos de retrospectiva, você pensaria que era a NSA MITMing a caminho do seu site.
Eugene Beresovsky

A chave com conexões esquisitas é configurar a criptografia uma vez e evitar repetições, a menos que seja realmente necessário, e permitir que ambos os lados alterem seus endereços IP a qualquer momento, sem piscar um olho. (O OpenVPN suporta isso.) A TI ajuda a tornar possível a fragmentação, pois a MTU pode ser muito confiável e totalmente desonesta.
Evi1M4chine 14/09

12

Supondo que você não conte a configuração da conexão (como você indicou na atualização), isso depende muito da cifra escolhida. A sobrecarga da rede (em termos de largura de banda) será insignificante. A sobrecarga da CPU será dominada pela criptografia. No meu Core i5 móvel, posso criptografar em torno de 250 MB por segundo com o RC4 em um único núcleo. (RC4 é o que você deve escolher para obter o desempenho máximo.) O AES é mais lento, fornecendo "apenas" cerca de 50 MB / s. Portanto, se você escolher cifras corretas, não conseguirá manter um único núcleo atual ocupado com a sobrecarga de criptografia, mesmo se você tiver uma linha de 1 Gbit totalmente utilizada. [ Editar : RC4 não deve ser usado porque não é mais seguro. No entanto, o suporte ao hardware da AES agora está presente em muitas CPUs, o que torna a criptografia AES realmente rápida nessas plataformas.]

O estabelecimento da conexão, no entanto, é diferente. Dependendo da implementação (por exemplo, suporte ao TLS false start), ele adiciona viagens de ida e volta, o que pode causar atrasos visíveis. Além disso, a criptografia cara ocorre no primeiro estabelecimento de conexão (a CPU mencionada acima só pode aceitar 14 conexões por núcleo por segundo se você usar bobagens chaves de 4096 bits e 100 se usar chaves de 2048 bits). Nas conexões subsequentes, as sessões anteriores geralmente são reutilizadas, evitando a criptografia cara.

Então, para resumir:

Transferência na conexão estabelecida:

  • Atraso: quase nenhum
  • CPU: insignificante
  • Largura de banda: insignificante

Primeiro estabelecimento de conexão:

  • Atraso: viagens adicionais de ida e volta
  • Largura de banda: vários kilobytes (certificados)
  • CPU no cliente: média
  • CPU no servidor: alta

Estabelecimentos de conexão subsequentes:

  • Atraso: ida e volta adicional (não tenho certeza se um ou vários, pode depender da implementação)
  • Largura de banda: insignificante
  • CPU: quase nenhum

Nota importante: ninguém deve usar o RC4 novamente. O protocolo deve ser considerado quebrado e a transmissão RC4 com ele deve ser vista como equivalente à transmissão não criptografada, no mínimo, para segurança das organizações espionadoras. Atualmente, algo como chacha20-poly1305 é altamente recomendado para criptografia em massa devido à sua independência em relação a essas organizações.
Evi1M4chine 14/09
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.