Olá pessoal,
Estou precisando fazer um esquema de criptografia com chaves assimétricas combinada com assinatura digital em java, ou seja, um lado manda um texto criptografado e assinado digitalmente e o outro recebe, valida a assinatura digital e descriptografa o texto. Já li o tutorial do GUJ sobre segurança, mas o que estou precisando é algo mais especifico. Alguém já implementou algo do tipo ou tem alguma idéia do caminho que devo seguir??
Obrigado.
Sem querer ser chato, mas já sendo.
Se voce quer fazer simplesmente para aprender como é, perfeito, caso voce esteja planejando usar isso em uma aplicação real ai vão algumas dicas:
:arrow: Aprenda com protocolos já estabelecidos, vide SSH, TLS, PKCS #11 e #13 (acho que são esses 2), IPSEC e Kerberos.
:arrow: Verifique se o seu protocolo sabe lidar com problema como replay atack, key escrow, eaves dropping, man-on-middle e data injection.
:arrow: O melhor protocolo do mundo mal implementado é tão ruim quanto o pior feito de forma correta.
Ok, aqui vão algumas dicas para como projetar seu protocolo:
:arrow: Utilize geradores seguros de números aleatorios.
:arrow: Faça a troca de chaves via um método conhecido, IKE me vem a cabeça alem do PKCS #?? que trata disso
:arrow: Ele tem que ter controle digesting e sequencing.
louds,
Valeu pelas dicas. Não achei que você foi chato, toda informação contribui para o enriquecimento da discussão.
Na verdade estou me interessando agora pelo assunto de criptografia, então os meus conceitos não estão muito bem fundamentados, mas o objetivo mesmo é aprender como fazer isso na linguaguem que estou programando atualmente, no caso, java. Vou pesquisar as siglas e os conceitos que você passou, mas voltando agora ao java em si, no caso do algoritmo de criptografia, eu preciso implementar na mão ou existe alguma classe que faz isso?
Obrigado mais uma vez.
Louds,
você é irmão mais novo do Kevin Mitnick?
Não Daniel, mas com segurança ou você tem tudo ok, ou não tem; como a primeira opção é ingenuidade ou mentira, para poder falar no assunto sem muito medo de errar você nunca pode ficar para traz. Fora que isso é um assunto que eu interesso muito.
jordy, é sempre chato falar, “não invente, use algo já testado e provado”, isso porque é trivial cometer algum erro trabalhando com segurança.
Quanto a fazer oque voce quer, agora eu li direito seu post, da uma olhada no PGP, ele criptografa e assina uma mensagem usando RSA.
Eu já implementei RSA em java para um projeto da faculdade, criptografar e assinar é trivial de se implementar, só que infelizmente eu perdi esse trabalho de 1 ano atraz.
Por sinal, eu sugiro voce começar a entender sistemas de chave pública pelo RSA, que, de longe, é o algoritmo mais facil, Diffie-Hellman (que usa logaritmos discretos) e sistemas de curvas elípticas são muito chatos de aprender. Nesse site www.rsa.com voce acha alguns bons pdf’s falando como funciona, qual a mágica, e uma implementação em C.
PS: Daniel, eu tenho o livro do Mitnick, já lí umas duas vezes pelo menos, já lí todos livros sobre ele também, os 2 do john markoff e o do littman, e assisti o filme que fala sobre o meliante, Freedom Downtime.
PS2: Tirando o livro do Kevin, não recomendo nenhum dos itens acima.
Vou tentar ler o do Mitnick… valeu pelas dicas.
Só uma coisa, o livro do Kevin falar sobre o fator humano na segurança apenas, fala muito sobre engenharia social.
Um autor que eu recomendo sempre é o Bruce Schneier, fundador da www.counterpane.com, autor da melhor newsletter mensal de segurança e vários livros sobre criptografia e segurança.
Bom, como segurança (termos técnicos) não é meu interesse, ler o livro do Mitnick seria mesmo interessante.
O Trues and Lies
do Schneier é outra boa pedida.
Já ouviu falar do tal de Kimble (www.kimble.org), um alemão, ex-hacker e lunático que ficou milhardário com uma empresa de segurança?
Ele tem algumas extravagâncias a lá Larry Elison tbm.
Valeu louds, já tenho um bom indicativo por onde começar a estudar.
Olá…
Sugiro você estudar todo o modelo de Segurança da JRE!
Somente criptografia assimétrica baseada em PKI não resolve…
NO J2EE a segurança tbm deve estar distribuida.
Veja aqui…
http://java.sun.com/docs/books/tutorial/security1.2/index.html
http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Security.html
Use as APIs de Java para facilitar a sua vida… Não vale a pena ficar estudando como implementar a criptografia, mas como fazer bom uso dela…
[]'s
Oziel, voce anda vendo muitos gnomos ultimamente.
Ninguém aqui falou em J2EE, por que ai é muito mais prático e seguro utilizar a infra do container.
Isso foi uma declaração de ingenuidade ou oque? Segurança e criptografia tem que ser levadas muito a sério e ter um profundo conhecimento do que esta sendo feito para somente assim fazer direito. Ponto, não existe atalho nem API que te resolva o problema.
Com o JCE e o Security Framework voce pode agilizar a geração de chaves, assinaturas, e blocos criptografados, porem se voce não utilizar isso de forma segura, teu sistema está tão seguro quanto se tivesse usado plain text direto.