Criptografia 03: Https handshake
Comunicação segura através do protocolo https (pergunta de entrevista)
Nos dois últimos posts, onde falamos sobre funções de hash e sobre chaves simétricas e asimétricas, entendemos os dois conceitos fundamentais, que são exigidos para que uma comunicação segura pela internet possa ocorrer. Foi a base para que possamos dar continuidade com um tema super importante e muitas vezes perguntado em entrevistas de TI. Eu mesmo já fui perguntado em entrevistas e tive que explicar o processo de handshake https em um whiteboard.
Terminologias
Antes de começarmos a detalhar todo o processo, precisamos estabelecer ou relembrar algumas terminologias para nos ajudar a entender melhor as etapas do processo em si.
Você já viu o posto sobre funções de hash
Você já leu o post sobre chaves privadas e públicas
Uma authority é um terceiro envolvido no processo, no qual temos que confiar. No caso do exemplo, seria a Google. (Mas poderia ser qualquer outra entidade ou sua empresa que você ou sua empresa confiacem)
Situação real (Entrevista)
Imagine que você esta em uma entrevista e o entrevistador te pede para explicar, porque a comunicação https é considerada segura e como esse processo de comunicação funciona. Você conseguiria explicar esse processo desenhando em um whiteboard?
Whiteboard
Comece desenhando as parte envolvidas. Diga para os entrevistadores imaginarem que você irá fazer um requisição entre seu navegador e o youtube. Você começaria desenhando algo mais ou menos assim:
Onde ressalta que a Google seria a authority, ou seja o parceiro envolvido nos quais tanto o usuário (Browser) quanto o youtube conhecem e confiam. Ai você começa explicando que cada parte envolvida no processo pussuem pares de chaves simétricas e asimétricas. (como no desenho acima representadas pelo “x, k” (chaves privadas simétricas) e pelo “y, i” (chaves públicas asimétricas) A chave “c” é uma chave simétrica privada, mas que so será gerada mais tarde no processo. Você estaria aqui apenas legendando a coisas para poder dar continuidade no raciocínio.
Entrevistador chato
Talvez aqui, um ou outro entrevistador já te pergunte quais são as caracteristicas/propriedades de um par de chave simétrica e asimétrica. Ele pode estar fazendo isso visando testar a profundidade do seu conhecimento ou para ver se consegue te tirar do conceito. Se isso acontecer, você vai pegar uma outra página e explicar as propriedades das duas separadamente, como fizemos no post sobre chaves simétricas e asimétricas. Terminando lá, você volta para onde parou e continua.
Iniciando o Handshake
Passo 1:
O usuário(Browser) vai solicitar ao youtube para exibir o conteúdo na tela passando o endereço do youtube prefixado com https como podemos ver na imagem no passo 1 na imagem inicial acima.
Passo 2:
O youtube por sua vez, vai pegar sua chave pública “y” e pedir para a autoridade Google, assinar a chave pública do youtube com a chave privada “k” da Google (que apenas a Google conhece e mais ninguém)
Passo 3:
A Google, usando uma função de hash, vai criar um hash da chave pública do youtube e em seguida vai assinar o hash com sua chave privada “k”.
Entrevistador pentelho
Talvez aqui ele te pergunte porque é necessário usar uma função de hash. (bicho chato ne? kkkk) Aqui a mesma coisa, caso isso acontece, você pega outra folha, explica como fizemos no post onde falamos sobre funções de hash e retorna depois para dar continuidade. Chegando aqui você já vai ter ganho o respeito máxmo dos entrevistadores. Daqui pra frente vão te comprar tudo, pois sacaram que você sabe do que esta falando.
Desenhando a segunda etapa
Continue o desenho da seguinte maneira. Você vai desenhar os passos 4, 5 e 6. Diga que logo em seguida irá explicar em detalhes o que esta acontecendo nesta etapa.
Passo 4:
A google envia tudo de volta para o youtube. Chave pública do youtube assinada e o tipo de hash usado antes de assinar.
Passo 5:
O youtube repassa para o usuário(browser) sua chave pública “y” assinada pela Google com o algoritmo de hash usado pela Google e sua chave pública “y” sem assinatura.
Passo 6:
Agora começa a ficar interessante. O usuário(browser) conhece e confia na autoridade Google. Com a chave pública “i” da Google, e agora a importância de entender as propriedades e caracteristicas de pares de chaves simétricas e asimétricas, você explica que toda assinatura pode ser verificada com a chave pública do assinante. Ou seja, o resultado vai ser um hash da chave pública do youtube - vide letra A no passo 6.
Ainda no passo 6, como o youtube repassou o algoritmo de hash utilizado pela Google no ato da assinatura, e agora a importância também de ter explicado o conceito de hash para provar a integridade do remetente, o browser vai pegar a chave pública “y” não assinada do youtube e com o tipo de hash fornecido, vai criar um hash próprio dessa chave. O resultado vai ser o hash da letra B ainda no passo 6.
Verificação da integridade no passo 6
O browser vai então comparar o hash que a google enviou com o hash que ele mesmo gerou. Se eles forem idênticos, o browser saberá que a chave pública não foi alterada e a integridade foi preservada. (ninguem no meio alterou nada - famoso: man in the middle)
Desenhando a última etapa
Desenhe o resto do processo e diga que irá detalhar os itens em segundos. Mais uma vez vai ficar evidente a importância de ter explicado e entendido o conceito de chaves privadas simétricas e asiméticas. Não precisa escrever os comentários. Estão aqui apenas para te ajudar mentalmente. Na hora de desenhar, você simplifica e vai comentando cada detalhe. (os comentários estão aqui apenas para te ajudar)
Passo 7:
O browser vai criar, apenas para essa seção, uma nova chave privada simétrica “c”. Com a chave pública asimétrica do youtube “y“ que acabou de verificar sua autencidade, irá criptografar a nova chave privada asimétrica “c” e envia-la de volta para o youtube.
Passo 8:
Uma propriedade ou caracterisca dos pares de chaves asimétricas é que:
“Apenas quem tem a chave privada correspondente a chava pública, pode descriptografar conteúdos que foram criptografados por sua respectiva chave pública”.
Ou seja, apenas o youtube, que conhece sua própria chave privada, vai conseguir descriptografar essa nova chave simétrica gerada pelo browser. Nesse ponto aqui, o handshake aconteceu com sucesso e apenas o browser e o youtube conhecem essa nova chave simétrica privada na internet inteira e ninguém mais.
Passo 9:
A partir de agora as duas partes envolvidas podem usar essa chave privada simétrica para se comunicarem seguramente durante a seção.
Passo 10:
O browser recebe a pagina a ser exibida e dai para frente se comunicam através dessa chave. Se você chegou até aqui durante sua entrevista, a vaga praticamente já é sua! ;) Você teria que errar muita coisa depois disso, para perder esta vaga.
Quer mais conteúdo assim?
Me siga, se você gosta desse tipo de conteúdo técnico didático e feito com muito carinho. ❤️
Você me encontra no 🐦twitter, 🦑 Github ou no 📺 Youtube onde tenho um curso gratuito “Do zero ao certificado Android”, outro chamado “Resoluções a problemas comuns Android” e Android Jetpack Compose disponíveis 0800 para você.
Para não perder nenhum conteúdo, inscreva-se nesse techblog clicando aqui: