Chave pública, chave privada e criptografia assimétrica
Neste artigo, apresentámos os conceitos de chaves públicas, chaves privadas e os princípios da encriptação assimétrica. Comparámos os seus prós e contras em relação à encriptação simétrica, bem como as diferenças nos seus cenários de utilização.
Poderás ter ouvido falar sobre chaves privadas e chaves públicas em muitos contextos, mas sabes realmente o que elas são?
Criptografia assimétrica vs criptografia simétrica
Chaves privadas e chaves públicas são conceitos na criptografia assimétrica (também conhecida como criptografia de chave pública, PKC).
Criptografia assimétrica refere-se a um método de encriptar ou assinar dados usando duas chaves diferentes (chave privada + chave pública), que corresponde à necessidade de desencriptação ou verificação de assinatura. A chave pública é visível para qualquer pessoa, enquanto a chave privada está apenas disponível para o proprietário da chave. Podes facilmente perceber isso pelo nome das chaves.
Da mesma forma, podes provavelmente adivinhar que a criptografia simétrica se refere ao método de encriptar e desencriptar dados usando a mesma chave.
Assim, usamos uma anotação simples para mostrar o processo de encriptação/desencriptação tanto da criptografia simétrica quanto da assimétrica.
É importante notar que as funções de encriptação/desencriptação nos algoritmos de encriptação simétrica e assimétrica são diferentes e frequentemente usam algoritmos diferentes. Algoritmos comuns de encriptação simétrica incluem DES, AES, RC2, RC4 e outros, enquanto algoritmos comuns de encriptação assimétrica incluem RSA e EC.
A Logto usa o algoritmo EC para encriptação e desencriptação de transmissão de dados, uma vez que é mais eficiente e seguro que o RSA. Podes ler este post para mais detalhes. A Logto irá também suportar o RSA na próxima versão para melhor compatibilidade com alguns sistemas legados.
Porque usar a criptografia assimétrica?
A criptografia assimétrica resolve o problema da distribuição de chaves na criptografia simétrica.
Uma vez que a encriptação simétrica usa a mesma chave, distribuir a chave sobre uma rede de conexão insegura pode implicar o risco de expor a chave a terceiros maliciosos. Um terceiro malicioso poderia usar a chave roubada para aceder a qualquer informação encriptada com essa chave, representando um risco significativo para a segurança.
Dois casos de uso comuns da criptografia assimétrica
Enviar dados encriptados
O remetente pode usar a chave pública do destinatário para encriptar informações, e o destinatário usa a sua chave privada para desencriptar as informações.
Uma vez que as chaves públicas são teoricamente disponíveis para muitas pessoas, num cenário ideal, o destinatário pode receber informações encriptadas de muitos remetentes. Além disso, múltiplos remetentes não podem saber que tipo de informações outros remetentes enviaram ao destinatário, já que apenas o destinatário (o detentor da chave privada) pode desencriptar e recuperar as informações.
As chaves públicas e privadas são frequentemente geradas simultaneamente. O que mencionámos acima é a geração de chaves privadas e públicas de uma parte, e depois distribuir a chave pública para os seus utilizadores. Se precisas assegurar uma comunicação segura entre ambas as partes, então ambas as partes precisam gerar suas próprias chaves privadas e públicas, e depois trocar as respetivas chaves públicas. Desta forma, ambas as partes têm as chaves públicas uma da outra, e podem usar suas próprias chaves privadas e a chave pública da outra parte para encriptação e desencriptação.
Usar uma assinatura para garantir a fidelidade dos dados
Na criptografia assimétrica, a parte que detém a chave privada pode assinar os dados que envia. Subsequentemente, o destinatário com a chave pública pode verificar a consistência dos dados e da assinatura ao receber os dados, assegurando que os dados não foram alterados durante a transmissão.
Usando a anotação que definimos na seção anterior, a assinatura e a verificação de assinatura podem ser representadas como a seguir:
A verificação da assinatura digital prova que a parte que gera a assinatura conhece a chave privada correspondente.
Provavelmente achas esses dois casos de uso mencionados acima muito familiares. No nosso dia a dia, quase todos os serviços com arquitetura servidor-cliente usam a criptografia assimétrica para garantir a segurança dos dados.
Como um framework de identidade de utilizador em rápido crescimento, a Logto também usa extensivamente PKC para garantir a segurança dos dados dos utilizadores. Após os utilizadores completarem o processo de login, a Logto emite um token de acesso aos utilizadores para lhes dar permissões específicas para aceder aos recursos requeridos. A chave pública publicada pela Logto é usada para verificar se o token de acesso foi de facto emitido pela Logto e não foi adulterado por atacantes maliciosos.
Desvantagens da criptografia assimétrica
Em geral, o comprimento da chave para a encriptação simétrica é de 128 ou 256 bits, enquanto o comprimento da chave para a encriptação assimétrica pode atingir 4096 bits. Isto porque a chave privada e a chave pública estão matematicamente relacionadas e são pares de chaves únicos. Em teoria, conhecer a chave pública permite calcular o valor da chave privada, mas devido à complexidade dos algoritmos envolvidos, muitas vezes leva um tempo considerável. Para tornar a tarefa de "quebrar" a chave privada "impossível", usar comprimentos de chave mais longos é uma abordagem direta.
Conclusões
A encriptação assimétrica consome mais recursos computacionais e tempo em comparação com a encriptação simétrica durante os cálculos, conforme discutido na seção anterior. Em aplicações onde a comunicação é frequente, o uso generalizado da encriptação assimétrica pode impactar o desempenho e a experiência do utilizador.
Em cenários empresariais, a encriptação simétrica e assimétrica são frequentemente usadas em conjunto para equilibrar o desempenho e a segurança dos dados. Ao construir o teu próprio serviço, podes considerar os requisitos de segurança dos dados em cada etapa e selecionar os algoritmos de encriptação adequados em conformidade.