Criptografia de chave pública ou assimétrica
Se criptografar um texto usando a chave privada ele só poderá ser descriptografado com a chave pública e vice-versa. Desse modo com a mesma chave não é possível criptografar e descriptografar, por isso o nome assimétrica.
A ideia dessa criptografia é você usar a chave pública para criptografar um arquivo e enviar este arquivo para quem possui a chave privada, porque somente com a chave privada será possível descriptografar o arquivo.
Usando o RSA implementado no Java
No método main
vamos gerar um par de chaves pública/privada e vamos utilizar a criptografia RSA para criptografar e descriptografar um arquivo chamado texto.txt
. O arquivo criptografado chama criptografado.txt
e o arquivo que será descriptografado chama saida.txt
.
O método public static Key obterKey(File arquivo, Class <? extends Key> clazz) throws Exception
carrega um arquivo contendo o objeto da chave, essa chave pode ser a pública ou privada.
O método public static void gerarChaves() throws Exception
gera um par de chaves pública/privada e salva seus objetos nos arquivos chamado ChavePublica
e ChavePrivada
.
O método public void criptografar(Key chave, InputStream in, OutputStream out) throws Exception
usa uma das chaves pública ou privada (normalmente é usado a chave pública) para criptografar o arquivo recebido no parâmetro in
e grava o arquivo criptografado usando o algoritmo RSA no arquivo do parâmetro out
.
O método public void descriptografar(Key chave, InputStream in, OutputStream out) throws Exception
usa uma das chaves pública ou privada (normalmente é usado a chave privada) para decriptografar o arquivo recebido no parâmetro in
e grava o arquivo descriptografado usando o algoritmo RSA no arquivo do parâmetro out
.
Combinando criptografia simétrica e assimétrica
O uso apenas da criptografia simétrica possui o problema de como compartilhar a chave privada com o destinatário sem que nenhum invasor consiga interceptar e também obter essa chave privada.
Uma solução para esse problema é combinar o uso da criptografia simétrica e assimétrica, podemos fazer isso em quatro passos:
-
Origem manda chave pública (Assimétrica) para o Destino. Como a chave pública pode ser de conhecimento de qualquer um, não importa se um invasor também obter essa chave.
-
Destino utiliza a chave pública (Assimétrica) recebida e criptografa sua chave privada (Simétrica) e envia para a Origem. Nesse momento a chave simétrica está criptograda, e apenas a Origem possui a chave privada (Assimétrica) capaz de descriptografá-la.
-
Origem descriptografa usando sua chave privada (Assimétrica). Agora ambos origem e destino possuem a mesma chave privada (Simétrica).
-
Origem criptografa os dados usando a chave privada (Simétrica) e envia para o destino que também possui a mesma chave privada (Simétrica) e consegue descriptografar esses dados.
Conteúdos relacionados
- Introdução a criptografia
- Criptografia simétrica utilizando chave privada
- Aprenda a aplicar a função de hash em um texto e como é usado na assinatura digital
- Conhecendo e previnindo a vulnerabilidade SQL Injection