- O protocolo SSL surgiu em meio à disputa entre Netscape e Microsoft no mercado de navegadores em meados dos anos 1990
- O SSL 2 tinha falhas criptográficas e práticas, e com base nisso a Microsoft introduziu o protocolo PCT
- Como resposta, a Netscape desenvolveu o SSL 3.0 para tentar manter a liderança
- A indústria e a comunidade queriam preservar a compatibilidade entre navegadores e delegaram à IETF o papel de padronização
- Nesse processo, o nome do protocolo foi mudado para TLS 1.0, e assim permaneceu até hoje
Contexto: guerra dos navegadores e o nascimento dos protocolos de segurança
- Em meados dos anos 1990, Netscape e Microsoft viviam uma disputa extremamente acirrada no mercado de navegadores
- Foi nesse contexto competitivo que a Netscape desenvolveu o protocolo SSL
SSL 2 e seus problemas
- A primeira versão do SSL tinha falhas criptográficas e foi inviabilizada antes mesmo do lançamento
- O SSL 2 que de fato foi distribuído chegou a ser usado por alguns anos, mas tinha várias falhas criptográficas e práticas
- Esses problemas não representavam uma crise crítica imediata, mas a necessidade de melhorias era constantemente levantada
A resposta da Microsoft: protocolo PCT
- Com a concorrência se intensificando, a Microsoft adicionou recursos próprios ao SSL 2 e introduziu um protocolo chamado PCT
- O PCT era suportado apenas no Internet Explorer (IE) e no IIS
A nova estratégia da Netscape: SSL 3.0
- A Netscape também queria corrigir os problemas do SSL 2, mas não queria que a Microsoft assumisse o controle da iniciativa
- Por isso, desenvolveu o SSL 3.0, buscando mudanças claramente distintas em relação ao anterior
Negociação para padronização na indústria de navegadores
- Os membros da indústria e da comunidade não queriam que o protocolo se dividisse em dois caminhos (evitando um fork)
- A Consensus Development (onde o autor trabalhava) liderou a reunião entre representantes da Netscape e da Microsoft
- Participaram dessa reunião Bruce Schneier (antes de se tornar famoso), Paul Kocher (designer do SSL 3) e Barbara Fox (representante da Microsoft), entre outros
Padronização pela IETF e mudança de nome
- Tanto a Netscape quanto a Microsoft concordaram que a IETF (Internet Engineering Task Force) lideraria o processo de padronização do protocolo
- O autor ficou responsável pela edição do documento padrão da IETF (RFC)
- Como parte de um compromisso político, era necessário fazer algumas mudanças no SSL 3.0 e também dar a ele um novo nome (para evitar a impressão de que a IETF estava simplesmente “aprovando sem questionar” um protocolo já existente)
- Como resultado, surgiu o nome TLS 1.0, embora na prática ele correspondesse ao SSL 3.1
Considerações finais
- Olhando para trás hoje, todo esse processo de discussão sobre nome e padronização parece um tanto engraçado
1 comentários
Opinião no Hacker News
Explicação de uma situação confusa em que, só pelos números de versão, é difícil entender o quanto o protocolo mudou: o SSLv2 foi a primeira versão do SSL amplamente usada, mas tinha vários problemas; o SSLv3 foi um protocolo quase totalmente refeito; o TLS 1.0 era muito parecido com o SSLv3, mas passou por algumas pequenas revisões durante o processo de padronização da IETF; o TLS 1.1 foi uma versão com ajustes pequenos para corrigir problemas na forma de uso de cifras de bloco no TLS 1.0; o TLS 1.2 trouxe alterações de porte médio acompanhando a evolução da criptografia, com suporte a hashes mais modernos (em resposta às vulnerabilidades do MD5 e do SHA-1) e adição de suítes AEAD (como AES-GCM); o TLS 1.3 é em grande parte um protocolo novo, embora incorpore algumas características do TLS 1.2 e anteriores; cada protocolo foi projetado com negociação automática de versão para que clientes e servidores pudessem ser atualizados de forma independente sem perda de conectividade
Considerando que a Microsoft daquela época era uma empresa completamente diferente da atual, isso nem parece estranho pelos padrões de hoje; naquela época, a "M$" usava todos os meios possíveis para conter tecnologias abertas da internet, e essa postura continuou até o começo da década de 2010; acho que isso ajudou a impedir a evolução dos Java Applets e contribuiu para sua saída do mercado; também dava a sensação de que a evolução de JavaScript e CSS ficou travada por anos; na empresa, insistiam para que eu usasse os recursos mais recentes do IE, mas escolhi o Mozilla 3.0, e depois de corrigir bugs de JS passei a usar Mozilla no desenvolvimento de SPA corporativas; mais tarde, empresas da Fortune 500 também ampliaram o uso de Mozilla/Firefox em apps internos, e no fim lembro disso como uma boa escolha
Opinião de que talvez não haveria problema em voltar a chamar a próxima versão de SSL, já que todo mundo ainda usa esse nome
Menção de que o nome "TLS" também já é usado em muitos lugares; atualizar configurações e assinaturas de função é algo extremamente trabalhoso, então isso pesa na decisão
Ressalta que não quer dar ideias a ninguém com esse comentário
Ao orientar alguém a tornar o acesso a um site mais seguro (ou seja, ao usar a terminologia TLS/SSL), pergunta qual nome as pessoas normalmente usam; acrescenta curiosidade sobre a idade delas e se trabalharam antes de 1999; avisa que também vai deixar sua própria resposta
Eu digo SSL (27 anos); por outro lado, no código uso
tls, e na documentação prefiro escrever SSL/TLS para evitar confusãoA maioria das pessoas acaba usando muito o nome SSL porque implementa comunicação segura com bibliotecas que carregam "ssl" no nome, como OpenSSL; além dela, há BoringSSL, LibreSSL e wolfSSL; bibliotecas com "TLS" no nome são menos conhecidas, como GnuTLS, mbedTLS, s2n-tls e RustTLS
O principal motivo para usar o termo SSL é que ele parece ser mais facilmente entendido; tecnicamente o correto é TLS (afinal, ninguém mais usa SSL 3.0), mas como até a principal biblioteca ainda mantém o termo SSL, ele continua sendo usado; na prática, aprendi o nome SSL na época das guerras da criptografia dos anos 90 e lembro que, para ter uma criptografia SSL de verdade, era preciso baixar ilegalmente a versão "US only" do Netscape, então acho que uso mais por hábito mesmo
Eu normalmente digo "https"; prefiro porque até leigos às vezes entendem mais ou menos o que significa
Pela primeira vez percebeu que, de forma inconsciente, não vinha distinguindo corretamente os termos SSL e TLS; acha curioso finalmente saber o motivo real depois de 20 anos
"Transport Layer Security" parece claramente um nome melhor; também gosta do termo TLS; acha engraçado o som de dois S seguidos, que lembra uma cobra
Mas TLS já é amplamente usado também para "Thread Local Storage"; embora Transport Layer Security seja oficial desde 1999, Thread Local Storage já existia antes de 1996 em ambientes de desenvolvimento da MS ou da IBM; no mundo Unix, desde a chegada do pthread em 1995, havia também uma preferência pelo termo thread-specific data; talvez a documentação da ABI do Itanium em 2001 tenha ajudado a espalhar mais o termo "TLS", e a Sun Microsystems talvez já o usasse também; se alguém tiver manuais do OS/2, seria bom compartilhar como referência
Na minha opinião, SSL até combina mais como nome; em teoria, TLS deveria ser um mecanismo geral de segurança que funcionasse em várias camadas (por exemplo, também acoplado ao IPSec), mas na prática ele é usado quase sempre só para sockets TCP; as variantes para UDP são DTLS e QUIC, mas não fazem parte do próprio TLS; mais recentemente existem o Linux kernel TLS e infraestruturas específicas do Windows, mas não é algo tão simples quanto ligar uma flag de socket; e, sinceramente, o som de S de "cobra" é estiloso
"SSL" é mais fácil de pronunciar do que "TLS"; ao falar S-S-L, a língua quase não precisa mudar de posição, então sai mais rápido e naturalmente
Com o Kaa de Mogli falando sobre segurança em TCP, esse nome S~S~L combinaria bem; na verdade, até seria divertido chamar de SSSL com mais um S
As pessoas que distinguem rigidamente TLS e SSL às vezes parecem querer mostrar que conhecem bem a diferença ou preferem que se fale dessa forma; a distinção em si é parecida com .doc e .docx: tecnicamente são diferentes, mas para usuários comuns são quase compatíveis; a maioria só quer que o HTTPS funcione e não liga muito para a estrutura interna ou o modo de funcionamento
Link relacionado: compartilhamento do texto "Randomness and the Netscape Browser", escrito em 1996 (Dr. Dobb's Journal) https://people.eecs.berkeley.edu/~daw/papers/ddj-netscape.html; por ser de 1996, o tom da linguagem é bem diferente do de artigos ou textos atuais; passa uma sensação de coisa antiga
Pergunta se o TLS 1.0 não trouxe, na prática, muito mais melhorias em comparação com o SSL 3.0; diz que o artigo parece tratar isso apenas como "pequenos ajustes para marcar diferença", então ficou em dúvida
Ainda existem mais de 300 mil serviços na internet com suporte a SSLv2. Link: https://shodan.io/search/report/… gráfico de tendência: https://trends.shodan.io/search?query=ssl.version%3Asslv2#overview; os números caíram bastante ao longo dos anos, mas ainda deve levar tempo até desaparecerem por completo