Tudo que você precisa saber sobre criptografia em Java



Este artigo fornecerá a você um conhecimento detalhado e abrangente de criptografia em Java e como usá-la com exemplos.

Criptografia é o método de usar algoritmos matemáticos para camuflar o significado de uma informação de forma que apenas partes autorizadas possam decifrá-la. Neste artigo, discutiremos a criptografia e a descriptografia em na seguinte ordem:

Uma introdução à criptografia em Java

A criptografia é implementada para proteger nossos dados (como textos, conversas e voz), sejam eles sentados em um computador ou enviados pela Internet. As tecnologias de criptografia recentes são elementos essenciais de qualquer ambiente de computação seguro.





O papel principal da segurança da criptografia reside na capacidade de um algoritmo de gerar texto cifrado (texto criptografado) que é difícil de reverter para seu texto simples original. O uso de chaves também cria outro nível de segurança para métodos de proteção de nossas informações. Uma chave é alguma informação, que permite apenas aqueles que a possuem codificar e decodificar uma mensagem.

Criptografia e descriptografia em Java



Algoritmos de criptografia simétrica

Os algoritmos simétricos utilizam a mesma chave para criptografar e descriptografar. Esses algoritmos só podem operar no modo de bloco (que funciona em blocos de dados de tamanho fixo) ou no modo de fluxo (que funciona em bits ou bytes de dados). Tais algoritmostambém são comumente usados ​​para aplicativos como criptografia de dados, criptografia de arquivos e criptografia de dados transmitidos em redes de comunicação (como TLS, e-mails, mensagens instantâneas, etc.)

Algoritmos de criptografia assimétricos (ou de chave pública)

Ao contrário dos algoritmos simétricos, que utilizam a mesma chave para as operações de criptografia e descriptografia, os algoritmos assimétricos usam duas chaves idênticas para essas duas etapas. Esses algoritmos são utilizados para computar assinaturas digitais e protocolos de estabelecimento de chaves. No entanto, isso também traz o desafio de que duas chaves precisam ser usadas, o que torna as coisas mais complexas.



Para configurar qualquer esquema básico de criptografia com segurança, é muito importante que todos esses parâmetros (no mínimo) sejam projetados corretamente:

  • É importante escolher o algoritmo correto.
  • Escolha do modo de operação correto para a tarefa apropriada
  • Escolher o esquema de preenchimento correto de acordo com o requisito
  • Escolhendo as chaves certas e seus tamanhos de acordo
  • Inicialização correta com CSPRING criptograficamente seguro.

É muito importante estar ciente de como configurar todos esses parâmetros com segurança. Até mesmo uma pequena configuração incorreta pode colocar em risco um sistema criptográfico inteiro e abri-lo para ataques de hackers e outros malwares. Portanto, para manter essa discussão simples, vamos discutir apenas inicializações independentes de algoritmo de uma Cifra. Em vez de fazer essas criptografias por conta própria, é sempre melhor deixar que os especialistas façam seu trabalho de configuração de configurações dependentes de algoritmos, como valores peq do algoritmo RSA, etc. Configurando apenas os parâmetros criptográficos rudimentares acima de mais da metade dúzia, as classes são usadas.

A introdução de hierarquias de classes, muitos construtores / métodos sobrecarregados e assim por diante, adicionando muitas complexidades, que o tornam desnecessário. Gostaria que o Java não complicasse as configurações básicas e simplesmente empregasse uma arquitetura mais simplificada como a da Microsoft, onde todos esses parâmetros estão dentro do perímetro de uma única classe SymmetricAlgorithm e AsymmetricAlgorithm. Para os três primeiros parâmetros a serem especificados (algoritmo, modo de operação e esquema de preenchimento), um objeto Cipher utiliza uma string de transformação.

quadro como combinar dados
  • Escolhendo o Algoritmo Certo

Uma string de transformação, sem dúvida, inclui o nome de um algoritmo criptográfico. Entre a criptografia simétrica e assimétrica, existem 11 algoritmos (não relacionados a várias combinações de PBEWithAnd), que podem ser especificados de acordo com a Documentação de Nome do Algoritmo Padrão. Destes, apenas dois (um para cada, criptografia simétrica e assimétrica) estão realmente totalmente protegidos.

Os algoritmos restantes estão excessivamente corrompidos (DES, RC2, etc.) ou rachaduras começaram a aparecer (RC5), tornando-o quebrável com potência de CPU suficiente - ele já pode estar quebrado no momento em que você ler isto. Um desenvolvedor preocupado com a segurança não pode ler muitas especificações do NIST, nem seguir os últimos acontecimentos e pesquisas na comunidade de criptografia. Eles podem pegar os algoritmos quebrados ou arriscados, digest ou gerador pseudo-aleatório.

Sempre por:

  1. Algoritmo simétrico: é usada a cifra de bloco AES / AESWrap.

  2. Algoritmo assimétrico: RSA é usado.

  • Modo de operação

O modo de operação é parte da transformação e só é relevante para bloquear cifras. Quando usamos cifras assimétricas, usamos ECB como o modo de operação, o que essencialmente é um hack nos bastidores, o que significa ignorar esse valor. Os provedores Java como SunJCE, SunPKCS11 são padronizados para o modo ECB para algoritmos simétricos e assimétricos. Pode ser uma boa coisa para algoritmos assimétricos, mas uma má ideia para cifras de bloco.

Os provedores podem ser instruídos a criar padrões seguros com base no algoritmo usado. Use criptografia simétrica para evitar ataques de repetição ou ataques de texto simples conhecido. Além disso, use uma transformação, que especifica totalmente um algoritmo (ou seja, com seu modo de operação e preenchimento). Nunca, jamais faça algo como o mencionado abaixo.

Como acima, o algoritmo AES seria utilizado com o modo de operação ECB, tornando os ataques de repetição muito fáceis. Para novos desenvolvimentos, se houver a menor possibilidade de reformular trabalhos antigos, devemos usar o modo de criptografia autenticada com dados associados (AEAD) (por exemplo, GCM e CCM). Temos uma etiqueta de autenticação com comprimento total de 128 bits. Se usarmos um modo não autenticado, usamos CBC ou CTR com um MAC para autenticar o texto cifrado.

  • Escolha do esquema de preenchimento apropriado

Os modos de codificação de bloco comuns precisam que o comprimento do texto simples seja um múltiplo do tamanho do bloco do algoritmo de criptografia subjacente, o que raramente é o caso. Portanto, exigimos algum preenchimento.O programa Java nos fornece três esquemas diferentes para criptografia simétrica, um sendo No Padding, que é inaceitável, e outro sendo ISO10126Padding que foi retirado desde 2007).

Portanto, a única opção adequada é usar PKCS5Padding. A mistura de alguns modos de operação (por exemplo, modo CBC) e esquema de preenchimento PKCS5Padding pode levar a ataques de oráculo de preenchimento. Não mencionar um esquema de preenchimento é mais perigoso do que fornecer um esquema suscetível apenas a certos tipos de ataques. O modo de operação AEAD é mais recomendado para ter certeza de que você está protegido contra esses ataques.

  • Algoritmos Assimétricos

Em algoritmos assimétricos, temos a opção de escolher entre dois esquemas de preenchimento. É importante garantir que apenas os esquemas OAEPWithAndPadding sejam usados. No caso de um resumo, use SHA1 ou SHA256 / 384/512. Para a função de geração de máscara (MGF), utilize o preenchimento MGF1 conforme especificado. PKCS1Padding com RSA está vulnerável a ataques de texto cifrado [6] desde 1998.

Aqui falamos sobre a maneira correta de usar uma transformação em um método “Cipher.getInstance”.

  • Criptografia simétrica

  • Criptografia assimétrica

O nível de segurança de qualquer esquema de criptografia é diretamente proporcional ao tamanho de sua chave. O comprimento da chave deve ser longo o suficiente para que qualquer ataque de força bruta se torne ao mesmo tempo inviável, também deve ser curto o suficiente para manter a viabilidade computacional em mente. Além disso, devemos tentar considerar o que ainda resistirá aos avanços computacionais nos próximos 30 anos.

Com isso, chegamos ao final do artigo Encryption in Java. Espero que você tenha uma ideia sobre criptografia e decriptografia e por que ela é usada em Java.

Confira o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. O curso de certificação e treinamento Java J2EE e SOA da Edureka é projetado para estudantes e profissionais que desejam ser um desenvolvedor Java. O curso foi desenvolvido para dar a você uma vantagem inicial na programação Java e treiná-lo para os conceitos básicos e avançados de Java, juntamente com várias estruturas Java, como Hibernate e Spring.

Tem alguma questão para nós? Mencione isso na seção de comentários deste blog “Encryption in Java” e entraremos em contato com você o mais breve possível.