O que é uma chave de sessão? | Chaves de sessão e handshakes TLS

O protocolo SSL/TLS usa chave pública e criptografia simétrica e novas chaves para criptografia simétrica devem ser geradas para cada sessão de comunicação. Essas chaves são chamadas de "chaves de sessão".

Objetivos de aprendizado

Após ler este artigo, você será capaz de:

  • Saber o que é uma sessão, o que é uma chave e quando novas chaves de sessão devem ser criadas
  • Entender a diferença entre criptografia assimétrica e simétrica
  • Saber como o protocolo de criptografia SSL/TLS usa os dois tipos de criptografia
  • Saber os quatro tipos de chaves de sessão usados para criptografia simétrica em SSL/TLS

Copiar o link do artigo

O que é uma chave de sessão?

Uma chave de sessão é qualquer chave de criptografia usada para criptografar simetricamente apenas uma sessão de comunicação. Em outras palavras, é uma chave temporária que é usada apenas uma vez, durante um período de tempo, para criptografar e descriptografar dados; futuras conversas entre as duas partes seriam criptografadas com chaves de sessão diferentes. Uma chave de sessão é como uma senha que alguém redefine toda vez que faz login.

Em SSL/TLS, as duas partes comunicantes (o cliente e o servidor) geram 4 chaves de sessão no início de qualquer sessão de comunicação, durante o handshake TLS. A RFC na TLS oficial não chama essas chaves de "chaves de sessão", mas funcionalmente é exatamente isso que elas são.

O que é uma sessão?

Uma sessão é essencialmente uma conversa. Uma sessão ocorre em uma rede e começa quando dois dispositivos se reconhecem e abrem uma conexão virtual. Ela termina quando os dois dispositivos obtêm as informações de que precisam um do outro e enviam mensagens "de conclusão", encerrando a conexão, como se duas pessoas estivessem trocando mensagens de texto e encerram a conversa dizendo: "Falo com você mais tarde". A conexão também pode expirar devido à inatividade, como se duas pessoas estivessem enviando mensagens de texto e simplesmente parassem de responder uma à outra.

Uma sessão pode ser um período de tempo definido ou pode durar enquanto as duas partes estiverem se comunicando. No primeiro caso, a sessão expirará após um determinado período de tempo; no contexto da criptografia TLS, os dois dispositivos teriam então que trocar informações e gerar novas chaves de sessão para reabrir a conexão.

O que é uma chave criptográfica?

Na criptografia, uma chave é uma sequência de dados usada para alterar as mensagens para que sejam criptografadas – em outras palavras, para que os dados pareçam aleatórios ou embaralhados. Uma chave também é usada para descriptografar os dados ou traduzi-los de sua forma embaralhada para sua forma original. (Consulte O que é uma chave criptográfica? para saber mais).

O que é criptografia simétrica? O que é criptografia assimétrica?

Na criptografia simétrica, a mesma chave, exatamente, é usada em ambos os lados de uma conversa, tanto para criptografar quanto para descriptografar. Em uma sessão que usa criptografia simétrica, várias chaves podem ser usadas, mas uma mensagem criptografada com uma chave é descriptografada com essa mesma chave.

Na criptografia assimétrica, existem duas chaves e os dados criptografados com uma chave só podem ser descriptografados com a outra chave ao contrário da criptografia simétrica, quando a mesma chave criptografa e descriptografa. Isso também é conhecido como criptografia de chave pública, porque uma das chaves é compartilhada publicamente.

O HTTPS usa criptografia simétrica ou assimétrica?

O HTTPS, que é o HTTP com o protocolo de criptografia TLS, usa os dois tipos de criptografia. Todas as comunicações sobre TLS começam com um handshake TLS. A criptografia assimétrica é essencial para fazer o handshake TLS funcionar.

Durante o curso de um handshake TLS, os dois dispositivos de comunicação estabelecerão as quatro chaves de sessão, e elas serão usadas para criptografia simétrica pelo resto da sessão. Normalmente, os dois dispositivos de comunicação são um cliente, ou um dispositivo de usuário, como um notebook ou um smartphone, e um servidor, que é qualquer servidor web que hospeda um site. (Para saber mais, consulte O que é o modelo cliente-servidor?)

Como funciona um handshake TLS?

Durante um handshake TLS, tanto o cliente quanto o servidor enviam dados aleatórios um para o outro, que eles usam para fazer cálculos separadamente e, em seguida, derivar as mesmas chaves de sessão. Três tipos de dados gerados aleatoriamente são enviados de um lado para o outro:

  • O "aleatório do cliente": esta é uma sequência aleatória de bytes que o cliente envia ao servidor.
  • O "aleatório do servidor": é semelhante ao aleatório do cliente, exceto que o servidor o envia ao cliente.
  • O "segredo pré-mestre": esta é mais uma sequência de dados. Em algumas versões do handshake TLS, o cliente o gera e o envia ao servidor criptografado com a chave pública; em outras versões, o cliente e o servidor geram o segredo pré-mestre por conta própria, usando parâmetros de algoritmo acordados para chegar ao mesmo resultado.

O handshake TLS usa criptografia assimétrica para ocultar o servidor aleatoriamente dos invasores (criptografando-o com uma chave privada) ou para permitir que o servidor "assine" digitalmente uma de suas mensagens para que o cliente saiba que o servidor é quem ele afirma ser (assim como uma assinatura ajuda a verificar a identidade de alguém na vida real). O servidor criptografa alguns dados com a chave privada e o cliente usa a chave pública para descriptografá-los, provando que o servidor possui a chave correta e é legítimo.

Qual é o "segredo mestre" em um handshake TLS?

O segredo mestre é o resultado final da combinação do aleatório do cliente, aleatório do servidor e do segredo pré-mestre por meio de um algoritmo. O cliente e o servidor têm essas três mensagens, portanto, devem chegar ao mesmo resultado para o segredo mestre.

O cliente e o servidor então usam o segredo mestre para calcular várias chaves de sessão para uso apenas nessa sessão – 4 chaves de sessão, precisamente.

Quais são as 4 chaves de sessão geradas a partir do segredo mestre em um handshake TLS?

Os 4 tipos de chaves de sessão criadas em cada handshake TLS são:

  • A "chave de gravação do cliente"
  • A "chave de gravação do servidor"
  • A "chave MAC de gravação do cliente"
  • A "chave MAC de gravação do servidor"

A chave de gravação do cliente é a chave que o cliente usa para criptografar suas mensagens. A chave de gravação do cliente é uma chave simétrica e tanto o cliente quanto o servidor a possuem. Isso permite que o servidor descriptografe as mensagens do cliente usando a mesma chave.

A chave de gravação do servidor é como a chave de gravação do cliente, exceto no lado do servidor. Para resumir: As mensagens do cliente para o servidor são criptografadas com a chave de gravação do cliente e o servidor usa a chave de gravação do cliente para descriptografá-las. As mensagens do servidor para o cliente são criptografadas com a chave de gravação do servidor e o cliente usa a chave de gravação do servidor para descriptografá-las. (Todo esse processo é tratado pelo dispositivo cliente ou navegador; os próprios usuários não precisam fazer nada dessa criptografia ou descriptografia.)

As chaves MAC, ou código de autenticação de mensagem, são usadas para assinar digitalmente as mensagens. O servidor assina suas mensagens com a chave MAC de gravação do servidor e, quando o cliente recebe a mensagem, ele pode verificar a chave MAC usada em relação ao seu próprio registro da chave MAC do servidor para certificar-se de que é legítima. O cliente assina suas mensagens com a chave MAC de gravação do cliente.

Um conjunto de 4 chaves de sessão completamente novas é criado com cada nova sessão de comunicação e novo handshake TLS. Haverá uma chave de gravação de cliente diferente, chave de gravação de servidor e assim por diante, mas esses 4 tipos de chaves são criados todas as vezes.