Problemas com chaves criptográficas

3 respostas
E

Gostaria de saber como é representado uma chave criptográfica no java, no caso uma chave privada. Há a interface Key que contém o método getEncoded() que retorna um array de bytes, se eu colocar esse array como parâmetro de um construtor BigInteger, irá ser criado um número enorme, pergunta: esse número seria a chave privada? No meu trabalho estamos tendo que implementar um algoritmo de derivação de chaves, a partir de uma dada chave privada, deve-se criar outras chaves derivadas, até aí tudo bem, porém, depois de criado a chave (no caso um outro número imenso) como eu passaria ela para alguma classe/interface que pudesse manuseá-la como PrivateKey, etc? Não consegui bons resultados usando um cast, também não sei se fiz da maneira correta. Por favor, me ajudem…

3 Respostas

T

Qual é o algoritmo usado? Simplesmente fazer um cast não funciona, porque a representação de uma PrivateKey é diferente para cada algoritmo (DSAPrivateKey, RSAPrivateKey etc.)

E cuidado - chaves privadas (algoritmos assimétricos, como RSA, DSA ou EC) não são chaves secretas (algoritmos simétricos, como AES, DES, RC4).
Não confunda as coisas.

Estude um pouco de ASN.1, e para poder manipular isso tudo, recomendo a biblioteca BouncyCastle ( http://www.bouncycastle.org ). Você vai ter de dar uma olhada nos PKCS# (veja o site da RSA Security ).

E

o algoritmo que eu estava testando era o RSA, bom, já achei uma solução, pode-se usar a classe PKCS8EncodedKeySpec que armazenaria a chave se ela estiver no formato PKCS8.

T

É isso aí.

Criado 27 de janeiro de 2005
Ultima resposta 28 de jan. de 2005
Respostas 3
Participantes 2