Início‎ > ‎

Usar mecanismos criptográficos adequados

É muito comum que aplicações necessitem de algum mecanismo criptográfico, seja para autenticação ou sigilo de alguma informação. Felizmente, a plataforma Java inclui boas implementações dos principais algoritmos criptográficos e também permite o uso de bibliotecas de terceiros através de uma API comum (JCA). Por outro lado, é também muito comum ver aplicações em que os desenvolvedores criaram os seus próprios mecanismos criptográficos, seja através da implementação de novas APIs, seja pelo uso de algoritmos proprietários.

A regra número um para o usuário de criptografia é: "Não tentar re-inventar a roda". A menos que você tenha formação como criptógrafo, não tente criar mecanismos criptográficos, use os mecanismos já consagrados e estudados pelos especialistas. No mundo Java, isto quer dizer: usar as APIs do JCA/JCE e os algoritmos providos por bibliotecas confiáveis (por exemplo as implementações da Sun, que vem com o JSDK ou do BouncyCastle).

Algumas recomendações para o uso de criptografia em sistemas Java são:
  1. Sempre usar a classe SecureRandom para a geração de valores aleatórios. Esta classe é um pouco mais lenta mas implementa algoritmos de geração de valores aleatórios que são seguros para uso em criptografia.
  2. Utilizar algoritmos seguros. Atualmente, é recomendável utilizar os seguintes algoritmos:
    1. Hash: família SHA-2 (SHA-256, SHA-384 ou SHA-512), Whirlpool.
    2. Cifra simétrica (chave secreta): AES, com chaves de pelo menos 256 bits.
    3. Cifra assimétrica (chave pública): RSA, com chave de 1024 bits, ou curvas elípticas (ECC) com chaves de 160 bits.
  3. Usar formatos de arquivos conhecidos, como PGP ou S/MIME.
Para operações simples, baseadas em senhas, como codificação de senhas para armazenamento ou criptografia baseada em senhas, a biblioteca Jasypt oferece uma API simples e funcional. Deve-se atentar para o fato de que as implementações "basic" desta biblioteca implementam algoritmos com nível de segurança baixo. Deve-se utilizar as implementações "strong" sempre que possível.
Comments