Pergunta

Temos a obrigação de fazer algum desenvolvimento Rijndael em Java.

Quaisquer recomendações para artigos, bibliotecas etc. que nos ajudaria?

Os ponteiros para a manutenção de armazenamento de chaves e como armazenar as chaves de forma segura?

Editar:

Ele teria de ser open source. Essencialmente, é apenas padrão criptografar / descriptografar dados usando Rijndael.

Foi útil?

Solução

Java inclui AES fora da caixa. Rijndael é AES. Você não precisa de quaisquer bibliotecas externas. Você só precisa de algo como isto:

byte[] sessionKey = null; //Where you get this from is beyond the scope of this post
byte[] iv = null ; //Ditto
byte[] plaintext = null; //Whatever you want to encrypt/decrypt
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//You can use ENCRYPT_MODE or DECRYPT_MODE
cipher.calling init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv));
byte[] ciphertext = cipher.doFinal(plaintext);

E é isso, para encriptação / desencriptação. Se você está processando grandes quantidades de dados, então é melhor você ler pedaços que são múltiplos de 16 bytes e chamando update em vez de doFinal (você apenas chamar doFinal no último bloco).

Outras dicas

Para uma grande biblioteca livre, eu recomendo BouncyCastle. Ele é mantido ativamente, de alta qualidade, e tem uma matriz agradável de exemplos de código. Para obter a documentação de referência, você vai ter que confiar mais no geral docs JCE.

Eu não posso dizer o uso que biblioteca para atender os requisitos de certificação FIPS. Mas existem alternativas para CryptoJ que são muito, muito mais barato.

Em geral, eu recomendo a geração de uma nova chave para cada mensagem que você criptografar com uma cifra simétrica como Rijndael, e, depois, criptografar a chave com um algoritmo assimétrico como RSA. Estas chaves privadas podem ser armazenados em um armazenamento de chaves baseado em software protegido por senha como PKCS # 12 ou "JKS" do Java, ou, para maior segurança, no hardware "smart card" símbolo ou outro módulo de hardware criptográfico.

Como minha empresa recentemente descobri, AES não é bastante Rijndael. AES tem a restrição de que chaves devem ser 128, 192, ou 256 bits -. No entanto, permite que Rijndael para as chaves que são 160 e 224 bem como

Tal como indicado por Erickson acima, BouncyCastle fornece um objeto Rijndael que suporta os comprimentos de chave adicionais: 128/160/192/224/256 pedaços. Especificamente, dê uma olhada na API leve.

Gnu-cripto é outra biblioteca de código aberto -. No entanto, também não fornece suporte para chaves de 160 e 224 bits

Então, se você está procurando especificamente suporte completo Rijndael, então BouncyCastle é o único que eu encontrei até agora.

javax.crypto tem suporte AES: http: // java. sun.com/developer/technicalArticles/Security/AES/AES_v1.html

Quanto ao armazenamento seguro de chave, o método usual é derivar uma chave de encriptação a partir da entrada de utilizador (senha) utilizando uma função hash criptográfico, e usar a chave derivada para criptografar o chaveiro. Ou, se você só precisa de uma chave, você pode usar a chave derivada si.

Tenha sempre em mente que a segurança do sistema está diretamente relacionada com a força da função hash utilizada. Utilizar uma função hash criptograficamente segura, juntamente com um sal, se possível, e de hash mais do que uma vez (centenas de vezes, por exemplo).

Dito isto, a questão é muito vaga.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top