Blog‎ > ‎

TLS / SSL (final)

postado em 22 de ago de 2011 05:34 por Usuário desconhecido
por Rodrigo Rocha

No último post abordamos a origem, definição e estrutura do protocolo de segurança TLS. Hoje serão mostrados os seus subprotocolos e os seus métodos criptográficos.


Subprotocolos

- O protocolo de Registro (Record Protocol)

Este protocolo fragmenta as mensagens em blocos, podendo então comprimí-los, e adiciona a eles um código MAC (Message Authentication Code), encripta e transmite o resultado. Ele também é organizado em camadas. Em cada uma delas, as mensagens podem incluir campos com o tamanho da mensagem, a descrição e o conteúdo.

Os protocolos de Handshaking usam o protocolo de Registro e serão descritos abaixo, eles permitem que ambos os lados da conexão concordem quanto a parâmetros de segurança, métodos criptográficos, autenticação das partes e identificação de erros.


- O protocolo Handshake

É o responsável pela negociação de uma sessão, que é composta do seu identificador, dos certificados padrão X.509 de ambas as partes (ou de apenas um lado), do método de compressão a ser utilizado, das especificações criptográficas (algoritmos de encriptação e autenticação), entre outros.

Os dados contidos neste protocolo servirão de parâmetros para o protocolo de Registro, quando este estiver cuidando da segurança do protocolo de Aplicação. Uma sessão já iniciada pelo protocolo Handshake pode ser retomada, pois este é um recurso do subprotocolo.

Quando cliente e servidor iniciam uma conexão, eles concordam quanto à versão do protocolo que está sendo utilizada, quanto aos algoritmos criptográficos, e fazem a autenticação um do outro. O protocolo implementa isso através da troca de mensagens de “Hello”, da troca de parâmetros de criptografia e da troca de certificados visando a autenticação dos pares.

Funciona como no quadro acima: o cliente primeiro envia um “ClientHello
, ao que o servidor deve responder com um “ServerHello”, definindo então a versão do protocolo, o identificador da sessão, o conjunto de códigos para encriptação, e o método de compressão. Além disso, dois valores aleatórios também são gerados e trocados, para que após seja computado um “segredo” ou código ou chave, que será usado para autenticar ambos os lados junto com os certificados, nas próximas mensagens “Certificate” e “ServerKeyExchange”, terminando com o “ServerHelloDone” que indica o fim da fase “Hello” de handshake.

Em seguida, se o servidor exigir, o cliente também deve apresentar seu certificado, então enviar o “ClientKeyExchange”, cujo conteúdo vai depender dos códigos acordados entre as partes no início da negociação, e pode verificar a autenticidade do certificado do servidor. Após isso, os dois lados trocam “ChangeCipherSpec” e terminam o handshake, podendo então transferir os dados do protocolo de aplicação.


- O Protocolo ChangeCipherSpec

Sua função é marcar as mudanças nos critérios de criptografia. Ele consiste numa única mensagem, que é encriptada e comprimida. Este tipo de mensagem é enviado por ambos os lados da conexão, com o intuito de notificar o outro lado de que as próximas mensagens serão protegidas pelos novos métodos especificados.

O lado que enviar primeiro a mensagem de ChangeCipherSpec não tem conhecimento sobre se o outro lado está pronto para recebê-la e começar a utilizar a nova especificação de encriptamento. Caso a operação que o outro lado esteja executanto seja mais custosa computacionalmente, durante um certo tempo esse lado deverá armazenar as mensagens num buffer, afim de que quando terminar, poder trabalhar segundo as novas especificações.


- O Protocolo de Alerta (Alert Protocol)

O conteúdo de alerta, provido pelo subprotocolo de alerta, também é suportado pelo protocolo de registro. Essas mensagens se distinguem entre avisos e erros fatais e são compostas pelas suas devidas descrições. Alertas fatais resultam em fechamento imediato da conexão, tornando o identificador da sessão inválido, evitando então que esta sessão seja utilizada em novas conexões. Como qualquer outra mensagem, esses alertas também são comprimidos e encriptados para serem então transmitidos.

Aqui é importante dizer que quando há alertas de fechamento, ambos os lados da conexão devem estar cientes que há intenção de fechar a conexão. Dessa forma evita-se alguns tipos de ataques. Qualquer lado pode enviar um alerta de fechamento, indicando que quaisquer dados que sejam enviados após isso devem ser ignorados.


Métodos Criptográficos

- Algoritmo RSA

Este algoritmo é largamente utilizado para criptografar mensagens e é famoso pela grande dificuldade em ser quebrado, sendo então uma ótima opção para encriptar as mensagens transmitidas com o TLS. Ele é composto por um par de chaves, pública e privada. A primeira é de conhecimento de todos os envolvidos e a segunda fica em segredo. As mensagens cifradas com uma chave pública só poderão ser decifradas utilizando uma chave privada que forma o respectivo par de chaves.

São gerados dois pares de números, cada chave é composta de um par, sendo que uma mensagem encriptada com um par só possa ser decriptada com o outro par. Então, o par que representa a chave pública é divulgado, para que o outro lado da conexão encripte a mensagem com esse par. Isso funciona pois apenas o lado que enviou a chave pública poderá decriptar a mensagem, pois ele é o único que possui a chave privada.


- HTTP over TLS

É realmente simples utilizar o HTTP com o TLS, formando o famoso HTTPS, presente na forma de “cadeado” e inicializando as URLs de sites de banco, programas de email, formulários online, etc. A utilização se dá da mesma forma que o HTTP sobre o TCP puro.

Basta que inicie-se a conexão na porta correta (443) com o “ClientHello” do TLS, inicializando então o processo de handshake. Ao final deste processo, o conteúdo HTTP deve ser passado na forma do protocolo de Aplicação do TLS. Nada é alterado dentro do HTTP.


Por que utilizar o TLS /SSL

É possível observar que o protocolo TLS se mostra como uma boa opção para prover segurança às conexões em redes e na Internet. Escolhendo o método de criptografia adequado e dispondo de certificados para realizar a autenticação, é possível realizar transferências seguras e livres de uma grande variedade de ataques.

Quanto à sua aplicabilidade, o TLS é vastamente empregado em diversos tipos de aplicações, podendo ser utilizado com outros protocolos e lhes conferindo segurança necessária na transmissão dos dados. Ainda em relação a um mesmo protocolo, o TLS pode ser aplicado de mais de uma maneira, diversificando o seu raio de atuação.

Por meio da encriptação das mensagens de autenticação dos usuários, este protocolo cumpre os seus objetivos, no tocante a conferir as condições necessárias para que as informações trafeguem com o mínimo de interferência de agentes externos ou atacantes. Permite então a confidencialidade e a eficiência na transmissão dos dados do emissor ao receptor.




Para maiores informações sobre TLS/SSL consulte as referências utilizadas como fontes para este post.




tags: #protocolo, #segurança, #tsl, #ssl

Fontes:

http://www.gta.ufrj.br/ensino/eel879/trabalhos_vf_2010_2/bernardo/index.html
Dierks, T. and Rescorla, E. "The Transport Layer Security (TLS) Protocol Version 1.2" RFC 5246, IETF 2008.
Rescorla, E. "HTTP over TLS" RFC 2818, IETF 2000.
Ford-Hutchinson, P. "Securing FTP with TLS" RFC 4217, IETF 2005.
http://en.wikipedia.org/wiki/Transport_Layer_Security (acessado em 29/09/2010)
Comments