Liberada aplicação para assinatura digital

O projeto The Crypthing Initiative, de desenvolvimento de aplicações criptográficas destinadas ao contexto da ICP-Brasil sob licença GPL, realiza sua primeira entrega. Trata-se da aplicação Signthing Personal Edition, destinada a fornecer assinatura digital de documentos com o uso de certificados digitais emitidos pelas AC’s da ICP-Brasil.

O projeto Crypthing pretende desenvolver software criptográfico para utilização corporativa, governamental e pessoal dentro do contexto da Infra-estrutura de Chaves Públicas do Brasil (a ICP-Brasil) sob a licença GNU General Public License. Inteiramente desenvolvidos em Java, os aplicativos que o projeto pretende entregar à comunidade de software livre do Brasil deverão suprir necessidades de autenticação, sigilo e assinatura digital em estrita conformidade com as especificações do ITI.
A primeira entrega do projeto - o aplicativo Signthing Personal Edition - destina-se à assinatura digital de documentos com propósito de não-repúdio utilizando chaves criptográficas associadas a certificados digitais emitidos por uma das Autoridades Certificadoras da ICP-Brasil. Ainda em release alpha, o aplicativo correntemente suporta certificados digitais x.509 codificados em DER e armazenados em smart-cards e mídias removíveis; realiza a validação de conformidade do certificado às regras da ICP-Brasil; efetua verificação on-line da revogação do certificado, contra a Lista de Certificados Revogados emitidas pela Autoridade Certificadora; suporta assinatura, co-assinatura e verificação criptográfica de documentos já assinados; suporta envelopes CMS SignedData attached e detached, em conformidade à RFC 2630. Com interface internacionalizada (em Português e Inglês), o aplicativo foi testado (provisoriamente) sob o Linux 2.6.24 e o MS Windows XP, em ambos os casos utiliando a JVM da Sun.
Para maiores infomações, pode ser consultado o site do projeto: http://crypthing.sourceforge.net.
Gutierrez
yorick.flannagan@gmail.com

muito interessante

Muito legal a iniciativa, aliás no Just Java 2008 o pessoal do SERASA fez uma apresentação sobre Certificação Digital muito boa também, que por sinal foi sugerido a eles que fizessem uma Api para os usuários Java, mas pelo visto não vão precisar mais.

lol :smiley:

Bem bacana! Muito boa iniciativa!

Tive um baita trabalho para encontrar uma solução estavel para ser usado em aplicações aqui da Secretaria de Fazenda do RJ e acabei ficando com o OpenOces… tive muito trabalho para compreender como funcionava a tal applet (tinha muito tempo que nao usava applet) mas consegui fazer algo bem customizado na medida do possivel.

Uma coisa que vou ter que aguardar pois eles nem sabem em que release saira: a implementação da especificação XmlDsig (XML Signature Syntax and Processing)

Tenho recebido vários feedbacks indicando o uso de XMLDSig. Não optamos por essa implementação para não competir com o OpenOCES nem com o WebSign (dê uma olhada em http://rcardon.free.fr/websign). Talvez valha a pena reconsiderar e trazer a implementação para mais perto.

Bacana, mas e dai. Como eu uso isso ?
Abraços

Não entendi a pergunta: você se refere ao uso como desenvolvedor, dentro da sua própria aplicação, ou ao uso como usuário? Na dúvida, respondo às duas vertentes.
Como usuário hoje o uso é mínimo: quem nos pede para assinar digitalmente qualquer coisa? Aliás, quem sabe que isso existe? No entanto, isso vai mudar radicalmente ao longo dos próximos anos. Por enquanto, você pode usar certificados digitais da ICP-Brasil para se autenticar na Receita e enviar sua declaração (ela em si ainda não é assinada). Como vantagem, ela devolve o que tomou a mais antes dos demais (a tal da restituição). Ao longo dos próximos anos (assim que aplicações como Signthing estejam disponíveis para o setor público) você pode imaginar a assinatura de documentos como requisições, certidões etc. pela Internet, sem enfrentar as filas dos postos de atendimento…
No mundo corporativo isso ocorrerá muito antes. Todas as empresas brasileiras já são obrigadas, por exemplo, a se relacionar com a Previdência e o FGTS através da Internet (usando por enquanto certificados digitais proprietários, fora do padrão ICP-Brasil). A Caixa já emitiu 4,5 milhões de certificados desse tipo, certificados que terão que ser reemitidos dentro do padrão ICP-Brasil nos próximos anos. Nesse caso, a quantidade leva à qualidade: se os certificados já estão lá, por que não usá-los? E isso já está acontecendo. Por exemplo, o MEC tem um programa de bolsas (se não estou enganado, o ProUni). Hoje você já acessa a aplicação web com certificados digitais e assina documentos com ela!

Na vertente do desenvolvedor, ninguém precisa usar a interface swing Signthing PE para utilizar as nossas implementações, se desejar. A arquitetura é modular: o “trabalho sujo” é feito pelos pacotes org.crypthing.things.* (os bytecodes são distribuídos nos jars things_core.jar e things_pkibr.jar). Na verdade, esses pacotes são facades para o BouncyCastle no que tange, por exemplo, às operações de manipulação do envelope CMS (PKCS#7), ou para os próprios providers JCE do Java. Se eventualmente implementarmos suporte a XMLDSig, os facades de envelopamento para as bibliotecas XML serão implementados ali e simplesmente utilizados pela interface swing.
Naturalmente, não esperamos que desenvolvedores utilizem os pacotes org.crypthing.things já agora: estamos ainda na release alfa! Mas contamos com o feedback da comunidade a propósito da nossa implementação.

Ola galera…
Sou desenvolvedor de aplicativos.
Desenvolvi soluções para assinatura digital em linguagem pascal.
Estou migrando agora para a linguagem java e não tenho muita ideia de como embarcar na tecnologia de assinatura digital na linguagem java se alguem tiver alguma ideia por fazor posta ai heheheh.

A utilização de criptografia em Java está muito fácil! A JCA fornece uma abstração bastante simples e elegante. Dê uma olhada em http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html. Esse é o caminho básico. Naturalmente, você pode consultar alguns bons livros: a query http://www.amazon.com/Beginning-Cryptography-Java-David-Hook/dp/0764596330, feita para obter o livro (para iniciantes) de David Hook, retorna alguns títulos úteis e interessantes para quem está começando a utilizar a linguagem nesse terreno.
A coisa complica quando você precisa suportar o envelopamento de mensagens criptográficas - o suporte é mínimo… Mas aí você tem o BouncyCastle, capaz de fazer todo o trabalho sujo no suporte à especificação PKCS#7. Naturalmente, você precisará entender muito bem como funciona a sintaxe das mensagens, mas isso é leitura das especificações.
Você pode utilizar também nosso próprio trabalho como exemplo de uso tanto da JCA quanto do suporte à PKCS#7 pelo BouncyCastle. A coisa é realmente simples. Apenas consulte o pacote org.crypthing.things.signer.* - e lembre-se que essa foi uma das razões porque abrimos o código do trabalho: tentar evitar que outras pessoas tivessem que enfrentar os mesmos problemas que nós. Se nessa pesquisa você esbarrar com muita bobagem nossa, não deixe de dar feedback. Se quiser colaborar, naturalmente sinta-se à vontade.

Caro amigo muito obrigado pelo conteudo informado heheheh embora os links acima estejam quebrados mais valeu a intensão.

estou procurando o pacote que vc me informou mais ate agora não consegui localiza-lo para baixa-lo…
HUmm gostaria muito de trocar informações e experiencias e é claro colaborar em tudo que for possivel.
Caso queira trocar informações o meu msn é o soulsmarques@hotmail.com

mais uma vez o muito obrigado pela ajuda.

Que mico!!!
O livro é Beginning Cryptography with Java, de David Hook. A localização na Amazon retorna outros livros interessantes sobre o mesmo assunto. Alguns tenho boas referências; outros, simplesmente desconheço.
O material da Sun pode ser encontrado nos javadocs baixados com o JDK 1.6.
Mas tenho certeza de que você entendeu o espírito da coisa: é mais fácil programar para criptografia em Java que enviar links inteiros neste fórum…
Quanto ao pacote a que me refiro, ele está incluso no download da versão 0.1.0 da aplicação, que distribui todos os fontes. Mas você pode também baixar direta e anonimamente do CVS com a linha de comando cvs -d:pserver:anonymous@crypthing.cvs.sourceforge.net:/cvsroot/crypthing checkout -P -r things_core-alpha-0_1_0 crypthing
Agora, uma questão da maior relevância: será que essa linha de comando vai estar correta quando eu postar essa mensagem? Definitivamente, há um problema sério no hardware periférico localizado entre o teclado e a cadeira do meu computador…
Um grande abraço!

Caro amigo yorickflannagan…

Ja fiz o pedido do livro por certo irei precisar mesmo…
Esse livro concerteza ira me ajudar e muito porem tenho uma outra duvida…

O livro aborda sobre criptografia, porem eu esta pensando em um tipo de criptografia mais especifica tipo a do padrão PKCS7 que posr sua vez é o padrão para assinatura digital de documentos tipo Certisigner já ouviu falar eles possuem uma aplicação feita em java que faz a assinatura e verificação de arquivos que estão assinados com o padrão PKCS7 com cript X.509.

Na real existem muitas empresas no Brasil de desenvolvimento assim, como as empresas que possuem software para gestão publica, porem ate hoje posso dizer que só 2 empresas podduem um modulo para assinatura eletronica 1 foi eu memo que emplantei este modulo criado por mim mesmo.
A outra não tenho certeza quero expandir este modulo para outras empresas mais a minha alternativa melhor é desenvolver um modulo como este modulo que já possuo porem em java fica mais acessivel pois algumas empresas já estão trabalhando com Java e o Delphi (Pascal) esta ficando para traz…

Então preciso de uma luz para começar a desenvolver este modulo de assinatura digital em linguagem java.
peço sua colaboração caso tenha mais alguma ideia.

Ps… lembrando que o java srrsrssr é multiplatarforma, uma grande vantagem…

Obrigado pelas informações.

Viva a liberdade viva o linux.

Caríssimo,
Lembro apenas que PKCS#7 é um padrão de envelopamento de mensagens criptografadas, o que inclui mensagens assinadas. Serve também para troca de chaves criptográficas e outras coisinhas mais. Este é o padrão de envelopamento utilizado pela nossa aplicação Signthing para armazenar as mensagens assinadas. O padrão, criado pela RSA, foi primeiro assumido pelo IETF na RFC 2315, sendo posteriormente substituida pela RFC 2630, esta última a especificação seguida pelo nosso projeto. Assim, se você quiser utilizar o nosso esforço, dê uma olhada nos fontes, veja como a coisa funciona e, se gostar da implementação, reutilize as classes ou mesmo o pacote inteiro no seu próprio projeto! Mas não deixe de ler a especificação: ela é indispensável para entender como a coisa funciona. E veja, o “trabalho sujo” de descascar e construir elementos ASN.1 codificados em DER (um inferno, acredite-me) foi feito pelo BouncyCastle, que incorpora uma boa biblioteca de classes para essa tarefa. O que fizemos foi simplesmente um facade para aquela biblioteca implementando a RFC.

Eu vi a aplicação da Certisign, na verdade a aplicação Windows para conferir documentos assinados, distribuída gratuitamente (aliás, para quê?). Infelizmente, não faço a menor idéia que padrão eles implementam: a documentação (ridícula) nada diz. Suspeito que, quando muito, implementam a RFC 2315, se é que não inventaram um padrão próprio, coisa comum nessas empresas, que querem amarrar o cliente com base em implementações proprietárias e não bons serviços. Posso estar fazendo uma injustiça, mas não pude encontrar nenhuma informação técnica sobre o produto, que pretendia utilizar para validar a nossa aplicação.

Aliás, esse é um dos nossos problemas: não encontramos uma aplicação independente que validasse integralmente os arquivos criados pela nossa, já que a linha de comando da OpenSSL (se utilizar código nativo, essa é a biblioteca certa) só implementa a RFC 2315 (e isso está claramente documentado!). O melhor que conseguimos foi inspecionar o envelope com a aplicação de "Peter Gutmann (http://www.cs.auckland.ac.nz/~pgut001/ - espero que o link não quebre…). Existe uma implementação Windows da Gemini Security Solutions (http://geminisecurity.com/features-downloads/tools/guidumpasn - outro link candidato a se perder), que é apenas uma interface para o código de Gutmann. Pelo que pudemos observar com o aplicativo, o evenlope PKCS#7 tem todas as características de um evelope bem formado, mas nunca se sabe! Não termos encontrado nada para validar o que fizemos é um bom sinal: significa que chegamos primeiro ao nicho (pelo menos no mundo open source).

De fato, a escolha do Java é apropriada: ela permite aplicações multiplataforma com um esforço mínimo. E se você quer ocupar esse nicho no Brasil de hoje precisa suportar o Linux: o setor público é o principal usuário de aplicações criptográficas e, sempre que possível, exigem aplicações que rodem no pingüim, pelo menos até a próxima eleição… Foi a principal razão da nossa escolha - assegurar solução multiplataforma com pouco esforço!

Se você quiser, podemos continuar a “trocar figurinhas” sobre o assunto. Se preferir, utilize meu e-mail público do SourceForge (yorick.flannagan@gmail.com).
Um grande abraço!