Certificado Digital - Conceitos e implementações

4 respostas
RodrigoMotta

Olá pessoal, tudo certo?

Preciso de uma ajuda de vocês com certificado digital/assinatura digital.

Primeiras duvidas são sobre conceitos, por exemplo:

Eu pesquiso no google o que é e como faz e sempre aparece pessoas falando coisas diferentes, até agora o que eu entendi foi o seguinte:

Lendo este artigo: http://www.guj.com.br/articles/141
Eu vi que certificados digitais não precisam necessariamente ser feitos por essas empresas certificadoras, ICP-BRASIL e afins, podemos gerar o certificado pelo proprio java, usando o keytool, ou seja, eu consigo gerar o certificado digital sem problema, blz.

Esse certificado digital gerado .jks eu posso dizer q é a minha “chave privada”? o arquivo .x509 eu posso dizer q é minha “chave pública”?
no meu caso, vou ter varios usuários acessando o sistema, cada usuário vai ter uma chave pública .x509? ou é uma chave pública e todos usam a mesma?

sempre tem pessoas falando que vc gera varias chaves privadas e uma publica, outras pessoas falando q são várias publicas e varias privadas, por ai vai, qual é o certo na verdade?

1 privada = N públicas?

Agora duvidas sobre implementação, no artigo demonstra como criar o .jks, criar o .x509, criar os metodos e usa-los, mas não mostra como e praq usar o .x509, q seria o caso do usuário que só vai ter a chave publica, quando o sistema receber essa chave, como eu faria para verificar se o texto criptografado com essa chave é válida?

E para criptografar String com a chave pública, é a mesma coisa?

São essas as dúvidas,

Obrigado desde já.

4 Respostas

E
  1. A chave pública e a chave privada têm uma relação de 1 para 1.

  2. O .jks contém a chave privada (e a chave pública, que pode ser deduzida com facilidade a partir da chave privada). Esse arquivo deve ser mantido o mais secreto possível; normalmente, é protegido por senha, mas nada impede que se mantenha a chave privada em um outro repositório (como um smartcard).

O .x509 contém apenas a chave pública, que pode ser distribuída livremente.

E

a) Não se “criptografam strings”, e sim arrays de bytes. Mas esse não é o uso correto dos algoritmos de chave pública (como o RSA).

b) Se dados necessitam ser criptografados (por exemplo, SSL), então gera-se uma chave simétrica aleatória, e então criptografa-se essa chave simétrica com a chave pública, e o outro lado só consegue decifrar porque tem a chave privada.
Se dados precisam ser assinados, então pega-se os dados a serem assinados, gera-se o hash, criptografa-se esse hash com a chave privada e então as partes que precisam checar a assinatura pegam os mesmos dados que foram assinados, geram o hash, e verificam se o resultado de decifrar o hash com a chave pública é o mesmo do hash obtido a partir dos dados assinados.

RodrigoMotta

entanglement:
1) A chave pública e a chave privada têm uma relação de 1 para 1.

  1. O .jks contém a chave privada (e a chave pública, que pode ser deduzida com facilidade a partir da chave privada). Esse arquivo deve ser mantido o mais secreto possível; normalmente, é protegido por senha, mas nada impede que se mantenha a chave privada em um outro repositório (como um smartcard).

O .x509 contém apenas a chave pública, que pode ser distribuída livremente.

Entendi, então para cada usuário novo, eu gero uma privada e uma pública para ele?

entanglement:

a) Não se “criptografam strings”, e sim arrays de bytes. Mas esse não é o uso correto dos algoritmos de chave pública (como o RSA).

b) Se dados necessitam ser criptografados (por exemplo, SSL), então gera-se uma chave simétrica aleatória, e então criptografa-se essa chave simétrica com a chave pública, e o outro lado só consegue decifrar porque tem a chave privada.
Se dados precisam ser assinados, então pega-se os dados a serem assinados, gera-se o hash, criptografa-se esse hash com a chave privada e então as partes que precisam checar a assinatura pegam os mesmos dados que foram assinados, geram o hash, e verificam se o resultado de decifrar o hash com a chave pública é o mesmo do hash obtido a partir dos dados assinados.

Essa parte eu não entendi tudo,
Qual seria o uso correto dos algoritmos então? Ta certo que não criptografam strings, mas com uma string dá para transformar em um array de bytes.

No meu caso vai ter o usuário solicitando informações para o servidor e o servidor respondendo para o usuário, eu não teria q criptografar a solicitação do usuário? e em seguida decriptografar, executar a solicitação, pegar a resposta, criptografar a resposta e enviar para o usuário, que ira criptografar e mostrar na tela por exemplo?

como seria assinar dados?

São perguntas de conceitos mesmo.

Obrigado pela ajuda.

RodrigoMotta

Ninguem? :frowning:

Criado 1 de agosto de 2011
Ultima resposta 2 de ago. de 2011
Respostas 4
Participantes 2