Novos Projetos ou Projetos Futuros
Certificado Eletronico
Casos de Uso
1 O usuário se inscreve em um evento se necessário.
2 O evento ocorre, todos fazen assinatura na ficha, (no futuro, FUTURO, quem sabe não tem uma digital para identificar)
3 A ficha é atualizada na internet, os e-mails confirmados automáticamente a cada atualização.
4 Apos evento, ele solicita seu certificado.
5 Se o evento é pre-inscrição,
5.1 os coordenadores deverão já ter liberado os certificados para cada participante.
5.2 os certificados ficam pre-prontos no formato x.509
6 senão
6.1 os coordenadores recebem uma notificação da solicitação realizada
6.2a os coordenadores vistam o site
6.2b ou os coordenadores enviam um e-mail liberando a solicitação
7. o usuário recebe uma confirmação com a copia do certificado anexada em formato PDF.
8. No site fica uma copia do certificado em formato x.509.
Requisitos não funcionais a este caso:
1. Cada coordenador tem seu proprio X.509 identificando-o como cordenador, acessivel por uma senha, será uma chave RSA privada, so ele terá acesso via a senha, se for roubada não irá valer de nada, pois so com a senha.
2. O Sistema tem cadastrado um X.509 com a chave publica dos coordenadores para validar mensagens!
3. O sistema PODERÁ, gerar um par RSA, para cada membro do Cejug, acessivel pela senha sem a senha não vale nada, é igual acontece com o PGP.
4. O par gerado pode ser usado para eleições no CEJUG;
Porque usar o X.509
Usar o X509 para armazenar as credenciais do usuário permite que o sistema seja facilmente integrado com o JAAS e aproveitar melhor os recursos de assinatura do iText, o proprio iText vem com sua classe X509Name usada para identificar o certificado PKI para assinar o Certifivado do CEJUG. Portanto teremos que criar um Adapter para ligar o X500Principal que usa o X509Name da Sun com o X509Name do itext.
Qual o melhor algoritimo de Certificação e Assinatura
Buscando uma solução para a problemática do certificado a ser emitido para os eventos do CEJUG estamos desenvolvendo um pequena prova de conceito onde buscamos demonstrar como gerar certificados digitais para os participantes dos eventos e tornar tais certificados validos para seus contratantes.
A primeira duvida que me surgiu foi qual melhor algoritimo a ser usadado, então verifiquei quais eram mais comuns no java e fechei em dois, RSA ou DSA, buscando na internet qual seria melhor percebi que cada um tem sua vantagem, veja a tabela:
| Algorithm | Key Generation * 1(ms.) | Sign * 100 (ms.) | Verify*100(ms.) |
|---|---|---|---|
| RSA 512 | 544.61 | 915 | 160 |
| RSA 1024 | 1120.46 | 4188 | 263 |
| DSA 512 | 6.62 | 634 | 988 |
| DSA 1024 | 17.87 | 1775 | 3397 |
A tabela foi obtida no site: http://neubia.com/archives/000191.html![]()
Diante do caso de uso mais comum do sistema, que é verificar certificados emitidos, o RSA apresentou ser a melhor proposta pois este ganha do DSA de longe para verificação de certificados assintados.
Iremos ter para cada evento entre 5 a 300 certificados emitidos, mas para cada certifcado emitido poderemos pelo menos 10 verificações, apos um evento de 300 certificados poderemos ter pelo menos simultaneamente 300 verificações, se não mais que 600.
Onde os testes foram feitos?
Os testes foram feitos no seguinte ambiente:
- IntelliJ IDEA
- JDK1.4.1
- Gentoo Linux
- AMD Athlon XP 1800
Aqueles que quiserem repetir os testes e postar comentários aqui vai o fonte: http://dev.neuclear.org/commons/xref-test/org/neuclear/commons/crypto/SigningBenchmark.html![]()
Outros benchmarks e mais informações podem ser obtidos em:
- http://msdn2.microsoft.com/en-us/library/ms978415.aspx 
; - http://www.samsimpson.com/cryptography/pgp/

- http://msdn2.microsoft.com/en-us/library/aa719851
(VS.71).aspx - http://home.pacbell.net/tpanero/crypto/dsa.html
