Chave pública, chave privada e criptografia assimétrica
Neste artigo, introduzimos os conceitos de chaves públicas, chaves privadas e os princípios da criptografia assimétrica. Comparamos seus prós e contras em relação à criptografia simétrica, bem como as diferenças em seus cenários de uso.
Você pode ter ouvido falar sobre chaves privadas e chaves públicas em muitos contextos, mas você realmente sabe 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).
A criptografia assimétrica refere-se a um método de criptografar ou assinar dados usando duas chaves diferentes (chave privada + chave pública), que correspondem à necessidade de decriptação ou verificação de assinatura. A chave pública é visível para qualquer pessoa, enquanto a chave privada está disponível apenas para o proprietário da chave. Você pode facilmente perceber isso pelo nome das chaves.
Da mesma forma, você provavelmente pode adivinhar que a criptografia simétrica se refere ao método de criptografar e decifrar dados usando a mesma chave.
Assim, usamos uma anotação simples para mostrar o processo de criptografia/decriptação de ambas as criptografias simétricas e assimétricas.
É importante notar que as funções de criptografia/decriptação nos algoritmos de criptografia simétrica e assimétrica são diferentes e frequentemente usam algoritmos distintos. Algoritmos comuns de criptografia simétrica incluem DES, AES, RC2, RC4, entre outros, enquanto algoritmos de criptografia assimétrica comuns incluem RSA e EC.
A Logto usa o algoritmo EC para criptografia e decriptação de transmissão de dados, pois é mais eficiente e seguro do que o RSA. Você pode ler este post para mais detalhes. A Logto também vai oferecer suporte ao RSA na próxima versão para melhor compatibilidade com alguns sistemas legados.
Por que usar criptografia assimétrica?
A criptografia assimétrica resolve o problema de distribuição de chaves na criptografia simétrica.
Como a criptografia simétrica usa a mesma chave, distribuir a chave em uma conexão de rede insegura pode arriscar expor a chave a terceiros maliciosos. Um terceiro malicioso poderia usar a chave roubada para acessar qualquer informação criptografada com essa chave, representando um risco significativo de segurança.
Dois casos de uso comuns de criptografia assimétrica
Enviar dados criptografados
O remetente pode usar a chave pública do destinatário para criptografar informações, e o destinatário usa sua chave privada para decifrar as informações.
Como as chaves públicas estão teoricamente disponíveis para muitas pessoas, em um cenário ideal, o destinatário pode receber informações criptografadas de muitos remetentes. Além disso, vários remetentes não podem saber que tipo de informações outros remetentes enviaram ao destinatário, pois apenas o destinatário (o detentor da chave privada) pode decifrar e recuperar as informações.
Chaves públicas e chaves privadas são frequentemente geradas simultaneamente. O que mencionamos acima é a geração de chaves privadas e chaves públicas por uma parte, e então distribuindo a chave pública para seus usuários. Se você precisar garantir uma comunicação segura entre ambas as partes, ambas as partes precisam gerar suas próprias chaves privadas e chaves públicas, e então trocar suas respectivas 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 criptografar e decriptar.
Usar uma assinatura para garantir a fidelidade dos dados
Na criptografia assimétrica, a parte que possui 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, garantindo que os dados não foram adulterados durante a transmissão.
Usando a anotação que definimos na seção anterior, a assinatura e verificação de assinatura podem ser representadas da seguinte forma:
A verificação da assinatura digital prova que a parte que gera a assinatura conhece a chave privada correspondente.
Você provavelmente acha esses dois casos de uso mencionados acima muito familiares. Em nossas vidas diárias, quase todos os serviços com arquitetura cliente-servidor usam criptografia assimétrica para garantir a segurança dos dados.
Como um framework de identidade de usuário em rápido crescimento, a Logto também usa extensivamente PKC para garantir a segurança dos dados dos usuários. Após os usuários completarem o processo de login, a Logto emite um token de acesso aos usuários para conceder-lhes permissões específicas para acessar os recursos necessários. A chave pública publicada pela Logto é usada para verificar que o token de acesso foi realmente emitido pela Logto e não foi adulterado por atacantes maliciosos.
Desvantagens da criptografia assimétrica
Em geral, o comprimento da chave para criptografia simétrica é de 128 ou 256 bits, enquanto o comprimento da chave para criptografia assimétrica pode chegar a 4.096 bits. Isso ocorre porque a chave privada e a chave pública estão matematicamente relacionadas e formam pares de chaves únicos. Em teoria, conhecendo a chave pública, é possível calcular o valor da chave privada, mas devido à complexidade dos algoritmos envolvidos, isso geralmente leva uma quantidade considerável de tempo. Para tornar a tarefa de "quebrar" a chave privada "impossível", o uso de comprimentos de chave mais longos é uma abordagem direta.
Conclusões
A criptografia assimétrica consome mais recursos computacionais e tempo em comparação com a criptografia simétrica durante os cálculos, conforme discutido na seção anterior. Em aplicações onde a comunicação é frequente, o uso generalizado de criptografia assimétrica pode impactar o desempenho e a experiência do usuário.
Em cenários de negócios, a criptografia simétrica e assimétrica são frequentemente usadas juntas para equilibrar desempenho e segurança de dados. Ao construir seu próprio serviço, você pode considerar os requisitos de segurança dos dados em cada estágio e selecionar os algoritmos de criptografia apropriados de acordo.